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 ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](husb_device_id (C struct)c.usb_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(h usb_device_idh]h)}(hstruct usb_device_idh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(h usb_device_idh]j)}(hjh]h usb_device_id}(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)}(h2identifies USB devices for probing and hotpluggingh]h2identifies USB devices for probing and hotplugging}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKRhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjphNhNubj)}(hX**Definition**:: struct usb_device_id { __u16 match_flags; __u16 idVendor; __u16 idProduct; __u16 bcdDevice_lo; __u16 bcdDevice_hi; __u8 bDeviceClass; __u8 bDeviceSubClass; __u8 bDeviceProtocol; __u8 bInterfaceClass; __u8 bInterfaceSubClass; __u8 bInterfaceProtocol; __u8 bInterfaceNumber; kernel_ulong_t driver_info; }; **Members** ``match_flags`` Bit mask controlling which of the other fields are used to match against new devices. Any field except for driver_info may be used, although some only make sense in conjunction with other fields. This is usually set by a USB_DEVICE_*() macro, which sets all other fields in this structure except for driver_info. ``idVendor`` USB vendor ID for a device; numbers are assigned by the USB forum to its members. ``idProduct`` Vendor-assigned product ID. ``bcdDevice_lo`` Low end of range of vendor-assigned product version numbers. This is also used to identify individual product versions, for a range consisting of a single device. ``bcdDevice_hi`` High end of version number range. The range of product versions is inclusive. ``bDeviceClass`` Class of device; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Device classes specify behavior of all the interfaces on a device. ``bDeviceSubClass`` Subclass of device; associated with bDeviceClass. ``bDeviceProtocol`` Protocol of device; associated with bDeviceClass. ``bInterfaceClass`` Class of interface; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Interface classes specify behavior only of a given interface; other interfaces may support other classes. ``bInterfaceSubClass`` Subclass of interface; associated with bInterfaceClass. ``bInterfaceProtocol`` Protocol of interface; associated with bInterfaceClass. ``bInterfaceNumber`` Number of interface; composite devices may use fixed interface numbers to differentiate between vendor-specific interfaces. ``driver_info`` Holds information used by the driver. Usually it holds a pointer to a descriptor understood by the driver, or perhaps device flags.h](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKVhjubj)}(hXcstruct usb_device_id { __u16 match_flags; __u16 idVendor; __u16 idProduct; __u16 bcdDevice_lo; __u16 bcdDevice_hi; __u8 bDeviceClass; __u8 bDeviceSubClass; __u8 bDeviceProtocol; __u8 bInterfaceClass; __u8 bInterfaceSubClass; __u8 bInterfaceProtocol; __u8 bInterfaceNumber; kernel_ulong_t driver_info; };h]hXcstruct usb_device_id { __u16 match_flags; __u16 idVendor; __u16 idProduct; __u16 bcdDevice_lo; __u16 bcdDevice_hi; __u8 bDeviceClass; __u8 bDeviceSubClass; __u8 bDeviceProtocol; __u8 bInterfaceClass; __u8 bInterfaceSubClass; __u8 bInterfaceProtocol; __u8 bInterfaceNumber; kernel_ulong_t driver_info; };}hj sbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKXhjubjM)}(h **Members**h]j)}(hj* h]hMembers}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj( ubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhhjubj)}(hhh](j)}(hXI``match_flags`` Bit mask controlling which of the other fields are used to match against new devices. Any field except for driver_info may be used, although some only make sense in conjunction with other fields. This is usually set by a USB_DEVICE_*() macro, which sets all other fields in this structure except for driver_info. h](j)}(h``match_flags``h]jS)}(hjI h]h match_flags}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjG ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKXhjC ubj)}(hhh]jM)}(hX8Bit mask controlling which of the other fields are used to match against new devices. Any field except for driver_info may be used, although some only make sense in conjunction with other fields. This is usually set by a USB_DEVICE_*() macro, which sets all other fields in this structure except for driver_info.h]hX8Bit mask controlling which of the other fields are used to match against new devices. Any field except for driver_info may be used, although some only make sense in conjunction with other fields. This is usually set by a USB_DEVICE_*() macro, which sets all other fields in this structure except for driver_info.}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKThj_ ubah}(h]h ]h"]h$]h&]uh1jhjC ubeh}(h]h ]h"]h$]h&]uh1jhj^ hKXhj@ ubj)}(h_``idVendor`` USB vendor ID for a device; numbers are assigned by the USB forum to its members. h](j)}(h ``idVendor``h]jS)}(hj h]hidVendor}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKZhj} ubj)}(hhh]jM)}(hQUSB vendor ID for a device; numbers are assigned by the USB forum to its members.h]hQUSB vendor ID for a device; numbers are assigned by the USB forum to its members.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKYhj ubah}(h]h ]h"]h$]h&]uh1jhj} ubeh}(h]h ]h"]h$]h&]uh1jhj hKZhj@ ubj)}(h*``idProduct`` Vendor-assigned product ID. h](j)}(h ``idProduct``h]jS)}(hj h]h idProduct}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhK[hj ubj)}(hhh]jM)}(hVendor-assigned product ID.h]hVendor-assigned product ID.}(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[hj@ ubj)}(h``bcdDevice_lo`` Low end of range of vendor-assigned product version numbers. This is also used to identify individual product versions, for a range consisting of a single device. h](j)}(h``bcdDevice_lo``h]jS)}(hj h]h bcdDevice_lo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhK^hj ubj)}(hhh]jM)}(hLow end of range of vendor-assigned product version numbers. This is also used to identify individual product versions, for a range consisting of a single device.h]hLow end of range of vendor-assigned product version numbers. This is also used to identify individual product versions, for a range consisting of a single device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhK\hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK^hj@ ubj)}(h```bcdDevice_hi`` High end of version number range. The range of product versions is inclusive. h](j)}(h``bcdDevice_hi``h]jS)}(hj0 h]h bcdDevice_hi}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj. ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhK`hj* ubj)}(hhh]jM)}(hNHigh end of version number range. The range of product versions is inclusive.h]hNHigh end of version number range. The range of product versions is inclusive.}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhK_hjF ubah}(h]h ]h"]h$]h&]uh1jhj* ubeh}(h]h ]h"]h$]h&]uh1jhjE hK`hj@ ubj)}(h``bDeviceClass`` Class of device; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Device classes specify behavior of all the interfaces on a device. h](j)}(h``bDeviceClass``h]jS)}(hjj h]h bDeviceClass}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjh ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKdhjd ubj)}(hhh]jM)}(hClass of device; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Device classes specify behavior of all the interfaces on a device.h]hClass of device; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Device classes specify behavior of all the interfaces on a device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKahj ubah}(h]h ]h"]h$]h&]uh1jhjd ubeh}(h]h ]h"]h$]h&]uh1jhj hKdhj@ ubj)}(hF``bDeviceSubClass`` Subclass of device; associated with bDeviceClass. h](j)}(h``bDeviceSubClass``h]jS)}(hj h]hbDeviceSubClass}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKehj ubj)}(hhh]jM)}(h1Subclass of device; associated with bDeviceClass.h]h1Subclass of device; associated with bDeviceClass.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hKehj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKehj@ ubj)}(hF``bDeviceProtocol`` Protocol of device; associated with bDeviceClass. h](j)}(h``bDeviceProtocol``h]jS)}(hj h]hbDeviceProtocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKfhj ubj)}(hhh]jM)}(h1Protocol of device; associated with bDeviceClass.h]h1Protocol of device; associated with bDeviceClass.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hKfhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKfhj@ ubj)}(h``bInterfaceClass`` Class of interface; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Interface classes specify behavior only of a given interface; other interfaces may support other classes. h](j)}(h``bInterfaceClass``h]jS)}(hj h]hbInterfaceClass}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKjhj ubj)}(hhh]jM)}(hClass of interface; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Interface classes specify behavior only of a given interface; other interfaces may support other classes.h]hClass of interface; numbers are assigned by the USB forum. Products may choose to implement classes, or be vendor-specific. Interface classes specify behavior only of a given interface; other interfaces may support other classes.}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKghj, ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj+ hKjhj@ ubj)}(hO``bInterfaceSubClass`` Subclass of interface; associated with bInterfaceClass. h](j)}(h``bInterfaceSubClass``h]jS)}(hjP h]hbInterfaceSubClass}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjN ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKkhjJ ubj)}(hhh]jM)}(h7Subclass of interface; associated with bInterfaceClass.h]h7Subclass of interface; associated with bInterfaceClass.}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhje hKkhjf ubah}(h]h ]h"]h$]h&]uh1jhjJ ubeh}(h]h ]h"]h$]h&]uh1jhje hKkhj@ ubj)}(hO``bInterfaceProtocol`` Protocol of interface; associated with bInterfaceClass. h](j)}(h``bInterfaceProtocol``h]jS)}(hj h]hbInterfaceProtocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKlhj ubj)}(hhh]jM)}(h7Protocol of interface; associated with bInterfaceClass.h]h7Protocol of interface; associated with bInterfaceClass.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hKlhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKlhj@ ubj)}(h``bInterfaceNumber`` Number of interface; composite devices may use fixed interface numbers to differentiate between vendor-specific interfaces. h](j)}(h``bInterfaceNumber``h]jS)}(hj h]hbInterfaceNumber}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKohj ubj)}(hhh]jM)}(h{Number of interface; composite devices may use fixed interface numbers to differentiate between vendor-specific interfaces.h]h{Number of interface; composite devices may use fixed interface numbers to differentiate between vendor-specific interfaces.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKmhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKohj@ ubj)}(h``driver_info`` Holds information used by the driver. Usually it holds a pointer to a descriptor understood by the driver, or perhaps device flags.h](j)}(h``driver_info``h]jS)}(hj h]h driver_info}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKqhj ubj)}(hhh]jM)}(hHolds information used by the driver. Usually it holds a pointer to a descriptor understood by the driver, or perhaps device flags.h]hHolds information used by the driver. Usually it holds a pointer to a descriptor understood by the driver, or perhaps device flags.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKphj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKqhj@ ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubjM)}(h**Description**h]j)}(hj? h]h Description}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj= ubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKuhjphhubjM)}(hXIn most cases, drivers will create a table of device IDs by using USB_DEVICE(), or similar macros designed for that purpose. They will then export it to userspace using MODULE_DEVICE_TABLE(), and provide it to the USB core through their usb_driver structure.h]hXIn most cases, drivers will create a table of device IDs by using USB_DEVICE(), or similar macros designed for that purpose. They will then export it to userspace using MODULE_DEVICE_TABLE(), and provide it to the USB core through their usb_driver structure.}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKrhjphhubjM)}(hXSee the usb_match_id() function for information about how matches are performed. Briefly, you will normally use one of several macros to help construct these entries. Each entry you provide will either identify one or more specific products, or will identify a class of products which have agreed to behave the same. You should put the more specific matches towards the beginning of your table, so that driver_info can record quirks of specific products.h]hXSee the usb_match_id() function for information about how matches are performed. Briefly, you will normally use one of several macros to help construct these entries. Each entry you provide will either identify one or more specific products, or will identify a class of products which have agreed to behave the same. You should put the more specific matches towards the beginning of your table, so that driver_info can record quirks of specific products.}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKwhjphhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hACPI_DEVICE_CLASS (C macro)c.ACPI_DEVICE_CLASShNtauh1hhjphhhNhNubh)}(hhh](h)}(hACPI_DEVICE_CLASSh]h)}(hACPI_DEVICE_CLASSh]h)}(hACPI_DEVICE_CLASSh]j)}(hj h]hACPI_DEVICE_CLASS}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj 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&]jFjAjGj jHj jIjJjKuh1hhhhjphNhNubjM)}(h"``ACPI_DEVICE_CLASS (_cls, _msk)``h]jS)}(hj h]hACPI_DEVICE_CLASS (_cls, _msk)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhjphhubji)}(hRmacro used to describe an ACPI device with the PCI-defined class-code information h]jM)}(hQmacro used to describe an ACPI device with the PCI-defined class-code informationh]hQmacro used to describe an ACPI device with the PCI-defined class-code information}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhhj hKhjphhubj)}(hX4**Parameters** ``_cls`` the class, subclass, prog-if triple for this device ``_msk`` the class mask for this device **Description** This macro is used to create a struct acpi_device_id that matches a specific PCI class. The .id and .driver_data fields will be left initialized with the default value.h](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:13: ./include/linux/mod_devicetable.hhKhj ubj)}(hhh](j)}(h=``_cls`` the class, subclass, prog-if triple for this device h](j)}(h``_cls``h]jS)}(hj h]h_cls}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj ubj)}(hhh]jM)}(h3the class, subclass, prog-if triple for this deviceh]h3the class, subclass, prog-if triple for this device}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+ hKhj, ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj+ hKhj ubj)}(h(``_msk`` the class mask for this device h](j)}(h``_msk``h]jS)}(hjO h]h_msk}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjM ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhjI ubj)}(hhh]jM)}(hthe class mask for this deviceh]hthe class mask for this device}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjd hKhje ubah}(h]h ]h"]h$]h&]uh1jhjI ubeh}(h]h ]h"]h$]h&]uh1jhjd 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&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj ubjM)}(hThis macro is used to create a struct acpi_device_id that matches a specific PCI class. The .id and .driver_data fields will be left initialized with the default value.h]hThis macro is used to create a struct acpi_device_id that matches a specific PCI class. The .id and .driver_data fields will be left initialized with the default value.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmdio_device_id (C struct)c.mdio_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(hmdio_device_idh]h)}(hstruct mdio_device_idh](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhKubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hKubh)}(hmdio_device_idh]j)}(hj h]hmdio_device_id}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj 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)identifies PHY devices on an MDIO/MII bush]h)identifies PHY devices on an MDIO/MII bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMrhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hKubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGj)jHj)jIjJjKuh1hhhhjphNhNubj)}(hX**Definition**:: struct mdio_device_id { __u32 phy_id; __u32 phy_id_mask; }; **Members** ``phy_id`` The result of (mdio_read(:c:type:`MII_PHYSID1`) << 16 | mdio_read(:c:type:`MII_PHYSID2`)) & **phy_id_mask** for this PHY type ``phy_id_mask`` Defines the significant bits of **phy_id**. A value of 0 is used to terminate an array of struct mdio_device_id.h](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh:}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMvhj-ubj)}(hCstruct mdio_device_id { __u32 phy_id; __u32 phy_id_mask; };h]hCstruct mdio_device_id { __u32 phy_id; __u32 phy_id_mask; };}hjNsbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMxhj-ubjM)}(h **Members**h]j)}(hj_h]hMembers}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM}hj-ubj)}(hhh](j)}(h``phy_id`` The result of (mdio_read(:c:type:`MII_PHYSID1`) << 16 | mdio_read(:c:type:`MII_PHYSID2`)) & **phy_id_mask** for this PHY type h](j)}(h ``phy_id``h]jS)}(hj~h]hphy_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMvhjxubj)}(hhh]jM)}(h}The result of (mdio_read(:c:type:`MII_PHYSID1`) << 16 | mdio_read(:c:type:`MII_PHYSID2`)) & **phy_id_mask** for this PHY typeh](hThe result of (mdio_read(}(hjhhhNhNubh)}(h:c:type:`MII_PHYSID1`h]jS)}(hjh]h MII_PHYSID1}(hjhhhNhNubah}(h]h ](xrefjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocdriver-api/basics refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]sb reftarget MII_PHYSID1uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMthjubh) << 16 | mdio_read(}(hjhhhNhNubh)}(h:c:type:`MII_PHYSID2`h]jS)}(hjh]h MII_PHYSID2}(hjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj MII_PHYSID2uh1hhjhMthjubh)) & }(hjhhhNhNubj)}(h**phy_id_mask**h]h phy_id_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh for this PHY type}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjuubj)}(h``phy_id_mask`` Defines the significant bits of **phy_id**. A value of 0 is used to terminate an array of struct mdio_device_id.h](j)}(h``phy_id_mask``h]jS)}(hjh]h phy_id_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMwhjubj)}(hhh]jM)}(hqDefines the significant bits of **phy_id**. A value of 0 is used to terminate an array of struct mdio_device_id.h](h Defines the significant bits of }(hj/hhhNhNubj)}(h **phy_id**h]hphy_id}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubhG. A value of 0 is used to terminate an array of struct mdio_device_id.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhj+hMwhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMwhjuubeh}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hamba_id (C struct) c.amba_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(hamba_idh]h)}(hstruct amba_idh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj}hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM~ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhjhM~ubh)}(hamba_idh]j)}(hj{h]hamba_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj}hhhjhM~ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjyhhhjhM~ubah}(h]jtah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM~hjvhhubj4)}(hhh]jM)}(h"identifies a device on an AMBA bush]h"identifies a device on an AMBA bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjvhhhjhM~ubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjphNhNubj)}(hX**Definition**:: struct amba_id { unsigned int id; unsigned int mask; void *data; }; **Members** ``id`` The significant bits if the hardware device ID ``mask`` Bitmask specifying which bits of the id field are significant when matching. A driver binds to a device when ((hardware device ID) & mask) == id. ``data`` Private data used by the driver.h](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hestruct amba_id { unsigned int id; unsigned int mask; void *data; };h]hestruct amba_id { unsigned int id; unsigned int mask; void *data; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubjM)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh](j)}(h6``id`` The significant bits if the hardware device ID h](j)}(h``id``h]jS)}(hj0h]hid}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj*ubj)}(hhh]jM)}(h.The significant bits if the hardware device IDh]h.The significant bits if the hardware device ID}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj'ubj)}(h``mask`` Bitmask specifying which bits of the id field are significant when matching. A driver binds to a device when ((hardware device ID) & mask) == id. h](j)}(h``mask``h]jS)}(hjih]hmask}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjcubj)}(hhh]jM)}(hBitmask specifying which bits of the id field are significant when matching. A driver binds to a device when ((hardware device ID) & mask) == id.h]hBitmask specifying which bits of the id field are significant when matching. A driver binds to a device when ((hardware device ID) & mask) == id.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj'ubj)}(h)``data`` Private data used by the driver.h](j)}(h``data``h]jS)}(hjh]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]jM)}(h Private data used by the driver.h]h Private data used by the driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj'ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmips_cdmm_device_id (C struct)c.mips_cdmm_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(hmips_cdmm_device_idh]h)}(hstruct mips_cdmm_device_idh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hMubh)}(hmips_cdmm_device_idh]j)}(hjh]hmips_cdmm_device_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhjhhubj4)}(hhh]jM)}(h#identifies devices in MIPS CDMM bush]h#identifies devices in MIPS CDMM bus}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj<hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjWjHjWjIjJjKuh1hhhhjphNhNubj)}(hw**Definition**:: struct mips_cdmm_device_id { __u8 type; }; **Members** ``type`` Device type identifier.h](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh:}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj[ubj)}(h.struct mips_cdmm_device_id { __u8 type; };h]h.struct mips_cdmm_device_id { __u8 type; };}hj|sbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj[ubjM)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj[ubj)}(hhh]j)}(h ``type`` Device type identifier.h](j)}(h``type``h]jS)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]jM)}(hDevice type identifier.h]hDevice type identifier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmei_cl_device_id (C struct)c.mei_cl_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(hmei_cl_device_idh]h)}(hstruct mei_cl_device_idh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hmei_cl_device_idh]j)}(hjh]hmei_cl_device_id}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hMEI client device identifierh]hMEI client device identifier}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjEhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGj`jHj`jIjJjKuh1hhhhjphNhNubj)}(hX6**Definition**:: struct mei_cl_device_id { char name[MEI_CL_NAME_SIZE]; uuid_le uuid; __u8 version; kernel_ulong_t driver_info; }; **Members** ``name`` helper name ``uuid`` client uuid ``version`` client protocol version ``driver_info`` information used by the driver.h](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh:}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjdubj)}(hstruct mei_cl_device_id { char name[MEI_CL_NAME_SIZE]; uuid_le uuid; __u8 version; kernel_ulong_t driver_info; };h]hstruct mei_cl_device_id { char name[MEI_CL_NAME_SIZE]; uuid_le uuid; __u8 version; kernel_ulong_t driver_info; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjdubjM)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjdubj)}(hhh](j)}(h``name`` helper name h](j)}(h``name``h]jS)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]jM)}(h helper nameh]h helper name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``uuid`` client uuid h](j)}(h``uuid``h]jS)}(hjh]huuid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]jM)}(h client uuidh]h client uuid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``version`` client protocol version h](j)}(h ``version``h]jS)}(hj'h]hversion}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj!ubj)}(hhh]jM)}(hclient protocol versionh]hclient protocol version}(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/``driver_info`` information used by the driver.h](j)}(h``driver_info``h]jS)}(hj`h]h driver_info}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjZubj)}(hhh]jM)}(hinformation used by the driver.h]hinformation used by the driver.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjubeh}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubjM)}(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:13: ./include/linux/mod_devicetable.hhMhjphhubjM)}(h-identifies mei client device by uuid and nameh]h-identifies mei client device by uuid and name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjphhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrio_device_id (C struct)c.rio_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(h rio_device_idh]h)}(hstruct rio_device_idh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h rio_device_idh]j)}(hjh]h rio_device_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hRIO device identifierh]hRIO device identifier}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGj;jHj;jIjJjKuh1hhhhjphNhNubj)}(h**Definition**:: struct rio_device_id { __u16 did, vid; __u16 asm_did, asm_vid; }; **Members** ``did`` RapidIO device ID ``vid`` RapidIO vendor ID ``asm_did`` RapidIO assembly device ID ``asm_vid`` RapidIO assembly vendor IDh](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh:}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj?ubj)}(hIstruct rio_device_id { __u16 did, vid; __u16 asm_did, asm_vid; };h]hIstruct rio_device_id { __u16 did, vid; __u16 asm_did, asm_vid; };}hj`sbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj?ubjM)}(h **Members**h]j)}(hjqh]hMembers}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj?ubj)}(hhh](j)}(h``did`` RapidIO device ID h](j)}(h``did``h]jS)}(hjh]hdid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]jM)}(hRapidIO device IDh]hRapidIO device ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``vid`` RapidIO vendor ID h](j)}(h``vid``h]jS)}(hjh]hvid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]jM)}(hRapidIO vendor IDh]hRapidIO vendor ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h'``asm_did`` RapidIO assembly device ID h](j)}(h ``asm_did``h]jS)}(hjh]hasm_did}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]jM)}(hRapidIO assembly device IDh]hRapidIO assembly device ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``asm_vid`` RapidIO assembly vendor IDh](j)}(h ``asm_vid``h]jS)}(hj;h]hasm_vid}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj5ubj)}(hhh]jM)}(hRapidIO assembly vendor IDh]hRapidIO assembly vendor ID}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjubeh}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubjM)}(h**Description**h]j)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjphhubjM)}(hcIdentifies a RapidIO device based on both the device/vendor IDs and the assembly device/vendor IDs.h]hcIdentifies a RapidIO device based on both the device/vendor IDs and the assembly device/vendor IDs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjphhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfsl_mc_device_id (C struct)c.fsl_mc_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(hfsl_mc_device_idh]h)}(hstruct fsl_mc_device_idh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hfsl_mc_device_idh]j)}(hjh]hfsl_mc_device_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hMC object device identifierh]hMC object device identifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjphNhNubj)}(h**Definition**:: struct fsl_mc_device_id { __u16 vendor; const char obj_type[16]; }; **Members** ``vendor`` vendor ID ``obj_type`` MC object typeh](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hKstruct fsl_mc_device_id { __u16 vendor; const char obj_type[16]; };h]hKstruct fsl_mc_device_id { __u16 vendor; const char obj_type[16]; };}hj;sbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubjM)}(h **Members**h]j)}(hjLh]hMembers}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh](j)}(h``vendor`` vendor ID h](j)}(h ``vendor``h]jS)}(hjkh]hvendor}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM hjeubj)}(hhh]jM)}(h vendor IDh]h vendor ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhM hjbubj)}(h``obj_type`` MC object typeh](j)}(h ``obj_type``h]jS)}(hjh]hobj_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM hjubj)}(hhh]jM)}(hMC object typeh]hMC object type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjbubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubjM)}(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:13: ./include/linux/mod_devicetable.hhMhjphhubjM)}(hType of entries in the "device Id" table for MC object devices supported by a MC object device driver. The last entry of the table has vendor set to 0x0h]hType of entries in the “device Id” table for MC object devices supported by a MC object device driver. The last entry of the table has vendor set to 0x0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM hjphhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htb_service_id (C struct)c.tb_service_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(h tb_service_idh]h)}(hstruct tb_service_idh](j?)}(hjBh]hstruct}(hj%hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj!hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj2hMubh)}(h tb_service_idh]j)}(hjh]h tb_service_id}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj2hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj2hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hMhjhhubj4)}(hhh]jM)}(hThunderbolt service identifiersh]hThunderbolt service identifiers}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjdhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj2hMubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjphNhNubj)}(hX**Definition**:: struct tb_service_id { __u32 match_flags; char protocol_key[8 + 1]; __u32 protocol_id; __u32 protocol_version; __u32 protocol_revision; kernel_ulong_t driver_data; }; **Members** ``match_flags`` Flags used to match the structure ``protocol_key`` Protocol key the service supports ``protocol_id`` Protocol id the service supports ``protocol_version`` Version of the protocol ``protocol_revision`` Revision of the protocol software ``driver_data`` Driver specific datah](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hstruct tb_service_id { __u32 match_flags; char protocol_key[8 + 1]; __u32 protocol_id; __u32 protocol_version; __u32 protocol_revision; kernel_ulong_t driver_data; };h]hstruct tb_service_id { __u32 match_flags; char protocol_key[8 + 1]; __u32 protocol_id; __u32 protocol_version; __u32 protocol_revision; kernel_ulong_t driver_data; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubjM)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM&hjubj)}(hhh](j)}(h2``match_flags`` Flags used to match the structure h](j)}(h``match_flags``h]jS)}(hjh]h match_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]jM)}(h!Flags used to match the structureh]h!Flags used to match the structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3``protocol_key`` Protocol key the service supports h](j)}(h``protocol_key``h]jS)}(hj h]h protocol_key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]jM)}(h!Protocol key the service supportsh]h!Protocol key the service supports}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjubj)}(h1``protocol_id`` Protocol id the service supports h](j)}(h``protocol_id``h]jS)}(hjFh]h protocol_id}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj@ubj)}(hhh]jM)}(h Protocol id the service supportsh]h Protocol id the service supports}(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-``protocol_version`` Version of the protocol h](j)}(h``protocol_version``h]jS)}(hjh]hprotocol_version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjyubj)}(hhh]jM)}(hVersion of the protocolh]hVersion of the protocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h8``protocol_revision`` Revision of the protocol software h](j)}(h``protocol_revision``h]jS)}(hjh]hprotocol_revision}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]jM)}(h!Revision of the protocol softwareh]h!Revision of the protocol software}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``driver_data`` Driver specific datah](j)}(h``driver_data``h]jS)}(hjh]h driver_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]jM)}(hDriver specific datah]hDriver specific data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubjM)}(h**Description**h]j)}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM!hjphhubjM)}(hThunderbolt XDomain services are exposed as devices where each device carries the protocol information the service supports. Thunderbolt XDomain service drivers match against that information.h]hThunderbolt XDomain services are exposed as devices where each device carries the protocol information the service supports. Thunderbolt XDomain service drivers match against that information.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjphhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htypec_device_id (C struct)c.typec_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(htypec_device_idh]h)}(hstruct typec_device_idh](j?)}(hjBh]hstruct}(hjrhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjnhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM%ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnhhhjhM%ubh)}(htypec_device_idh]j)}(hjlh]htypec_device_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjnhhhjhM%ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjjhhhjhM%ubah}(h]jeah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM%hjghhubj4)}(hhh]jM)}(h%USB Type-C alternate mode identifiersh]h%USB Type-C alternate mode identifiers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM6hjhhubah}(h]h ]h"]h$]h&]uh1j3hjghhhjhM%ubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjphNhNubj)}(h**Definition**:: struct typec_device_id { __u16 svid; __u8 mode; kernel_ulong_t driver_data; }; **Members** ``svid`` Standard or Vendor ID ``mode`` Mode index ``driver_data`` Driver specific datah](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM:hjubj)}(hZstruct typec_device_id { __u16 svid; __u8 mode; kernel_ulong_t driver_data; };h]hZstruct typec_device_id { __u16 svid; __u8 mode; kernel_ulong_t driver_data; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM<hjubjM)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMBhjubj)}(hhh](j)}(h``svid`` Standard or Vendor ID h](j)}(h``svid``h]jS)}(hj!h]hsvid}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM8hjubj)}(hhh]jM)}(hStandard or Vendor IDh]hStandard or Vendor ID}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hM8hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hM8hjubj)}(h``mode`` Mode index h](j)}(h``mode``h]jS)}(hjZh]hmode}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM9hjTubj)}(hhh]jM)}(h Mode indexh]h Mode index}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohM9hjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohM9hjubj)}(h$``driver_data`` Driver specific datah](j)}(h``driver_data``h]jS)}(hjh]h driver_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM9hjubj)}(hhh]jM)}(hDriver specific datah]hDriver specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htee_client_device_id (C struct)c.tee_client_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(htee_client_device_idh]h)}(hstruct tee_client_device_idh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM@ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM@ubh)}(htee_client_device_idh]j)}(hjh]htee_client_device_id}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM@ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM@ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM@hjhhubj4)}(hhh]jM)}(htee based device identifierh]htee based device identifier}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMBhj,hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM@ubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjGjHjGjIjJjKuh1hhhhjphNhNubj)}(h**Definition**:: struct tee_client_device_id { uuid_t uuid; }; **Members** ``uuid`` For TEE based client devices we use the device uuid as the identifier.h](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh:}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMFhjKubj)}(h1struct tee_client_device_id { uuid_t uuid; };h]h1struct tee_client_device_id { uuid_t uuid; };}hjlsbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMHhjKubjM)}(h **Members**h]j)}(hj}h]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMLhjKubj)}(hhh]j)}(hO``uuid`` For TEE based client devices we use the device uuid as the identifier.h](j)}(h``uuid``h]jS)}(hjh]huuid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMDhjubj)}(hhh]jM)}(hFFor TEE based client devices we use the device uuid as the identifier.h]hFFor TEE based client devices we use the device uuid as the identifier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwmi_device_id (C struct)c.wmi_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(h wmi_device_idh]h)}(hstruct wmi_device_idh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMKubh)}(h wmi_device_idh]j)}(hjh]h wmi_device_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMKhjhhubj4)}(hhh]jM)}(hWMI device identifierh]hWMI device identifier}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMOhj4hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMKubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjOjHjOjIjJjKuh1hhhhjphNhNubj)}(hX **Definition**:: struct wmi_device_id { const char guid_string[UUID_STRING_LEN+1]; const void *context; }; **Members** ``guid_string`` 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba ``context`` pointer to driver specific datah](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh:}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMShjSubj)}(hastruct wmi_device_id { const char guid_string[UUID_STRING_LEN+1]; const void *context; };h]hastruct wmi_device_id { const char guid_string[UUID_STRING_LEN+1]; const void *context; };}hjtsbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMUhjSubjM)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMZhjSubj)}(hhh](j)}(hP``guid_string`` 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba h](j)}(h``guid_string``h]jS)}(hjh]h guid_string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMQhjubj)}(hhh]jM)}(h?36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49bah]h?36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubj)}(h+``context`` pointer to driver specific datah](j)}(h ``context``h]jS)}(hjh]hcontext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMQhjubj)}(hhh]jM)}(hpointer to driver specific datah]hpointer to driver specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubeh}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmhi_device_id (C struct)c.mhi_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(h mhi_device_idh]h)}(hstruct mhi_device_idh](j?)}(hjBh]hstruct}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj3hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMXubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhjDhMXubh)}(h mhi_device_idh]j)}(hj1h]h mhi_device_id}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3hhhjDhMXubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/hhhjDhMXubah}(h]j*ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjDhMXhj,hhubj4)}(hhh]jM)}(hMHI device identificationh]hMHI device identification}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM^hjvhhubah}(h]h ]h"]h$]h&]uh1j3hj,hhhjDhMXubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjphNhNubj)}(h**Definition**:: struct mhi_device_id { const char chan[MHI_NAME_SIZE]; kernel_ulong_t driver_data; }; **Members** ``chan`` MHI channel name ``driver_data`` driver data;h](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMbhjubj)}(h]struct mhi_device_id { const char chan[MHI_NAME_SIZE]; kernel_ulong_t driver_data; };h]h]struct mhi_device_id { const char chan[MHI_NAME_SIZE]; kernel_ulong_t driver_data; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMdhjubjM)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMihjubj)}(hhh](j)}(h``chan`` MHI channel name h](j)}(h``chan``h]jS)}(hjh]hchan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM`hjubj)}(hhh]jM)}(hMHI channel nameh]hMHI channel name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM`hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM`hjubj)}(h``driver_data`` driver data;h](j)}(h``driver_data``h]jS)}(hjh]h driver_data}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhM`hjubj)}(hhh]jM)}(h driver data;h]h driver data;}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMahj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hM`hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdfl_device_id (C struct)c.dfl_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(h dfl_device_idh]h)}(hstruct dfl_device_idh](j?)}(hjBh]hstruct}(hjyhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjuhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuhhhjhMgubh)}(h dfl_device_idh]j)}(hjsh]h dfl_device_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjuhhhjhMgubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjqhhhjhMgubah}(h]jlah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMghjnhhubj4)}(hhh]jM)}(hdfl device identifierh]hdfl device identifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjnhhhjhMgubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjphNhNubj)}(hX/**Definition**:: struct dfl_device_id { __u16 type; __u16 feature_id; kernel_ulong_t driver_data; }; **Members** ``type`` DFL FIU type of the device. See enum dfl_id_type. ``feature_id`` feature identifier local to its DFL FIU type. ``driver_data`` driver specific data.h](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(h_struct dfl_device_id { __u16 type; __u16 feature_id; kernel_ulong_t driver_data; };h]h_struct dfl_device_id { __u16 type; __u16 feature_id; kernel_ulong_t driver_data; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubjM)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh](j)}(h;``type`` DFL FIU type of the device. See enum dfl_id_type. h](j)}(h``type``h]jS)}(hj(h]htype}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj&ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj"ubj)}(hhh]jM)}(h1DFL FIU type of the device. See enum dfl_id_type.h]h1DFL FIU type of the device. See enum dfl_id_type.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubj)}(h=``feature_id`` feature identifier local to its DFL FIU type. h](j)}(h``feature_id``h]jS)}(hjah]h feature_id}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj[ubj)}(hhh]jM)}(h-feature identifier local to its DFL FIU type.h]h-feature identifier local to its DFL FIU type.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjubj)}(h%``driver_data`` driver specific data.h](j)}(h``driver_data``h]jS)}(hjh]h driver_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubj)}(hhh]jM)}(hdriver specific data.h]hdriver specific data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hishtp_device_id (C struct)c.ishtp_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(hishtp_device_idh]h)}(hstruct ishtp_device_idh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hMubh)}(hishtp_device_idh]j)}(hjh]hishtp_device_id}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhjhhubj4)}(hhh]jM)}(hISHTP device identifierh]hISHTP device identifier}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj3 hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjN jHjN jIjJjKuh1hhhhjphNhNubj)}(h**Definition**:: struct ishtp_device_id { guid_t guid; kernel_ulong_t driver_data; }; **Members** ``guid`` GUID of the device. ``driver_data`` pointer to driver specific datah](jM)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubh:}(hjV hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjR ubj)}(hLstruct ishtp_device_id { guid_t guid; kernel_ulong_t driver_data; };h]hLstruct ishtp_device_id { guid_t guid; kernel_ulong_t driver_data; };}hjs sbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjR ubjM)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjR ubj)}(hhh](j)}(h``guid`` GUID of the device. h](j)}(h``guid``h]jS)}(hj h]hguid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj ubj)}(hhh]jM)}(hGUID of the device.h]hGUID of the device.}(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/``driver_data`` pointer to driver specific datah](j)}(h``driver_data``h]jS)}(hj h]h driver_data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj ubj)}(hhh]jM)}(hpointer to driver specific datah]hpointer to driver specific data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjR ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcdx_device_id (C struct)c.cdx_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(h cdx_device_idh]h)}(hstruct cdx_device_idh](j?)}(hjBh]hstruct}(hj6!hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj2!hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubjQ)}(h h]h }(hjD!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2!hhhjC!hMubh)}(h cdx_device_idh]j)}(hj0!h]h cdx_device_id}(hjV!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR!ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj2!hhhjC!hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj.!hhhjC!hMubah}(h]j)!ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjC!hMhj+!hhubj4)}(hhh]jM)}(hCDX device identifierh]hCDX device identifier}(hjx!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhju!hhubah}(h]h ]h"]h$]h&]uh1j3hj+!hhhjC!hMubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGj!jHj!jIjJjKuh1hhhhjphNhNubj)}(hX**Definition**:: struct cdx_device_id { __u16 vendor; __u16 device; __u16 subvendor; __u16 subdevice; __u32 class; __u32 class_mask; __u32 override_only; }; **Members** ``vendor`` Vendor ID ``device`` Device ID ``subvendor`` Subsystem vendor ID (or CDX_ANY_ID) ``subdevice`` Subsystem device ID (or CDX_ANY_ID) ``class`` Device class Most drivers do not need to specify class/class_mask as vendor/device is normally sufficient. ``class_mask`` Limit which sub-fields of the class field are compared. ``override_only`` Match only when dev->driver_override is this driver.h](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&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj!ubj)}(hstruct cdx_device_id { __u16 vendor; __u16 device; __u16 subvendor; __u16 subdevice; __u32 class; __u32 class_mask; __u32 override_only; };h]hstruct cdx_device_id { __u16 vendor; __u16 device; __u16 subvendor; __u16 subdevice; __u32 class; __u32 class_mask; __u32 override_only; };}hj!sbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj!ubjM)}(h **Members**h]j)}(hj!h]hMembers}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj!ubj)}(hhh](j)}(h``vendor`` Vendor ID h](j)}(h ``vendor``h]jS)}(hj!h]hvendor}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj!ubj)}(hhh]jM)}(h Vendor IDh]h Vendor ID}(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``device`` Device ID h](j)}(h ``device``h]jS)}(hj"h]hdevice}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj"ubj)}(hhh]jM)}(h Device IDh]h Device ID}(hj7"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3"hMhj4"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj3"hMhj!ubj)}(h2``subvendor`` Subsystem vendor ID (or CDX_ANY_ID) h](j)}(h ``subvendor``h]jS)}(hjW"h]h subvendor}(hjY"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjU"ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjQ"ubj)}(hhh]jM)}(h#Subsystem vendor ID (or CDX_ANY_ID)h]h#Subsystem vendor ID (or CDX_ANY_ID)}(hjp"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjl"hMhjm"ubah}(h]h ]h"]h$]h&]uh1jhjQ"ubeh}(h]h ]h"]h$]h&]uh1jhjl"hMhj!ubj)}(h2``subdevice`` Subsystem device ID (or CDX_ANY_ID) h](j)}(h ``subdevice``h]jS)}(hj"h]h subdevice}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj"ubj)}(hhh]jM)}(h#Subsystem device ID (or CDX_ANY_ID)h]h#Subsystem device ID (or CDX_ANY_ID)}(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)}(hu``class`` Device class Most drivers do not need to specify class/class_mask as vendor/device is normally sufficient. h](j)}(h ``class``h]jS)}(hj"h]hclass}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj"ubj)}(hhh]jM)}(hjDevice class Most drivers do not need to specify class/class_mask as vendor/device is normally sufficient.h]hjDevice class Most drivers do not need to specify class/class_mask as vendor/device is normally sufficient.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj!ubj)}(hG``class_mask`` Limit which sub-fields of the class field are compared. h](j)}(h``class_mask``h]jS)}(hj#h]h class_mask}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj#ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj"ubj)}(hhh]jM)}(h7Limit which sub-fields of the class field are compared.h]h7Limit which sub-fields of the class field are compared.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj!ubj)}(hF``override_only`` Match only when dev->driver_override is this driver.h](j)}(h``override_only``h]jS)}(hj<#h]h override_only}(hj>#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:#ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj6#ubj)}(hhh]jM)}(h4Match only when dev->driver_override is this driver.h]h4Match only when dev->driver_override is this driver.}(hjU#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjR#ubah}(h]h ]h"]h$]h&]uh1jhj6#ubeh}(h]h ]h"]h$]h&]uh1jhjQ#hMhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubjM)}(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:13: ./include/linux/mod_devicetable.hhMhjphhubjM)}(hZType of entries in the "device Id" table for CDX devices supported by a CDX device driver.h]h^Type of entries in the “device Id” table for CDX devices supported by a CDX device driver.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjphhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcoreboot_device_id (C struct)c.coreboot_device_idhNtauh1hhjphhhNhNubh)}(hhh](h)}(hcoreboot_device_idh]h)}(hstruct coreboot_device_idh](j?)}(hjBh]hstruct}(hj#hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj#hhha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#hhhj#hMubh)}(hcoreboot_device_idh]j)}(hj#h]hcoreboot_device_id}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj#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!Identifies a coreboot table entryh]h!Identifies a coreboot table entry}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj#hhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj#hMubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGj$jHj$jIjJjKuh1hhhhjphNhNubj)}(h**Definition**:: struct coreboot_device_id { __u32 tag; kernel_ulong_t driver_data; }; **Members** ``tag`` tag ID ``driver_data`` driver specific datah](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&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj$ubj)}(hMstruct coreboot_device_id { __u32 tag; kernel_ulong_t driver_data; };h]hMstruct coreboot_device_id { __u32 tag; kernel_ulong_t driver_data; };}hj<$sbah}(h]h ]h"]h$]h&]jjuh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj$ubjM)}(h **Members**h]j)}(hjM$h]hMembers}(hjO$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK$ubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj$ubj)}(hhh](j)}(h``tag`` tag ID h](j)}(h``tag``h]jS)}(hjl$h]htag}(hjn$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjj$ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhjf$ubj)}(hhh]jM)}(htag IDh]htag ID}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjf$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjc$ubj)}(h$``driver_data`` driver specific datah](j)}(h``driver_data``h]jS)}(hj$h]h driver_data}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj$ubj)}(hhh]jM)}(hdriver specific datah]hdriver specific data}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLha/var/lib/git/docbuild/linux/Documentation/driver-api/basics:13: ./include/linux/mod_devicetable.hhMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjc$ubeh}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubeh}(h]driver-device-tableah ]h"]driver device tableah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h Delaying and scheduling routinesh]h Delaying and scheduling routines}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hprev_cputime (C struct)c.prev_cputimehNtauh1hhj$hhhNhNubh)}(hhh](h)}(h prev_cputimeh]h)}(hstruct prev_cputimeh](j?)}(hjBh]hstruct}(hj%hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj%hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhKubjQ)}(h h]h }(hj&%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj%%hKubh)}(h prev_cputimeh]j)}(hj%h]h prev_cputime}(hj8%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%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#snapshot of system and user cputimeh]h#snapshot of system and user cputime}(hjZ%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMdhjW%hhubah}(h]h ]h"]h$]h&]uh1j3hj %hhhj%%hKubeh}(h]h ](jAstructeh"]h$]h&]jFjAjGjr%jHjr%jIjJjKuh1hhhhj$hNhNubj)}(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&]uh1jhjz%ubh:}(hjz%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhhjv%ubj)}(hstruct prev_cputime { #ifndef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE; u64 utime; u64 stime; raw_spinlock_t lock; #endif; };h]hstruct prev_cputime { #ifndef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE; u64 utime; u64 stime; raw_spinlock_t lock; #endif; };}hj%sbah}(h]h ]h"]h$]h&]jjuh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMjhjv%ubjM)}(h **Members**h]j)}(hj%h]hMembers}(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.hhMrhjv%ubj)}(hhh](j)}(h"``utime`` time spent in user mode h](j)}(h ``utime``h]jS)}(hj%h]hutime}(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.hhMfhj%ubj)}(hhh]jM)}(htime spent in user modeh]htime spent in user mode}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%hMfhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMfhj%ubj)}(h$``stime`` time spent in system mode h](j)}(h ``stime``h]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&hMghj%ubj)}(h&``lock`` protects the above two fieldsh](j)}(h``lock``h]jS)}(hj9&h]hlock}(hj;&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7&ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMghj3&ubj)}(hhh]jM)}(hprotects the above two fieldsh]hprotects the above two fields}(hjR&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhhjO&ubah}(h]h ]h"]h$]h&]uh1jhj3&ubeh}(h]h ]h"]h$]h&]uh1jhjN&hMghj%ubeh}(h]h ]h"]h$]h&]uh1jhjv%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubjM)}(h**Description**h]j)}(hj|&h]h Description}(hj~&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz&ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMkhj$hhubjM)}(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.hhMhhj$hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(__task_lazy_mmu_mode_active (C function)c.__task_lazy_mmu_mode_activehNtauh1hhj$hhhNhNubh)}(hhh](h)}(h:bool __task_lazy_mmu_mode_active (struct task_struct *tsk)h]h)}(h9bool __task_lazy_mmu_mode_active(struct task_struct *tsk)h](j)}(hjh]hbool}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&hhhj&hMubh)}(h__task_lazy_mmu_mode_activeh]j)}(h__task_lazy_mmu_mode_activeh]h__task_lazy_mmu_mode_active}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj&hhhj&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)}jsj&sbc.__task_lazy_mmu_mode_activeasbuh1hhj&ubjQ)}(h h]h }(hj4'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]h*}(hjB'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(htskh]htsk}(hjO'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(Test the lazy MMU mode state for a task.h]h(Test the lazy MMU mode state for a task.}(hjy'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjv'hhubah}(h]h ]h"]h$]h&]uh1j3hj&hhhj&hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj'jHj'jIjJjKuh1hhhhj$hNhNubj)}(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)}(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/``struct task_struct *tsk`` The task to check. h](j)}(h``struct task_struct *tsk``h]jS)}(hj'h]hstruct task_struct *tsk}(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.hhMhj'ubj)}(hhh]jM)}(hThe task to check.h]hThe task to check.}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhj'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.hhMhj'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.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&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$is_lazy_mmu_mode_active (C function)c.is_lazy_mmu_mode_activehNtauh1hhj$hhhNhNubh)}(hhh](h)}(h#bool is_lazy_mmu_mode_active (void)h]h)}(h"bool is_lazy_mmu_mode_active(void)h](j)}(hjh]hbool}(hjj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf(hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMubjQ)}(h h]h }(hjx(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjf(hhhjw(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&]jjuh1hhjf(hhhjw(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&]jjuh1j3hjf(hhhjw(hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjb(hhhjw(hMubah}(h]j](ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjw(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.}(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&]uh1j3hj_(hhhjw(hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj(jHj(jIjJjKuh1hhhhj$hNhNubj)}(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)}(hjL)h]h Description}(hjN)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ)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}(hjb)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.}(hjq)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&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!set_cpus_allowed_ptr (C function)c.set_cpus_allowed_ptrhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hPint set_cpus_allowed_ptr (struct task_struct *p, const struct cpumask *new_mask)h]h)}(hOint set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask)h](j)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMgubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)hhhj)hMgubh)}(hset_cpus_allowed_ptrh]j)}(hset_cpus_allowed_ptrh]hset_cpus_allowed_ptr}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhj)hMgubj4)}(h7(struct task_struct *p, const struct cpumask *new_mask)h](j:)}(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.set_cpus_allowed_ptrasbuh1hhj)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}(hj6*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj)ubj:)}(hconst struct cpumask *new_maskh](j?)}(hconsth]hconst}(hjN*hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjJ*ubjQ)}(h h]h }(hj\*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJ*ubj?)}(hjBh]hstruct}(hjj*hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjJ*ubjQ)}(h h]h }(hjw*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJ*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_ptrasbuh1hhjJ*ubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJ*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ*ubj)}(hnew_maskh]hnew_mask}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj)ubeh}(h]h ]h"]h$]h&]jjuh1j3hj)hhhj)hMgubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj)hhhj)hMgubah}(h]j)ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj)hMghj)hhubj4)}(hhh]jM)}(hset CPU affinity mask of a taskh]hset CPU affinity mask of a task}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMghj*hhubah}(h]h ]h"]h$]h&]uh1j3hj)hhhj)hMgubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj+jHj+jIjJjKuh1hhhhj$hNhNubj)}(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)}(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.hhMkhj+ubj)}(hhh](j)}(h#``struct task_struct *p`` the task 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&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhhj&+ubj)}(hhh]jM)}(hthe taskh]hthe task}(hjE+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjA+hMhhjB+ubah}(h]h ]h"]h$]h&]uh1jhj&+ubeh}(h]h ]h"]h$]h&]uh1jhjA+hMhhj#+ubj)}(h5``const struct cpumask *new_mask`` CPU affinity mask h](j)}(h"``const struct cpumask *new_mask``h]jS)}(hje+h]hconst struct cpumask *new_mask}(hjg+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjc+ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMihj_+ubj)}(hhh]jM)}(hCPU affinity maskh]hCPU affinity mask}(hj~+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjz+hMihj{+ubah}(h]h ]h"]h$]h&]uh1jhj_+ubeh}(h]h ]h"]h$]h&]uh1jhjz+hMihj#+ubeh}(h]h ]h"]h$]h&]uh1jhj+ubjM)}(h **Return**h]j)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMkhj+ubjM)}(h,zero if successful, or a negative error codeh]h,zero if successful, or a negative error code}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMkhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htask_nice (C function) c.task_nicehNtauh1hhj$hhhNhNubh)}(hhh](h)}(h+int task_nice (const struct task_struct *p)h]h)}(h*int task_nice(const struct task_struct *p)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMyubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+hhhj+hMyubh)}(h task_niceh]j)}(h task_niceh]h task_nice}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+hhhj+hMyubj4)}(h(const struct task_struct *p)h]j:)}(hconst struct task_struct *ph](j?)}(hjP*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}(hj=,hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj,ubjQ)}(h h]h }(hjJ,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubh)}(hhh]j)}(h task_structh]h task_struct}(hj[,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX,ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj],modnameN classnameNjwjz)}j}]j)}jsj,sb c.task_niceasbuh1hhj,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,ubah}(h]h ]h"]h$]h&]jjuh1j3hj+hhhj+hMyubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj+hhhj+hMyubah}(h]j+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj+hMyhj+hhubj4)}(hhh]jM)}(h&return the nice value of a given task.h]h&return the nice value of a given task.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMyhj,hhubah}(h]h ]h"]h$]h&]uh1j3hj+hhhj+hMyubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,jHj,jIjJjKuh1hhhhj$hNhNubj)}(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&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM}hj,ubj)}(hhh]j)}(h6``const struct task_struct *p`` the task in question. h](j)}(h``const struct task_struct *p``h]jS)}(hj-h]hconst struct task_struct *p}(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.hhMzhj,ubj)}(hhh]jM)}(hthe task in question.h]hthe task in question.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-hMzhj-ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj-hMzhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubjM)}(h **Return**h]j)}(hj;-h]hReturn}(hj=-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9-ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM|hj,ubjM)}(h$The nice value [ -20 ... 0 ... 19 ].h]h$The nice value [ -20 ... 0 ... 19 ].}(hjQ-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhM|hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](his_idle_task (C function)c.is_idle_taskhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h/bool is_idle_task (const struct task_struct *p)h]h)}(h.bool is_idle_task(const struct task_struct *p)h](j)}(hjh]hbool}(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)}(h is_idle_taskh]j)}(h is_idle_taskh]h is_idle_task}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj|-hhhj-hMubj4)}(h(const struct task_struct *p)h]j:)}(hconst struct task_struct *ph](j?)}(hjP*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}(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.is_idle_taskasbuh1hhj-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}(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'hjx-hhhj-hMubah}(h]js-ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj-hMhju-hhubj4)}(hhh]jM)}(h#is the specified task an idle task?h]h#is the specified task an idle task?}(hjY.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhjV.hhubah}(h]h ]h"]h$]h&]uh1j3hju-hhhj-hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjq.jHjq.jIjJjKuh1hhhhj$hNhNubj)}(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)}(hj{.h]h Parameters}(hj}.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy.ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhju.ubj)}(hhh]j)}(h6``const struct task_struct *p`` the task in question. h](j)}(h``const struct task_struct *p``h]jS)}(hj.h]hconst struct task_struct *p}(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.hhMhj.ubj)}(hhh]jM)}(hthe task in question.h]hthe task in question.}(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 **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:21: ./include/linux/sched.hhMhju.ubjM)}(h(1 if **p** is an idle task. 0 otherwise.h](h1 if }(hj.hhhNhNubj)}(h**p**h]hp}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh is an idle task. 0 otherwise.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:21: ./include/linux/sched.hhMhju.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwake_up_process (C function)c.wake_up_processhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h+int wake_up_process (struct task_struct *p)h]h)}(h*int wake_up_process(struct task_struct *p)h](j)}(hinth]hint}(hj,/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(/hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMFubjQ)}(h h]h }(hj;/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(/hhhj:/hMFubh)}(hwake_up_processh]j)}(hwake_up_processh]hwake_up_process}(hjM/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI/ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj(/hhhj:/hMFubj4)}(h(struct task_struct *p)h]j:)}(hstruct task_struct *ph](j?)}(hjBh]hstruct}(hji/hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hje/ubjQ)}(h h]h }(hjv/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhje/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)}jsjO/sbc.wake_up_processasbuh1hhje/ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhje/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje/ubj)}(hjh]hp}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hja/ubah}(h]h ]h"]h$]h&]jjuh1j3hj(/hhhj:/hMFubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj$/hhhj:/hMFubah}(h]j/ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj:/hMFhj!/hhubj4)}(hhh]jM)}(hWake up a specific processh]hWake up a specific process}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMFhj/hhubah}(h]h ]h"]h$]h&]uh1j3hj!/hhhj:/hMFubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj0jHj0jIjJjKuh1hhhhj$hNhNubj)}(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)}(hj 0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 0ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMJhj0ubj)}(hhh]j)}(h6``struct task_struct *p`` The process to be woken up. h](j)}(h``struct task_struct *p``h]jS)}(hj,0h]hstruct task_struct *p}(hj.0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*0ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMGhj&0ubj)}(hhh]jM)}(hThe process to be woken up.h]hThe process to be woken up.}(hjE0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjA0hMGhjB0ubah}(h]h ]h"]h$]h&]uh1jhj&0ubeh}(h]h ]h"]h$]h&]uh1jhjA0hMGhj#0ubah}(h]h ]h"]h$]h&]uh1jhj0ubjM)}(h**Description**h]j)}(hjg0h]h Description}(hji0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje0ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMIhj0ubjM)}(hVAttempt to wake up the nominated process and move it to the set of runnable processes.h]hVAttempt to wake up the nominated process and move it to the set of runnable processes.}(hj}0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMHhj0ubjM)}(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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMLhj0ubjM)}(h **Return**h]j)}(hj0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMNhj0ubjM)}(h;1 if the process was woken up, 0 if it was already running.h]h;1 if the process was woken up, 0 if it was already running.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMLhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&preempt_notifier_register (C function)c.preempt_notifier_registerhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hBvoid preempt_notifier_register (struct preempt_notifier *notifier)h]h)}(hAvoid preempt_notifier_register(struct preempt_notifier *notifier)h](j)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhj0hMubh)}(hpreempt_notifier_registerh]j)}(hpreempt_notifier_registerh]hpreempt_notifier_register}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhj0hMubj4)}(h#(struct preempt_notifier *notifier)h]j:)}(h!struct preempt_notifier *notifierh](j?)}(hjBh]hstruct}(hj1hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj1ubjQ)}(h h]h }(hj,1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubh)}(hhh]j)}(hpreempt_notifierh]hpreempt_notifier}(hj=1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?1modnameN classnameNjwjz)}j}]j)}jsj1sbc.preempt_notifier_registerasbuh1hhj1ubjQ)}(h h]h }(hj]1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hjh]h*}(hjk1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hnotifierh]hnotifier}(hjx1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1ubah}(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)}(h5tell me when current is being preempted & rescheduledh]h5tell me when current is being preempted & rescheduled}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj1hhubah}(h]h ]h"]h$]h&]uh1j3hj0hhhj0hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1jHj1jIjJjKuh1hhhhj$hNhNubj)}(hS**Parameters** ``struct preempt_notifier *notifier`` notifier struct to registerh](jM)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj1ubj)}(hhh]j)}(hA``struct preempt_notifier *notifier`` notifier struct to registerh](j)}(h%``struct preempt_notifier *notifier``h]jS)}(hj1h]h!struct preempt_notifier *notifier}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj1ubj)}(hhh]jM)}(hnotifier struct to registerh]hnotifier struct to register}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(preempt_notifier_unregister (C function)c.preempt_notifier_unregisterhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hDvoid preempt_notifier_unregister (struct preempt_notifier *notifier)h]h)}(hCvoid preempt_notifier_unregister(struct preempt_notifier *notifier)h](j)}(hvoidh]hvoid}(hj=2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj92hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMubjQ)}(h h]h }(hjL2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj92hhhjK2hMubh)}(hpreempt_notifier_unregisterh]j)}(hpreempt_notifier_unregisterh]hpreempt_notifier_unregister}(hj^2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj92hhhjK2hMubj4)}(h#(struct preempt_notifier *notifier)h]j:)}(h!struct preempt_notifier *notifierh](j?)}(hjBh]hstruct}(hjz2hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjv2ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjv2ubh)}(hhh]j)}(hpreempt_notifierh]hpreempt_notifier}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsj`2sbc.preempt_notifier_unregisterasbuh1hhjv2ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjv2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv2ubj)}(hnotifierh]hnotifier}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjr2ubah}(h]h ]h"]h$]h&]jjuh1j3hj92hhhjK2hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj52hhhjK2hMubah}(h]j02ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjK2hMhj22hhubj4)}(hhh]jM)}(h0no longer interested in preemption notificationsh]h0no longer interested in preemption notifications}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj2hhubah}(h]h ]h"]h$]h&]uh1j3hj22hhhjK2hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhj$hNhNubj)}(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)}(hj3h]h Parameters}(hj!3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chM hj3ubj)}(hhh]j)}(hD``struct preempt_notifier *notifier`` notifier struct to unregister h](j)}(h%``struct preempt_notifier *notifier``h]jS)}(hj>3h]h!struct preempt_notifier *notifier}(hj@3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<3ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj83ubj)}(hhh]jM)}(hnotifier struct to unregisterh]hnotifier struct to unregister}(hjW3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjS3hMhjT3ubah}(h]h ]h"]h$]h&]uh1jhj83ubeh}(h]h ]h"]h$]h&]uh1jhjS3hMhj53ubah}(h]h ]h"]h$]h&]uh1jhj3ubjM)}(h**Description**h]j)}(hjy3h]h Description}(hj{3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw3ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj3ubjM)}(h=This is *not* safe to call from within a preemption notifier.h](hThis is }(hj3hhhNhNubhemphasis)}(h*not*h]hnot}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj3ubh0 safe to call from within a preemption notifier.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%preempt_schedule_notrace (C function)c.preempt_schedule_notracehNtauh1hhj$hhhNhNubh)}(hhh](h)}(h6__visible void notrace preempt_schedule_notrace (void)h]h)}(h5__visible void notrace preempt_schedule_notrace(void)h](h __visible}(hj3hhhNhNubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMubj)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hMubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhj3hMubhnotrace}(hj3hhhNhNubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhj3hMubh)}(hpreempt_schedule_notraceh]j)}(hpreempt_schedule_notraceh]hpreempt_schedule_notrace}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3hhhj3hMubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj34hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/4ubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj+4ubah}(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"preempt_schedule called by tracingh]h"preempt_schedule called by tracing}(hj]4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjZ4hhubah}(h]h ]h"]h$]h&]uh1j3hj3hhhj3hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGju4jHju4jIjJjKuh1hhhhj$hNhNubj)}(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)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}4ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjy4ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hj4h]hvoid}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chKhj4ubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1jhjy4ubjM)}(h**Description**h]j)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chKhjy4ubjM)}(hXzThe tracing infrastructure uses preempt_enable_notrace to prevent recursion and tracing preempt enabling caused by the tracing infrastructure itself. But as tracing can happen in areas coming from userspace or just about to enter userspace, a preempt enable can occur before user_exit() is called. This will cause the scheduler to be called when the system is still in usermode.h]hXzThe tracing infrastructure uses preempt_enable_notrace to prevent recursion and tracing preempt enabling caused by the tracing infrastructure itself. But as tracing can happen in areas coming from userspace or just about to enter userspace, a preempt enable can occur before user_exit() is called. This will cause the scheduler to be called when the system is still in usermode.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjy4ubjM)}(hTo prevent this, the preempt_enable_notrace will use this function instead of preempt_schedule() to exit user context if needed before calling the scheduler.h]hTo prevent this, the preempt_enable_notrace will use this function instead of preempt_schedule() to exit user context if needed before calling the scheduler.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:24: ./kernel/sched/core.chMhjy4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h cpupri_find_fitness (C function)c.cpupri_find_fitnesshNtauh1hhj$hhhNhNubh)}(hhh](h)}(hint cpupri_find_fitness (struct cpupri *cp, struct task_struct *p, struct cpumask *lowest_mask, bool (*fitness_fn)(struct task_struct *p, int cpu))h]h)}(hint cpupri_find_fitness(struct cpupri *cp, struct task_struct *p, struct cpumask *lowest_mask, bool (*fitness_fn)(struct task_struct *p, int cpu))h](j)}(hinth]hint}(hj-5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)5hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKubjQ)}(h h]h }(hj<5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)5hhhj;5hKubh)}(hcpupri_find_fitnessh]j)}(hcpupri_find_fitnessh]hcpupri_find_fitness}(hjN5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ5ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)5hhhj;5hKubj4)}(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}(hjj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjf5ubjQ)}(h h]h }(hjw5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjf5ubh)}(hhh]j)}(hcpuprih]hcpupri}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j)}jsjP5sbc.cpupri_find_fitnessasbuh1hhjf5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjf5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf5ubj)}(hcph]hcp}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjb5ubj:)}(hstruct task_struct *ph](j?)}(hjBh]hstruct}(hj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubh)}(hhh]j)}(h task_structh]h task_struct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j5c.cpupri_find_fitnessasbuh1hhj5ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]h*}(hj&6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]hp}(hj36hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjb5ubj:)}(hstruct cpumask *lowest_maskh](j?)}(hjBh]hstruct}(hjK6hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjG6ubjQ)}(h h]h }(hjX6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjG6ubh)}(hhh]j)}(hcpumaskh]hcpumask}(hji6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjk6modnameN classnameNjwjz)}j}]j5c.cpupri_find_fitnessasbuh1hhjG6ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjG6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG6ubj)}(h lowest_maskh]h lowest_mask}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjb5ubj:)}(h2bool (*fitness_fn)(struct task_struct *p, int cpu)h](j)}(hjh]hbool}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(h(h]h(}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h fitness_fnh]h fitness_fn}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]h)}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hj6h]h(}(hj 7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj?)}(hjBh]hstruct}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj6ubjQ)}(h h]h }(hj&7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubh)}(hhh]j)}(h task_structh]h task_struct}(hj77hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj47ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj97modnameN classnameNjwjz)}j}]j5c.cpupri_find_fitnessasbuh1hhj6ubjQ)}(h h]h }(hjU7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]h*}(hjc7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]hp}(hjp7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h,h]h,}(hj}7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hcpuh]hcpu}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]h)}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjb5ubeh}(h]h ]h"]h$]h&]jjuh1j3hj)5hhhj;5hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj%5hhhj;5hKubah}(h]j 5ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj;5hKhj"5hhubj4)}(hhh]jM)}(h,find the best (lowest-pri) CPU in the systemh]h,find the best (lowest-pri) CPU in the system}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj7hhubah}(h]h ]h"]h$]h&]uh1j3hj"5hhhj;5hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj8jHj8jIjJjKuh1hhhhj$hNhNubj)}(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)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 8ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubj)}(hhh](j)}(h)``struct cpupri *cp`` The cpupri context h](j)}(h``struct cpupri *cp``h]jS)}(hj-8h]hstruct cpupri *cp}(hj/8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj'8ubj)}(hhh]jM)}(hThe cpupri contexth]hThe cpupri context}(hjF8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjB8hKhjC8ubah}(h]h ]h"]h$]h&]uh1jhj'8ubeh}(h]h ]h"]h$]h&]uh1jhjB8hKhj$8ubj)}(h#``struct task_struct *p`` The task h](j)}(h``struct task_struct *p``h]jS)}(hjf8h]hstruct task_struct *p}(hjh8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjd8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj`8ubj)}(hhh]jM)}(hThe taskh]hThe task}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{8hKhj|8ubah}(h]h ]h"]h$]h&]uh1jhj`8ubeh}(h]h ]h"]h$]h&]uh1jhj{8hKhj$8ubj)}(hO``struct cpumask *lowest_mask`` A mask to fill in with selected CPUs (or NULL) h](j)}(h``struct cpumask *lowest_mask``h]jS)}(hj8h]hstruct cpumask *lowest_mask}(hj8hhhNhNubah}(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.chKhj8ubj)}(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)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hKhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hKhj$8ubj)}(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)}(hj8h]h2bool (*fitness_fn)(struct task_struct *p, int cpu)}(hj8hhhNhNubah}(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.chKhj8ubj)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hKhj$8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubjM)}(h**Note**h]j)}(hj9h]hNote}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubjM)}(hX~This function returns the recommended CPUs as calculated during the current invocation. By the time the call returns, the CPUs may have in fact changed priorities any number of times. While not ideal, it is not an issue of correctness since the normal rebalancer logic will correct any discrepancies created by racing against the uncertainty of the current priority configuration.h]hX~This function returns the recommended CPUs as calculated during the current invocation. By the time the call returns, the CPUs may have in fact changed priorities any number of times. While not ideal, it is not an issue of correctness since the normal rebalancer logic will correct any discrepancies created by racing against the uncertainty of the current priority configuration.}(hj*9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubjM)}(h **Return**h]j)}(hj;9h]hReturn}(hj=9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj99ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubjM)}(h(int)bool - CPUs were foundh]h(int)bool - CPUs were found}(hjQ9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcpupri_set (C function) c.cpupri_sethNtauh1hhj$hhhNhNubh)}(hhh](h)}(h8void cpupri_set (struct cpupri *cp, int cpu, int newpri)h]h)}(h7void cpupri_set(struct cpupri *cp, int cpu, int newpri)h](j)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|9hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|9hhhj9hKubh)}(h cpupri_seth]j)}(h cpupri_seth]h cpupri_set}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj|9hhhj9hKubj4)}(h((struct cpupri *cp, int cpu, int newpri)h](j:)}(hstruct cpupri *cph](j?)}(hjBh]hstruct}(hj9hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj9ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubh)}(hhh]j)}(hcpuprih]hcpupri}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j)}jsj9sb c.cpupri_setasbuh1hhj9ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]h*}(hj :hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hcph]hcp}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubj:)}(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}(hjK:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubj:)}(h int newprih](j)}(hinth]hint}(hjd:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`:ubjQ)}(h h]h }(hjr:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`:ubj)}(hnewprih]hnewpri}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubeh}(h]h ]h"]h$]h&]jjuh1j3hj|9hhhj9hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjx9hhhj9hKubah}(h]js9ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj9hKhju9hhubj4)}(hhh]jM)}(hupdate the CPU priority settingh]hupdate the CPU priority setting}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj:hhubah}(h]h ]h"]h$]h&]uh1j3hju9hhhj9hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:jHj:jIjJjKuh1hhhhj$hNhNubj)}(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)}(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.chKhj: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.chKhj:ubj)}(hhh]jM)}(hThe cpupri contexth]hThe cpupri context}(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``int cpu`` The target 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&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj;ubj)}(hhh]jM)}(hThe target CPUh]hThe target CPU}(hj=;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9;hKhj:;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj9;hKhj:ubj)}(hS``int newpri`` The priority (INVALID,NORMAL,RT1-RT99,HIGHER) to assign to this CPU h](j)}(h``int newpri``h]jS)}(hj];h]h int newpri}(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.chKhjW;ubj)}(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}(hjv;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjr;hKhjs;ubah}(h]h ]h"]h$]h&]uh1jhjW;ubeh}(h]h ]h"]h$]h&]uh1jhjr;hKhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:ubjM)}(h**Note**h]j)}(hj;h]hNote}(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.chKhj:ubjM)}(h#Assumes cpu_rq(cpu)->lock is lockedh]h#Assumes cpu_rq(cpu)->lock is locked}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj: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.chKhj:ubjM)}(h(void)h]h(void)}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chKhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcpupri_init (C function) c.cpupri_inithNtauh1hhj$hhhNhNubh)}(hhh](h)}(h#int cpupri_init (struct cpupri *cp)h]h)}(h"int cpupri_init(struct cpupri *cp)h](j)}(hinth]hint}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chMubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<hhhj<hMubh)}(h cpupri_inith]j)}(h cpupri_inith]h cpupri_init}(hj%<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj<hhhj<hMubj4)}(h(struct cpupri *cp)h]j:)}(hstruct cpupri *cph](j?)}(hjBh]hstruct}(hjA<hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj=<ubjQ)}(h h]h }(hjN<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=<ubh)}(hhh]j)}(hcpuprih]hcpupri}(hj_<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetja<modnameN classnameNjwjz)}j}]j)}jsj'<sb c.cpupri_initasbuh1hhj=<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)}(hcph]hcp}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=<ubeh}(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)}(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&]uh1j3hj;hhhj<hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj<jHj<jIjJjKuh1hhhhj$hNhNubj)}(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}(hjB=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.}(hjV=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&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcpupri_cleanup (C function)c.cpupri_cleanuphNtauh1hhj$hhhNhNubh)}(hhh](h)}(h'void cpupri_cleanup (struct cpupri *cp)h]h)}(h&void cpupri_cleanup(struct cpupri *cp)h](j)}(hvoidh]hvoid}(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}(hj=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>hj=ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubh)}(hhh]j)}(hcpuprih]hcpupri}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=modnameN classnameNjwjz)}j}]j)}jsj=sbc.cpupri_cleanupasbuh1hhj=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)}(hcph]hcp}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubah}(h]h ]h"]h$]h&]jjuh1j3hj=hhhj=hM3ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj}=hhhj=hM3ubah}(h]jx=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj=hM3hjz=hhubj4)}(hhh]jM)}(hclean up the cpupri structureh]hclean up the cpupri structure}(hjE>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM3hjB>hhubah}(h]h ]h"]h$]h&]uh1j3hjz=hhhj=hM3ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]>jHj]>jIjJjKuh1hhhhj$hNhNubj)}(h:**Parameters** ``struct cpupri *cp`` The cpupri contexth](jM)}(h**Parameters**h]j)}(hjg>h]h Parameters}(hji>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje>ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:27: ./kernel/sched/cpupri.chM7hja>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.chM4hj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hM9hj}>ubah}(h]h ]h"]h$]h&]uh1jhja>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hupdate_tg_load_avg (C function)c.update_tg_load_avghNtauh1hhj$hhhNhNubh)}(hhh](h)}(h/void update_tg_load_avg (struct cfs_rq *cfs_rq)h]h)}(h.void update_tg_load_avg(struct cfs_rq *cfs_rq)h](j)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>hhhj>hM ubh)}(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&]jjuh1hhj>hhhj>hM ubj4)}(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&]uh1jhj8?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*}(hji?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hcfs_rqh]hcfs_rq}(hjv?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)}(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.chM hj?hhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhj>hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj?jHj?jIjJjKuh1hhhhj$hNhNubj)}(hX**Parameters** ``struct cfs_rq *cfs_rq`` the cfs_rq whose avg changed **Description** This function 'ensures': tg->load_avg := \Sum tg->cfs_rq[]->avg.load. However, because tg->load_avg is a global value there are performance considerations. In order to avoid having to look at the other cfs_rq's, we use a differential update where we store the last value we propagated. This in turn allows skipping updates if the differential is 'small'. Updating tg's load_avg is necessary before update_cfs_share().h](jM)}(h**Parameters**h]j)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj?ubj)}(hhh]j)}(h7``struct cfs_rq *cfs_rq`` the cfs_rq whose avg changed h](j)}(h``struct cfs_rq *cfs_rq``h]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.chM hj?ubj)}(hhh]jM)}(hthe cfs_rq whose avg changedh]hthe cfs_rq whose avg changed}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubjM)}(h**Description**h]j)}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj?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.}(hj2@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj?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’.}(hjA@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj?ubjM)}(h>Updating tg's load_avg is necessary before update_cfs_share().h]h@Updating tg’s load_avg is necessary before update_cfs_share().}(hjP@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&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#update_cfs_rq_load_avg (C function)c.update_cfs_rq_load_avghNtauh1hhj$hhhNhNubh)}(hhh](h)}(h;int update_cfs_rq_load_avg (u64 now, struct cfs_rq *cfs_rq)h]h)}(h:int update_cfs_rq_load_avg(u64 now, struct cfs_rq *cfs_rq)h](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{@hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{@hhhj@hMubh)}(hupdate_cfs_rq_load_avgh]j)}(hupdate_cfs_rq_load_avgh]hupdate_cfs_rq_load_avg}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{@hhhj@hMubj4)}(h (u64 now, struct cfs_rq *cfs_rq)h](j:)}(hu64 nowh](h)}(hhh]j)}(hu64h]hu64}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj@modnameN classnameNjwjz)}j}]j)}jsj@sbc.update_cfs_rq_load_avgasbuh1hhj@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hnowh]hnow}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubj:)}(hstruct cfs_rq *cfs_rqh](j?)}(hjBh]hstruct}(hjAhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjAubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubh)}(hhh]j)}(hcfs_rqh]hcfs_rq}(hj$AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!Aubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj&AmodnameN classnameNjwjz)}j}]j@c.update_cfs_rq_load_avgasbuh1hhjAubjQ)}(h h]h }(hjBAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]h*}(hjPAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hcfs_rqh]hcfs_rq}(hj]AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubeh}(h]h ]h"]h$]h&]jjuh1j3hj{@hhhj@hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjw@hhhj@hMubah}(h]jr@ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj@hMhjt@hhubj4)}(hhh]jM)}(h&update the cfs_rq's load/util averagesh]h(update the cfs_rq’s load/util averages}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAhhubah}(h]h ]h"]h$]h&]uh1j3hjt@hhhj@hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjAjHjAjIjJjKuh1hhhhj$hNhNubj)}(hX&**Parameters** ``u64 now`` current time, as per cfs_rq_clock_pelt() ``struct cfs_rq *cfs_rq`` cfs_rq to update **Description** The cfs_rq avg is the direct sum of all its entities (blocked and runnable) avg. The immediate corollary is that all (fair) tasks must be attached. cfs_rq->avg is used for task_h_load() and update_cfs_share() for example. Since both these conditions indicate a changed cfs_rq->avg.load we should call update_tg_load_avg() when this function returns true. **Return** true if the load decayed or we removed load.h](jM)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubj)}(hhh](j)}(h5``u64 now`` current time, as per cfs_rq_clock_pelt() h](j)}(h ``u64 now``h]jS)}(hjAh]hu64 now}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubj)}(hhh]jM)}(h(current time, as per cfs_rq_clock_pelt()h]h(current time, as per cfs_rq_clock_pelt()}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubj)}(h+``struct cfs_rq *cfs_rq`` cfs_rq to update h](j)}(h``struct cfs_rq *cfs_rq``h]jS)}(hjBh]hstruct cfs_rq *cfs_rq}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubj)}(hhh]jM)}(hcfs_rq to updateh]hcfs_rq to update}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubjM)}(h**Description**h]j)}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Bubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubjM)}(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.}(hjRBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubjM)}(hIcfs_rq->avg is used for task_h_load() and update_cfs_share() for example.h]hIcfs_rq->avg is used for task_h_load() and update_cfs_share() for example.}(hjaBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubjM)}(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.}(hjpBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubjM)}(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.chMhjAubjM)}(h,true if the load decayed or we removed load.h]h,true if the load decayed or we removed load.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#attach_entity_load_avg (C function)c.attach_entity_load_avghNtauh1hhj$hhhNhNubh)}(hhh](h)}(hLvoid attach_entity_load_avg (struct cfs_rq *cfs_rq, struct sched_entity *se)h]h)}(hKvoid attach_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se)h](j)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBhhhjBhMubh)}(hattach_entity_load_avgh]j)}(hattach_entity_load_avgh]hattach_entity_load_avg}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhjBhhhjBhMubj4)}(h0(struct cfs_rq *cfs_rq, struct sched_entity *se)h](j:)}(hstruct cfs_rq *cfs_rqh](j?)}(hjBh]hstruct}(hjChhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjBubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubh)}(hhh]j)}(hcfs_rqh]hcfs_rq}(hj!ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#CmodnameN classnameNjwjz)}j}]j)}jsjBsbc.attach_entity_load_avgasbuh1hhjBubjQ)}(h h]h }(hjAChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]h*}(hjOChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hcfs_rqh]hcfs_rq}(hj\ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubj:)}(hstruct sched_entity *seh](j?)}(hjBh]hstruct}(hjuChhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjqCubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqCubh)}(hhh]j)}(h sched_entityh]h sched_entity}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCmodnameN classnameNjwjz)}j}]j=Cc.attach_entity_load_avgasbuh1hhjqCubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqCubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqCubj)}(hseh]hse}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubeh}(h]h ]h"]h$]h&]jjuh1j3hjBhhhjBhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjBhhhjBhMubah}(h]jBah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBhMhjBhhubj4)}(hhh]jM)}(h)attach this entity to its cfs_rq load avgh]h)attach this entity to its cfs_rq load avg}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjChhubah}(h]h ]h"]h$]h&]uh1j3hjBhhhjBhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjDjHjDjIjJjKuh1hhhhj$hNhNubj)}(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)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjDubj)}(hhh](j)}(h.``struct cfs_rq *cfs_rq`` cfs_rq to attach to h](j)}(h``struct cfs_rq *cfs_rq``h]jS)}(hj7Dh]hstruct cfs_rq *cfs_rq}(hj9DhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5Dubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhj1Dubj)}(hhh]jM)}(hcfs_rq to attach toh]hcfs_rq to attach to}(hjPDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLDhMhjMDubah}(h]h ]h"]h$]h&]uh1jhj1Dubeh}(h]h ]h"]h$]h&]uh1jhjLDhMhj.Dubj)}(h3``struct sched_entity *se`` sched_entity to attach h](j)}(h``struct sched_entity *se``h]jS)}(hjpDh]hstruct sched_entity *se}(hjrDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnDubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjjDubj)}(hhh]jM)}(hsched_entity to attachh]hsched_entity to attach}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhj.Dubeh}(h]h ]h"]h$]h&]uh1jhjDubjM)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjDubjM)}(hlMust call update_cfs_rq_load_avg() before this, since we rely on cfs_rq->avg.last_update_time being current.h]hlMust call update_cfs_rq_load_avg() before this, since we rely on cfs_rq->avg.last_update_time being current.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#detach_entity_load_avg (C function)c.detach_entity_load_avghNtauh1hhj$hhhNhNubh)}(hhh](h)}(hLvoid detach_entity_load_avg (struct cfs_rq *cfs_rq, struct sched_entity *se)h]h)}(hKvoid detach_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se)h](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMNubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhjDhMNubh)}(hdetach_entity_load_avgh]j)}(hdetach_entity_load_avgh]hdetach_entity_load_avg}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhhjDhMNubj4)}(h0(struct cfs_rq *cfs_rq, struct sched_entity *se)h](j:)}(hstruct cfs_rq *cfs_rqh](j?)}(hjBh]hstruct}(hj-EhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj)EubjQ)}(h h]h }(hj:EhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)Eubh)}(hhh]j)}(hcfs_rqh]hcfs_rq}(hjKEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjMEmodnameN classnameNjwjz)}j}]j)}jsjEsbc.detach_entity_load_avgasbuh1hhj)EubjQ)}(h h]h }(hjkEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)Eubj)}(hjh]h*}(hjyEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Eubj)}(hcfs_rqh]hcfs_rq}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Eubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%Eubj:)}(hstruct sched_entity *seh](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 sched_entityh]h sched_entity}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]jgEc.detach_entity_load_avgasbuh1hhjEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hseh]hse}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%Eubeh}(h]h ]h"]h$]h&]jjuh1j3hjDhhhjDhMNubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjDhhhjDhMNubah}(h]jDah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjDhMNhjDhhubj4)}(hhh]jM)}(h+detach this entity from its cfs_rq load avgh]h+detach this entity from its cfs_rq load avg}(hj FhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMNhjFhhubah}(h]h ]h"]h$]h&]uh1j3hjDhhhjDhMNubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj8FjHj8FjIjJjKuh1hhhhj$hNhNubj)}(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)}(hjBFh]h Parameters}(hjDFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Fubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMRhjavg.last_update_time being current.h]hlMust call update_cfs_rq_load_avg() before this, since we rely on cfs_rq->avg.last_update_time being current.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMQhjhjGubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubh)}(hhh]j)}(h task_structh]h task_struct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGmodnameN classnameNjwjz)}j}]j)}jsjYGsb c.cpu_utilasbuh1hhjGubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hjh]hp}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjkGubj:)}(h int dst_cpuh](j)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjQ)}(h h]h }(hj'HhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj)}(hdst_cpuh]hdst_cpu}(hj5HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjkGubj:)}(h int boosth](j)}(hinth]hint}(hjNHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJHubjQ)}(h h]h }(hj\HhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJHubj)}(hboosth]hboost}(hjjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjkGubeh}(h]h ]h"]h$]h&]jjuh1j3hjGhhhj(GhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjGhhhj(GhM ubah}(h]j Gah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj(GhM hjGhhubj4)}(hhh]jM)}(h7Estimates the amount of CPU capacity used by CFS tasks.h]h7Estimates the amount of CPU capacity used by CFS tasks.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM hjHhhubah}(h]h ]h"]h$]h&]uh1j3hjGhhhj(GhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjHjHjHjIjJjKuh1hhhhj$hNhNubj)}(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)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM hjHubj)}(hhh](j)}(h/``int cpu`` the CPU to get the utilization for h](j)}(h ``int cpu``h]jS)}(hjHh]hint cpu}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM hjHubj)}(hhh]jM)}(h"the CPU to get the utilization forh]h"the CPU to get the utilization for}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhM hjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhM hjHubj)}(hY``struct task_struct *p`` task for which the CPU utilization should be predicted or NULL h](j)}(h``struct task_struct *p``h]jS)}(hjIh]hstruct task_struct *p}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj Iubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM hjIubj)}(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'IhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#IhM hj$Iubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhj#IhM hjHubj)}(hW``int dst_cpu`` CPU **p** migrates to, -1 if **p** moves from **cpu** or **p** == NULL h](j)}(h``int dst_cpu``h]jS)}(hjGIh]h int dst_cpu}(hjIIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEIubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM hjAIubj)}(hhh]jM)}(hFCPU **p** migrates to, -1 if **p** moves from **cpu** or **p** == NULLh](hCPU }(hj`IhhhNhNubj)}(h**p**h]hp}(hjhIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Iubh migrates to, -1 if }(hj`IhhhNhNubj)}(h**p**h]hp}(hjzIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Iubh moves from }(hj`IhhhNhNubj)}(h**cpu**h]hcpu}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Iubh or }(hj`IhhhNhNubj)}(h**p**h]hp}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Iubh == NULL}(hj`IhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhj\IhM hj]Iubah}(h]h ]h"]h$]h&]uh1jhjAIubeh}(h]h ]h"]h$]h&]uh1jhj\IhM hjHubj)}(h0``int boost`` 1 to enable boosting, otherwise 0 h](j)}(h ``int boost``h]jS)}(hjIh]h int boost}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM hjIubj)}(hhh]jM)}(h!1 to enable boosting, otherwise 0h]h!1 to enable boosting, otherwise 0}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM hjHubeh}(h]h ]h"]h$]h&]uh1jhjHubjM)}(h**Description**h]j)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM" hjHubjM)}(hThe unit of the return value must be the same as the one of CPU capacity so that CPU utilization can be compared with CPU capacity.h]hThe unit of the return value must be the same as the one of CPU capacity so that CPU utilization can be compared with CPU capacity.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM! hjHubjM)}(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(JhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM$ hjHubjM)}(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.}(hj7JhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM* hjHubjM)}(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().}(hjFJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM1 hjHubjM)}(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).}(hjUJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM7 hjHubjM)}(h **Return**h]j)}(hjfJh]hReturn}(hjhJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdJubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMA hjHubjM)}(h8(Boosted) (estimated) utilization for the specified CPU.h]h8(Boosted) (estimated) utilization for the specified CPU.}(hj|JhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMB hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sched_use_asym_prio (C function)c.sched_use_asym_priohNtauh1hhj$hhhNhNubh)}(hhh](h)}(h;bool sched_use_asym_prio (struct sched_domain *sd, int cpu)h]h)}(h:bool sched_use_asym_prio(struct sched_domain *sd, int cpu)h](j)}(hjh]hbool}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM=)ubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhjJhM=)ubh)}(hsched_use_asym_prioh]j)}(hsched_use_asym_prioh]hsched_use_asym_prio}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhjJhM=)ubj4)}(h"(struct sched_domain *sd, int cpu)h](j:)}(hstruct sched_domain *sdh](j?)}(hjBh]hstruct}(hjJhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjJubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubh)}(hhh]j)}(h sched_domainh]h sched_domain}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjKmodnameN classnameNjwjz)}j}]j)}jsjJsbc.sched_use_asym_prioasbuh1hhjJubjQ)}(h h]h }(hj%KhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hjh]h*}(hj3KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hsdh]hsd}(hj@KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJubj:)}(hint cpuh](j)}(hinth]hint}(hjYKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUKubjQ)}(h h]h }(hjgKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUKubj)}(hcpuh]hcpu}(hjuKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUKubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJubeh}(h]h ]h"]h$]h&]jjuh1j3hjJhhhjJhM=)ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjJhhhjJhM=)ubah}(h]jJah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjJhM=)hjJhhubj4)}(hhh]jM)}(h0Check whether asym_packing priority must be usedh]h0Check whether asym_packing priority must be used}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM=)hjKhhubah}(h]h ]h"]h$]h&]uh1j3hjJhhhjJhM=)ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjKjHjKjIjJjKuh1hhhhj$hNhNubj)}(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)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMA)hjKubj)}(hhh](j)}(hH``struct sched_domain *sd`` The scheduling domain of the load balancing h](j)}(h``struct sched_domain *sd``h]jS)}(hjKh]hstruct sched_domain *sd}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM>)hjKubj)}(hhh]jM)}(h+The scheduling domain of the load balancingh]h+The scheduling domain of the load balancing}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhM>)hjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhM>)hjKubj)}(h``int cpu`` A CPU h](j)}(h ``int cpu``h]jS)}(hjLh]hint cpu}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM?)hjLubj)}(hhh]jM)}(hA CPUh]hA CPU}(hj2LhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj.LhM?)hj/Lubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhj.LhM?)hjKubeh}(h]h ]h"]h$]h&]uh1jhjKubjM)}(h**Description**h]j)}(hjTLh]h Description}(hjVLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRLubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMA)hjKubjM)}(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 }(hjjLhhhNhNubj)}(h**cpu**h]hcpu}(hjrLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjLubh: is idle. Only use CPU priority if the whole core is idle.}(hjjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM@)hjKubjM)}(h **Return**h]j)}(hjLh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMD)hjKubjM)}(hBTrue if the priority of **cpu** must be followed. False otherwise.h](hTrue if the priority of }(hjLhhhNhNubj)}(h**cpu**h]hcpu}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh# must be followed. False otherwise.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chME)hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsched_group_asym (C function)c.sched_group_asymhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h^bool sched_group_asym (struct lb_env *env, struct sg_lb_stats *sgs, struct sched_group *group)h]h)}(h]bool sched_group_asym(struct lb_env *env, struct sg_lb_stats *sgs, struct sched_group *group)h](j)}(hjh]hbool}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM])ubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLhhhjLhM])ubh)}(hsched_group_asymh]j)}(hsched_group_asymh]hsched_group_asym}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](jjeh"]h$]h&]jjuh1hhjLhhhjLhM])ubj4)}(hH(struct lb_env *env, struct sg_lb_stats *sgs, struct sched_group *group)h](j:)}(hstruct lb_env *envh](j?)}(hjBh]hstruct}(hj MhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjMubjQ)}(h h]h }(hj-MhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubh)}(hhh]j)}(hlb_envh]hlb_env}(hj>MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Mubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj@MmodnameN classnameNjwjz)}j}]j)}jsjMsbc.sched_group_asymasbuh1hhjMubjQ)}(h h]h }(hj^MhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj)}(hjh]h*}(hjlMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(henvh]henv}(hjyMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubj:)}(hstruct sg_lb_stats *sgsh](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 sg_lb_statsh]h sg_lb_stats}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjMmodnameN classnameNjwjz)}j}]jZMc.sched_group_asymasbuh1hhjMubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hsgsh]hsgs}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubj:)}(hstruct sched_group *grouph](j?)}(hjBh]hstruct}(hjNhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjMubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubh)}(hhh]j)}(h sched_grouph]h sched_group}(hj NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj"NmodnameN classnameNjwjz)}j}]jZMc.sched_group_asymasbuh1hhjMubjQ)}(h h]h }(hj>NhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj)}(hjh]h*}(hjLNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hgrouph]hgroup}(hjYNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubeh}(h]h ]h"]h$]h&]jjuh1j3hjLhhhjLhM])ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjLhhhjLhM])ubah}(h]jLah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjLhM])hjLhhubj4)}(hhh]jM)}(h8Check if the destination CPU can do asym_packing balanceh]h8Check if the destination CPU can do asym_packing balance}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM])hjNhhubah}(h]h ]h"]h$]h&]uh1j3hjLhhhjLhM])ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjNjHjNjIjJjKuh1hhhhj$hNhNubj)}(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)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMa)hjNubj)}(hhh](j)}(h6``struct lb_env *env`` The load balancing environment h](j)}(h``struct lb_env *env``h]jS)}(hjNh]hstruct lb_env *env}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM^)hjNubj)}(hhh]jM)}(hThe load balancing environmenth]hThe load balancing environment}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhM^)hjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhM^)hjNubj)}(hU``struct sg_lb_stats *sgs`` Load-balancing statistics of the candidate busiest group h](j)}(h``struct sg_lb_stats *sgs``h]jS)}(hjNh]hstruct sg_lb_stats *sgs}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM_)hjNubj)}(hhh]jM)}(h8Load-balancing statistics of the candidate busiest grouph]h8Load-balancing statistics of the candidate busiest group}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhM_)hjOubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjOhM_)hjNubj)}(h:``struct sched_group *group`` The candidate busiest group h](j)}(h``struct sched_group *group``h]jS)}(hj6Oh]hstruct sched_group *group}(hj8OhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4Oubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM`)hj0Oubj)}(hhh]jM)}(hThe candidate busiest grouph]hThe candidate busiest group}(hjOOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKOhM`)hjLOubah}(h]h ]h"]h$]h&]uh1jhj0Oubeh}(h]h ]h"]h$]h&]uh1jhjKOhM`)hjNubeh}(h]h ]h"]h$]h&]uh1jhjNubjM)}(h**Description**h]j)}(hjqOh]h Description}(hjsOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoOubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMb)hjNubjM)}(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}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubhR::dst_cpu can do asym_packing if it has higher priority than the preferred CPU of }(hjOhhhNhNubj)}(h **group**h]hgroup}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMa)hjNubjM)}(h **Return**h]j)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMd)hjNubjM)}(hPtrue if **env**::dst_cpu can do with asym_packing load balance. False otherwise.h](htrue if }(hjOhhhNhNubj)}(h**env**h]henv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubhA::dst_cpu can do with asym_packing load balance. False otherwise.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMe)hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hupdate_sg_lb_stats (C function)c.update_sg_lb_statshNtauh1hhj$hhhNhNubh)}(hhh](h)}(hvoid update_sg_lb_stats (struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *group, struct sg_lb_stats *sgs, bool *sg_overloaded)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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj PhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj PhhhjPhM)ubh)}(hupdate_sg_lb_statsh]j)}(hupdate_sg_lb_statsh]hupdate_sg_lb_stats}(hj0PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Pubah}(h]h ](jjeh"]h$]h&]jjuh1hhj PhhhjPhM)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}(hjLPhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjHPubjQ)}(h h]h }(hjYPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHPubh)}(hhh]j)}(hlb_envh]hlb_env}(hjjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjlPmodnameN classnameNjwjz)}j}]j)}jsj2Psbc.update_sg_lb_statsasbuh1hhjHPubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHPubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHPubj)}(henvh]henv}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDPubj:)}(hstruct sd_lb_stats *sdsh](j?)}(hjBh]hstruct}(hjPhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjPubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubh)}(hhh]j)}(h sd_lb_statsh]h sd_lb_stats}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjPmodnameN classnameNjwjz)}j}]jPc.update_sg_lb_statsasbuh1hhjPubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hsdsh]hsds}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDPubj:)}(hstruct sched_group *grouph](j?)}(hjBh]hstruct}(hj.QhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj*QubjQ)}(h h]h }(hj;QhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*Qubh)}(hhh]j)}(h sched_grouph]h sched_group}(hjLQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIQubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNQmodnameN classnameNjwjz)}j}]jPc.update_sg_lb_statsasbuh1hhj*QubjQ)}(h h]h }(hjjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*Qubj)}(hjh]h*}(hjxQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*Qubj)}(hgrouph]hgroup}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*Qubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDPubj:)}(hstruct sg_lb_stats *sgsh](j?)}(hjBh]hstruct}(hjQhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjQubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubh)}(hhh]j)}(h sg_lb_statsh]h sg_lb_stats}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjQmodnameN classnameNjwjz)}j}]jPc.update_sg_lb_statsasbuh1hhjQubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hsgsh]hsgs}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDPubj:)}(hbool *sg_overloadedh](j)}(hjh]hbool}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj RubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Rubj)}(hjh]h*}(hj)RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Rubj)}(h sg_overloadedh]h sg_overloaded}(hj6RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Rubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDPubeh}(h]h ]h"]h$]h&]jjuh1j3hj PhhhjPhM)ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjPhhhjPhM)ubah}(h]jPah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPhM)hjPhhubj4)}(hhh]jM)}(h3Update sched_group's statistics for load balancing.h]h5Update sched_group’s statistics for load balancing.}(hj`RhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)hj]Rhhubah}(h]h ]h"]h$]h&]uh1j3hjPhhhjPhM)ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjxRjHjxRjIjJjKuh1hhhhj$hNhNubj)}(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)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)hj|Rubj)}(hhh](j)}(h7``struct lb_env *env`` The load balancing environment. h](j)}(h``struct lb_env *env``h]jS)}(hjRh]hstruct lb_env *env}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)hjRubj)}(hhh]jM)}(hThe load balancing environment.h]hThe load balancing environment.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhM)hjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhM)hjRubj)}(hT``struct sd_lb_stats *sds`` Load-balancing data with statistics of the local group. h](j)}(h``struct sd_lb_stats *sds``h]jS)}(hjRh]hstruct sd_lb_stats *sds}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)hjRubj)}(hhh]jM)}(h7Load-balancing data with statistics of the local group.h]h7Load-balancing data with statistics of the local group.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhM)hjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhM)hjRubj)}(hN``struct sched_group *group`` sched_group whose statistics are to be updated. h](j)}(h``struct sched_group *group``h]jS)}(hjSh]hstruct sched_group *group}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)hj Subj)}(hhh]jM)}(h/sched_group whose statistics are to be updated.h]h/sched_group whose statistics are to be updated.}(hj,ShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(ShM)hj)Subah}(h]h ]h"]h$]h&]uh1jhj Subeh}(h]h ]h"]h$]h&]uh1jhj(ShM)hjRubj)}(hL``struct sg_lb_stats *sgs`` variable to hold the statistics for this group. h](j)}(h``struct sg_lb_stats *sgs``h]jS)}(hjLSh]hstruct sg_lb_stats *sgs}(hjNShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)hjFSubj)}(hhh]jM)}(h/variable to hold the statistics for this group.h]h/variable to hold the statistics for this group.}(hjeShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjaShM)hjbSubah}(h]h ]h"]h$]h&]uh1jhjFSubeh}(h]h ]h"]h$]h&]uh1jhjaShM)hjRubj)}(h1``bool *sg_overloaded`` sched_group is overloadedh](j)}(h``bool *sg_overloaded``h]jS)}(hjSh]hbool *sg_overloaded}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)hjSubj)}(hhh]jM)}(hsched_group is overloadedh]hsched_group is overloaded}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM)hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShM)hjRubeh}(h]h ]h"]h$]h&]uh1jhj|Rubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#update_sd_pick_busiest (C function)c.update_sd_pick_busiesthNtauh1hhj$hhhNhNubh)}(hhh](h)}(hzbool update_sd_pick_busiest (struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *sg, struct sg_lb_stats *sgs)h]h)}(hybool update_sd_pick_busiest(struct lb_env *env, struct sd_lb_stats *sds, struct sched_group *sg, struct sg_lb_stats *sgs)h](j)}(hjh]hbool}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"*ubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjShhhjShM"*ubh)}(hupdate_sd_pick_busiesth]j)}(hupdate_sd_pick_busiesth]hupdate_sd_pick_busiest}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1hhjShhhjShM"*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}(hjThhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjTubjQ)}(h h]h }(hj(ThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubh)}(hhh]j)}(hlb_envh]hlb_env}(hj9ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Tubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;TmodnameN classnameNjwjz)}j}]j)}jsjTsbc.update_sd_pick_busiestasbuh1hhjTubjQ)}(h h]h }(hjYThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hjh]h*}(hjgThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(henvh]henv}(hjtThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjTubj:)}(hstruct sd_lb_stats *sdsh](j?)}(hjBh]hstruct}(hjThhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjTubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubh)}(hhh]j)}(h sd_lb_statsh]h sd_lb_stats}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjTmodnameN classnameNjwjz)}j}]jUTc.update_sd_pick_busiestasbuh1hhjTubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hsdsh]hsds}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjTubj:)}(hstruct sched_group *sgh](j?)}(hjBh]hstruct}(hjThhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjTubjQ)}(h h]h }(hj UhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubh)}(hhh]j)}(h sched_grouph]h sched_group}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]jUTc.update_sd_pick_busiestasbuh1hhjTubjQ)}(h h]h }(hj9UhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj)}(hjh]h*}(hjGUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hsgh]hsg}(hjTUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjTubj:)}(hstruct sg_lb_stats *sgsh](j?)}(hjBh]hstruct}(hjmUhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjiUubjQ)}(h h]h }(hjzUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiUubh)}(hhh]j)}(h sg_lb_statsh]h sg_lb_stats}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]jUTc.update_sd_pick_busiestasbuh1hhjiUubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiUubj)}(hsgsh]hsgs}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjTubeh}(h]h ]h"]h$]h&]jjuh1j3hjShhhjShM"*ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjShhhjShM"*ubah}(h]jSah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjShM"*hjShhubj4)}(hhh]jM)}(hreturn 1 on busiest grouph]hreturn 1 on busiest group}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM"*hjUhhubah}(h]h ]h"]h$]h&]uh1j3hjShhhjShM"*ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVjHjVjIjJjKuh1hhhhj$hNhNubj)}(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)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM&*hj Vubj)}(hhh](j)}(h7``struct lb_env *env`` The load balancing environment. h](j)}(h``struct lb_env *env``h]jS)}(hj/Vh]hstruct lb_env *env}(hj1VhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-Vubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM#*hj)Vubj)}(hhh]jM)}(hThe load balancing environment.h]hThe load balancing environment.}(hjHVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDVhM#*hjEVubah}(h]h ]h"]h$]h&]uh1jhj)Vubeh}(h]h ]h"]h$]h&]uh1jhjDVhM#*hj&Vubj)}(h4``struct sd_lb_stats *sds`` sched_domain statistics h](j)}(h``struct sd_lb_stats *sds``h]jS)}(hjhVh]hstruct sd_lb_stats *sds}(hjjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfVubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM$*hjbVubj)}(hhh]jM)}(hsched_domain statisticsh]hsched_domain statistics}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}VhM$*hj~Vubah}(h]h ]h"]h$]h&]uh1jhjbVubeh}(h]h ]h"]h$]h&]uh1jhj}VhM$*hj&Vubj)}(hU``struct sched_group *sg`` sched_group candidate to be checked for being the busiest h](j)}(h``struct sched_group *sg``h]jS)}(hjVh]hstruct sched_group *sg}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM%*hjVubj)}(hhh]jM)}(h9sched_group candidate to be checked for being the busiesth]h9sched_group candidate to be checked for being the busiest}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhM%*hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM%*hj&Vubj)}(h3``struct sg_lb_stats *sgs`` sched_group statistics h](j)}(h``struct sg_lb_stats *sgs``h]jS)}(hjVh]hstruct sg_lb_stats *sgs}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM&*hjVubj)}(hhh]jM)}(hsched_group statisticsh]hsched_group statistics}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhM&*hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM&*hj&Vubeh}(h]h ]h"]h$]h&]uh1jhj VubjM)}(h**Description**h]j)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM(*hj VubjM)}(hQDetermine if **sg** is a busier group than the previously selected busiest group.h](h Determine if }(hj+WhhhNhNubj)}(h**sg**h]hsg}(hj3WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Wubh> is a busier group than the previously selected busiest group.}(hj+WhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM'*hj VubjM)}(h **Return**h]j)}(hjNWh]hReturn}(hjPWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLWubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM**hj VubjM)}(he``true`` if **sg** is a busier group than the previously selected busiest group. ``false`` otherwise.h](jS)}(h``true``h]htrue}(hjhWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdWubh if }(hjdWhhhNhNubj)}(h**sg**h]hsg}(hjzWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdWubh? is a busier group than the previously selected busiest group. }(hjdWhhhNhNubjS)}(h ``false``h]hfalse}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdWubh otherwise.}(hjdWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM+*hj Vubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hidle_cpu_without (C function)c.idle_cpu_withouthNtauh1hhj$hhhNhNubh)}(hhh](h)}(h5int idle_cpu_without (int cpu, struct task_struct *p)h]h)}(h4int idle_cpu_without(int cpu, struct task_struct *p)h](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*ubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWhhhjWhM*ubh)}(hidle_cpu_withouth]j)}(hidle_cpu_withouth]hidle_cpu_without}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1hhjWhhhjWhM*ubj4)}(h (int cpu, struct task_struct *p)h](j:)}(hint cpuh](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hcpuh]hcpu}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubj:)}(hstruct task_struct *ph](j?)}(hjBh]hstruct}(hj7XhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj3XubjQ)}(h h]h }(hjDXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3Xubh)}(hhh]j)}(h task_structh]h task_struct}(hjUXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWXmodnameN classnameNjwjz)}j}]j)}jsjWsbc.idle_cpu_withoutasbuh1hhj3XubjQ)}(h h]h }(hjuXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3Xubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Xubj)}(hjh]hp}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Xubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubeh}(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)}(h%would a given CPU be idle without p ?h]h%would a given CPU be idle without p ?}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hjXhhubah}(h]h ]h"]h$]h&]uh1j3hjWhhhjWhM*ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjXjHjXjIjJjKuh1hhhhj$hNhNubj)}(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)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hjXubj)}(hhh](j)}(h7``int cpu`` the processor on which idleness is tested. h](j)}(h ``int cpu``h]jS)}(hjXh]hint cpu}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hjXubj)}(hhh]jM)}(h*the processor on which idleness is tested.h]h*the processor on which idleness is tested.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhM*hjYubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjYhM*hjXubj)}(h8``struct task_struct *p`` task which should be ignored. h](j)}(h``struct task_struct *p``h]jS)}(hj3Yh]hstruct task_struct *p}(hj5YhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1Yubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hj-Yubj)}(hhh]jM)}(htask which should be ignored.h]htask which should be ignored.}(hjLYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHYhM*hjIYubah}(h]h ]h"]h$]h&]uh1jhj-Yubeh}(h]h ]h"]h$]h&]uh1jhjHYhM*hjXubeh}(h]h ]h"]h$]h&]uh1jhjXubjM)}(h **Return**h]j)}(hjnYh]hReturn}(hjpYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlYubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hjXubjM)}(h(1 if the CPU would be idle. 0 otherwise.h]h(1 if the CPU would be idle. 0 otherwise.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM*hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hupdate_sd_lb_stats (C function)c.update_sd_lb_statshNtauh1hhj$hhhNhNubh)}(hhh](h)}(hEvoid update_sd_lb_stats (struct lb_env *env, struct sd_lb_stats *sds)h]h)}(hDvoid update_sd_lb_stats(struct lb_env *env, struct sd_lb_stats *sds)h](j)}(hvoidh]hvoid}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMh,ubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYhhhjYhMh,ubh)}(hupdate_sd_lb_statsh]j)}(hupdate_sd_lb_statsh]hupdate_sd_lb_stats}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhjYhhhjYhMh,ubj4)}(h-(struct lb_env *env, struct sd_lb_stats *sds)h](j:)}(hstruct lb_env *envh](j?)}(hjBh]hstruct}(hjYhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjYubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubh)}(hhh]j)}(hlb_envh]hlb_env}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Zubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j)}jsjYsbc.update_sd_lb_statsasbuh1hhjYubjQ)}(h h]h }(hj.ZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hjhj^ZubjQ)}(h h]h }(hjoZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^Zubh)}(hhh]j)}(h sd_lb_statsh]h sd_lb_stats}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Zubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j*Zc.update_sd_lb_statsasbuh1hhj^ZubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^Zubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Zubj)}(hsdsh]hsds}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Zubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubeh}(h]h ]h"]h$]h&]jjuh1j3hjYhhhjYhMh,ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjYhhhjYhMh,ubah}(h]jYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjYhMh,hjYhhubj4)}(hhh]jM)}(h4Update sched_domain's statistics for load balancing.h]h6Update sched_domain’s statistics for load balancing.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMh,hjZhhubah}(h]h ]h"]h$]h&]uh1j3hjYhhhjYhMh,ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjZjHjZjIjJjKuh1hhhhj$hNhNubj)}(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.chMl,hjZubj)}(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.chMi,hj[ubj)}(hhh]jM)}(hThe load balancing environment.h]hThe load balancing environment.}(hj=[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9[hMi,hj:[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj9[hMi,hjbj)}(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.chMk,hjW[ubj)}(hhh]jM)}(h6variable to hold the statistics for this sched_domain.h]h6variable to hold the statistics for this sched_domain.}(hjv[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMj,hjs[ubah}(h]h ]h"]h$]h&]uh1jhjW[ubeh}(h]h ]h"]h$]h&]uh1jhjr[hMk,hjbeh}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h calculate_imbalance (C function)c.calculate_imbalancehNtauh1hhj$hhhNhNubh)}(hhh](h)}(hFvoid calculate_imbalance (struct lb_env *env, struct sd_lb_stats *sds)h]h)}(hEvoid calculate_imbalance(struct lb_env *env, struct sd_lb_stats *sds)h](j)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM,ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhj[hM,ubh)}(hcalculate_imbalanceh]j)}(hcalculate_imbalanceh]hcalculate_imbalance}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[hhhj[hM,ubj4)}(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)}jsj[sbc.calculate_imbalanceasbuh1hhj[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)}(henvh]henv}(hjM\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubj:)}(hstruct sd_lb_stats *sdsh](j?)}(hjBh]hstruct}(hjf\hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjb\ubjQ)}(h h]h }(hjs\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjb\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_imbalanceasbuh1hhjb\ubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjb\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb\ubj)}(hsdsh]hsds}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb\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)}(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.chM,hj\hhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhj[hM,ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj\jHj\jIjJjKuh1hhhhj$hNhNubj)}(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.chM,hj]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.chM,hj"]ubj)}(hhh]jM)}(hload balance environmenth]hload balance environment}(hjA]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_``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)}(hja]h]hstruct sd_lb_stats *sds}(hjc]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)}(hCstatistics of the sched_domain whose imbalance is to be calculated.h]hCstatistics of the sched_domain whose imbalance is to be calculated.}(hjz]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM,hjw]ubah}(h]h ]h"]h$]h&]uh1jhj[]ubeh}(h]h ]h"]h$]h&]uh1jhjv]hM,hj]ubeh}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)sched_balance_find_src_group (C function)c.sched_balance_find_src_grouphNtauh1hhj$hhhNhNubh)}(hhh](h)}(hFstruct sched_group * sched_balance_find_src_group (struct lb_env *env)h]h)}(hDstruct sched_group *sched_balance_find_src_group(struct lb_env *env)h](j?)}(hjBh]hstruct}(hj]hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj]hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMt-ubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]hhhj]hMt-ubh)}(hhh]j)}(h sched_grouph]h sched_group}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj]modnameN classnameNjwjz)}j}]j)}jssched_balance_find_src_groupsbc.sched_balance_find_src_groupasbuh1hhj]hhhj]hMt-ubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]hhhj]hMt-ubj)}(hjh]h*}(hj ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhj]hMt-ubh)}(hsched_balance_find_src_grouph]j)}(hj]h]hsched_balance_find_src_group}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj]hhhj]hMt-ubj4)}(h(struct lb_env *env)h]j:)}(hstruct lb_env *envh](j?)}(hjBh]hstruct}(hj5^hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj1^ubjQ)}(h h]h }(hjB^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1^ubh)}(hhh]j)}(hlb_envh]hlb_env}(hjS^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjU^modnameN classnameNjwjz)}j}]j]c.sched_balance_find_src_groupasbuh1hhj1^ubjQ)}(h h]h }(hjq^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1^ubj)}(henvh]henv}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1^ubeh}(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)}(hKReturns the busiest group within the sched_domain if there is an imbalance.h]hKReturns the busiest group within the sched_domain if there is an imbalance.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMt-hj^hhubah}(h]h ]h"]h$]h&]uh1j3hj]hhhj]hMt-ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj^jHj^jIjJjKuh1hhhhj$hNhNubj)}(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)}(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.chMx-hj^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.chMv-hj^ubj)}(hhh]jM)}(hThe load balancing environment.h]hThe load balancing environment.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj _hMv-hj _ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj _hMv-hj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubjM)}(h**Description**h]j)}(hj2_h]h Description}(hj4_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0_ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMx-hj^ubjM)}(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.}(hjH_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMw-hj^ubjM)}(h **Return**h]j)}(hjY_h]hReturn}(hj[_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW_ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chMz-hj^ubh bullet_list)}(hhh]j)}(h&The busiest group if imbalance exists.h]jM)}(hjv_h]h&The busiest group if imbalance exists.}(hjx_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:30: ./kernel/sched/fair.chM{-hjt_ubah}(h]h ]h"]h$]h&]uh1jhjq_ubah}(h]h ]h"]h$]h&]bullet-uh1jo_hj_hM{-hj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hDECLARE_COMPLETION (C macro)c.DECLARE_COMPLETIONhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hDECLARE_COMPLETIONh]h)}(hDECLARE_COMPLETIONh]h)}(hDECLARE_COMPLETIONh]j)}(hj_h]hDECLARE_COMPLETION}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj_hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK-ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_hhhj_hK-ubah}(h]j_ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj_hK-hj_hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj_hhhj_hK-ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj_jHj_jIjJjKuh1hhhhj$hNhNubjM)}(h``DECLARE_COMPLETION (work)``h]jS)}(hj_h]hDECLARE_COMPLETION (work)}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK/hj$hhubji)}(h.declare and initialize a completion structure h]jM)}(h-declare and initialize a completion structureh]h-declare and initialize a completion structure}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK-hj`ubah}(h]h ]h"]h$]h&]uh1jhhj`hK-hj$hhubj)}(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)}(hj`h]h Parameters}(hj!`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK1hj`ubj)}(hhh]j)}(h1``work`` identifier for the completion structure h](j)}(h``work``h]jS)}(hj>`h]hwork}(hj@`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<`ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK.hj8`ubj)}(hhh]jM)}(h'identifier for the completion structureh]h'identifier for the completion structure}(hjW`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjS`hK.hjT`ubah}(h]h ]h"]h$]h&]uh1jhj8`ubeh}(h]h ]h"]h$]h&]uh1jhjS`hK.hj5`ubah}(h]h ]h"]h$]h&]uh1jhj`ubjM)}(h**Description**h]j)}(hjy`h]h Description}(hj{`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw`ubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK0hj`ubjM)}(hThis macro declares and initializes a completion structure. Generally used for static declarations. You should use the _ONSTACK variant for automatic variables.h]hThis macro declares and initializes a completion structure. Generally used for static declarations. You should use the _ONSTACK variant for automatic variables.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK/hj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$DECLARE_COMPLETION_ONSTACK (C macro)c.DECLARE_COMPLETION_ONSTACKhNtauh1hhj$hhhNhNubh)}(hhh](h)}(hDECLARE_COMPLETION_ONSTACKh]h)}(hDECLARE_COMPLETION_ONSTACKh]h)}(hDECLARE_COMPLETION_ONSTACKh]j)}(hj`h]hDECLARE_COMPLETION_ONSTACK}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj`hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK=ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj`hhhj`hK=ubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj`hK=hj`hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj`hhhj`hK=ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj`jHj`jIjJjKuh1hhhhj$hNhNubjM)}(h%``DECLARE_COMPLETION_ONSTACK (work)``h]jS)}(hj`h]h!DECLARE_COMPLETION_ONSTACK (work)}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK?hj$hhubji)}(h.declare and initialize a completion structure h]jM)}(h-declare and initialize a completion structureh]h-declare and initialize a completion structure}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK=hj aubah}(h]h ]h"]h$]h&]uh1jhhjahK=hj$hhubj)}(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)}(hj)ah]h Parameters}(hj+ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'aubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKAhj#aubj)}(hhh]j)}(h1``work`` identifier for the completion structure h](j)}(h``work``h]jS)}(hjHah]hwork}(hjJahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFaubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK>hjBaubj)}(hhh]jM)}(h'identifier for the completion structureh]h'identifier for the completion structure}(hjaahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]ahK>hj^aubah}(h]h ]h"]h$]h&]uh1jhjBaubeh}(h]h ]h"]h$]h&]uh1jhj]ahK>hj?aubah}(h]h ]h"]h$]h&]uh1jhj#aubjM)}(h**Description**h]j)}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK@hj#aubjM)}(hOThis macro declares and initializes a completion structure on the kernel stack.h]hOThis macro declares and initializes a completion structure on the kernel stack.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK?hj#aubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinit_completion (C function)c.init_completionhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h+void init_completion (struct completion *x)h]h)}(h*void init_completion(struct completion *x)h](j)}(hvoidh]hvoid}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKNubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjahKNubh)}(hinit_completionh]j)}(hinit_completionh]hinit_completion}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhjahKNubj4)}(h(struct completion *x)h]j:)}(hstruct completion *xh](j?)}(hjBh]hstruct}(hjbhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjbubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubh)}(hhh]j)}(h completionh]h completion}(hj#bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj bubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%bmodnameN classnameNjwjz)}j}]j)}jsjasbc.init_completionasbuh1hhjbubjQ)}(h h]h }(hjCbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubj)}(hjh]h*}(hjQbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hxh]hx}(hj^bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjaubah}(h]h ]h"]h$]h&]jjuh1j3hjahhhjahKNubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjahhhjahKNubah}(h]jaah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjahKNhjahhubj4)}(hhh]jM)}(h-Initialize a dynamically allocated completionh]h-Initialize a dynamically allocated completion}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKNhjbhhubah}(h]h ]h"]h$]h&]uh1j3hjahhhjahKNubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbjHjbjIjJjKuh1hhhhj$hNhNubj)}(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)}(hjbh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKRhjbubj)}(hhh]j)}(hS``struct completion *x`` pointer to completion structure that is to be initialized h](j)}(h``struct completion *x``h]jS)}(hjbh]hstruct completion *x}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKOhjbubj)}(hhh]jM)}(h9pointer to completion structure that is to be initializedh]h9pointer to completion structure that is to be initialized}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhKOhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhKOhjbubah}(h]h ]h"]h$]h&]uh1jhjbubjM)}(h**Description**h]j)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKQhjbubjM)}(hPThis inline function will initialize a dynamically created completion structure.h]hPThis inline function will initialize a dynamically created completion structure.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhKPhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hreinit_completion (C function)c.reinit_completionhNtauh1hhj$hhhNhNubh)}(hhh](h)}(h-void reinit_completion (struct completion *x)h]h)}(h,void reinit_completion(struct completion *x)h](j)}(hvoidh]hvoid}(hjIchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEchhh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK[ubjQ)}(h h]h }(hjXchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEchhhjWchK[ubh)}(hreinit_completionh]j)}(hreinit_completionh]hreinit_completion}(hjjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfcubah}(h]h ](jjeh"]h$]h&]jjuh1hhjEchhhjWchK[ubj4)}(h(struct completion *x)h]j:)}(hstruct completion *xh](j?)}(hjBh]hstruct}(hjchhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjcubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubh)}(hhh]j)}(h completionh]h completion}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]j)}jsjlcsbc.reinit_completionasbuh1hhjcubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hj`bh]hx}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~cubah}(h]h ]h"]h$]h&]jjuh1j3hjEchhhjWchK[ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjAchhhjWchK[ubah}(h]jchhubj4)}(hhh]jM)}(h#reinitialize a completion structureh]h#reinitialize a completion structure}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK[hjdhhubah}(h]h ]h"]h$]h&]uh1j3hj>chhhjWchK[ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj djHj djIjJjKuh1hhhhj$hNhNubj)}(hX**Parameters** ``struct completion *x`` pointer to completion structure that is to be reinitialized **Description** This inline function should be used to reinitialize a completion structure so it can be reused. This is especially important after complete_all() is used.h](jM)}(h**Parameters**h]j)}(hj*dh]h Parameters}(hj,dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(dubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK_hj$dubj)}(hhh]j)}(hU``struct completion *x`` pointer to completion structure that is to be reinitialized h](j)}(h``struct completion *x``h]jS)}(hjIdh]hstruct completion *x}(hjKdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGdubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK\hjCdubj)}(hhh]jM)}(h;pointer to completion structure that is to be reinitializedh]h;pointer to completion structure that is to be reinitialized}(hjbdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^dhK\hj_dubah}(h]h ]h"]h$]h&]uh1jhjCdubeh}(h]h ]h"]h$]h&]uh1jhj^dhK\hj@dubah}(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&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK^hj$dubjM)}(hThis inline function should be used to reinitialize a completion structure so it can be reused. This is especially important after complete_all() is used.h]hThis inline function should be used to reinitialize a completion structure so it can be reused. This is especially important after complete_all() is used.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh\/var/lib/git/docbuild/linux/Documentation/driver-api/basics:33: ./include/linux/completion.hhK]hj$dubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubeh}(h] delaying-and-scheduling-routinesah ]h"] delaying and scheduling routinesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hTime and timer routinesh]hTime and timer routines}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhhhhhK%ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hget_jiffies_64 (C function)c.get_jiffies_64hNtauh1hhjdhhhNhNubh)}(hhh](h)}(hu64 get_jiffies_64 (void)h]h)}(hu64 get_jiffies_64(void)h](h)}(hhh]j)}(hu64h]hu64}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}jsget_jiffies_64sbc.get_jiffies_64asbuh1hhjdhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKXubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhjehKXubh)}(hget_jiffies_64h]j)}(hjeh]hget_jiffies_64}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1hhjdhhhjehKXubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj4ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0eubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj,eubah}(h]h ]h"]h$]h&]jjuh1j3hjdhhhjehKXubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjdhhhjehKXubah}(h]jdah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjehKXhjdhhubj4)}(hhh]jM)}(h+read the 64-bit non-atomic jiffies_64 valueh]h+read the 64-bit non-atomic jiffies_64 value}(hj^ehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKXhj[ehhubah}(h]h ]h"]h$]h&]uh1j3hjdhhhjehKXubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjvejHjvejIjJjKuh1hhhhjdhNhNubj)}(h**Parameters** ``void`` no arguments **Description** When BITS_PER_LONG < 64, this uses sequence number sampling using jiffies_lock to protect the 64-bit read. **Return** current 64-bit jiffies valueh](jM)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~eubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK\hjzeubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjeh]hvoid}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjeubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehKhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehKhjeubah}(h]h ]h"]h$]h&]uh1jhjzeubjM)}(h**Description**h]j)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjzeubjM)}(hjWhen BITS_PER_LONG < 64, this uses sequence number sampling using jiffies_lock to protect the 64-bit read.h]hjWhen BITS_PER_LONG < 64, this uses sequence number sampling using jiffies_lock to protect the 64-bit read.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKYhjzeubjM)}(h **Return**h]j)}(hjfh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK\hjzeubjM)}(hcurrent 64-bit jiffies valueh]hcurrent 64-bit jiffies value}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhK]hjzeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htime_after (C macro) c.time_afterhNtauh1hhjdhhhNhNubh)}(hhh](h)}(h time_afterh]h)}(h time_afterh]h)}(h time_afterh]j)}(hj@fh]h time_after}(hjJfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFfubah}(h]h ](jjeh"]h$]h&]jjuh1hhjBfhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKqubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>fhhhj]fhKqubah}(h]j9fah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj]fhKqhj;fhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj;fhhhj]fhKqubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjvfjHjvfjIjJjKuh1hhhhjdhNhNubjM)}(h``time_after (a, b)``h]jS)}(hj|fh]htime_after (a, b)}(hj~fhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzfubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKshjdhhubji)}(h,returns true if the time a is after time b. h]jM)}(h+returns true if the time a is after time b.h]h+returns true if the time a is after time b.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKqhjfubah}(h]h ]h"]h$]h&]uh1jhhjfhKqhjdhhubj)}(hXo**Parameters** ``a`` first comparable as unsigned long ``b`` second comparable as unsigned long **Description** Do this with "<0" and ">=0" to only test the sign of the result. A good compiler would generate better code (and a really good compiler wouldn't care). Gcc is currently neither. **Return** ``true`` is time a is after time b, otherwise ``false``.h](jM)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKuhjfubj)}(hhh](j)}(h(``a`` first comparable as unsigned long h](j)}(h``a``h]jS)}(hjfh]ha}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKrhjfubj)}(hhh]jM)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjfhKrhjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhKrhjfubj)}(h)``b`` second comparable as unsigned long h](j)}(h``b``h]jS)}(hj gh]hb}(hj ghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKshjgubj)}(hhh]jM)}(h"second comparable as unsigned longh]h"second comparable as unsigned long}(hj"ghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghKshjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghKshjfubeh}(h]h ]h"]h$]h&]uh1jhjfubjM)}(h**Description**h]j)}(hjDgh]h Description}(hjFghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBgubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKuhjfubjM)}(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.}(hjZghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKthjfubjM)}(h **Return**h]j)}(hjkgh]hReturn}(hjmghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjigubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKxhjfubjM)}(h8``true`` is time a is after time b, otherwise ``false``.h](jS)}(h``true``h]htrue}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubh& is time a is after time b, otherwise }(hjghhhNhNubjS)}(h ``false``h]hfalse}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubh.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKyhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htime_before (C macro) c.time_beforehNtauh1hhjdhhhNhNubh)}(hhh](h)}(h time_beforeh]h)}(h time_beforeh]h)}(h time_beforeh]j)}(hjgh]h time_before}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1hhjghhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjghhhjghKubah}(h]jgah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjghKhjghhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjghhhjghKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhjdhNhNubjM)}(h``time_before (a, b)``h]jS)}(hjhh]htime_before (a, b)}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjdhhubji)}(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.}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjhubah}(h]h ]h"]h$]h&]uh1jhhj.hhKhjdhhubj)}(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)}(hj;hh]h Parameters}(hj=hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9hubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj5hubj)}(hhh](j)}(h(``a`` first comparable as unsigned long h](j)}(h``a``h]jS)}(hjZhh]ha}(hj\hhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjThubj)}(hhh]jM)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hjshhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohhKhjphubah}(h]h ]h"]h$]h&]uh1jhjThubeh}(h]h ]h"]h$]h&]uh1jhjohhKhjQhubj)}(h)``b`` second comparable as unsigned long h](j)}(h``b``h]jS)}(hjhh]hb}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjhubj)}(hhh]jM)}(h"second comparable as unsigned longh]h"second comparable as unsigned long}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhKhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhKhjQhubeh}(h]h ]h"]h$]h&]uh1jhj5hubjM)}(h **Return**h]j)}(hjhh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj5hubjM)}(h9``true`` is time a is before time b, otherwise ``false``.h](jS)}(h``true``h]htrue}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubh' is time a is before time b, otherwise }(hjhhhhNhNubjS)}(h ``false``h]hfalse}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubh.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhj5hubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htime_after_eq (C macro)c.time_after_eqhNtauh1hhjdhhhNhNubh)}(hhh](h)}(h time_after_eqh]h)}(h time_after_eqh]h)}(h time_after_eqh]j)}(hj-ih]h time_after_eq}(hj7ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3iubah}(h]h ](jjeh"]h$]h&]jjuh1hhj/ihhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj+ihhhjJihKubah}(h]j&iah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjJihKhj(ihhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj(ihhhjJihKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjcijHjcijIjJjKuh1hhhhjdhNhNubjM)}(h``time_after_eq (a, b)``h]jS)}(hjiih]htime_after_eq (a, b)}(hjkihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgiubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjdhhubji)}(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.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjiubah}(h]h ]h"]h$]h&]uh1jhhjihKhjdhhubj)}(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)}(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.hhKhjiubj)}(hhh](j)}(h(``a`` first comparable as unsigned long h](j)}(h``a``h]jS)}(hjih]ha}(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.hhKhjiubj)}(hhh]jM)}(h!first comparable as unsigned longh]h!first comparable as unsigned long}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihKhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihKhjiubj)}(h)``b`` second comparable as unsigned long h](j)}(h``b``h]jS)}(hjih]hb}(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.hhKhjiubj)}(hhh]jM)}(h"second comparable as unsigned longh]h"second comparable as unsigned long}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj jhKhj jubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhj jhKhjiubeh}(h]h ]h"]h$]h&]uh1jhjiubjM)}(h **Return**h]j)}(hj1jh]hReturn}(hj3jhhhNhNubah}(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.hhKhjiubjM)}(hG``true`` is time a is after or the same as time b, otherwise ``false``.h](jS)}(h``true``h]htrue}(hjKjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGjubh5 is time a is after or the same as time b, otherwise }(hjGjhhhNhNubjS)}(h ``false``h]hfalse}(hj]jhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGjubh.}(hjGjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htime_before_eq (C macro)c.time_before_eqhNtauh1hhjdhhhNhNubh)}(hhh](h)}(htime_before_eqh]h)}(htime_before_eqh]h)}(htime_before_eqh]j)}(hjjh]htime_before_eq}(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.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjjhhhjjhKubah}(h]jjah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjjhKhjjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjjhhhjjhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjjHjjjIjJjKuh1hhhhjdhNhNubjM)}(h``time_before_eq (a, b)``h]jS)}(hjjh]htime_before_eq (a, b)}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhKhjdhhubji)}(hyhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj>yhhhj`yhM ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjyyjHjyyjIjJjKuh1hhhhjdhNhNubjM)}(h``time_is_after_jiffies (a)``h]jS)}(hjyh]htime_is_after_jiffies (a)}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}yubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjdhhubji)}(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}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hjyubah}(h]h ]h"]h$]h&]uh1jhhjyhM hjdhhubj)}(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)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjyubj)}(hhh]j)}(h1``a`` time (unsigned long) to compare to jiffies h](j)}(h``a``h]jS)}(hjyh]ha}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hjyubj)}(hhh]jM)}(h*time (unsigned long) to compare to jiffiesh]h*time (unsigned long) to compare to jiffies}(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 **Return**h]j)}(hjzh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj zubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjyubjM)}(h9``true`` is time a is after jiffies, otherwise ``false``.h](jS)}(h``true``h]htrue}(hj(zhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$zubh' is time a is after jiffies, otherwise }(hj$zhhhNhNubjS)}(h ``false``h]hfalse}(hj:zhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$zubh.}(hj$zhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!time_is_after_jiffies64 (C macro)c.time_is_after_jiffies64hNtauh1hhjdhhhNhNubh)}(hhh](h)}(htime_is_after_jiffies64h]h)}(htime_is_after_jiffies64h]h)}(htime_is_after_jiffies64h]j)}(hjmzh]htime_is_after_jiffies64}(hjwzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjszubah}(h]h ](jjeh"]h$]h&]jjuh1hhjozhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkzhhhjzhMubah}(h]jfzah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjzhMhjhzhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhzhhhjzhMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjzjHjzjIjJjKuh1hhhhjdhNhNubjM)}(h``time_is_after_jiffies64 (a)``h]jS)}(hjzh]htime_is_after_jiffies64 (a)}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjdhhubji)}(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}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjzubah}(h]h ]h"]h$]h&]uh1jhhjzhMhjdhhubj)}(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)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjzubj)}(hhh]j)}(h,``a`` time (__u64) to compare to jiffies_64 h](j)}(h``a``h]jS)}(hjzh]ha}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjzubj)}(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&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubjM)}(h **Return**h]j)}(hj8{h]hReturn}(hj:{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6{ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjzubjM)}(h<``true`` is time a is after jiffies_64, otherwise ``false``.h](jS)}(h``true``h]htrue}(hjR{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjN{ubh* is time a is after jiffies_64, otherwise }(hjN{hhhNhNubjS)}(h ``false``h]hfalse}(hjd{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjN{ubh.}(hjN{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#time_is_before_eq_jiffies (C macro)c.time_is_before_eq_jiffieshNtauh1hhjdhhhNhNubh)}(hhh](h)}(htime_is_before_eq_jiffiesh]h)}(htime_is_before_eq_jiffiesh]h)}(htime_is_before_eq_jiffiesh]j)}(hj{h]htime_is_before_eq_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.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{jIjJjKuh1hhhhjdhNhNubjM)}(h!``time_is_before_eq_jiffies (a)``h]jS)}(hj{h]htime_is_before_eq_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.hhMhjdhhubji)}(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{hMhjdhhubj)}(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)}(hjb|h]hReturn}(hjd|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&]uh1jRhjx|ubh7 is time a is before or the same as jiffies, otherwise }(hjx|hhhNhNubjS)}(h ``false``h]hfalse}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjx|ubh.}(hjx|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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%time_is_before_eq_jiffies64 (C macro)c.time_is_before_eq_jiffies64hNtauh1hhjdhhhNhNubh)}(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}(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|jIjJjKuh1hhhhjdhNhNubjM)}(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$hjdhhubji)}(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"hjdhhubj)}(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)}(hj2}h]h Parameters}(hj4}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0}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)}(hjQ}h]ha}(hjS}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjO}ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM#hjK}ubj)}(hhh]jM)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hjj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjf}hM#hjg}ubah}(h]h ]h"]h$]h&]uh1jhjK}ubeh}(h]h ]h"]h$]h&]uh1jhjf}hM#hjH}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.hhM%hj,}ubjM)}(hI``true`` is time a is before or the same jiffies_64, 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 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.hhM%hj,}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"time_is_after_eq_jiffies (C macro)c.time_is_after_eq_jiffieshNtauh1hhjdhhhNhNubh)}(hhh](h)}(htime_is_after_eq_jiffiesh]h)}(htime_is_after_eq_jiffiesh]h)}(htime_is_after_eq_jiffiesh]j)}(hj}h]htime_is_after_eq_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!~jIjJjKuh1hhhhjdhNhNubjM)}(h ``time_is_after_eq_jiffies (a)``h]jS)}(hj'~h]htime_is_after_eq_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.hhM,hjdhhubji)}(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}(hjA~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&]uh1jhhjO~hM*hjdhhubj)}(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)}(hj\~h]h Parameters}(hj^~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ~ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM.hjV~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&]uh1jRhjy~ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM+hju~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&]uh1jhju~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM+hjr~ubah}(h]h ]h"]h$]h&]uh1jhjV~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.hhM-hjV~ubjM)}(hH``true`` is time a is after or the same as jiffies, otherwise ``false``.h](jS)}(h``true``h]htrue}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubh6 is time a is after 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.hhM-hjV~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$time_is_after_eq_jiffies64 (C macro)c.time_is_after_eq_jiffies64hNtauh1hhjdhhhNhNubh)}(hhh](h)}(htime_is_after_eq_jiffies64h]h)}(htime_is_after_eq_jiffies64h]h)}(htime_is_after_eq_jiffies64h]j)}(hjh]htime_is_after_eq_jiffies64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM1ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj2hM1ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hM1hjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhj2hM1ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjKjHjKjIjJjKuh1hhhhjdhNhNubjM)}(h"``time_is_after_eq_jiffies64 (a)``h]jS)}(hjQh]htime_is_after_eq_jiffies64 (a)}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM3hjdhhubji)}(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}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM1hjgubah}(h]h ]h"]h$]h&]uh1jhhjyhM1hjdhhubj)}(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)}(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:39: ./include/linux/jiffies.hhM5hjubj)}(hhh]j)}(h,``a`` time (__u64) to compare to jiffies_64 h](j)}(h``a``h]jS)}(hjh]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM2hjubj)}(hhh]jM)}(h%time (__u64) to compare to jiffies_64h]h%time (__u64) to compare to jiffies_64}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM4hjubjM)}(hK``true`` is time a is after or the same as jiffies_64, otherwise ``false``.h](jS)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh9 is time a is after or the same as jiffies_64, otherwise }(hjhhhNhNubjS)}(h ``false``h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM4hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies_to_msecs (C function)c.jiffies_to_msecshNtauh1hhjdhhhNhNubh)}(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}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAhhhjShMubj)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhjShMubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAhhhjShMubh)}(hjiffies_to_msecsh]j)}(hjiffies_to_msecsh]hjiffies_to_msecs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjAhhhjShMubj4)}(h(const unsigned long j)h]j:)}(hconst unsigned long jh](j?)}(hjP*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 }(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)}(hjh]hj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjAhhhjShMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj=hhhjShMubah}(h]j8ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjShMhj:hhubj4)}(hhh]jM)}(hConvert jiffies to millisecondsh]hConvert jiffies to milliseconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj:hhhjShMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhjdhNhNubj)}(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)}(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.hhMhj7ubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]jS)}(hj\h]hconst unsigned long j}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjVubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjSubah}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj7ubjM)}(h7This inline version takes care of HZ in {100,250,1000}.h]h7This inline version takes care of HZ in {100,250,1000}.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj7ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj7ubjM)}(hmilliseconds valueh]hmilliseconds value}(hjԁhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies_to_usecs (C function)c.jiffies_to_usecshNtauh1hhjdhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hjiffies_to_usecsh]j)}(hjiffies_to_usecsh]hjiffies_to_usecs}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(const unsigned long j)h]j:)}(hconst unsigned long jh](j?)}(hjP*h]hconst}(hj\hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjXubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(hunsignedh]hunsigned}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(hjh]hj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjTubah}(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 jiffies to microsecondsh]hConvert jiffies to microseconds}(hj؂hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjՂhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(hY**Parameters** ``const unsigned long j`` jiffies value **Return** microseconds valueh](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:39: ./include/linux/jiffies.hhMhjubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]jS)}(hjh]hconst unsigned long j}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(hj2hhhNhNubah}(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)}(hjTh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubjM)}(hmicroseconds valueh]hmicroseconds value}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies_to_nsecs (C function)c.jiffies_to_nsecshNtauh1hhjdhhhNhNubh)}(hhh](h)}(h,u64 jiffies_to_nsecs (const unsigned long j)h]h)}(h+u64 jiffies_to_nsecs(const unsigned long j)h](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjiffies_to_nsecssbc.jiffies_to_nsecsasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hjiffies_to_nsecsh]j)}(hjh]hjiffies_to_nsecs}(hjЃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̃ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(const unsigned long j)h]j:)}(hconst unsigned long jh](j?)}(hjP*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}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]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)}(hConvert jiffies to nanosecondsh]hConvert jiffies to nanoseconds}(hjghhhNhNubah}(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&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(hX**Parameters** ``const unsigned long j`` jiffies value **Return** nanoseconds valueh](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:39: ./include/linux/jiffies.hhMhjubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]jS)}(hjh]hconst unsigned long j}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubj)}(hhh]jM)}(h jiffies valueh]h jiffies 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&]uh1jhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubjM)}(hnanoseconds valueh]hnanoseconds value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmsecs_to_jiffies (C function)c.msecs_to_jiffieshNtauh1hhjdhhhNhNubh)}(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}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$hhhj6hM ubj)}(hlongh]hlong}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj6hM ubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$hhhj6hM ubh)}(hmsecs_to_jiffiesh]j)}(hmsecs_to_jiffiesh]hmsecs_to_jiffies}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1hhj$hhhj6hM ubj4)}(h(const unsigned int m)h]j:)}(hconst unsigned int mh](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(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 }(hjƅhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hmh]hm}(hjԅhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubah}(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]jp_)}(hhh]j)}(hconvert milliseconds to jiffiesh]jM)}(hjh]hconvert milliseconds to jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]j_j_uh1jo_hjhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj6hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj(jHj(jIjJjKuh1hhhhjdhNhNubj)}(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)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj,ubj)}(hhh]j)}(h.``const unsigned int m`` time in milliseconds h](j)}(h``const unsigned int m``h]jS)}(hjQh]hconst unsigned int m}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM hjKubj)}(hhh]jM)}(htime in millisecondsh]htime in milliseconds}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjfhM hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhM hjHubah}(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:39: ./include/linux/jiffies.hhMhj,ubjM)}(hconversion is done as follows:h]hconversion is done as follows:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj,ubjp_)}(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)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj͆ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j_j_uh1jo_hjƆhMhj,ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMhj,ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM#hj,ubjM)}(h jiffies valueh]h jiffies value}(hj,hhhNhNubah}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsecs_to_jiffies (C macro)c.secs_to_jiffieshNtauh1hhjdhhhNhNubh)}(hhh](h)}(hsecs_to_jiffiesh]h)}(hsecs_to_jiffiesh]h)}(hsecs_to_jiffiesh]j)}(hjUh]hsecs_to_jiffies}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjWhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM2ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjShhhjrhM2ubah}(h]jNah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhM2hjPhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjPhhhjrhM2ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubjM)}(h``secs_to_jiffies (_secs)``h]jS)}(hjh]hsecs_to_jiffies (_secs)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM4hjdhhubji)}(h- convert seconds to jiffies h]jp_)}(hhh]j)}(hconvert seconds to jiffies h]jM)}(hconvert seconds to jiffiesh]hconvert seconds to jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]j_j_uh1jo_hjhM2hjubah}(h]h ]h"]h$]h&]uh1jhhjhM2hjdhhubj)}(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)}(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.hhM6hjӇubj)}(hhh]j)}(h``_secs`` time in seconds h](j)}(h ``_secs``h]jS)}(hjh]h_secs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM3hjubj)}(hhh]jM)}(htime in secondsh]htime in seconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM3hjubah}(h]h ]h"]h$]h&]uh1jhjӇubjM)}(h**Description**h]j)}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM5hjӇubjM)}(h3Conversion is done by simple multiplication with HZh]h3Conversion is done by simple multiplication with HZ}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM4hjӇubjM)}(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.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM6hjӇubjM)}(h **Return**h]j)}(hjih]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhM9hjӇubjM)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](husecs_to_jiffies (C function)c.usecs_to_jiffieshNtauh1hhjdhhhNhNubh)}(hhh](h)}(h5unsigned long usecs_to_jiffies (const unsigned int u)h]h)}(h4unsigned long usecs_to_jiffies(const unsigned int u)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMMubj)}(hlongh]hlong}(hjˈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMMubjQ)}(h h]h }(hjوhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMMubh)}(husecs_to_jiffiesh]j)}(husecs_to_jiffiesh]husecs_to_jiffies}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMMubj4)}(h(const unsigned int u)h]j:)}(hconst unsigned int uh](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hunsignedh]hunsigned}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(huh]hu}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMMhjhhubj4)}(hhh]jp_)}(hhh]j)}(hconvert microseconds to jiffiesh]jM)}(hjh]hconvert microseconds to jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubah}(h]h ]h"]h$]h&]j_j_uh1jo_hjhMMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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:39: ./include/linux/jiffies.hhMQhjubj)}(hhh]j)}(h.``const unsigned int u`` time in microseconds h](j)}(h``const unsigned int u``h]jS)}(hj׉h]hconst unsigned int u}(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.hhMNhjщubj)}(hhh]jM)}(htime in microsecondsh]htime in microseconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjщubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjΉ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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMPhjubjM)}(hconversion is done as follows:h]hconversion is done as follows:}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMOhjubjp_)}(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.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMQhj:ubah}(h]h ]h"]h$]h&]uh1jhj7ubj)}(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.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMThjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]j_j_uh1jo_hjLhMQhjubjM)}(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.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMXhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMahjubjM)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:39: ./include/linux/jiffies.hhMbhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies_to_msecs (C function)c.jiffies_to_msecshNtauh1hhjdhhhNhNubh)}(hhh](h)}(h5unsigned int jiffies_to_msecs (const unsigned long j)h]h)}(h4unsigned int jiffies_to_msecs(const unsigned long j)h](j)}(hunsignedh]hunsigned}(hjȊhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĊhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMrubjQ)}(h h]h }(hj׊hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjĊhhhj֊hMrubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĊhhhj֊hMrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjĊhhhj֊hMrubh)}(hjiffies_to_msecsh]j)}(hjiffies_to_msecsh]hjiffies_to_msecs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjĊhhhj֊hMrubj4)}(h(const unsigned long j)h]j:)}(hconst unsigned long jh](j?)}(hjP*h]hconst}(hj!hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hunsignedh]hunsigned}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hj}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjĊhhhj֊hMrubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj֊hMrubah}(h]h ](j+j,eh"]h$]h&]j0j1)j2huh1hhj֊hMrhjhhubj4)}(hhh]jM)}(hConvert jiffies to millisecondsh]hConvert jiffies to milliseconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMrhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj֊hMrubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(hY**Parameters** ``const unsigned long j`` jiffies 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.chMvhjubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]jS)}(hjދh]hconst unsigned long j}(hjhhhNhNubah}(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.chMshj؋ubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMshjubah}(h]h ]h"]h$]h&]uh1jhj؋ubeh}(h]h ]h"]h$]h&]uh1jhjhMshjՋubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **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.chMuhjubjM)}(hmilliseconds valueh]hmilliseconds value}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMuhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies_to_usecs (C function)c.jiffies_to_usecshNtauh1hhjdhhhNhNubh)}(hhh](h)}(h5unsigned int jiffies_to_usecs (const unsigned long j)h]h)}(h4unsigned int jiffies_to_usecs(const unsigned long j)h](j)}(hunsignedh]hunsigned}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZhhhjlhMubj)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjlhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZhhhjlhMubh)}(hjiffies_to_usecsh]j)}(hjiffies_to_usecsh]hjiffies_to_usecs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjZhhhjlhMubj4)}(h(const unsigned long j)h]j:)}(hconst unsigned long jh](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjČhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hunsignedh]hunsigned}(hjҌhhhNhNubah}(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)}(hjh]hj}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjZhhhjlhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjVhhhjlhMubah}(h]h ](j+j,eh"]h$]h&]j0j1)j2huh1hhjlhMhjShhubj4)}(hhh]jM)}(hConvert jiffies to microsecondsh]hConvert jiffies to microseconds}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj0hhubah}(h]h ]h"]h$]h&]uh1j3hjShhhjlhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjKjHjKjIjJjKuh1hhhhjdhNhNubj)}(hY**Parameters** ``const unsigned long j`` jiffies value **Return** microseconds valueh](jM)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjOubj)}(hhh]j)}(h(``const unsigned long j`` jiffies value h](j)}(h``const unsigned long j``h]jS)}(hjth]hconst unsigned long j}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjnubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(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 **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.chMhjOubjM)}(hmicroseconds valueh]hmicroseconds value}(hjōhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmktime64 (C function) c.mktime64hNtauh1hhjdhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsmktime64sb c.mktime64asbuh1hhjhhhT/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)}(hmktime64h]j)}(hjh]hmktime64}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(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?)}(hjP*h]hconst}(hjFhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjBubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hunsignedh]hunsigned}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hyear0h]hyear0}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hconst unsigned int mon0h](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hunsignedh]hunsigned}(hj͎hhhNhNubah}(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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmon0h]hmon0}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hconst unsigned int dayh](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hunsignedh]hunsigned}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hdayh]hday}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hconst unsigned int hourh](j?)}(hjP*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)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjϏhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hhourh]hhour}(hjݏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hconst unsigned int minh](j?)}(hjP*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)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hminh]hmin}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hconst unsigned int sech](j?)}(hjP*h]hconst}(hjbhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj^ubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(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)}(hsech]hsec}(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)}(hConverts date to seconds.h]hConverts date to seconds.}(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&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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 unsigned int year0`` year to convert h](j)}(h``const unsigned int year0``h]jS)}(hj h]hconst unsigned int year0}(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)}(hyear to converth]hyear to convert}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjubj)}(h-``const unsigned int mon0`` month to convert h](j)}(h``const unsigned int mon0``h]jS)}(hjYh]hconst unsigned int mon0}(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)}(hmonth to converth]hmonth to convert}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjubj)}(h*``const unsigned int day`` day to convert h](j)}(h``const unsigned int day``h]jS)}(hjh]hconst unsigned int day}(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)}(hday to converth]hday to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h,``const unsigned int hour`` hour to convert h](j)}(h``const unsigned int hour``h]jS)}(hjˑh]hconst unsigned int hour}(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)}(hhour to converth]hhour to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjőubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``const unsigned int min`` minute to convert h](j)}(h``const unsigned int min``h]jS)}(hjh]hconst unsigned int min}(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)}(hminute to converth]hminute to convert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``const unsigned int sec`` second to convert h](j)}(h``const unsigned int sec``h]jS)}(hj=h]hconst unsigned int sec}(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.chMhj7ubj)}(hhh]jM)}(hsecond to converth]hsecond to convert}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjubeh}(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&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(hConverts Gregorian date to seconds since 1970-01-01 00:00:00. Assumes input in normal date format, i.e. 1980-12-31 23:59:59 => year=1980, mon=12, day=31, hour=23, min=59, sec=59.h]hConverts Gregorian date to seconds since 1970-01-01 00:00:00. Assumes input in normal date format, i.e. 1980-12-31 23:59:59 => year=1980, mon=12, day=31, hour=23, min=59, sec=59.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(h[For the Julian calendar (which was used in Russia before 1917, Britain & colonies before 1752, anywhere else before 1582, and is still in use by some communities) leave out the -year/100+year/400 terms, and add 10.]h]h[For the Julian calendar (which was used in Russia before 1917, Britain & colonies before 1752, anywhere else before 1582, and is still in use by some communities) leave out the -year/100+year/400 terms, and add 10.]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(h6This algorithm was first published by Gauss (I think).h]h6This algorithm was first published by Gauss (I think).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(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.}(hjʒhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(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)}(h5seconds since the epoch time for the given input dateh]h5seconds since the epoch time for the given input date}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&set_normalized_timespec64 (C function)c.set_normalized_timespec64hNtauh1hhjdhhhNhNubh)}(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}(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 }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj.hMubh)}(hset_normalized_timespec64h]j)}(hset_normalized_timespec64h]hset_normalized_timespec64}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj.hMubj4)}(h/(struct timespec64 *ts, time64_t sec, s64 nsec)h](j:)}(hstruct timespec64 *tsh](j?)}(hjBh]hstruct}(hj]hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjYubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubh)}(hhh]j)}(h timespec64h]h timespec64}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}modnameN classnameNjwjz)}j}]j)}jsjCsbc.set_normalized_timespec64asbuh1hhjYubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(htsh]hts}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubj:)}(h time64_t sech](h)}(hhh]j)}(htime64_th]htime64_t}(hjғhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϓubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjԓmodnameN classnameNjwjz)}j}]jc.set_normalized_timespec64asbuh1hhj˓ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj˓ubj)}(hsech]hsec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˓ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubj:)}(hs64 nsech](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.set_normalized_timespec64asbuh1hhjubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnsech]hnsec}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj.hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj.hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj.hMhjhhubj4)}(hhh]jM)}(h-set timespec sec and nsec parts and normalizeh]h-set timespec sec and nsec parts and normalize}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjmhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj.hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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)}(hA``struct timespec64 *ts`` pointer to timespec variable to be set 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)}(h&pointer to timespec variable to be seth]h&pointer to timespec variable to be set}(hjʔhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjƔhMhjǔubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƔhMhjubj)}(h ``time64_t sec`` seconds to set h](j)}(h``time64_t sec``h]jS)}(hjh]h time64_t sec}(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)}(hseconds to seth]hseconds to set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``s64 nsec`` nanoseconds to set h](j)}(h ``s64 nsec``h]jS)}(hj#h]hs64 nsec}(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.chMhjubj)}(hhh]jM)}(hnanoseconds to seth]hnanoseconds to set}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjubeh}(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.chMhjubjM)}(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}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(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.chMhjubjM)}(hThe tv_nsec part is always in the range of 0 <= tv_nsec < NSEC_PER_SEC. For negative values only the tv_sec field is negative !h]hThe tv_nsec part is always in the range of 0 <= tv_nsec < NSEC_PER_SEC. For negative values only the tv_sec field is negative !}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hns_to_timespec64 (C function)c.ns_to_timespec64hNtauh1hhjdhhhNhNubh)}(hhh](h)}(h-struct timespec64 ns_to_timespec64 (s64 nsec)h]h)}(h,struct timespec64 ns_to_timespec64(s64 nsec)h](j?)}(hjBh]hstruct}(hjʕhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjƕhhhT/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&]uh1jPhjƕhhhjוhMubh)}(hhh]j)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsns_to_timespec64sbc.ns_to_timespec64asbuh1hhjƕhhhjוhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjƕhhhjוhMubh)}(hns_to_timespec64h]j)}(hjh]hns_to_timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjƕhhhjוhMubj4)}(h (s64 nsec)h]j:)}(hs64 nsech](h)}(hhh]j)}(hs64h]hs64}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<modnameN classnameNjwjz)}j}]jc.ns_to_timespec64asbuh1hhj3ubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hnsech]hnsec}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(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]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjוhMhjhhubj4)}(hhh]jM)}(h!Convert nanoseconds to timespec64h]h!Convert nanoseconds to timespec64}(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&]uh1j3hjhhhjוhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(h**Parameters** ``s64 nsec`` the nanoseconds value to be converted **Return** the timespec64 representation of the nsec parameter.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)}(h3``s64 nsec`` the nanoseconds value to be converted h](j)}(h ``s64 nsec``h]jS)}(hjіh]hs64 nsec}(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%the nanoseconds value to be convertedh]h%the nanoseconds value to be converted}(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 **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)}(h4the timespec64 representation of the nsec parameter.h]h4the timespec64 representation of the nsec parameter.}(hj"hhhNhNubah}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__msecs_to_jiffies (C function)c.__msecs_to_jiffieshNtauh1hhjdhhhNhNubh)}(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}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhT/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&]uh1jPhjMhhhj_hMubj)}(hlongh]hlong}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhj_hMubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMhhhj_hMubh)}(h__msecs_to_jiffiesh]j)}(h__msecs_to_jiffiesh]h__msecs_to_jiffies}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjMhhhj_hMubj4)}(h(const unsigned int m)h]j:)}(hconst unsigned int mh](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hunsignedh]hunsigned}(hjŗhhhNhNubah}(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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjօh]hm}(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]jp_)}(hhh]j)}(hconvert milliseconds to jiffiesh]jM)}(hj+h]hconvert milliseconds to jiffies}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj)ubah}(h]h ]h"]h$]h&]uh1jhj&hhhj:hNubah}(h]h ]h"]h$]h&]j_j_uh1jo_hj:hMhj#hhubah}(h]h ]h"]h$]h&]uh1j3hjFhhhj_hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjPjHjPjIjJjKuh1hhhhjdhNhNubj)}(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)}(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.chM!hjTubj)}(hhh]j)}(h.``const unsigned int m`` time in milliseconds h](j)}(h``const unsigned int m``h]jS)}(hjyh]hconst unsigned int m}(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)}(htime in millisecondsh]htime in milliseconds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubah}(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&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjTubjM)}(hconversion is done as follows:h]hconversion is done as follows:}(hjʘhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjTubjp_)}(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)}(hjhhhNhNubah}(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٘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.}(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&]uh1jhj٘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()}(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&]uh1jhj٘ubeh}(h]h ]h"]h$]h&]j_j_uh1jo_hjhM!hjTubjM)}(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+hjTubjM)}(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.chM3hjTubjM)}(h jiffies valueh]h jiffies value}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM4hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__usecs_to_jiffies (C function)c.__usecs_to_jiffieshNtauh1hhjdhhhNhNubh)}(hhh](h)}(h7unsigned long __usecs_to_jiffies (const unsigned int u)h]h)}(h6unsigned long __usecs_to_jiffies(const unsigned int u)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMBubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMBubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMBubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMBubh)}(h__usecs_to_jiffiesh]j)}(h__usecs_to_jiffiesh]h__usecs_to_jiffies}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMBubj4)}(h(const unsigned int u)h]j:)}(hconst unsigned int uh](j?)}(hjP*h]hconst}(hjܙhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjؙubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjؙubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(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 }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjؙubj)}(hj\h]hu}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؙubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjԙubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMBubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj{hhhjhMBubah}(h]jvah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMBhjxhhubj4)}(hhh]jp_)}(hhh]j)}(hconvert microseconds to jiffiesh]jM)}(hj]h]hconvert microseconds to jiffies}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMBhj[ubah}(h]h ]h"]h$]h&]uh1jhjXhhhjlhNubah}(h]h ]h"]h$]h&]j_j_uh1jo_hjlhMBhjUhhubah}(h]h ]h"]h$]h&]uh1j3hjxhhhjhMBubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(hZ**Parameters** ``const unsigned int u`` time in milliseconds **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.chMFhjubj)}(hhh]j)}(h.``const unsigned int u`` time in milliseconds h](j)}(h``const unsigned int u``h]jS)}(hjh]hconst unsigned int u}(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.chMChjubj)}(hhh]jM)}(htime in millisecondsh]htime in milliseconds}(hjĚhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(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.chMEhjubjM)}(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.chMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"timespec64_to_jiffies (C function)c.timespec64_to_jiffieshNtauh1hhjdhhhNhNubh)}(hhh](h)}(hDunsigned long timespec64_to_jiffies (const struct timespec64 *value)h]h)}(hCunsigned long timespec64_to_jiffies(const struct timespec64 *value)h](j)}(hunsignedh]hunsigned}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMPubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'hhhj9hMPubj)}(hlongh]hlong}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj9hMPubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'hhhj9hMPubh)}(htimespec64_to_jiffiesh]j)}(htimespec64_to_jiffiesh]htimespec64_to_jiffies}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhj'hhhj9hMPubj4)}(h (const struct timespec64 *value)h]j:)}(hconst struct timespec64 *valueh](j?)}(hjP*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}]j)}jsjjsbc.timespec64_to_jiffiesasbuh1hhjubjQ)}(h h]h }(hjݛhhhNhNubah}(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&]noemphjjuh1j9hj|ubah}(h]h ]h"]h$]h&]jjuh1j3hj'hhhj9hMPubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#hhhj9hMPubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj9hMPhj hhubj4)}(hhh]jM)}(h%convert a timespec64 value to jiffiesh]h%convert a timespec64 value to jiffies}(hj"hhhNhNubah}(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 hhhj9hMPubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:jHj:jIjJjKuh1hhhhjdhNhNubj)}(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)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMThj>ubj)}(hhh]j)}(hW``const struct timespec64 *value`` pointer to :c:type:`struct timespec64 ` h](j)}(h"``const struct timespec64 *value``h]jS)}(hjch]hconst struct timespec64 *value}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMQhj]ubj)}(hhh]jM)}(h3pointer to :c:type:`struct timespec64 `h](h pointer to }(hj|hhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hjh]hstruct timespec64}(hjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj timespec64uh1hhjxhMQhj|ubeh}(h]h ]h"]h$]h&]uh1jLhjxhMQhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMQhjZubah}(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.chMShj>ubjM)}(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.}(hjӜhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMRhj>ubjM)}(h-Rather, we just shift the bits off the right.h]h-Rather, we just shift the bits off the right.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM[hj>ubjM)}(h`The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec value to a scaled second value.h]h`The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec value to a scaled second value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM]hj>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.chM`hj>ubjM)}(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.chMahj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"jiffies_to_timespec64 (C function)c.jiffies_to_timespec64hNtauh1hhjdhhhNhNubh)}(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}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMuubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjChhhjUhMuubh)}(hjiffies_to_timespec64h]j)}(hjiffies_to_timespec64h]hjiffies_to_timespec64}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhjChhhjUhMuubj4)}(h7(const unsigned long jiffies, struct timespec64 *value)h](j:)}(hconst unsigned long jiffiesh](j?)}(hjP*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 }(hjɝhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjiffiesh]hjiffies}(hjםhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubj:)}(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&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjjsbc.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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubeh}(h]h ]h"]h$]h&]jjuh1j3hjChhhjUhMuubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj?hhhjUhMuubah}(h]j:ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjUhMuhj<hhubj4)}(hhh]jM)}(hAconvert jiffies value to :c:type:`struct timespec64 `h](hconvert jiffies value to }(hjshhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hj}h]hstruct timespec64}(hjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhj{ubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]j*c.jiffies_to_timespec64asbj timespec64uh1hhj֊hMrhjsubeh}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMuhjphhubah}(h]h ]h"]h$]h&]uh1j3hj<hhhjUhMuubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(h**Parameters** ``const unsigned long jiffies`` jiffies value ``struct timespec64 *value`` pointer to :c:type:`struct timespec64 `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.chMyhjubj)}(hhh](j)}(h.``const unsigned long jiffies`` jiffies value h](j)}(h``const unsigned long jiffies``h]jS)}(hj؞h]hconst unsigned long jiffies}(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.chMvhjҞubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjҞubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjϞubj)}(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.chMxhj ubj)}(hhh]jM)}(h3pointer to :c:type:`struct timespec64 `h](h pointer to }(hj*hhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hj4h]hstruct timespec64}(hj6hhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj timespec64uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMwhj*ubeh}(h]h ]h"]h$]h&]uh1jLhjQhMwhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMxhjϞubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies_to_clock_t (C function)c.jiffies_to_clock_thNtauh1hhjdhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjiffies_to_clock_tsbc.jiffies_to_clock_tasbuh1hhjhhhT/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_clock_th]j)}(hjh]hjiffies_to_clock_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(unsigned long x)h]j:)}(hunsigned long xh](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)}(hj`bh]hx}(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]j}ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(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&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjUjHjUjIjJjKuh1hhhhjdhNhNubj)}(hn**Parameters** ``unsigned long x`` jiffies value **Return** jiffies converted to clock_t (CLOCKS_PER_SEC)h](jM)}(h**Parameters**h]j)}(hj_h]h Parameters}(hjahhhNhNubah}(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.chMhjYubj)}(hhh]j)}(h"``unsigned long x`` jiffies value h](j)}(h``unsigned long x``h]jS)}(hj~h]hunsigned long x}(hjhhhNhNubah}(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.chMhjxubj)}(hhh]jM)}(h jiffies valueh]h jiffies value}(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 **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.chMhjYubjM)}(h-jiffies converted to clock_t (CLOCKS_PER_SEC)h]h-jiffies converted to clock_t (CLOCKS_PER_SEC)}(hjϠhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hclock_t_to_jiffies (C function)c.clock_t_to_jiffieshNtauh1hhjdhhhNhNubh)}(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 }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hMubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hMubh)}(hclock_t_to_jiffiesh]j)}(hclock_t_to_jiffiesh]hclock_t_to_jiffies}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hMubj4)}(h(unsigned long x)h]j:)}(hunsigned long xh](j)}(hunsignedh]hunsigned}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hlongh]hlong}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hj`bh]hx}(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)}(hConvert clock_t to jiffiesh]hConvert clock_t to jiffies}(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&]uh1j3hjhhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjСjHjСjIjJjKuh1hhhhjdhNhNubj)}(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&]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)}(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&]uh1jhjԡubjM)}(h **Return**h]j)}(hj4h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjԡubjM)}(h"clock_t value converted to jiffiesh]h"clock_t value converted to jiffies}(hjJhhhNhNubah}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"jiffies_64_to_clock_t (C function)c.jiffies_64_to_clock_thNtauh1hhjdhhhNhNubh)}(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}(hjuhhhNhNubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubh)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjiffies_64_to_clock_tsbc.jiffies_64_to_clock_tasbuh1hhjuhhhjhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuhhhjhMubh)}(hjiffies_64_to_clock_th]j)}(hjh]hjiffies_64_to_clock_t}(hj¢hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjuhhhjhMubj4)}(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}]jc.jiffies_64_to_clock_tasbuh1hhj٢ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj٢ubj)}(hj`bh]hx}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj٢ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjբubah}(h]h ]h"]h$]h&]jjuh1j3hjuhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjqhhhjhMubah}(h]jlah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjnhhubj4)}(hhh]jM)}(hConvert jiffies_64 to clock_th]hConvert jiffies_64 to clock_t}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhj2hhubah}(h]h ]h"]h$]h&]uh1j3hjnhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjMjHjMjIjJjKuh1hhhhjdhNhNubj)}(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)}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjQubj)}(hhh]j)}(h``u64 x`` jiffies_64 value h](j)}(h ``u64 x``h]jS)}(hjvh]hu64 x}(hjxhhhNhNubah}(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.chMhjpubj)}(hhh]jM)}(hjiffies_64 valueh]hjiffies_64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubjM)}(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.chMhjQubjM)}(h?jiffies_64 value converted to 64-bit "clock_t" (CLOCKS_PER_SEC)h]hCjiffies_64 value converted to 64-bit “clock_t” (CLOCKS_PER_SEC)}(hjǣhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies64_to_nsecs (C function)c.jiffies64_to_nsecshNtauh1hhjdhhhNhNubh)}(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}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjMmodnameN classnameNjwjz)}j}]jc.jiffies64_to_nsecsasbuh1hhjDubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(hjh]hj}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(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 Convert jiffies64 to nanosecondsh]h Convert jiffies64 to nanoseconds}(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&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(hJ**Parameters** ``u64 j`` jiffies64 value **Return** nanoseconds 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.chMhjubj)}(hhh]j)}(h``u64 j`` jiffies64 value h](j)}(h ``u64 j``h]jS)}(hjh]hu64 j}(hjhhhNhNubah}(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)}(hjiffies64 valueh]hjiffies64 value}(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 **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.chMhjubjM)}(hnanoseconds valueh]hnanoseconds value}(hj2hhhNhNubah}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hjiffies64_to_msecs (C function)c.jiffies64_to_msecshNtauh1hhjdhhhNhNubh)}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjfmodnameN classnameNjwjz)}j}]j)}jsjiffies64_to_msecssbc.jiffies64_to_msecsasbuh1hhj]hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]hhhjhMubh)}(hjiffies64_to_msecsh]j)}(hjh]hjiffies64_to_msecs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj]hhhjhMubj4)}(h (const u64 j)h]j:)}(h const u64 jh](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hu64h]hu64}(hjѥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΥubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjӥmodnameN classnameNjwjz)}j}]jc.jiffies64_to_msecsasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hj}(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'hjYhhhjhMubah}(h]jTah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjVhhubj4)}(hhh]jM)}(h!Convert jiffies64 to millisecondsh]h!Convert jiffies64 to milliseconds}(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&]uh1j3hjVhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj>jHj>jIjJjKuh1hhhhjdhNhNubj)}(hQ**Parameters** ``const u64 j`` jiffies64 value **Return** milliseconds valueh](jM)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjBubj)}(hhh]j)}(h ``const u64 j`` jiffies64 value h](j)}(h``const u64 j``h]jS)}(hjgh]h const u64 j}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjaubj)}(hhh]jM)}(hjiffies64 valueh]hjiffies64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubjM)}(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.chMhjBubjM)}(hmilliseconds valueh]hmilliseconds value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnsecs_to_jiffies64 (C function)c.nsecs_to_jiffies64hNtauh1hhjdhhhNhNubh)}(hhh](h)}(hu64 nsecs_to_jiffies64 (u64 n)h]h)}(hu64 nsecs_to_jiffies64(u64 n)h](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsnsecs_to_jiffies64sbc.nsecs_to_jiffies64asbuh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hM ubh)}(hnsecs_to_jiffies64h]j)}(hjh]hnsecs_to_jiffies64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hM ubj4)}(h(u64 n)h]j:)}(hu64 nh](h)}(hhh]j)}(hu64h]hu64}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]jc.nsecs_to_jiffies64asbuh1hhj5ubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]hn}(hjhhhhNhNubah}(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'hjߦhhhj hM ubah}(h]jڦah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hM hjܦhhubj4)}(hhh]jM)}(h!Convert nsecs in u64 to jiffies64h]h!Convert nsecs in u64 to jiffies64}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjܦhhhj hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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.chM hjubj)}(hhh]j)}(h``u64 n`` nsecs in u64 h](j)}(h ``u64 n``h]jS)}(hjҧh]hu64 n}(hjԧhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjЧubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM hj̧ubj)}(hhh]jM)}(h nsecs in u64h]h nsecs in u64}(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)}(hj h]h Description}(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.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.}(hj#hhhNhNubah}(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)}(hj4h]hnote}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubji)}(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}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjJubah}(h]h ]h"]h$]h&]uh1jhhj\hMhjubjM)}(h **Return**h]j)}(hjeh]hReturn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(h"nsecs converted to jiffies64 valueh]h"nsecs converted to jiffies64 value}(hj{hhhNhNubah}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnsecs_to_jiffies (C function)c.nsecs_to_jiffieshNtauh1hhjdhhhNhNubh)}(hhh](h)}(h&unsigned long nsecs_to_jiffies (u64 n)h]h)}(h%unsigned long nsecs_to_jiffies(u64 n)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]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*ubj)}(hlongh]hlong}(hjǨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM*ubjQ)}(h h]h }(hjըhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM*ubh)}(hnsecs_to_jiffiesh]j)}(hnsecs_to_jiffiesh]hnsecs_to_jiffies}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM*ubj4)}(h(u64 n)h]j:)}(hu64 nh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.nsecs_to_jiffiesasbuh1hhjubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hn}(hj4hhhNhNubah}(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)}(hConvert nsecs in u64 to jiffiesh]hConvert nsecs in u64 to jiffies}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM*hjZhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM*ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjujHjujIjJjKuh1hhhhjdhNhNubj)}(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)}(hjh]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.chM.hjyubj)}(hhh]j)}(h``u64 n`` nsecs in u64 h](j)}(h ``u64 n``h]jS)}(hjh]hu64 n}(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)}(h nsecs in u64h]h nsecs in u64}(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&]uh1jhjyubjM)}(h**Description**h]j)}(hj٩h]h Description}(hj۩hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjשubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM.hjyubjM)}(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-hjyubjM)}(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.chM1hjyubji)}(hqNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years h]jM)}(hpNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 yearsh]hpNSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM2hjubah}(h]h ]h"]h$]h&]uh1jhhj(hM2hjyubjM)}(h **Return**h]j)}(hj1h]hReturn}(hj3hhhNhNubah}(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.chM5hjyubjM)}(h nsecs converted to jiffies valueh]h nsecs converted to jiffies value}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM6hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h timespec64_add_safe (C function)c.timespec64_add_safehNtauh1hhjdhhhNhNubh)}(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}(hjvhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjrhhhT/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&]uh1jPhjrhhhjhM?ubh)}(hhh]j)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jstimespec64_add_safesbc.timespec64_add_safeasbuh1hhjrhhhjhM?ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrhhhjhM?ubh)}(htimespec64_add_safeh]j)}(hjh]htimespec64_add_safe}(hjȪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĪubah}(h]h ](jjeh"]h$]h&]jjuh1hhjrhhhjhM?ubj4)}(h:(const struct timespec64 lhs, const struct timespec64 rhs)h](j:)}(hconst struct timespec64 lhsh](j?)}(hjP*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 }(hj hhhNhNubah}(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}]jc.timespec64_add_safeasbuh1hhjߪubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjߪubj)}(hlhsh]hlhs}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߪubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj۪ubj:)}(hconst struct timespec64 rhsh](j?)}(hjP*h]hconst}(hjahhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj]ubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]ubj?)}(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 timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.timespec64_add_safeasbuh1hhj]ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]ubj)}(hrhsh]hrhs}(hjƫhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj۪ubeh}(h]h ]h"]h$]h&]jjuh1j3hjrhhhjhM?ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjnhhhjhM?ubah}(h]jiah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM?hjkhhubj4)}(hhh]jM)}(h=Add two timespec64 values and do a safety check for overflow.h]h=Add two timespec64 values and do a safety check for overflow.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM?hjhhubah}(h]h ]h"]h$]h&]uh1j3hjkhhhjhM?ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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.chMChj ubj)}(hhh](j)}(h?``const struct timespec64 lhs`` first (left) timespec64 to add h](j)}(h``const struct timespec64 lhs``h]jS)}(hj1h]hconst struct timespec64 lhs}(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.chMAhj+ubj)}(hhh]jM)}(hfirst (left) timespec64 to addh]hfirst (left) timespec64 to add}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMAhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMAhj(ubj)}(hA``const struct timespec64 rhs`` second (right) timespec64 to add h](j)}(h``const struct timespec64 rhs``h]jS)}(hjjh]hconst struct timespec64 rhs}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMBhjdubj)}(hhh]jM)}(h second (right) timespec64 to addh]h second (right) timespec64 to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMBhj(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&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMDhj ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMChj 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.chMFhj ubjM)}(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.chMGhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hget_timespec64 (C function)c.get_timespec64hNtauh1hhjdhhhNhNubh)}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM[ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-hhhj?hM[ubh)}(hget_timespec64h]j)}(hget_timespec64h]hget_timespec64}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1hhj-hhhj?hM[ubj4)}(hC(struct timespec64 *ts, const struct __kernel_timespec __user *uts)h](j:)}(hstruct timespec64 *tsh](j?)}(hjBh]hstruct}(hjnhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjjubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjubh)}(hhh]j)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjTsbc.get_timespec64asbuh1hhjjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(htsh]hts}(hjǭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubj:)}(h*const struct __kernel_timespec __user *utsh](j?)}(hjP*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}]jc.get_timespec64asbuh1hhjܭubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjܭubh__user}(hjܭhhhNhNubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjܭubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܭubj)}(hutsh]huts}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܭubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubeh}(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'get user's time value into kernel spaceh]h)get user’s time value into kernel space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM[hjhhubah}(h]h ]h"]h$]h&]uh1j3hj&hhhj?hM[ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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.chM_hjubj)}(hhh](j)}(hO``struct timespec64 *ts`` destination :c:type:`struct timespec64 ` h](j)}(h``struct timespec64 *ts``h]jS)}(hjϮh]hstruct timespec64 *ts}(hjѮhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjͮubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM\hjɮubj)}(hhh]jM)}(h4destination :c:type:`struct timespec64 `h](h destination }(hjhhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hjh]hstruct timespec64}(hjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj timespec64uh1hhjhM\hjubeh}(h]h ]h"]h$]h&]uh1jLhjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjɮubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjƮubj)}(h{``const struct __kernel_timespec __user *uts`` user's time value as :c:type:`struct __kernel_timespec <__kernel_timespec>` h](j)}(h.``const struct __kernel_timespec __user *uts``h]jS)}(hj'h]h*const struct __kernel_timespec __user *uts}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM]hj!ubj)}(hhh]jM)}(hKuser's time value as :c:type:`struct __kernel_timespec <__kernel_timespec>`h](huser’s time value as }(hj@hhhNhNubh)}(h6:c:type:`struct __kernel_timespec <__kernel_timespec>`h]jS)}(hjJh]hstruct __kernel_timespec}(hjLhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj__kernel_timespecuh1hhj<hM]hj@ubeh}(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&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM_hjubjM)}(hHandles compat or 32-bit modes.h]hHandles compat or 32-bit modes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM^hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM`hjubjM)}(h'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.chMahjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hput_timespec64 (C function)c.put_timespec64hNtauh1hhjdhhhNhNubh)}(hhh](h)}(hVint put_timespec64 (const struct timespec64 *ts, struct __kernel_timespec __user *uts)h]h)}(hUint put_timespec64(const struct timespec64 *ts, struct __kernel_timespec __user *uts)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM{ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM{ubh)}(hput_timespec64h]j)}(hput_timespec64h]hput_timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM{ubj4)}(hC(const struct timespec64 *ts, struct __kernel_timespec __user *uts)h](j:)}(hconst struct timespec64 *tsh](j?)}(hjP*h]hconst}(hj*hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj&ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj?)}(hjBh]hstruct}(hjEhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj&ubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubh)}(hhh]j)}(h timespec64h]h timespec64}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjemodnameN classnameNjwjz)}j}]j)}jsjsbc.put_timespec64asbuh1hhj&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&]noemphjjuh1j9hj"ubj:)}(h$struct __kernel_timespec __user *utsh](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__kernel_timespech]h__kernel_timespec}(hjհhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҰubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjװmodnameN classnameNjwjz)}j}]jc.put_timespec64asbuh1hhjubjQ)}(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)}(hutsh]huts}(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)}(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}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM{hjGhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM{ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbjHjbjIjJjKuh1hhhhjdhNhNubj)}(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)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjfubj)}(hhh](j)}(hO``const struct timespec64 *ts`` input :c:type:`struct timespec64 ` h](j)}(h``const struct timespec64 *ts``h]jS)}(hjh]hconst struct 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.chM}hjubj)}(hhh]jM)}(h.input :c:type:`struct timespec64 `h](hinput }(hjhhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hjh]hstruct timespec64}(hjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj timespec64uh1hhjhM}hjubeh}(h]h ]h"]h$]h&]uh1jLhjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubj)}(hg``struct __kernel_timespec __user *uts`` user's :c:type:`struct __kernel_timespec <__kernel_timespec>` h](j)}(h(``struct __kernel_timespec __user *uts``h]jS)}(hjh]h$struct __kernel_timespec __user *uts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM~hjݱubj)}(hhh]jM)}(h=user's :c:type:`struct __kernel_timespec <__kernel_timespec>`h](h user’s }(hjhhhNhNubh)}(h6:c:type:`struct __kernel_timespec <__kernel_timespec>`h]jS)}(hjh]hstruct __kernel_timespec}(hjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj__kernel_timespecuh1hhjhM~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.chMhjfubjM)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hget_old_timespec32 (C function)c.get_old_timespec32hNtauh1hhjdhhhNhNubh)}(hhh](h)}(hFint get_old_timespec32 (struct timespec64 *ts, const void __user *uts)h]h)}(hEint get_old_timespec32(struct timespec64 *ts, const void __user *uts)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhjhMubh)}(hget_old_timespec32h]j)}(hget_old_timespec32h]hget_old_timespec32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~hhhjhMubj4)}(h/(struct timespec64 *ts, const void __user *uts)h](j:)}(hstruct timespec64 *tsh](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 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_old_timespec32asbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htsh]hts}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst void __user *utsh](j?)}(hjP*h]hconst}(hj1hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj-ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-ubj)}(hvoidh]hvoid}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-ubh__user}(hj-hhhNhNubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-ubj)}(hjh]h*}(hjzhhhNhNubah}(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~hhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjzhhhjhMubah}(h]juah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjwhhubj4)}(hhh]jM)}(h2get user's old-format time value into kernel spaceh]h4get user’s old-format time value into kernel space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjwhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjɳjHjɳjIjJjKuh1hhhhjdhNhNubj)}(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)}(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)}(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 }(hj hhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hjh]hstruct timespec64}(hjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj timespec64uh1hhjhMhj ubeh}(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)}(hjJh]hconst void __user *uts}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjDubj)}(hhh]jM)}(hOuser's old-format time value (:c:type:`struct old_timespec32 `)h](h user’s old-format time value (}(hjchhhNhNubh)}(h0:c:type:`struct old_timespec32 `h]jS)}(hjmh]hstruct old_timespec32}(hjohhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjjold_timespec32uh1hhj_hMhjcubh)}(hjchhhNhNubeh}(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&]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}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hput_old_timespec32 (C function)c.put_old_timespec32hNtauh1hhjdhhhNhNubh)}(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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj"hMubj4)}(h/(const struct timespec64 *ts, void __user *uts)h](j:)}(hconst struct timespec64 *tsh](j?)}(hjP*h]hconst}(hjQhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjMubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj?)}(hjBh]hstruct}(hjlhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjMubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubh)}(hhh]j)}(h timespec64h]h timespec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj7sbc.put_old_timespec32asbuh1hhjMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(htsh]hts}(hjŵhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubj:)}(hvoid __user *utsh](j)}(hvoidh]hvoid}(hj޵hhhNhNubah}(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*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڵubj)}(hutsh]huts}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڵubeh}(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)}(hmconvert timespec64 value to :c:type:`struct old_timespec32 ` and copy the latter to userspaceh](hconvert timespec64 value to }(hjChhhNhNubh)}(h0:c:type:`struct old_timespec32 `h]jS)}(hjMh]hstruct old_timespec32}(hjOhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]jc.put_old_timespec32asbjold_timespec32uh1hhj֊hMrhjCubh! and copy the latter to userspace}(hjChhhNhNubeh}(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 hhhj"hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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)}(hO``const struct timespec64 *ts`` input :c:type:`struct timespec64 ` h](j)}(h``const struct timespec64 *ts``h]jS)}(hjh]hconst struct 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)}(h.input :c:type:`struct timespec64 `h](hinput }(hjŶhhhNhNubh)}(h(:c:type:`struct timespec64 `h]jS)}(hj϶h]hstruct timespec64}(hjѶhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjͶubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj timespec64uh1hhjhMhjŶubeh}(h]h ]h"]h$]h&]uh1jLhjhMhj¶ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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 ](jjAc-typeeh"]h$]h&]uh1jRhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjjold_timespec32uh1hhjhMhjubeh}(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&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(h-Handles X86_X32_ABI compatibility conversion.h]h-Handles X86_X32_ABI compatibility conversion.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubjM)}(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.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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hget_itimerspec64 (C function)c.get_itimerspec64hNtauh1hhjdhhhNhNubh)}(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}(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 }(hjٷhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjƷhhhjطhMubh)}(hget_itimerspec64h]j)}(hget_itimerspec64h]hget_itimerspec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjƷhhhjطhMubj4)}(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 }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hith]hit}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h,const struct __kernel_itimerspec __user *uith](j?)}(hjP*h]hconst}(hjyhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubh)}(hhh]j)}(h__kernel_itimerspech]h__kernel_itimerspec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jAc.get_itimerspec64asbuh1hhjuubjQ)}(h h]h }(hjиhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubh__user}(hjuhhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(huith]huit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjƷhhhjطhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj·hhhjطhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjطhMhjhhubj4)}(hhh]jM)}(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)}(hj1h]hstruct __kernel_itimerspec}(hj3hhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]jAc.get_itimerspec64asbj__kernel_itimerspecuh1hhj֊hMrhj'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&]uh1j3hjhhhjطhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjgjHjgjIjJjKuh1hhhhjdhNhNubj)}(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)}(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.chMhjkubj)}(hhh](j)}(hU``struct itimerspec64 *it`` destination :c:type:`struct itimerspec64 ` h](j)}(h``struct itimerspec64 *it``h]jS)}(hjh]hstruct 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)}(h8destination :c:type:`struct itimerspec64 `h](h destination }(hjhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]jS)}(hjh]hstruct itimerspec64}(hjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj itimerspec64uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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)}(hj h]hstruct __kernel_itimerspec}(hj hhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj__kernel_itimerspecuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjkubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjDhhhNhNubah}(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.chMhjkubjM)}(h'0 on success or negative errno on errorh]h'0 on success or negative errno on error}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hput_itimerspec64 (C function)c.put_itimerspec64hNtauh1hhjdhhhNhNubh)}(hhh](h)}(h\int put_itimerspec64 (const struct itimerspec64 *it, struct __kernel_itimerspec __user *uit)h]h)}(h[int put_itimerspec64(const struct itimerspec64 *it, struct __kernel_itimerspec __user *uit)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hput_itimerspec64h]j)}(hput_itimerspec64h]hput_itimerspec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hG(const struct itimerspec64 *it, struct __kernel_itimerspec __user *uit)h](j:)}(hconst struct itimerspec64 *ith](j?)}(hjP*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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h itimerspec64h]h itimerspec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.put_itimerspec64asbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hith]hit}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h&struct __kernel_itimerspec __user *uith](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__kernel_itimerspech]h__kernel_itimerspec}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjqmodnameN classnameNjwjz)}j}]jc.put_itimerspec64asbuh1hhjMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubh__user}(hjMhhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(huith]huit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(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)}(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 ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]jc.put_itimerspec64asbj itimerspec64uh1hhj֊hMrhjubh? 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&]uh1j3hj|hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$jHj$jIjJjKuh1hhhhjdhNhNubj)}(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}(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)}(hU``const struct itimerspec64 *it`` input :c:type:`struct itimerspec64 ` h](j)}(h!``const struct itimerspec64 *it``h]jS)}(hjMh]hconst struct itimerspec64 *it}(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)}(h2input :c:type:`struct itimerspec64 `h](hinput }(hjfhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]jS)}(hjph]hstruct itimerspec64}(hjrhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj itimerspec64uh1hhjbhMhjfubeh}(h]h ]h"]h$]h&]uh1jLhjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjDubj)}(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)}(hjh]h&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)}(hjȼh]hstruct __kernel_itimerspec}(hjʼhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjƼubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj__kernel_itimerspecuh1hhjhMhjubeh}(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 **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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!get_old_itimerspec32 (C function)c.get_old_itimerspec32hNtauh1hhjdhhhNhNubh)}(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@hhhjRhMubh)}(hget_old_itimerspec32h]j)}(hget_old_itimerspec32h]hget_old_itimerspec32}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1hhj@hhhjRhMubj4)}(hF(struct itimerspec64 *its, const struct old_itimerspec32 __user *uits)h](j:)}(hstruct itimerspec64 *itsh](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 itimerspec64h]h itimerspec64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjgsbc.get_old_itimerspec32asbuh1hhj}ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}ubj)}(hjh]h*}(hjͽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hitsh]hits}(hjڽhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubj:)}(h*const struct old_itimerspec32 __user *uitsh](j?)}(hjP*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}]jc.get_old_itimerspec32asbuh1hhjubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh__user}(hjhhhNhNubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(huitsh]huits}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubeh}(h]h ]h"]h$]h&]jjuh1j3hj@hhhjRhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj<hhhjRhMubah}(h]j7ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjRhMhj9hhubj4)}(hhh]jM)}(hQget user's :c:type:`struct old_itimerspec32 ` into kernel spaceh](h get user’s }(hjhhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]jS)}(hjh]hstruct old_itimerspec32}(hjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]jc.get_old_itimerspec32asbjold_itimerspec32uh1hhj֊hMrhjubh into kernel space}(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&]uh1j3hj9hhhjRhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(hj h]hstruct itimerspec64 *its}(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)}(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 ](jjAc-typeeh"]h$]h&]uh1jRhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj itimerspec64uh1hhjhMhj#ubeh}(h]h ]h"]h$]h&]uh1jLhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hk``const struct old_itimerspec32 __user *uits`` user's :c:type:`struct old_itimerspec32 ` h](j)}(h.``const struct old_itimerspec32 __user *uits``h]jS)}(hjbh]h*const struct old_itimerspec32 __user *uits}(hjdhhhNhNubah}(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;user's :c:type:`struct old_itimerspec32 `h](h user’s }(hj{hhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]jS)}(hjh]hstruct old_itimerspec32}(hjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjjold_itimerspec32uh1hhjwhMhj{ubeh}(h]h ]h"]h$]h&]uh1jLhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(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.chMhjubjM)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!put_old_itimerspec32 (C function)c.put_old_itimerspec32hNtauh1hhjdhhhNhNubh)}(hhh](h)}(h_int put_old_itimerspec32 (const struct itimerspec64 *its, struct old_itimerspec32 __user *uits)h]h)}(h^int put_old_itimerspec32(const struct itimerspec64 *its, struct old_itimerspec32 __user *uits)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hput_old_itimerspec32h]j)}(hput_old_itimerspec32h]hput_old_itimerspec32}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(hF(const struct itimerspec64 *its, struct old_itimerspec32 __user *uits)h](j:)}(hconst struct itimerspec64 *itsh](j?)}(hjP*h]hconst}(hj>hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj:ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubj?)}(hjBh]hstruct}(hjYhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj:ubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubh)}(hhh]j)}(h itimerspec64h]h itimerspec64}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjymodnameN classnameNjwjz)}j}]j)}jsj$sbc.put_old_itimerspec32asbuh1hhj:ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hitsh]hits}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubj:)}(h$struct old_itimerspec32 __user *uitsh](j?)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.put_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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(hconvert :c:type:`struct itimerspec64 ` to :c:type:`struct old_itimerspec32 ` and copy the latter to userspaceh](hconvert }(hj^hhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]jS)}(hjhh]hstruct itimerspec64}(hjjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjfubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjz)}j}]jc.put_old_itimerspec32asbj itimerspec64uh1hhj֊hMrhj^ubh to }(hj^hhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]jS)}(hjh]hstruct old_itimerspec32}(hjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjjold_itimerspec32uh1hhj֊hMrhj^ubh! and copy the latter to userspace}(hj^hhhNhNubeh}(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&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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``const struct itimerspec64 *its`` input :c:type:`struct itimerspec64 ` h](j)}(h"``const struct itimerspec64 *its``h]jS)}(hjh]hconst struct itimerspec64 *its}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/basics:42: ./kernel/time/time.chMhjubj)}(hhh]jM)}(h2input :c:type:`struct itimerspec64 `h](hinput }(hjhhhNhNubh)}(h,:c:type:`struct itimerspec64 `h]jS)}(hj h]hstruct itimerspec64}(hjhhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj itimerspec64uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(he``struct old_itimerspec32 __user *uits`` user's :c:type:`struct old_itimerspec32 ` h](j)}(h(``struct old_itimerspec32 __user *uits``h]jS)}(hjBh]h$struct old_itimerspec32 __user *uits}(hjDhhhNhNubah}(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;user's :c:type:`struct old_itimerspec32 `h](h user’s }(hj[hhhNhNubh)}(h4:c:type:`struct old_itimerspec32 `h]jS)}(hjeh]hstruct old_itimerspec32}(hjghhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjjold_itimerspec32uh1hhjWhMhj[ubeh}(h]h ]h"]h$]h&]uh1jLhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(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.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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%__round_jiffies_relative (C function)c.__round_jiffies_relativehNtauh1hhjdhhhNhNubh)}(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&]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_relativeh]j)}(h__round_jiffies_relativeh]h__round_jiffies_relative}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(unsigned long j, int cpu)h](j:)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hlongh]hlong}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]hj}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubj:)}(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&]noemphjjuh1j9hj2ubeh}(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}(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&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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.chMhj ubj)}(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&]uh1jhj ubeh}(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)}(hjJh]hint cpu}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjDubj)}(hhh]jM)}(h5the processor number on which the timeout will happenh]h5the processor number on which the timeout will happen}(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&]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.}(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)}(hThe exact rounding is skewed for each processor to avoid all processors firing at the exact same time, which could lead to lock contention or spurious cache line bouncing.h]hThe exact rounding is skewed for each processor to avoid all processors firing at the exact same time, which could lead to lock contention or spurious cache line bouncing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hround_jiffies (C function)c.round_jiffieshNtauh1hhjdhhhNhNubh)}(hhh](h)}(h-unsigned long round_jiffies (unsigned long j)h]h)}(h,unsigned long round_jiffies(unsigned long j)h](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(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 }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h round_jiffiesh]j)}(h round_jiffiesh]h round_jiffies}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(hjh]hj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubah}(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}(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&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(hj?h]h Description}(hjAhhhNhNubah}(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.}(hjUhhhNhNubah}(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.}(hjdhhhNhNubah}(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 }(hjshhhNhNubj)}(h**j**h]hj}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh parameter.}(hjshhhNhNubeh}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#round_jiffies_relative (C function)c.round_jiffies_relativehNtauh1hhjdhhhNhNubh)}(hhh](h)}(h6unsigned long round_jiffies_relative (unsigned long j)h]h)}(h5unsigned long round_jiffies_relative(unsigned long j)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.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_relativeh]j)}(hround_jiffies_relativeh]hround_jiffies_relative}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hlongh]hlong}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hj}(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)}(h*function to round jiffies to a full secondh]h*function to round jiffies to a full second}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjkhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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}(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)}(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.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}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(__round_jiffies_up_relative (C function)c.__round_jiffies_up_relativehNtauh1hhjdhhhNhNubh)}(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}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhjmhMubj)}(hlongh]hlong}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhjmhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhjmhMubh)}(h__round_jiffies_up_relativeh]j)}(h__round_jiffies_up_relativeh]h__round_jiffies_up_relative}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[hhhjmhMubj4)}(h(unsigned long j, int cpu)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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(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&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj[hhhjmhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjWhhhjmhMubah}(h]jRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjmhMhjThhubj4)}(hhh]jM)}(h-function to round jiffies up to a full secondh]h-function to round jiffies up to a full second}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjKhhubah}(h]h ]h"]h$]h&]uh1j3hjThhhjmhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjfjHjfjIjJjKuh1hhhhjdhNhNubj)}(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)}(hjph]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjjubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hB``int cpu`` the processor number on which the timeout will happen h](j)}(h ``int cpu``h]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&]uh1jhjjubjM)}(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.chMhjjubjM)}(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.chMhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hround_jiffies_up (C function)c.round_jiffies_uphNtauh1hhjdhhhNhNubh)}(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}(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&]uh1jPhjDhhhjVhMubj)}(hlongh]hlong}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjVhMubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhjVhMubh)}(hround_jiffies_uph]j)}(hround_jiffies_uph]hround_jiffies_up}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhhjVhMubj4)}(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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hj}(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-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=hhhjVhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(hjCh]hunsigned long j}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(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}(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&]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.}(hjhhhNhNubah}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&round_jiffies_up_relative (C function)c.round_jiffies_up_relativehNtauh1hhjdhhhNhNubh)}(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}(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_up_relativeh]j)}(hround_jiffies_up_relativeh]hround_jiffies_up_relative}(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 }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hj}(hjThhhNhNubah}(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 up to a full secondh]h-function to round jiffies up to a full second}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjzhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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}(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)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htimer_init_key (C function)c.timer_init_keyhNtauh1hhjdhhhNhNubh)}(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 }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:hhhjLhMaubh)}(htimer_init_keyh]j)}(htimer_init_keyh]htimer_init_key}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj:hhhjLhMaubj4)}(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}(hj{hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubh)}(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)}jsjasbc.timer_init_keyasbuh1hhjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubj:)}(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)}(hj6h]h(}(hj hhhNhNubah}(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)}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj6h]h(}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj?)}(hjBh]hstruct}(hjKhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timer_listh]h timer_list}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]jc.timer_init_keyasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubj:)}(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&]noemphjjuh1j9hjsubj:)}(hconst char *nameh](j?)}(hjP*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*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnameh]hname}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubj:)}(hstruct lock_class_key *keyh](j?)}(hjBh]hstruct}(hjZhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjVubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubh)}(hhh]j)}(hlock_class_keyh]hlock_class_key}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]jc.timer_init_keyasbuh1hhjVubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hkeyh]hkey}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubeh}(h]h ]h"]h$]h&]jjuh1j3hj:hhhjLhMaubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6hhhjLhMaubah}(h]j1ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjLhMahj3hhubj4)}(hhh]jM)}(hinitialize a timerh]hinitialize a timer}(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&]uh1j3hj3hhhjLhMaubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hMbhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMbhjubj)}(h>``void (*func)(struct timer_list *)`` timer callback function h](j)}(h%``void (*func)(struct timer_list *)``h]jS)}(hjUh]h!void (*func)(struct timer_list *)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMchjOubj)}(hhh]jM)}(htimer callback functionh]htimer callback function}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjhMchjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMchjubj)}(h#``unsigned int flags`` timer 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&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMdhjubj)}(hhh]jM)}(h timer flagsh]h timer flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubj)}(h'``const char *name`` name of the timer h](j)}(h``const char *name``h]jS)}(hjh]hconst char *name}(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.chMehjubj)}(hhh]jM)}(hname of the timerh]hname of the timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubj)}(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 }(hjRhhhNhNubj3)}(h*any*h]hany}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjRubh of the other timer functions.}(hjRhhhNhNubeh}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmod_timer_pending (C function)c.mod_timer_pendinghNtauh1hhjdhhhNhNubh)}(hhh](h)}(hGint mod_timer_pending (struct timer_list *timer, unsigned long expires)h]h)}(hFint mod_timer_pending(struct timer_list *timer, unsigned long expires)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMyubh)}(hmod_timer_pendingh]j)}(hmod_timer_pendingh]hmod_timer_pending}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMyubj4)}(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.mod_timer_pendingasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(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:)}(hunsigned long expiresh](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)}(hexpiresh]hexpires}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(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)}(h Modify a pending timer's timeouth]h"Modify a pending timer’s timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMyhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMyubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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.chM}hjubj)}(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&]uh1jhjhMzhjubj)}(h:``unsigned long expires`` New absolute timeout in jiffies h](j)}(h``unsigned long expires``h]jS)}(hjh]hunsigned long expires}(hj hhhNhNubah}(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}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hM{hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM{hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM}hjubjM)}(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.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM|hjubjM)}(hNIf **timer->function** == NULL then the start operation is silently discarded.h](hIf }(hj~hhhNhNubj)}(h**timer->function**h]htimer->function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh8 == NULL then the start operation is silently discarded.}(hj~hhhNhNubeh}(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.chMhjubjp_)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh4 - The timer was inactive and not modified or was in}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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.chMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j_juh1jo_hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmod_timer (C function) c.mod_timerhNtauh1hhjdhhhNhNubh)}(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}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbhhhjthMubh)}(h mod_timerh]j)}(h mod_timerh]h mod_timer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjbhhhjthMubj4)}(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)}jsjsb c.mod_timerasbuh1hhjubjQ)}(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:)}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hexpiresh]hexpires}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjbhhhjthMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^hhhjthMubah}(h]jYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjthMhj[hhubj4)}(hhh]jM)}(hModify a timer's timeouth]hModify a timer’s timeout}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjthhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhjthMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``unsigned long expires`` New absolute timeout in jiffies h](j)}(h``unsigned long expires``h]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}(hj hhhNhNubah}(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)}(h+mod_timer(timer, expires) is equivalent to:h]h+mod_timer(timer, expires) is equivalent to:}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubji)}(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);}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjQubah}(h]h ]h"]h$]h&]uh1jhhjchMhjubjM)}(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 }(hjjhhhNhNubj)}(h **expires**h]hexpires}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(hNote that if there are multiple unserialized concurrent users of the same timer, then mod_timer() is the only safe way to modify the timeout, since add_timer() cannot modify an already running timer.h]hNote that if there are multiple unserialized concurrent users of the same timer, then mod_timer() is the only safe way to modify the timeout, since add_timer() cannot modify an already running timer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(hIf **timer->function** == NULL then the start operation is silently discarded. In this case the return value is 0 and meaningless.h](hIf }(hjhhhNhNubj)}(h**timer->function**h]htimer->function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhl == NULL then the start operation is silently discarded. In this case the return value is 0 and meaningless.}(hjhhhNhNubeh}(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.chMhjubjp_)}(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}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(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 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}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubh2 - The timer was active and requeued to expire at }(hj3hhhNhNubj)}(h **expires**h]hexpires}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh or}(hj3hhhNhNubeh}(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 }(hjehhhNhNubj)}(h **expires**h]hexpires}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh) did not change the effective expiry time}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjahMhj,ubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j_juh1jo_hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htimer_reduce (C function)c.timer_reducehNtauh1hhjdhhhNhNubh)}(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}(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 timer_reduceh]j)}(h timer_reduceh]h timer_reduce}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(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 }(hj hhhNhNubah}(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 reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.timer_reduceasbuh1hhjubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned long expiresh](j)}(hunsignedh]hunsigned}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hexpiresh]hexpires}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h7Modify a timer's timeout if it would reduce the timeouth]h9Modify a timer’s timeout if it would reduce the 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&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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*hMhj ubj)}(h:``unsigned long expires`` New absolute timeout in jiffies h](j)}(h``unsigned long expires``h]jS)}(hjNh]hunsigned long expires}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjHubj)}(hhh]jM)}(hNew absolute timeout in jiffiesh]hNew absolute timeout 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&]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)}(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 }(hjhhhNhNubj)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% is not enqueued it starts the timer.}(hjhhhNhNubeh}(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 }(hjhhhNhNubj)}(h**timer->function**h]htimer->function}(hjhhhNhNubah}(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.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.chMhjubjp_)}(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}(hj hhhNhNubah}(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}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjYubh2 - The timer was active and requeued to expire at }(hjYhhhNhNubj)}(h **expires**h]hexpires}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh or}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjUubj)}(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 }(hjhhhNhNubj)}(h **expires**h]hexpires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhi did not change the effective expiry time such that the timer would expire earlier than already scheduled}(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&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j_juh1jo_hj#hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hadd_timer (C function) c.add_timerhNtauh1hhjdhhhNhNubh)}(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}(hj hhhNhNubah}(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 }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubh)}(hhh]j)}(h timer_listh]h timer_list}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGmodnameN classnameNjwjz)}j}]j)}jsj sb c.add_timerasbuh1hhj#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)}(h Start a timerh]h Start 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&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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)}(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)}(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}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh to expire at }(hj<hhhNhNubj)}(h**timer->expires**h]htimer->expires}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh in the future. }(hj<hhhNhNubj)}(h**timer->expires**h]htimer->expires}(hjhhhhNhNubah}(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.chMhjubjM)}(haThe **timer->expires** and **timer->function** fields must be set prior to calling this function.h](hThe }(hjhhhNhNubj)}(h**timer->expires**h]htimer->expires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**timer->function**h]htimer->function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh3 fields must be set prior to calling this function.}(hjhhhNhNubeh}(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 }(hjhhhNhNubj)}(h**timer->function**h]htimer->function}(hjhhhNhNubah}(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.chMhjubjM)}(hgIf **timer->expires** is already in the past **timer** will be queued to expire at the next timer tick.h](hIf }(hjhhhNhNubj)}(h**timer->expires**h]htimer->expires}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is already in the past }(hjhhhNhNubj)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh1 will be queued to expire at the next timer tick.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hadd_timer_local (C function)c.add_timer_localhNtauh1hhjdhhhNhNubh)}(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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhjEhMubh)}(hadd_timer_localh]j)}(hadd_timer_localh]hadd_timer_local}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3hhhjEhMubj4)}(h(struct timer_list *timer)h]j:)}(hstruct timer_list *timerh](j?)}(hjBh]hstruct}(hjthhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubh)}(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)}jsjZsbc.add_timer_localasbuh1hhjpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlubah}(h]h ]h"]h$]h&]jjuh1j3hj3hhhjEhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/hhhjEhMubah}(h]j*ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjEhMhj,hhubj4)}(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&]uh1j3hj,hhhjEhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(hj8h]hstruct timer_list *timer}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj2ubj)}(hhh]jM)}(hThe timer to be startedh]hThe timer to be started}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]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.}(hjhhhNhNubah}(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.}(hjhhhNhNubah}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hadd_timer_global (C function)c.add_timer_globalhNtauh1hhjdhhhNhNubh)}(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}(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_globalh]j)}(hadd_timer_globalh]hadd_timer_global}(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 }(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}]j)}jsjsbc.add_timer_globalasbuh1hhjubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjPhhhNhNubah}(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&]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 without TIMER_PINNED flag seth]h+Start a timer without TIMER_PINNED flag set}(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&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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)}(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.chMhjubjM)}(h$See add_timer() for further details.h]h$See add_timer() for further details.}(hj(hhhNhNubah}(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&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hadd_timer_on (C function)c.add_timer_onhNtauh1hhjdhhhNhNubh)}(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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjShhhjehMubh)}(h add_timer_onh]j)}(h add_timer_onh]h add_timer_on}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1hhjShhhjehMubj4)}(h#(struct timer_list *timer, int cpu)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)}jsjzsbc.add_timer_onasbuh1hhjubjQ)}(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:)}(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&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjShhhjehMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjOhhhjehMubah}(h]jJah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjehMhjLhhubj4)}(hhh]jM)}(h!Start a timer on a particular CPUh]h!Start a timer on a particular CPU}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjIhhubah}(h]h ]h"]h$]h&]uh1j3hjLhhhjehMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdjHjdjIjJjKuh1hhhhjdhNhNubj)}(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)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chM hjhubj)}(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.chM hjubj)}(hhh]jM)}(hThe timer to be startedh]hThe timer to be started}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h#``int cpu`` The CPU to start it on h](j)}(h ``int cpu``h]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.chM hjubj)}(hhh]jM)}(hThe CPU to start it onh]hThe CPU to start it on}(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&]uh1jhjhubjM)}(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 hjhubjM)}(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 hjhubjM)}(h$See add_timer() for further details.h]h$See add_timer() for further details.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htimer_delete (C function)c.timer_deletehNtauh1hhjdhhhNhNubh)}(hhh](h)}(h+int timer_delete (struct timer_list *timer)h]h)}(h*int timer_delete(struct timer_list *timer)h](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMoubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQhhhjchMoubh)}(h timer_deleteh]j)}(h timer_deleteh]h timer_delete}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQhhhjchMoubj4)}(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)}jsjxsbc.timer_deleteasbuh1hhjubjQ)}(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&]jjuh1j3hjQhhhjchMoubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjMhhhjchMoubah}(h]jHah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjchMohjJhhubj4)}(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&]uh1j3hjJhhhjchMoubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj-jHj-jIjJjKuh1hhhhjdhNhNubj)}(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)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMshj1ubj)}(hhh]j)}(h9``struct timer_list *timer`` The timer to be deactivated h](j)}(h``struct timer_list *timer``h]jS)}(hjVh]hstruct timer_list *timer}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMphjPubj)}(hhh]jM)}(hThe timer to be deactivatedh]hThe timer to be deactivated}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjkhMphjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMphjMubah}(h]h ]h"]h$]h&]uh1jhj1ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMrhj1ubjM)}(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 }(hjhhhNhNubj)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhS can be rearmed concurrently then the return value of this function is meaningless.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMqhj1ubjM)}(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.chMwhj1ubjp_)}(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)}(hj h](jS)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh( - The timer was pending and deactivated}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMyhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j_juh1jo_hjhMxhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htimer_shutdown (C function)c.timer_shutdownhNtauh1hhjdhhhNhNubh)}(hhh](h)}(h-int timer_shutdown (struct timer_list *timer)h]h)}(h,int timer_shutdown(struct timer_list *timer)h](j)}(hinth]hint}(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&]uh1jPhjQhhhjchMubh)}(htimer_shutdownh]j)}(htimer_shutdownh]htimer_shutdown}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQhhhjchMubj4)}(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)}jsjxsbc.timer_shutdownasbuh1hhjubjQ)}(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&]jjuh1j3hjQhhhjchMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjMhhhjchMubah}(h]jHah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjchMhjJhhubj4)}(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&]uh1j3hjJhhhjchMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj-jHj-jIjJjKuh1hhhhjdhNhNubj)}(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)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj1ubj)}(hhh]j)}(h9``struct timer_list *timer`` The timer to be deactivated h](j)}(h``struct timer_list *timer``h]jS)}(hjVh]hstruct timer_list *timer}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjPubj)}(hhh]jM)}(hThe timer to be deactivatedh]hThe timer to be deactivated}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj1ubjM)}(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 }(hjhhhNhNubj)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh6 after this function returns will be silently ignored.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj1ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj1ubjM)}(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.chMhj1ubjp_)}(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_juh1jo_hjhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"timer_delete_sync_try (C function)c.timer_delete_sync_tryhNtauh1hhjdhhhNhNubh)}(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}(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)}(htimer_delete_sync_tryh]j)}(htimer_delete_sync_tryh]htimer_delete_sync_try}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj`hhhjrhMubj4)}(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_delete_sync_tryasbuh1hhjubjQ)}(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`hhhjrhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj\hhhjrhMubah}(h]jWah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhMhjYhhubj4)}(hhh]jM)}(hTry to deactivate a timerh]hTry to deactivate a timer}(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&]uh1j3hjYhhhjrhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj<jHj<jIjJjKuh1hhhhjdhNhNubj)}(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)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj@ubj)}(hhh]j)}(h1``struct timer_list *timer`` Timer to deactivate h](j)}(h``struct timer_list *timer``h]jS)}(hjeh]hstruct timer_list *timer}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj_ubj)}(hhh]jM)}(hTimer to deactivateh]hTimer to deactivate}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj\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&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj@ubjM)}(hThis function tries to deactivate a timer. On success the timer is not queued and the timer callback function is not running on any CPU.h]hThis function tries to deactivate a timer. On success the timer is not queued and the timer callback function is not running on any CPU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhj@ubjM)}(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.}(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)}(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.chMhj@ubjp_)}(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)}(hj=h](jS)}(h``-1``h]h-1}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubh< - The timer callback function is running on a different CPU}(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&]j_juh1jo_hjhMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](htimer_delete_sync (C function)c.timer_delete_synchNtauh1hhjdhhhNhNubh)}(hhh](h)}(h0int timer_delete_sync (struct timer_list *timer)h]h)}(h/int timer_delete_sync(struct timer_list *timer)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMaubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMaubh)}(htimer_delete_synch]j)}(htimer_delete_synch]htimer_delete_sync}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMaubj4)}(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_delete_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&]jjuh1j3hjhhhjhMaubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMaubah}(h]jzah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMahj|hhubj4)}(hhh]jM)}(h6Deactivate a timer and wait for the handler to finish.h]h6Deactivate a timer and wait for the handler to finish.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMahjDhhubah}(h]h ]h"]h$]h&]uh1j3hj|hhhjhMaubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj_jHj_jIjJjKuh1hhhhjdhNhNubj)}(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)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMehjcubj)}(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.chMbhjubj)}(hhh]jM)}(hThe timer to be deactivatedh]hThe timer to be deactivated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubah}(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&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMdhjcubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMchjcubjM)}(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.chMjhjcubj)}(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.chMnhjcubjM)}(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.chMyhjcubjM)}(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}hjcubjM)}(hcIf such a guarantee is needed, e.g. for teardown situations then use timer_shutdown_sync() instead.h]hcIf such a guarantee is needed, e.g. for teardown situations then use timer_shutdown_sync() instead.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjcubjM)}(h **Return**h]j)}(hj5h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjcubjp_)}(hhh](j)}(h!``0`` - The timer was not pendingh]jM)}(hjPh](jS)}(h``0``h]h0}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubh - The timer was not pending}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjNubah}(h]h ]h"]h$]h&]uh1jhjKubj)}(h-``1`` - The timer was pending and deactivatedh]jM)}(hjvh](jS)}(h``1``h]h1}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubh( - The timer was pending and deactivated}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjtubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]j_juh1jo_hjmhMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h timer_shutdown_sync (C function)c.timer_shutdown_synchNtauh1hhjdhhhNhNubh)}(hhh](h)}(h2int timer_shutdown_sync (struct timer_list *timer)h]h)}(h1int timer_shutdown_sync(struct timer_list *timer)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(htimer_shutdown_synch]j)}(htimer_shutdown_synch]htimer_shutdown_sync}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.timer_shutdown_syncasbuh1hhjubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(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%Shutdown a timer and prevent rearmingh]h%Shutdown 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.chMhj}hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjdhNhNubj)}(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)}(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 shutdown 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 shutdownh]hThe timer to be shutdown}(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.chMhjubj)}(hhh]j)}(hWhen the function returns it is guaranteed that: - **timer** is not queued - The callback function of **timer** is not running - **timer** cannot be enqueued again. Any attempt to rearm **timer** is silently ignored. h](j)}(h0When the function returns it is guaranteed that:h]h0When the function returns it is guaranteed that:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubj)}(hhh]jp_)}(hhh](j)}(h**timer** is not queuedh]jM)}(hj0h](j)}(h **timer**h]htimer}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh is not queued}(hj2hhhNhNubeh}(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&]uh1jhj+ubj)}(h1The callback function of **timer** is not runningh]jM)}(hjVh](hThe callback function of }(hjXhhhNhNubj)}(h **timer**h]htimer}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh is not running}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjTubah}(h]h ]h"]h$]h&]uh1jhj+ubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh0 cannot be enqueued again. Any attempt to rearm }(hjhhhNhNubj)}(h **timer**h]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is silently ignored.}(hjhhhNhNubeh}(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&]uh1jhj+ubeh}(h]h ]h"]h$]h&]j_j_uh1jo_hjMhMhj(ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj'hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h2See timer_delete_sync() for synchronization rules.h]h2See timer_delete_sync() for synchronization rules.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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.chMhjubjM)}(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.chMhjubjM)}(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.chMhjubji)}(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 ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjjmythinguh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubh); workqueue_destroy(}(hjhhhNhNubh)}(h&:c:type:`mything->workqueue `h]jS)}(hj=h]hmything->workqueue}(hj?hhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhj;ubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjjmythinguh1hhj6hMhjubh);}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhj6hMhj ubah}(h]h ]h"]h$]h&]uh1jhhj6hMhjubjM)}(h)After this 'mything' can be safely freed.h]h-After this ‘mything’ can be safely freed.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:45: ./kernel/time/timer.chMhjubjM)}(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.}(hjyhhhNhNubah}(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.chMhjubjp_)}(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_juh1jo_hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubeh}(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)}(hhj|ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|ubh)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jM c.ktime_setasbuh1hhj|ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|ubj)}(hsecsh]hsecs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjxubj:)}(hconst unsigned long nsecsh](j?)}(hjP*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 }(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)}(hnsecsh]hnsecs}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjxubeh}(h]h ]h"]h$]h&]jjuh1j3hj*hhhjRhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj&hhhjRhKubah}(h]j!ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjRhKhj#hhubj4)}(hhh]jM)}(h7Set a ktime_t variable from a seconds/nanoseconds valueh]h7Set a ktime_t variable from a seconds/nanoseconds value}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhj]hhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhjRhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjxjHjxjIjJjKuh1hhhhjhNhNubj)}(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)}(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:51: ./include/linux/ktime.hhK"hj|ubj)}(hhh](j)}(h"``const s64 secs`` seconds to set h](j)}(h``const s64 secs``h]jS)}(hjh]hconst s64 secs}(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)}(hseconds to seth]hseconds to set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h1``const unsigned long nsecs`` nanoseconds to set h](j)}(h``const unsigned long nsecs``h]jS)}(hjh]hconst unsigned long nsecs}(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.hhK hjubj)}(hhh]jM)}(hnanoseconds to seth]hnanoseconds to set}(hjhhhNhNubah}(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 **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"hj|ubjM)}(h(The ktime_t representation of the value.h]h(The ktime_t representation of the value.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhK"hj|ubeh}(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}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKTubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVhhhjhhKTubh)}(h ktime_compareh]j)}(h ktime_compareh]h ktime_compare}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1hhjVhhhjhhKTubj4)}(h((const ktime_t cmp1, const ktime_t cmp2)h](j:)}(hconst ktime_t cmp1h](j?)}(hjP*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)}jsj}sbc.ktime_compareasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcmp1h]hcmp1}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst ktime_t cmp2h](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj hhhNhNubah}(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_compareasbuh1hhjubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcmp2h]hcmp2}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjVhhhjhhKTubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjRhhhjhhKTubah}(h]jMah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhhKThjOhhubj4)}(hhh]jM)}(h9Compares two ktime_t variables for less, greater or equalh]h9Compares two ktime_t variables for less, greater or equal}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKThjmhhubah}(h]h ]h"]h$]h&]uh1j3hjOhhhjhhKTubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:51: ./include/linux/ktime.hhKXhjubj)}(hhh](j)}(h#``const ktime_t cmp1`` comparable1 h](j)}(h``const ktime_t cmp1``h]jS)}(hjh]hconst ktime_t cmp1}(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 comparable1h]h comparable1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKUhjubj)}(h#``const ktime_t cmp2`` comparable2 h](j)}(h``const ktime_t cmp2``h]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&]uh1jhjhKVhjubeh}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKXhjubjM)}(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}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKXhjubeh}(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}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKgubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfhhhjwhKgubh)}(h ktime_afterh]j)}(h ktime_afterh]h ktime_after}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjfhhhjwhKgubj4)}(h((const ktime_t cmp1, const ktime_t cmp2)h](j:)}(hconst ktime_t cmp1h](j?)}(hjP*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)}jsjsb c.ktime_afterasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcmp1h]hcmp1}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst ktime_t cmp2h](j?)}(hjP*h]hconst}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hktime_th]hktime_t}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj+modnameN classnameNjwjz)}j}]j c.ktime_afterasbuh1hhjubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcmp2h]hcmp2}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjfhhhjwhKgubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjbhhhjwhKgubah}(h]j]ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhKghj_hhubj4)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKghj|hhubah}(h]h ]h"]h$]h&]uh1j3hj_hhhjwhKgubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:51: ./include/linux/ktime.hhKkhjubj)}(hhh](j)}(h#``const ktime_t cmp1`` comparable1 h](j)}(h``const ktime_t cmp1``h]jS)}(hjh]hconst ktime_t cmp1}(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.hhKhhjubj)}(hhh]jM)}(h comparable1h]h comparable1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhhjubj)}(h#``const ktime_t cmp2`` comparable2 h](j)}(h``const ktime_t cmp2``h]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&]uh1jhjhKihjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hj4h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKkhjubjM)}(h!true if cmp1 happened after cmp2.h]h!true if cmp1 happened after cmp2.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKkhjubeh}(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}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKsubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuhhhjhKsubh)}(h ktime_beforeh]j)}(h ktime_beforeh]h ktime_before}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjuhhhjhKsubj4)}(h((const ktime_t cmp1, const ktime_t cmp2)h](j:)}(hconst ktime_t cmp1h](j?)}(hjP*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)}jsjsbc.ktime_beforeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcmp1h]hcmp1}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst ktime_t cmp2h](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hktime_th]hktime_t}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:modnameN classnameNjwjz)}j}]jc.ktime_beforeasbuh1hhjubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcmp2h]hcmp2}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjuhhhjhKsubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjqhhhjhKsubah}(h]jlah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKshjnhhubj4)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKshjhhubah}(h]h ]h"]h$]h&]uh1j3hjnhhhjhKsubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:51: ./include/linux/ktime.hhKwhjubj)}(hhh](j)}(h#``const ktime_t cmp1`` comparable1 h](j)}(h``const ktime_t cmp1``h]jS)}(hjh]hconst ktime_t cmp1}(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.hhKthjubj)}(hhh]jM)}(h comparable1h]h comparable1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKthjubj)}(h#``const ktime_t cmp2`` comparable2 h](j)}(h``const ktime_t cmp2``h]jS)}(hjh]hconst ktime_t cmp2}(hj hhhNhNubah}(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}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKuhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hjCh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKwhjubjM)}(h"true if cmp1 happened before cmp2.h]h"true if cmp1 happened before cmp2.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKwhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hktime_to_timespec64_condh]j)}(hktime_to_timespec64_condh]hktime_to_timespec64_cond}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h)(const ktime_t kt, struct timespec64 *ts)h](j:)}(hconst ktime_t kth](j?)}(hjP*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)}jsjsbc.ktime_to_timespec64_condasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hkth]hkt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct timespec64 *tsh](j?)}(hjBh]hstruct}(hj)hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj%ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubh)}(hhh]j)}(h timespec64h]h timespec64}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjImodnameN classnameNjwjz)}j}]jc.ktime_to_timespec64_condasbuh1hhj%ubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(htsh]hts}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]j{ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhj}hhubj4)}(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}(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&]uh1j3hj}hhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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:51: ./include/linux/ktime.hhKhjubj)}(hhh](j)}(h5``const ktime_t kt`` the ktime_t variable to convert h](j)}(h``const ktime_t kt``h]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)}(hj$h]hstruct timespec64 *ts}(hj&hhhNhNubah}(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.hhKhjubj)}(hhh]jM)}(h,the timespec variable to store the result inh]h,the timespec variable to store the result in}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hKhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h **Return**h]j)}(hj_h]hReturn}(hjahhhNhNubah}(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.hhKhjubjM)}(hE``true`` if there was a successful conversion, ``false`` if kt was 0.h](jS)}(h``true``h]htrue}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubh' if there was a successful conversion, }(hjuhhhNhNubjS)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubh if kt was 0.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:51: ./include/linux/ktime.hhKhjubeh}(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}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhY/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)}(hhrtimer_sleeperh]j)}(hjh]hhrtimer_sleeper}(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)}(hsimple sleeper structureh]hsimple sleeper structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKDhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(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}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh:}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKHhj"ubj)}(hSstruct hrtimer_sleeper { struct hrtimer timer; struct task_struct *task; };h]hSstruct hrtimer_sleeper { struct hrtimer timer; struct task_struct *task; };}hjCsbah}(h]h ]h"]h$]h&]jjuh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKJhj"ubjM)}(h **Members**h]j)}(hjTh]hMembers}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKOhj"ubj)}(hhh](j)}(h#``timer`` embedded timer structure h](j)}(h ``timer``h]jS)}(hjsh]htimer}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKFhjmubj)}(hhh]jM)}(hembedded timer structureh]hembedded timer structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKFhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhKFhjjubj)}(h``task`` task to wake uph](j)}(h``task``h]jS)}(hjh]htask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKFhjubj)}(hhh]jM)}(htask to wake uph]htask to wake up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKFhjjubeh}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKJhjhhubjM)}(h,task is set to NULL, when the timer expires.h]h,task is set to NULL, when the timer expires.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKGhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hhrtimer_start (C function)c.hrtimer_starthNtauh1hhjhhhNhNubh)}(hhh](h)}(hUvoid hrtimer_start (struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)h]h)}(hTvoid hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)hhhj;hKubh)}(h hrtimer_starth]j)}(h hrtimer_starth]h hrtimer_start}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhj;hKubj4)}(hB(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)h](j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hjjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjfubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjPsbc.hrtimer_startasbuh1hhjfubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubj:)}(h ktime_t timh](h)}(hhh]j)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.hrtimer_startasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(htimh]htim}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubj:)}(hconst enum hrtimer_mode modeh](j?)}(hjP*h]hconst}(hj$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj?)}(henumh]henum}(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 hrtimer_modeh]h hrtimer_mode}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj`modnameN classnameNjwjz)}j}]jc.hrtimer_startasbuh1hhj ubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubeh}(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(re)start an hrtimerh]h(re)start an hrtimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj"hhhj;hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(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.hhKhjubj)}(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&]uh1jLhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h``ktime_t tim`` expiry time h](j)}(h``ktime_t tim``h]jS)}(hj.h]h ktime_t tim}(hj0hhhNhNubah}(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.hhKhj(ubj)}(hhh]jM)}(h expiry timeh]h expiry time}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChKhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChKhjubj)}(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)}(hjgh]hconst enum hrtimer_mode mode}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjaubj)}(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!}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jshrtimer_get_remainingsbc.hrtimer_get_remainingasbuh1hhjhhhY/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)}(hhrtimer_get_remainingh]j)}(hjh]hhrtimer_get_remaining}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(const struct hrtimer *timer)h]j:)}(hconst struct hrtimer *timerh](j?)}(hjP*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 }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]jc.hrtimer_get_remainingasbuh1hhjubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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)}(h get remaining time for the timerh]h get remaining time for the timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hC**Parameters** ``const struct hrtimer *timer`` the timer to readh](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.hhKhjubj)}(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.hhKhjubj)}(hhh]jM)}(hthe timer to readh]hthe timer to read}(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&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFhhhjWhMubh)}(hhrtimer_is_queuedh]j)}(hhrtimer_is_queuedh]hhrtimer_is_queued}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFhhhjWhMubj4)}(h(struct hrtimer *timer)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)}jsjlsbc.hrtimer_is_queuedasbuh1hhjubjQ)}(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&]noemphjjuh1j9hj~ubah}(h]h ]h"]h$]h&]jjuh1j3hjFhhhjWhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjBhhhjWhMubah}(h]j=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjWhMhj?hhubj4)}(hhh]jM)}(h0check, whether the timer is on one of the queuesh]h0check, whether the timer is on one of the queues}(hj hhhNhNubah}(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&]uh1j3hj?hhhjWhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj!jHj!jIjJjKuh1hhhhjhNhNubj)}(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)}(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:54: ./include/linux/hrtimer.hhM hj%ubj)}(hhh]j)}(h)``struct hrtimer *timer`` Timer to check h](j)}(h``struct hrtimer *timer``h]jS)}(hjJh]hstruct hrtimer *timer}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjDubj)}(hhh]jM)}(hTimer to checkh]hTimer to check}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjAubah}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM hj%ubjM)}(h,True if the timer is queued, false otherwiseh]h,True if the timer is queued, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM hj%ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM hj%ubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$hrtimer_update_function (C function)c.hrtimer_update_functionhNtauh1hhjhhhNhNubh)}(hhh](h)}(hhvoid hrtimer_update_function (struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer *))h]h)}(hfvoid hrtimer_update_function(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer*))h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMubjQ)}(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}(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)}(hhrtimerh]hhrtimer}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]j)}jsjsbc.hrtimer_update_functionasbuh1hhj*ubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubj:)}(h1enum hrtimer_restart (*function)(struct hrtimer*)h](j?)}(hjAh]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}]jhc.hrtimer_update_functionasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hj6h]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)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj?)}(hjBh]hstruct}(hj,hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjLmodnameN classnameNjwjz)}j}]jhc.hrtimer_update_functionasbuh1hhjubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjuhhhNhNubah}(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$Update the timer's callback functionh]h&Update the timer’s callback function}(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)}(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)}(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`` 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&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhMhjubj)}(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&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM hjubj)}(hhh]jM)}(hNew callback functionh]hNew callback function}(hj1hhhNhNubah}(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)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:54: ./include/linux/hrtimer.hhM"hjubjM)}(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).}(hjihhhNhNubah}(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_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.hhM9ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM9ubh)}(hhrtimer_forward_nowh]j)}(hjh]hhrtimer_forward_now}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM9ubj4)}(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 reftargetj modnameN classnameNjwjz)}j}]jc.hrtimer_forward_nowasbuh1hhjubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hktime_t intervalh](h)}(hhh]j)}(hktime_th]hktime_t}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj_modnameN classnameNjwjz)}j}]jc.hrtimer_forward_nowasbuh1hhjVubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(hintervalh]hinterval}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM9ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM9ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM9hjhhubj4)}(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.hhM9hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM9ubeh}(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}(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-``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}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhM;hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM;hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]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.}(hj~hhhNhNubah}(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](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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jshrtimer_forwardsbc.hrtimer_forwardasbuh1hhjhhhW/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_forwardh]j)}(hjh]hhrtimer_forward}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(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 }(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}]jc.hrtimer_forwardasbuh1hhjubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h ktime_t nowh](h)}(hhh]j)}(hktime_th]hktime_t}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtmodnameN classnameNjwjz)}j}]jc.hrtimer_forwardasbuh1hhjkubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hnowh]hnow}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hktime_t intervalh](h)}(hhh]j)}(hktime_th]hktime_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.hrtimer_forwardasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hintervalh]hinterval}(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)}(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.chMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj(jHj(jIjJjKuh1hhhhjhNhNubj)}(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)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj,ubj)}(hhh](j)}(h-``struct hrtimer *timer`` hrtimer to forward h](j)}(h``struct hrtimer *timer``h]jS)}(hjQh]hstruct hrtimer *timer}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjKubj)}(hhh]jM)}(hhrtimer to forwardh]hhrtimer to forward}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjHubj)}(h'``ktime_t now`` forward past this time h](j)}(h``ktime_t now``h]jS)}(hjh]h ktime_t now}(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)}(hforward past this timeh]hforward past this time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjHubj)}(h-``ktime_t interval`` the interval to forward h](j)}(h``ktime_t interval``h]jS)}(hjh]hktime_t interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjubj)}(hhh]jM)}(hthe interval to forwardh]hthe interval to forward}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjHubeh}(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)}(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.chMhj,ubhnote)}(hHThis only updates the timer expiry value and does not requeue the timer.h]jM)}(hj'h]hHThis only updates the timer expiry value and does not requeue the timer.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj%ubah}(h]h ]h"]h$]h&]uh1j#hj,ubjM)}(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().}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj,ubjM)}(h **Context**h]j)}(hjNh]hContext}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj,ubjM)}(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 }(hjdhhhNhNubj)}(h **timer**h]htimer}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh . If called from other contexts }(hjdhhhNhNubj)}(h **timer**h]htimer}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubhf must neither be enqueued nor running the callback and the caller needs to take care of serialization.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj,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$The number of overruns are returned.h]h$The number of overruns are returned.}(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_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&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hhrtimer_start_range_nsh]j)}(hhrtimer_start_range_nsh]hhrtimer_start_range_ns}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hP(struct hrtimer *timer, ktime_t tim, u64 delta_ns, const enum hrtimer_mode mode)h](j:)}(hstruct hrtimer *timerh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;modnameN classnameNjwjz)}j}]j)}jsjsbc.hrtimer_start_range_nsasbuh1hhjubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htimerh]htimer}(hjthhhNhNubah}(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&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jUc.hrtimer_start_range_nsasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(htimh]htim}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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}]jUc.hrtimer_start_range_nsasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hdelta_nsh]hdelta_ns}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst enum hrtimer_mode modeh](j?)}(hjP*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?)}(hjAh]henum}(hj8 hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hjE hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]j)}(h hrtimer_modeh]h hrtimer_mode}(hjV hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjX modnameN classnameNjwjz)}j}]jUc.hrtimer_start_range_nsasbuh1hhj ubjQ)}(h h]h }(hjt 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&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h(re)start an hrtimerh]h(re)start an hrtimer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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)}(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:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh](j)}(h0``struct hrtimer *timer`` the timer to be added h](j)}(h``struct hrtimer *timer``h]jS)}(hj h]hstruct hrtimer *timer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh]jM)}(hthe timer to be addedh]hthe timer to be added}(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``ktime_t tim`` expiry time h](j)}(h``ktime_t tim``h]jS)}(hj& h]h ktime_t tim}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh]jM)}(h expiry timeh]h expiry time}(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-``u64 delta_ns`` "slack" range for the timer h](j)}(h``u64 delta_ns``h]jS)}(hj_ h]h u64 delta_ns}(hja 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.chMhjY ubj)}(hhh]jM)}(h"slack" range for the timerh]h“slack” range for the timer}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjt hMhju ubah}(h]h ]h"]h$]h&]uh1jhjY ubeh}(h]h ]h"]h$]h&]uh1jhjt hMhj ubj)}(h``const enum hrtimer_mode mode`` timer mode: absolute (HRTIMER_MODE_ABS) or relative (HRTIMER_MODE_REL), and pinned (HRTIMER_MODE_PINNED); softirq based mode is considered for debug purpose only!h](j)}(h ``const enum hrtimer_mode mode``h]jS)}(hj h]hconst enum hrtimer_mode mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh]jM)}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj 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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMubh)}(hhrtimer_try_to_cancelh]j)}(hhrtimer_try_to_cancelh]hhrtimer_try_to_cancel}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMubj4)}(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 }(hj< hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ ubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjM hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjO modnameN classnameNjwjz)}j}]j)}jsj sbc.hrtimer_try_to_cancelasbuh1hhj+ ubjQ)}(h h]h }(hjm hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ ubj)}(hjh]h*}(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ ubj)}(htimerh]htimer}(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)}(htry to deactivate a timerh]htry to deactivate a timer}(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&]uh1j3hj hhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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)}(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:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh]j)}(h*``struct hrtimer *timer`` hrtimer to stop h](j)}(h``struct hrtimer *timer``h]jS)}(hj h]hstruct hrtimer *timer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh]jM)}(hhrtimer to stoph]hhrtimer to stop}(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}(hj0 hhhNhNubah}(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.chMhj ubji)}(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]jp_)}(hhh](j)}(h0 when the timer was not activeh]jM)}(hjM h]h0 when the timer was not active}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjK ubah}(h]h ]h"]h$]h&]uh1jhjH ubj)}(h1 when the timer was activeh]jM)}(hje h]h1 when the timer was active}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjc ubah}(h]h ]h"]h$]h&]uh1jhjH ubj)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj{ ubah}(h]h ]h"]h$]h&]uh1jhjH ubeh}(h]h ]h"]h$]h&]j_juh1jo_hj\ hMhjD ubah}(h]h ]h"]h$]h&]uh1jhhj\ hMhj ubeh}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMdubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMdubh)}(hhrtimer_cancelh]j)}(hhrtimer_cancelh]hhrtimer_cancel}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMdubj4)}(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 }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsj sbc.hrtimer_cancelasbuh1hhj 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)}(htimerh]htimer}(hjV hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hMdubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMdubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMdhj hhubj4)}(hhh]jM)}(h2cancel a timer and wait for the handler to finish.h]h2cancel a timer and wait for the handler to finish.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMdhj} hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMdubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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)}(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:57: ./kernel/time/hrtimer.chMhhj ubj)}(hhh]j)}(h4``struct hrtimer *timer`` the timer to be cancelled h](j)}(h``struct hrtimer *timer``h]jS)}(hj h]hstruct hrtimer *timer}(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.chMehj ubj)}(hhh]jM)}(hthe timer to be cancelledh]hthe timer to be cancelled}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMehj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMehj ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h **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:57: ./kernel/time/hrtimer.chMghj ubjM)}(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.chMghj ubeh}(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]j)}js__hrtimer_get_remainingsbc.__hrtimer_get_remainingasbuh1hhj=hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMzubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=hhhjehMzubh)}(h__hrtimer_get_remainingh]j)}(hjbh]h__hrtimer_get_remaining}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1hhj=hhhjehMzubj4)}(h*(const struct hrtimer *timer, bool adjust)h](j:)}(hconst struct hrtimer *timerh](j?)}(hjP*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}]j`c.__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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hadjusth]hadjust}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj=hhhjehMzubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9hhhjehMzubah}(h]j4ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjehMzhj6hhubj4)}(hhh]jM)}(h get remaining time for the timerh]h get remaining time for the timer}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMzhj`hhubah}(h]h ]h"]h$]h&]uh1j3hj6hhhjehMzubeh}(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.chM~hjubj)}(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.chM{hjubj)}(hhh]jM)}(hthe timer to readh]hthe timer to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjubj)}(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.chM}hjubj)}(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.chM|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhjEhMubh)}(h hrtimer_setuph]j)}(h hrtimer_setuph]h hrtimer_setup}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3hhhjEhMubj4)}(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}(hjthhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjZsbc.hrtimer_setupasbuh1hhjpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlubj:)}(h1enum hrtimer_restart (*function)(struct hrtimer*)h](j?)}(hjAh]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)}(hj6h]h(}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfunctionh]hfunction}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj6h]h(}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj?)}(hjBh]hstruct}(hjrhhhNhNubah}(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&]noemphjjuh1j9hjlubj:)}(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&]noemphjjuh1j9hjlubj:)}(henum hrtimer_mode modeh](j?)}(hjAh]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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;modnameN classnameNjwjz)}j}]jc.hrtimer_setupasbuh1hhjubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmodeh]hmode}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlubeh}(h]h ]h"]h$]h&]jjuh1j3hj3hhhjEhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/hhhjEhMubah}(h]j*ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjEhMhj,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,hhhjEhMubeh}(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&]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}(hj"hhhNhNubah}(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)}(hjBh]hclockid_t clock_id}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj<ubj)}(hhh]jM)}(hthe clock to be usedh]hthe clock to be used}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubj)}(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}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjuubj)}(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&]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&]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.chM$ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM$ubh)}(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&]jjuh1hhjhhhjhM$ubj4)}(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}(hjChhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj?ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubh)}(hhh]j)}(hhrtimerh]hhrtimer}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]j)}jsj)sbc.hrtimer_setup_on_stackasbuh1hhj?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:)}(h1enum hrtimer_restart (*function)(struct hrtimer*)h](j?)}(hjAh]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}]j}c.hrtimer_setup_on_stackasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(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)}(hj6h]h(}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj?)}(hjBh]hstruct}(hjAhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjNhhhNhNubah}(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 reftargetjamodnameN classnameNjwjz)}j}]j}c.hrtimer_setup_on_stackasbuh1hhjubj)}(hjh]h*}(hj}hhhNhNubah}(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}]j}c.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?)}(hjAh]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 reftargetj modnameN classnameNjwjz)}j}]j}c.hrtimer_setup_on_stackasbuh1hhjubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmodeh]hmode}(hj4hhhNhNubah}(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"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.chM$hj[hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM$ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjvjHjvjIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM(hjzubj)}(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.chM%hjubj)}(hhh]jM)}(hThe timer to be initializedh]hThe timer to be initialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubj)}(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.chM&hjubj)}(hhh]jM)}(hthe callback functionh]hthe callback function}(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'hj ubj)}(hhh]jM)}(hThe clock to be usedh]hThe clock to be used}(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*``enum hrtimer_mode mode`` The timer mode h](j)}(h``enum hrtimer_mode mode``h]jS)}(hjJh]henum hrtimer_mode mode}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM(hjDubj)}(hhh]jM)}(hThe timer modeh]hThe timer mode}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hM(hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hM(hjubeh}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chM*hjzubjM)}(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.chM)hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*hrtimer_sleeper_start_expires (C function)c.hrtimer_sleeper_start_expireshNtauh1hhjhhhNhNubh)}(hhh](h)}(hWvoid hrtimer_sleeper_start_expires (struct hrtimer_sleeper *sl, enum hrtimer_mode mode)h]h)}(hVvoid hrtimer_sleeper_start_expires(struct hrtimer_sleeper *sl, enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hhrtimer_sleeper_start_expiresh]j)}(hhrtimer_sleeper_start_expiresh]hhrtimer_sleeper_start_expires}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h4(struct hrtimer_sleeper *sl, enum hrtimer_mode mode)h](j:)}(hstruct hrtimer_sleeper *slh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(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 }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hslh]hsl}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(henum hrtimer_mode modeh](j?)}(hjAh]henum}(hjyhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubh)}(hhh]j)}(h hrtimer_modeh]h hrtimer_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jAc.hrtimer_sleeper_start_expiresasbuh1hhjuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hmodeh]hmode}(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)}(hStart a hrtimer sleeper timerh]hStart a hrtimer sleeper timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct hrtimer_sleeper *sl`` sleeper to be started ``enum hrtimer_mode mode`` timer mode abs/rel **Description** Wrapper around hrtimer_start_expires() for hrtimer_sleeper based timers to allow PREEMPT_RT to tweak the delivery mode (soft/hardirq context)h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubj)}(hhh](j)}(h5``struct hrtimer_sleeper *sl`` sleeper to be started h](j)}(h``struct hrtimer_sleeper *sl``h]jS)}(hj.h]hstruct hrtimer_sleeper *sl}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj(ubj)}(hhh]jM)}(hsleeper to be startedh]hsleeper to be started}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhj%ubj)}(h.``enum hrtimer_mode mode`` timer mode abs/rel h](j)}(h``enum hrtimer_mode mode``h]jS)}(hjgh]henum hrtimer_mode mode}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjaubj)}(hhh]jM)}(htimer mode abs/relh]htimer mode abs/rel}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubjM)}(hWrapper around hrtimer_start_expires() for hrtimer_sleeper based timers to allow PREEMPT_RT to tweak the delivery mode (soft/hardirq context)h]hWrapper around hrtimer_start_expires() for hrtimer_sleeper based timers to allow PREEMPT_RT to tweak the delivery mode (soft/hardirq context)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+hrtimer_setup_sleeper_on_stack (C function) c.hrtimer_setup_sleeper_on_stackhNtauh1hhjhhhNhNubh)}(hhh](h)}(hlvoid hrtimer_setup_sleeper_on_stack (struct hrtimer_sleeper *sl, clockid_t clock_id, enum hrtimer_mode mode)h]h)}(hkvoid hrtimer_setup_sleeper_on_stack(struct hrtimer_sleeper *sl, clockid_t clock_id, enum hrtimer_mode mode)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hhrtimer_setup_sleeper_on_stackh]j)}(hhrtimer_setup_sleeper_on_stackh]hhrtimer_setup_sleeper_on_stack}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(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 }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]j)}(hhrtimer_sleeperh]hhrtimer_sleeper}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]j)}jsj sb c.hrtimer_setup_sleeper_on_stackasbuh1hhj ubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hslh]hsl}(hj}hhhNhNubah}(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?)}(hjAh]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&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h$initialize a sleeper in stack memoryh]h$initialize a sleeper in stack memory}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjOhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjjHjjjIjJjKuh1hhhhjhNhNubj)}(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)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:57: ./kernel/time/hrtimer.chMhjnubj)}(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.chMhjubj)}(hhh]jM)}(hsleeper to be initializedh]hsleeper to be initialized}(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.chMhjubj)}(hhh]jM)}(hthe clock to be usedh]hthe clock to be used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``enum hrtimer_mode mode`` timer mode abs/relh](j)}(h``enum hrtimer_mode mode``h]jS)}(hjh]henum hrtimer_mode mode}(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 mode abs/relh]htimer mode abs/rel}(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&]uh1jhjnubeh}(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}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhhhhhK=ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwaitqueue_active (C function)c.waitqueue_activehNtauh1hhjNhhhNhNubh)}(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}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhV/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&]uh1jPhjthhhjhK`ubh)}(hwaitqueue_activeh]j)}(hwaitqueue_activeh]hwaitqueue_active}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjthhhjhK`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&]jjuh1j3hjthhhjhK`ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjphhhjhK`ubah}(h]jkah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK`hjmhhubj4)}(hhh]jp_)}(hhh]j)}(h(locklessly test for waiters on the queueh]jM)}(hj=h]h(locklessly test for waiters on the queue}(hj?hhhNhNubah}(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&]uh1jhj8hhhjLhNubah}(h]h ]h"]h$]h&]j_j_uh1jo_hjLhK`hj5hhubah}(h]h ]h"]h$]h&]uh1j3hjmhhhjhK`ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbjHjbjIjJjKuh1hhhhjNhNhNubj)}(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)}(hjlh]h Parameters}(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.hhKdhjfubj)}(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&]uh1jhjfubjM)}(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.hhKchjfubjM)}(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.hhKbhjfubjM)}(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.hhKdhjfubjM)}(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.hhKehjfubjM)}(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.hhKhhjfubj)}(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.hhKkhjfubjM)}(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 }(hj0hhhNhNubj)}(h**cond**h]hcond}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubhW store such that we’ll observe an empty wait list while the waiter might not observe }(hj0hhhNhNubj)}(h**cond**h]hcond}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKvhjfubjM)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKzhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"wq_has_single_sleeper (C function)c.wq_has_single_sleeperhNtauh1hhjNhhhNhNubh)}(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 }(hj hhhNhNubah}(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}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjNhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjijHjijIjJjKuh1hhhhjNhNhNubj)}(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)}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjmubj)}(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&]uh1jhjmubjM)}(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.hhKhjmubjM)}(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.hhKhjmubjM)}(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.hhKhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwq_has_sleeper (C function)c.wq_has_sleeperhNtauh1hhjNhhhNhNubh)}(hhh](h)}(h5bool wq_has_sleeper (struct wait_queue_head *wq_head)h]h)}(h4bool wq_has_sleeper(struct wait_queue_head *wq_head)h](j)}(hjh]hbool}(hj! hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKubjQ)}(h h]h }(hj/ hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj. hKubh)}(hwq_has_sleeperh]j)}(hwq_has_sleeperh]hwq_has_sleeper}(hjA hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj= ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj. hKubj4)}(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>hjY ubjQ)}(h h]h }(hjj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY ubh)}(hhh]j)}(hwait_queue_headh]hwait_queue_head}(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj} modnameN classnameNjwjz)}j}]j)}jsjC sbc.wq_has_sleeperasbuh1hhjY 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)}(hwq_headh]hwq_head}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjU ubah}(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(check if there are any waiting processesh]h(check if there are any waiting processes}(Xhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj. hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjNhNhNubj)}(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)}(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.hhKhj ubj)}(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.hhKhj!ubj)}(hhh]jM)}(hwait queue headh]hwait queue head}(hj:!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6!hKhj7!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj6!hKhj!ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hj\!h]h Description}(hj^!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ!ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj ubjM)}(h-Returns true if wq_head has waiting processesh]h-Returns true if wq_head has waiting processes}(hjr!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj ubjM)}(h1Please refer to the comment for waitqueue_active.h]h1Please refer to the comment for waitqueue_active.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwake_up_pollfree (C function)c.wake_up_pollfreehNtauh1hhjNhhhNhNubh)}(hhh](h)}(h7void wake_up_pollfree (struct wait_queue_head *wq_head)h]h)}(h6void wake_up_pollfree(struct wait_queue_head *wq_head)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj!hKubh)}(hwake_up_pollfreeh]j)}(hwake_up_pollfreeh]hwake_up_pollfree}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj!hKubj4)}(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 }(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_pollfreeasbuh1hhj!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)}(hwq_headh]hwq_head}(hjF"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj!ubah}(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,signal that a polled waitqueue is going awayh]h,signal that a polled waitqueue is going away}(hjp"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhKhjm"hhubah}(h]h ]h"]h$]h&]uh1j3hj!hhhj!hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj"jHj"jIjJjKuh1hhhhjNhNhNubj)}(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&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event (C macro) c.wait_eventhNtauh1hhjNhhhNhNubh)}(hhh](h)}(h wait_eventh]h)}(h wait_eventh]h)}(h wait_eventh]j)}(hj:#h]h wait_event}(hjD#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.hhMNubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8#hhhjW#hMNubah}(h]j3#ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjW#hMNhj5#hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj5#hhhjW#hMNubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjp#jHjp#jIjJjKuh1hhhhjNhNhNubjM)}(h#``wait_event (wq_head, condition)``h]jS)}(hjv#h]hwait_event (wq_head, condition)}(hjx#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjt#ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMPhjNhhubji)}(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#hMNhjNhhubj)}(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}(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#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 }(hjT$hhhNhNubj)}(h **condition**h]h condition}(hj\$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT$ubh evaluates to true. The }(hjT$hhhNhNubj)}(h **condition**h]h condition}(hjn$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT$ubh$ is checked each time the waitqueue }(hjT$hhhNhNubj)}(h **wq_head**h]hwq_head}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT$ubh is woken up.}(hjT$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&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_freezable (C macro)c.wait_event_freezablehNtauh1hhjNhhhNhNubh)}(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$jIjJjKuh1hhhhjNhNhNubjM)}(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.hhMwhjNhhubji)}(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&%hMuhjNhhubj)}(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)}(hj3%h]h Parameters}(hj5%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1%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)}(hjR%h]hwq_head}(hjT%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjP%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMvhjL%ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjk%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjg%hMvhjh%ubah}(h]h ]h"]h$]h&]uh1jhjL%ubeh}(h]h ]h"]h$]h&]uh1jhjg%hMvhjI%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%hMwhjI%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&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_timeout (C macro)c.wait_event_timeouthNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_timeouth]h)}(hwait_event_timeouth]h)}(hwait_event_timeouth]j)}(hjJ&h]hwait_event_timeout}(hjT&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP&ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjL&hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjH&hhhjg&hMubah}(h]jC&ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjg&hMhjE&hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjE&hhhjg&hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj&jHj&jIjJjKuh1hhhhjNhNhNubjM)}(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.hhMhjNhhubji)}(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&hMhjNhhubj)}(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)}(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)}(hjL'h]htimeout}(hjN'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJ'ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjF'ubj)}(hhh]jM)}(htimeout, in jiffiesh]htimeout, in jiffies}(hje'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhja'hMhjb'ubah}(h]h ]h"]h$]h&]uh1jhjF'ubeh}(h]h ]h"]h$]h&]uh1jhja'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_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h=The process is put to sleep (TASK_UNINTERRUPTIBLE) until the }(hj'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.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 **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)}(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}(hj(hhhNhNubah}(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}(hj5(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj (ubh elapsed, 1 if the }(hj (hhhNhNubj)}(h **condition**h]h condition}(hjG(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj (ubh evaluated to }hj (sbjS)}(h``true``h]htrue}(hjY(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj (ubh after the }hj (sbj)}(h **timeout**h]htimeout}(hjk(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj (ubh7 elapsed, or 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.}(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&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_cmd (C macro)c.wait_event_cmdhNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_cmdh]h)}(hwait_event_cmdh]h)}(hwait_event_cmdh]j)}(hj(h]hwait_event_cmd}(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 )jIjJjKuh1hhhhjNhNhNubjM)}(h3``wait_event_cmd (wq_head, condition, cmd1, cmd2)``h]jS)}(hj)h]h/wait_event_cmd (wq_head, condition, cmd1, cmd2)}(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.hhMhjNhhubji)}(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&]uh1jhhj8)hMhjNhhubj)}(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)}(hjE)h]h Parameters}(hjG)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC)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)}(hjd)h]hwq_head}(hjf)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjb)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&]uh1jLhjy)hMhjz)ubah}(h]h ]h"]h$]h&]uh1jhj^)ubeh}(h]h ]h"]h$]h&]uh1jhjy)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)}(h3``cmd1`` the command will be executed before sleep h](j)}(h``cmd1``h]jS)}(hj)h]hcmd1}(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)the command will be executed before sleeph]h)the command will be executed before 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[)ubj)}(h2``cmd2`` the command will be executed after sleep h](j)}(h``cmd2``h]jS)}(hj*h]hcmd2}(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(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&]uh1jhj?)ubjM)}(h**Description**h]j)}(hjJ*h]h Description}(hjL*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH*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_UNINTERRUPTIBLE) until the **condition** evaluates to true. The **condition** is checked each time the waitqueue **wq_head** is woken up.h](h=The process is put to sleep (TASK_UNINTERRUPTIBLE) until the }(hj`*hhhNhNubj)}(h **condition**h]h condition}(hjh*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`*ubh evaluates to true. The }(hj`*hhhNhNubj)}(h **condition**h]h condition}(hjz*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?)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"wait_event_interruptible (C macro)c.wait_event_interruptiblehNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_interruptibleh]h)}(hwait_event_interruptibleh]h)}(hwait_event_interruptibleh]j)}(hj*h]hwait_event_interruptible}(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+jIjJjKuh1hhhhjNhNhNubjM)}(h1``wait_event_interruptible (wq_head, condition)``h]jS)}(hj +h]h-wait_event_interruptible (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.hhMhjNhhubji)}(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&]uh1jhhj2+hMhjNhhubj)}(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)}(hj?+h]h Parameters}(hjA+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.hhMhj9+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.hhMhjX+ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjw+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjs+hMhjt+ubah}(h]h ]h"]h$]h&]uh1jhjX+ubeh}(h]h ]h"]h$]h&]uh1jhjs+hMhjU+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+hMhjU+ubeh}(h]h ]h"]h$]h&]uh1jhj9+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.hhMhj9+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 }(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.hhMhj9+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.hhMhj9+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}(hjD,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.hhMhj9+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*wait_event_interruptible_timeout (C macro)"c.wait_event_interruptible_timeouthNtauh1hhjNhhhNhNubh)}(hhh](h)}(h wait_event_interruptible_timeouth]h)}(h wait_event_interruptible_timeouth]h)}(h wait_event_interruptible_timeouth]j)}(hjw,h]h wait_event_interruptible_timeout}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj},ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjy,hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hju,hhhj,hMubah}(h]jp,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj,hMhjr,hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjr,hhhj,hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj,jHj,jIjJjKuh1hhhhjNhNhNubjM)}(hB``wait_event_interruptible_timeout (wq_head, condition, timeout)``h]jS)}(hj,h]h>wait_event_interruptible_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.hhMhjNhhubji)}(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,hMhjNhhubj)}(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)}(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}(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.hhMhj:-ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjY-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjU-hMhjV-ubah}(h]h ]h"]h$]h&]uh1jhj:-ubeh}(h]h ]h"]h$]h&]uh1jhjU-hMhj,ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]jS)}(hjy-h]htimeout}(hj{-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjw-ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjs-ubj)}(hhh]jM)}(htimeout, in jiffiesh]htimeout, in jiffies}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjs-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.hhM hj,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 }(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.hhM hj,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)}(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 }(hj6.hhhNhNubj)}(h **condition**h]h condition}(hj>.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6.ubh evaluated to }(hj6.hhhNhNubjS)}(h ``false``h]hfalse}(hjP.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6.ubh after the }(hj6.hhhNhNubj)}(h **timeout**h]htimeout}(hjb.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6.ubh elapsed, 1 if the }(hj6.hhhNhNubj)}(h **condition**h]h condition}(hjt.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6.ubh evaluated to }hj6.sbjS)}(h``true``h]htrue}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6.ubh after the }hj6.sbj)}(h **timeout**h]htimeout}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6.ubh4 elapsed, the remaining jiffies (at least 1) if the }(hj6.hhhNhNubj)}(h **condition**h]h condition}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6.ubh evaluated to }(hj6.hhhNhNubjS)}(h``true``h]htrue}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6.ubh before the }(hj6.hhhNhNubj)}(h **timeout**h]htimeout}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6.ubh elapsed, or -}(hj6.hhhNhNubjS)}(h``ERESTARTSYS``h]h ERESTARTSYS}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6.ubh# if it was interrupted by a signal.}(hj6.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&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_hrtimeout (C macro)c.wait_event_hrtimeouthNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_hrtimeouth]h)}(hwait_event_hrtimeouth]h)}(hwait_event_hrtimeouth]j)}(hj/h]hwait_event_hrtimeout}(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.hhM;ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/hhhj0/hM;ubah}(h]j /ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0/hM;hj/hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj/hhhj0/hM;ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjI/jHjI/jIjJjKuh1hhhhjNhNhNubjM)}(h6``wait_event_hrtimeout (wq_head, condition, timeout)``h]jS)}(hjO/h]h2wait_event_hrtimeout (wq_head, condition, timeout)}(hjQ/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjM/ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM=hjNhhubji)}(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}(hji/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM;hje/ubah}(h]h ]h"]h$]h&]uh1jhhjw/hM;hjNhhubj)}(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)}(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.hhM?hj~/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.hhM<hj/ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(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)}(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.hhM=hj/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/hM=hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hM=hj/ubj)}(h"``timeout`` timeout, as a ktime_t h](j)}(h ``timeout``h]jS)}(hj0h]htimeout}(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.hhM>hj0ubj)}(hhh]jM)}(htimeout, as a ktime_th]htimeout, as a ktime_t}(hj.0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*0hM>hj+0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj*0hM>hj/ubeh}(h]h ]h"]h$]h&]uh1jhj~/ubjM)}(h**Description**h]j)}(hjP0h]h Description}(hjR0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN0ubah}(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 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 }(hjf0hhhNhNubj)}(h **condition**h]h condition}(hjn0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf0ubh0 evaluates to true or a signal is received. The }(hjf0hhhNhNubj)}(h **condition**h]h condition}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf0ubh$ is checked each time the waitqueue }(hjf0hhhNhNubj)}(h **wq_head**h]hwq_head}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf0ubh is woken up.}(hjf0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM?hj~/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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMChj~/ubjM)}(hVThe function returns 0 if **condition** became true, or -ETIME if the timeout elapsed.h](hThe function returns 0 if }(hj0hhhNhNubj)}(h **condition**h]h condition}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh/ became true, or -ETIME if the timeout elapsed.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMFhj~/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,wait_event_interruptible_hrtimeout (C macro)$c.wait_event_interruptible_hrtimeouthNtauh1hhjNhhhNhNubh)}(hhh](h)}(h"wait_event_interruptible_hrtimeouth]h)}(h"wait_event_interruptible_hrtimeouth]h)}(h"wait_event_interruptible_hrtimeouth]j)}(hj0h]h"wait_event_interruptible_hrtimeout}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0hhhj1hMUubah}(h]j0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hMUhj0hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj0hhhj1hMUubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj+1jHj+1jIjJjKuh1hhhhjNhNhNubjM)}(h?``wait_event_interruptible_hrtimeout (wq, condition, timeout)``h]jS)}(hj11h]h;wait_event_interruptible_hrtimeout (wq, condition, timeout)}(hj31hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/1ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhjNhhubji)}(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}(hjK1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhjG1ubah}(h]h ]h"]h$]h&]uh1jhhjY1hMUhjNhhubj)}(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)}(hjf1h]h Parameters}(hjh1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd1ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMYhj`1ubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]jS)}(hj1h]hwq}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMVhj1ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hMVhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMVhj|1ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj1h]h condition}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhj1ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hMWhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMWhj|1ubj)}(h"``timeout`` timeout, as a ktime_t h](j)}(h ``timeout``h]jS)}(hj1h]htimeout}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMXhj1ubj)}(hhh]jM)}(htimeout, as a ktime_th]htimeout, as a ktime_t}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 2hMXhj 2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj 2hMXhj|1ubeh}(h]h ]h"]h$]h&]uh1jhj`1ubjM)}(h**Description**h]j)}(hj22h]h Description}(hj42hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj02ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMZhj`1ubjM)}(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 }(hjH2hhhNhNubj)}(h **condition**h]h condition}(hjP2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH2ubh0 evaluates to true or a signal is received. The }(hjH2hhhNhNubj)}(h **condition**h]h condition}(hjb2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH2ubh$ is checked each time the waitqueue }(hjH2hhhNhNubj)}(h**wq**h]hwq}(hjt2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH2ubh is woken up.}(hjH2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMYhj`1ubjM)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM]hj`1ubjM)}(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 }(hj2hhhNhNubj)}(h **condition**h]h condition}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh_ became true, -ERESTARTSYS if it was interrupted by a signal, or -ETIME if the timeout elapsed.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM`hj`1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_idle (C macro)c.wait_event_idlehNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_idleh]h)}(hwait_event_idleh]h)}(hwait_event_idleh]j)}(hj2h]hwait_event_idle}(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.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj2hhhj2hMubah}(h]j2ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hMhj2hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj2hhhj2hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj 3jHj 3jIjJjKuh1hhhhjNhNhNubjM)}(h(``wait_event_idle (wq_head, condition)``h]jS)}(hj3h]h$wait_event_idle (wq_head, condition)}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjNhhubji)}(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-3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj)3ubah}(h]h ]h"]h$]h&]uh1jhhj;3hMhjNhhubj)}(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)}(hjH3h]h Parameters}(hjJ3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF3ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjB3ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hjg3h]hwq_head}(hji3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhje3ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hThMhja3ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|3hMhj}3ubah}(h]h ]h"]h$]h&]uh1jhja3ubeh}(h]h ]h"]h$]h&]uh1jhj|3hMhj^3ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj3h]h condition}(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.hhMhj3ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj^3ubeh}(h]h ]h"]h$]h&]uh1jhjB3ubjM)}(h**Description**h]j)}(hj3h]h Description}(hj3hhhNhNubah}(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.hhMhjB3ubjM)}(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 }(hj3hhhNhNubj)}(h **condition**h]h condition}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh evaluates to true. The }(hj3hhhNhNubj)}(h **condition**h]h condition}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh$ is checked each time the waitqueue }(hj3hhhNhNubj)}(h **wq_head**h]hwq_head}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh is woken up.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjB3ubjM)}(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.}(hj64hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjB3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#wait_event_idle_exclusive (C macro)c.wait_event_idle_exclusivehNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_idle_exclusiveh]h)}(hwait_event_idle_exclusiveh]h)}(hwait_event_idle_exclusiveh]j)}(hj_4h]hwait_event_idle_exclusive}(hji4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhja4hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]4hhhj|4hMubah}(h]jX4ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj|4hMhjZ4hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjZ4hhhj|4hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj4jHj4jIjJjKuh1hhhhjNhNhNubjM)}(h2``wait_event_idle_exclusive (wq_head, condition)``h]jS)}(hj4h]h.wait_event_idle_exclusive (wq_head, condition)}(hj4hhhNhNubah}(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.hhMhjNhhubji)}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj4ubah}(h]h ]h"]h$]h&]uh1jhhj4hMhjNhhubj)}(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)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj4ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hj4h]hwq_head}(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.hhMhj4ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj4ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj(5h]h condition}(hj*5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj&5ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj"5ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjA5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=5hMhj>5ubah}(h]h ]h"]h$]h&]uh1jhj"5ubeh}(h]h ]h"]h$]h&]uh1jhj=5hMhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4ubjM)}(h**Description**h]j)}(hjc5h]h Description}(hje5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja5ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj4ubjM)}(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 }(hjy5hhhNhNubj)}(h **condition**h]h condition}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy5ubh evaluates to true. The }(hjy5hhhNhNubj)}(h **condition**h]h condition}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy5ubh$ is checked each time the waitqueue }(hjy5hhhNhNubj)}(h **wq_head**h]hwq_head}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy5ubh is woken up.}(hjy5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj4ubjM)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj4ubjM)}(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.hhMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!wait_event_idle_timeout (C macro)c.wait_event_idle_timeouthNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_idle_timeouth]h)}(hwait_event_idle_timeouth]h)}(hwait_event_idle_timeouth]j)}(hj5h]hwait_event_idle_timeout}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj5hhhj6hMubah}(h]j5ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6hMhj5hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj5hhhj6hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj,6jHj,6jIjJjKuh1hhhhjNhNhNubjM)}(h9``wait_event_idle_timeout (wq_head, condition, timeout)``h]jS)}(hj26h]h5wait_event_idle_timeout (wq_head, condition, timeout)}(hj46hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj06ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjNhhubji)}(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}(hjL6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjH6ubah}(h]h ]h"]h$]h&]uh1jhhjZ6hMhjNhhubj)}(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)}(hjg6h]h Parameters}(hji6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje6ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhja6ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hj6h]hwq_head}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj6ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj}6ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj6h]h condition}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj6ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj}6ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]jS)}(hj6h]htimeout}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj6ubj)}(hhh]jM)}(htimeout, in jiffiesh]htimeout, in jiffies}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj 7hMhj}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&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhja6ubjM)}(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 }(hjI7hhhNhNubj)}(h **condition**h]h condition}(hjQ7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI7ubh evaluates to true. The }(hjI7hhhNhNubj)}(h **condition**h]h condition}(hjc7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI7ubh$ is checked each time the waitqueue }(hjI7hhhNhNubj)}(h **wq_head**h]hwq_head}(hju7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI7ubh is woken up.}(hjI7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhja6ubjM)}(hjwake_up() has to be called after changing any variable that could change the result of the wait condition.h]hjwake_up() has to be called after changing any variable that could change the result of the wait condition.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhja6ubjM)}(h **Return**h]j)}(hj7h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhja6ubjM)}(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 }(hj7hhhNhNubj)}(h **condition**h]h condition}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh evaluated to }(hj7hhhNhNubjS)}(h ``false``h]hfalse}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubh after the }(hj7hhhNhNubj)}(h **timeout**h]htimeout}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh elapsed, 1 if the }(hj7hhhNhNubj)}(h **condition**h]h condition}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh evaluated to }hj7sbjS)}(h``true``h]htrue}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubh after the }hj7sbj)}(h **timeout**h]htimeout}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh7 elapsed, or the remaining jiffies (at least 1) if the }(hj7hhhNhNubj)}(h **condition**h]h condition}(hj)8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh evaluated to }(hj7hhhNhNubjS)}(h``true``h]htrue}(hj;8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubh before the }(hj7hhhNhNubj)}(h **timeout**h]htimeout}(hjM8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh elapsed.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhja6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+wait_event_idle_exclusive_timeout (C macro)#c.wait_event_idle_exclusive_timeouthNtauh1hhjNhhhNhNubh)}(hhh](h)}(h!wait_event_idle_exclusive_timeouth]h)}(h!wait_event_idle_exclusive_timeouth]h)}(h!wait_event_idle_exclusive_timeouth]j)}(hj8h]h!wait_event_idle_exclusive_timeout}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj8hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj~8hhhj8hMubah}(h]jy8ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj8hMhj{8hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj{8hhhj8hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj8jHj8jIjJjKuh1hhhhjNhNhNubjM)}(hC``wait_event_idle_exclusive_timeout (wq_head, condition, timeout)``h]jS)}(hj8h]h?wait_event_idle_exclusive_timeout (wq_head, condition, timeout)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjNhhubji)}(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}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj8ubah}(h]h ]h"]h$]h&]uh1jhhj8hMhjNhhubj)}(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)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj8ubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hj9h]hwq_head}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj 9ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj)9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%9hMhj&9ubah}(h]h ]h"]h$]h&]uh1jhj 9ubeh}(h]h ]h"]h$]h&]uh1jhj%9hMhj9ubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hjI9h]h condition}(hjK9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjG9ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjC9ubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjb9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^9hMhj_9ubah}(h]h ]h"]h$]h&]uh1jhjC9ubeh}(h]h ]h"]h$]h&]uh1jhj^9hMhj9ubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]jS)}(hj9h]htimeout}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj|9ubj)}(hhh]jM)}(htimeout, in jiffiesh]htimeout, in jiffies}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj|9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubeh}(h]h ]h"]h$]h&]uh1jhj8ubjM)}(h**Description**h]j)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj8ubjM)}(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 }(hj9hhhNhNubj)}(h **condition**h]h condition}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh evaluates to true. The }(hj9hhhNhNubj)}(h **condition**h]h condition}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh$ is checked each time the waitqueue }(hj9hhhNhNubj)}(h **wq_head**h]hwq_head}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh is woken up.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj8ubjM)}(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.hhMhj8ubjM)}(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.hhMhj8ubjM)}(h **Return**h]j)}(hj8:h]hReturn}(hj::hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6:ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj8ubjM)}(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 }(hjN:hhhNhNubj)}(h **condition**h]h condition}(hjV:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN:ubh evaluated to }(hjN:hhhNhNubjS)}(h ``false``h]hfalse}(hjh:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjN:ubh after the }(hjN:hhhNhNubj)}(h **timeout**h]htimeout}(hjz:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN:ubh elapsed, 1 if the }(hjN:hhhNhNubj)}(h **condition**h]h condition}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN:ubh evaluated to }hjN:sbjS)}(h``true``h]htrue}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjN:ubh after the }hjN:sbj)}(h **timeout**h]htimeout}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN:ubh7 elapsed, or the remaining jiffies (at least 1) if the }(hjN:hhhNhNubj)}(h **condition**h]h condition}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN:ubh evaluated to }(hjN:hhhNhNubjS)}(h``true``h]htrue}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjN:ubh before the }(hjN:hhhNhNubj)}(h **timeout**h]htimeout}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN:ubh elapsed.}(hjN:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)wait_event_interruptible_locked (C macro)!c.wait_event_interruptible_lockedhNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_interruptible_lockedh]h)}(hwait_event_interruptible_lockedh]h)}(hwait_event_interruptible_lockedh]j)}(hj;h]hwait_event_interruptible_locked}(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;hhhj6;hMubah}(h]j;ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6;hMhj;hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj;hhhj6;hMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjO;jHjO;jIjJjKuh1hhhhjNhNhNubjM)}(h3``wait_event_interruptible_locked (wq, condition)``h]jS)}(hjU;h]h/wait_event_interruptible_locked (wq, condition)}(hjW;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjS;ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjNhhubji)}(h"sleep until a condition gets true h]jM)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hjo;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjk;ubah}(h]h ]h"]h$]h&]uh1jhhj};hMhjNhhubj)}(hXg**Parameters** ``wq`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up. It must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held. The lock is locked/unlocked using spin_lock()/spin_unlock() functions which must match the way they are locked/unlocked outside of this macro. wake_up_locked() has to be called after changing any variable that could change the result of the wait condition. The function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](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.hhM!hj;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.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;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.hhM!hj;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 }(hj3<hhhNhNubj)}(h **condition**h]h condition}(hj;<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3<ubh0 evaluates to true or a signal is received. The }(hj3<hhhNhNubj)}(h **condition**h]h condition}(hjM<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3<ubh$ is checked each time the waitqueue }(hj3<hhhNhNubj)}(h**wq**h]hwq}(hj_<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3<ubh is woken up.}(hj3<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM hj;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 }(hjx<hhhNhNubj)}(h **condition**h]h condition}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx<ubhO testing is done while lock is held and when this macro exits the lock is held.}(hjx<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM$hj;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.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM(hj;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.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM,hj;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.hhM/hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-wait_event_interruptible_locked_irq (C macro)%c.wait_event_interruptible_locked_irqhNtauh1hhjNhhhNhNubh)}(hhh](h)}(h#wait_event_interruptible_locked_irqh]h)}(h#wait_event_interruptible_locked_irqh]h)}(h#wait_event_interruptible_locked_irqh]j)}(hj<h]h#wait_event_interruptible_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.hhM8ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj<hhhj=hM8ubah}(h]j<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj=hM8hj<hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj<hhhj=hM8ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj(=jHj(=jIjJjKuh1hhhhjNhNhNubjM)}(h7``wait_event_interruptible_locked_irq (wq, condition)``h]jS)}(hj.=h]h3wait_event_interruptible_locked_irq (wq, condition)}(hj0=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.hhM:hjNhhubji)}(h"sleep until a condition gets true h]jM)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hjH=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM8hjD=ubah}(h]h ]h"]h$]h&]uh1jhhjV=hM8hjNhhubj)}(hXo**Parameters** ``wq`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up. It must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held. The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() functions which must match the way they are locked/unlocked outside of this macro. wake_up_locked() has to be called after changing any variable that could change the result of the wait condition. The function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](jM)}(h**Parameters**h]j)}(hjc=h]h Parameters}(hje=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja=ubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM<hj]=ubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]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.hhM9hj|=ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=hM9hj=ubah}(h]h ]h"]h$]h&]uh1jhj|=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM9hjy=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.hhM:hj=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=hM:hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM:hjy=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.hhM<hj]=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}(hj8>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.hhM;hj]=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 }(hjQ>hhhNhNubj)}(h **condition**h]h condition}(hjY>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ>ubhO testing is done while lock is held and when this macro exits the lock is held.}(hjQ>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM?hj]=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.}(hjr>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMChj]=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.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMGhj]=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.hhMJhj]=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h3wait_event_interruptible_exclusive_locked (C macro)+c.wait_event_interruptible_exclusive_lockedhNtauh1hhjNhhhNhNubh)}(hhh](h)}(h)wait_event_interruptible_exclusive_lockedh]h)}(h)wait_event_interruptible_exclusive_lockedh]h)}(h)wait_event_interruptible_exclusive_lockedh]j)}(hj>h]h)wait_event_interruptible_exclusive_locked}(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.hhMSubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>hhhj>hMSubah}(h]j>ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj>hMShj>hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj>hhhj>hMSubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj?jHj?jIjJjKuh1hhhhjNhNhNubjM)}(h=``wait_event_interruptible_exclusive_locked (wq, condition)``h]jS)}(hj?h]h9wait_event_interruptible_exclusive_locked (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.hhMUhjNhhubji)}(h.sleep exclusively until a condition gets true h]jM)}(h-sleep exclusively until a condition gets trueh]h-sleep exclusively 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.hhMShj?ubah}(h]h ]h"]h$]h&]uh1jhhj/?hMShjNhhubj)}(hX"**Parameters** ``wq`` the waitqueue to wait on ``condition`` a C expression for the event to wait for **Description** The process is put to sleep (TASK_INTERRUPTIBLE) until the **condition** evaluates to true or a signal is received. The **condition** is checked each time the waitqueue **wq** is woken up. It must be called with wq.lock being held. This spinlock is unlocked while sleeping but **condition** testing is done while lock is held and when this macro exits the lock is held. The lock is locked/unlocked using spin_lock()/spin_unlock() functions which must match the way they are locked/unlocked outside of this macro. The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag set thus when other process waits process on the list if this process is awaken further processes are not considered. wake_up_locked() has to be called after changing any variable that could change the result of the wait condition. The function will return -ERESTARTSYS if it was interrupted by a signal and 0 if **condition** evaluated to true.h](jM)}(h**Parameters**h]j)}(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.hhMWhj6?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&]uh1jRhjY?ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMThjU?ubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjt?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjp?hMThjq?ubah}(h]h ]h"]h$]h&]uh1jhjU?ubeh}(h]h ]h"]h$]h&]uh1jhjp?hMThjR?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?hMUhjR?ubeh}(h]h ]h"]h$]h&]uh1jhj6?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.hhMWhj6?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.hhMVhj6?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}(hj2@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.hhMZhj6?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.}(hjK@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM^hj6?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.}(hjZ@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMbhj6?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.}(hji@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMfhj6?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 }(hjx@hhhNhNubj)}(h **condition**h]h condition}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx@ubh evaluated to true.}(hjx@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMihj6?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h7wait_event_interruptible_exclusive_locked_irq (C macro)/c.wait_event_interruptible_exclusive_locked_irqhNtauh1hhjNhhhNhNubh)}(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@jIjJjKuh1hhhhjNhNhNubjM)}(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.hhMthjNhhubji)}(h"sleep until a condition gets true h]jM)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hj AhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMrhjAubah}(h]h ]h"]h$]h&]uh1jhhjAhMrhjNhhubj)}(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$Ah]h Parameters}(hj&AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Aubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMvhjAubj)}(hhh](j)}(h ``wq`` the waitqueue to wait on h](j)}(h``wq``h]jS)}(hjCAh]hwq}(hjEAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAAubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMshj=Aubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hj\AhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXAhMshjYAubah}(h]h ]h"]h$]h&]uh1jhj=Aubeh}(h]h ]h"]h$]h&]uh1jhjXAhMshj:Aubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj|Ah]h condition}(hj~AhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzAubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMthjvAubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhMthjAubah}(h]h ]h"]h$]h&]uh1jhjvAubeh}(h]h ]h"]h$]h&]uh1jhjAhMthj:Aubeh}(h]h ]h"]h$]h&]uh1jhjAubjM)}(h**Description**h]j)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMvhjAubjM)}(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 }(hjAhhhNhNubj)}(h **condition**h]h condition}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh0 evaluates to true or a signal is received. The }(hjAhhhNhNubj)}(h **condition**h]h condition}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh$ is checked each time the waitqueue }(hjAhhhNhNubj)}(h**wq**h]hwq}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh is woken up.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMuhjAubjM)}(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 }(hjBhhhNhNubj)}(h **condition**h]h condition}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubhO testing is done while lock is held and when this macro exits the lock is held.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMyhjAubjM)}(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.}(hj3BhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM}hjAubjM)}(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.}(hjBBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubjM)}(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.}(hjQBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjAubjM)}(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`BhhhNhNubj)}(h **condition**h]h condition}(hjhBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Bubh evaluated to true.}(hj`BhhhNhNubeh}(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&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_killable (C macro)c.wait_event_killablehNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_killableh]h)}(hwait_event_killableh]h)}(hwait_event_killableh]j)}(hjBh]hwait_event_killable}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhjBhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjBhhhjBhMubah}(h]jBah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBhMhjBhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjBhhhjBhMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjBjHjBjIjJjKuh1hhhhjNhNhNubjM)}(h,``wait_event_killable (wq_head, condition)``h]jS)}(hjBh]h(wait_event_killable (wq_head, condition)}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjNhhubji)}(h"sleep until a condition gets true h]jM)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjBubah}(h]h ]h"]h$]h&]uh1jhhjBhMhjNhhubj)}(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 Ch]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Cubah}(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)}(hj+Ch]hwq_head}(hj-ChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)Cubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj%Cubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjDChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@ChMhjACubah}(h]h ]h"]h$]h&]uh1jhj%Cubeh}(h]h ]h"]h$]h&]uh1jhj@ChMhj"Cubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hjdCh]h condition}(hjfChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbCubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj^Cubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj}ChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyChMhjzCubah}(h]h ]h"]h$]h&]uh1jhj^Cubeh}(h]h ]h"]h$]h&]uh1jhjyChMhj"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&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjCubjM)}(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 }(hjChhhNhNubj)}(h **condition**h]h condition}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh0 evaluates to true or a signal is received. The }(hjChhhNhNubj)}(h **condition**h]h condition}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh$ is checked each time the waitqueue }(hjChhhNhNubj)}(h **wq_head**h]hwq_head}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh is woken up.}(hjChhhNhNubeh}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjCubjM)}(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 DhhhNhNubj)}(h **condition**h]h condition}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Dubh evaluated to true.}(hj DhhhNhNubeh}(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&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_state (C macro)c.wait_event_statehNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_stateh]h)}(hwait_event_stateh]h)}(hwait_event_stateh]j)}(hjDDh]hwait_event_state}(hjNDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJDubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFDhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hShMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjBDhhhjaDhMubah}(h]j=Dah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjaDhMhj?Dhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj?DhhhjaDhMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjzDjHjzDjIjJjKuh1hhhhjNhNhNubjM)}(h0``wait_event_state (wq_head, condition, state)``h]jS)}(hjDh]h,wait_event_state (wq_head, condition, state)}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~Dubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjNhhubji)}(h"sleep until a condition gets true h]jM)}(h!sleep until a condition gets trueh]h!sleep until a condition gets true}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjDubah}(h]h ]h"]h$]h&]uh1jhhjDhMhjNhhubj)}(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)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(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)}(hjDh]hwq_head}(hjDhhhNhNubah}(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.hhMhjDubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjDubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj Eh]h condition}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj Eubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjEubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj&EhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj"EhMhj#Eubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj"EhMhjDubj)}(h``state`` state to sleep in h](j)}(h ``state``h]jS)}(hjFEh]hstate}(hjHEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDEubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj@Eubj)}(hhh]jM)}(hstate to sleep inh]hstate to sleep in}(hj_EhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[EhMhj\Eubah}(h]h ]h"]h$]h&]uh1jhj@Eubeh}(h]h ]h"]h$]h&]uh1jhj[EhMhjDubeh}(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&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjDubjM)}(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 (}(hjEhhhNhNubj)}(h **state**h]hstate}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh ) until the }(hjEhhhNhNubj)}(h **condition**h]h condition}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh< evaluates to true or a signal is received (when allowed by }(hjEhhhNhNubj)}(h **state**h]hstate}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh). The }(hjEhhhNhNubj)}(h **condition**h]h condition}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh$ is checked each time the waitqueue }(hjEhhhNhNubj)}(h **wq_head**h]hwq_head}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh is woken up.}(hjEhhhNhNubeh}(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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjDubjM)}(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 }(hjFhhhNhNubj)}(h **state**h]hstate}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh ) and 0 if }(hjFhhhNhNubj)}(h **condition**h]h condition}(hj)FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh evaluated to true.}(hjFhhhNhNubeh}(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&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%wait_event_killable_timeout (C macro)c.wait_event_killable_timeouthNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_killable_timeouth]h)}(hwait_event_killable_timeouth]h)}(hwait_event_killable_timeouth]j)}(hj\Fh]hwait_event_killable_timeout}(hjfFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbFubah}(h]h ](jjeh"]h$]h&]jjuh1hhj^FhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjZFhhhjyFhMubah}(h]jUFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjyFhMhjWFhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjWFhhhjyFhMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjFjHjFjIjJjKuh1hhhhjNhNhNubjM)}(h=``wait_event_killable_timeout (wq_head, condition, timeout)``h]jS)}(hjFh]h9wait_event_killable_timeout (wq_head, condition, timeout)}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjNhhubji)}(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}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjFubah}(h]h ]h"]h$]h&]uh1jhhjFhMhjNhhubj)}(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)}(hjFh]h Parameters}(hjFhhhNhNubah}(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.hhMhjFubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hjFh]hwq_head}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjFubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjFubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hj%Gh]h condition}(hj'GhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj#Gubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjGubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hj>GhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:GhMhj;Gubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhj:GhMhjFubj)}(h ``timeout`` timeout, in jiffies h](j)}(h ``timeout``h]jS)}(hj^Gh]htimeout}(hj`GhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\Gubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjXGubj)}(hhh]jM)}(htimeout, in jiffiesh]htimeout, in jiffies}(hjwGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjsGhMhjtGubah}(h]h ]h"]h$]h&]uh1jhjXGubeh}(h]h ]h"]h$]h&]uh1jhjsGhMhjFubeh}(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&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjFubjM)}(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 }(hjGhhhNhNubj)}(h **condition**h]h condition}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh5 evaluates to true or a kill signal is received. The }(hjGhhhNhNubj)}(h **condition**h]h condition}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh$ is checked each time the waitqueue }(hjGhhhNhNubj)}(h **wq_head**h]hwq_head}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh is woken up.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjFubjM)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjFubjM)}(h)Only kill signals interrupt this process.h]h)Only kill signals interrupt this process.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjFubjM)}(h **Return**h]j)}(hjHh]hReturn}(hjHhhhNhNubah}(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.hhMhjFubjM)}(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*HhhhNhNubj)}(h **condition**h]h condition}(hj2HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Hubh evaluated to }(hj*HhhhNhNubjS)}(h ``false``h]hfalse}(hjDHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*Hubh after the }(hj*HhhhNhNubj)}(h **timeout**h]htimeout}(hjVHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Hubh elapsed, 1 if the }(hj*HhhhNhNubj)}(h **condition**h]h condition}(hjhHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Hubh evaluated to }hj*HsbjS)}(h``true``h]htrue}(hjzHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*Hubh after the }hj*Hsbj)}(h **timeout**h]htimeout}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Hubh4 elapsed, the remaining jiffies (at least 1) if the }(hj*HhhhNhNubj)}(h **condition**h]h condition}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Hubh evaluated to }(hj*HhhhNhNubjS)}(h``true``h]htrue}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*Hubh before the }(hj*HhhhNhNubj)}(h **timeout**h]htimeout}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Hubh elapsed, or -}(hj*HhhhNhNubjS)}(h``ERESTARTSYS``h]h ERESTARTSYS}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*Hubh( if it was interrupted by a kill signal.}(hj*HhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!wait_event_lock_irq_cmd (C macro)c.wait_event_lock_irq_cmdhNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_lock_irq_cmdh]h)}(hwait_event_lock_irq_cmdh]h)}(hwait_event_lock_irq_cmdh]j)}(hjIh]hwait_event_lock_irq_cmd}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Iubah}(h]h ](jjeh"]h$]h&]jjuh1hhj IhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjIhhhj$IhMubah}(h]jIah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj$IhMhjIhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjIhhhj$IhMubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj=IjHj=IjIjJjKuh1hhhhjNhNhNubjM)}(h;``wait_event_lock_irq_cmd (wq_head, condition, lock, cmd)``h]jS)}(hjCIh]h7wait_event_lock_irq_cmd (wq_head, condition, lock, cmd)}(hjEIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAIubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjNhhubji)}(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]IhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjYIubah}(h]h ]h"]h$]h&]uh1jhhjkIhMhjNhhubj)}(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)}(hjxIh]h Parameters}(hjzIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvIubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjrIubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hjIh]hwq_head}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjIubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjIubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hjIh]h condition}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjIubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjIubj)}(hj``lock`` a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards. h](j)}(h``lock``h]jS)}(hj Jh]hlock}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjJubj)}(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"JhhhNhNubah}(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&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubj)}(hM``cmd`` a command which is invoked outside the critical section before sleep h](j)}(h``cmd``h]jS)}(hjCJh]hcmd}(hjEJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAJubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhj=Jubj)}(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\JhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjYJubah}(h]h ]h"]h$]h&]uh1jhj=Jubeh}(h]h ]h"]h$]h&]uh1jhjXJhMhjIubeh}(h]h ]h"]h$]h&]uh1jhjrIubjM)}(h**Description**h]j)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Jubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjrIubjM)}(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 }(hjJhhhNhNubj)}(h **condition**h]h condition}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh evaluates to true. The }(hjJhhhNhNubj)}(h **condition**h]h condition}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh$ is checked each time the waitqueue }(hjJhhhNhNubj)}(h **wq_head**h]hwq_head}(hjJhhhNhNubah}(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.hhMhjrIubjM)}(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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMhjrIubjM)}(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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM"hjrIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_event_lock_irq (C macro)c.wait_event_lock_irqhNtauh1hhjNhhhNhNubh)}(hhh](h)}(hwait_event_lock_irqh]h)}(hwait_event_lock_irqh]h)}(hwait_event_lock_irqh]j)}(hjKh]hwait_event_lock_irq}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1hhjKhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM/ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhj/KhM/ubah}(h]j Kah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/KhM/hj Khhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj Khhhj/KhM/ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjHKjHjHKjIjJjKuh1hhhhjNhNhNubjM)}(h2``wait_event_lock_irq (wq_head, condition, lock)``h]jS)}(hjNKh]h.wait_event_lock_irq (wq_head, condition, lock)}(hjPKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLKubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM1hjNhhubji)}(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.}(hjhKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM/hjdKubah}(h]h ]h"]h$]h&]uh1jhhjvKhM/hjNhhubj)}(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)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM3hj}Kubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hjKh]hwq_head}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM3hjKubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhM3hjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhM3hjKubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hjKh]h condition}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM4hjKubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhM4hjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhM4hjKubj)}(hb``lock`` a locked spinlock_t, which will be released before schedule() and reacquired afterwards. h](j)}(h``lock``h]jS)}(hjLh]hlock}(hjLhhhNhNubah}(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.hhM6hjLubj)}(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-LhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM5hj*Lubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhj)LhM6hjKubeh}(h]h ]h"]h$]h&]uh1jhj}KubjM)}(h**Description**h]j)}(hjPLh]h Description}(hjRLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNLubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM8hj}KubjM)}(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 }(hjfLhhhNhNubj)}(h **condition**h]h condition}(hjnLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfLubh evaluates to true. The }(hjfLhhhNhNubj)}(h **condition**h]h condition}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfLubh$ is checked each time the waitqueue }(hjfLhhhNhNubj)}(h **wq_head**h]hwq_head}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfLubh is woken up.}(hjfLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM7hj}KubjM)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM;hj}KubjM)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM>hj}Kubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/wait_event_interruptible_lock_irq_cmd (C macro)'c.wait_event_interruptible_lock_irq_cmdhNtauh1hhjNhhhNhNubh)}(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)}(hjLh]h%wait_event_interruptible_lock_irq_cmd}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhjLhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMRubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjLhhhjMhMRubah}(h]jLah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjMhMRhjLhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjLhhhjMhMRubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjMjHjMjIjJjKuh1hhhhjNhNhNubjM)}(hI``wait_event_interruptible_lock_irq_cmd (wq_head, condition, lock, cmd)``h]jS)}(hjMh]hEwait_event_interruptible_lock_irq_cmd (wq_head, condition, lock, cmd)}(hj!MhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMThjNhhubji)}(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.}(hj9MhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMRhj5Mubah}(h]h ]h"]h$]h&]uh1jhhjGMhMRhjNhhubj)}(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)}(hjTMh]h Parameters}(hjVMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRMubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMVhjNMubj)}(hhh](j)}(h%``wq_head`` the waitqueue to wait on h](j)}(h ``wq_head``h]jS)}(hjsMh]hwq_head}(hjuMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqMubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMUhjmMubj)}(hhh]jM)}(hthe waitqueue to wait onh]hthe waitqueue to wait on}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhMUhjMubah}(h]h ]h"]h$]h&]uh1jhjmMubeh}(h]h ]h"]h$]h&]uh1jhjMhMUhjjMubj)}(h7``condition`` a C expression for the event to wait for h](j)}(h ``condition``h]jS)}(hjMh]h condition}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMVhjMubj)}(hhh]jM)}(h(a C expression for the event to wait forh]h(a C expression for the event to wait for}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhMVhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMVhjjMubj)}(hj``lock`` a locked spinlock_t, which will be released before cmd and schedule() and reacquired afterwards. h](j)}(h``lock``h]jS)}(hjMh]hlock}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMXhjMubj)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMWhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMXhjjMubj)}(hM``cmd`` a command which is invoked outside the critical section before sleep h](j)}(h``cmd``h]jS)}(hjNh]hcmd}(hj!NhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMZhjNubj)}(hhh]jM)}(hDa command which is invoked outside the critical section before sleeph]hDa command which is invoked outside the critical section before sleep}(hj8NhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMYhj5Nubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhj4NhMZhjjMubeh}(h]h ]h"]h$]h&]uh1jhjNMubjM)}(h**Description**h]j)}(hj[Nh]h Description}(hj]NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM\hjNMubjM)}(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 }(hjqNhhhNhNubj)}(h **condition**h]h condition}(hjyNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqNubh0 evaluates to true or a signal is received. The }(hjqNhhhNhNubj)}(h **condition**h]h condition}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqNubh$ is checked each time the waitqueue }(hjqNhhhNhNubj)}(h **wq_head**h]hwq_head}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqNubh is woken up.}(hjqNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM[hjNMubjM)}(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.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhM_hjNMubjM)}(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.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMbhjNMubjM)}(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 }(hjNhhhNhNubj)}(h **condition**h]h condition}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh evaluated to true.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMfhjNMubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+wait_event_interruptible_lock_irq (C macro)#c.wait_event_interruptible_lock_irqhNtauh1hhjNhhhNhNubh)}(hhh](h)}(h!wait_event_interruptible_lock_irqh]h)}(h!wait_event_interruptible_lock_irqh]h)}(h!wait_event_interruptible_lock_irqh]j)}(hjOh]h!wait_event_interruptible_lock_irq}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/basics:63: ./include/linux/wait.hhMtubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj Ohhhj,OhMtubah}(h]jOah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj,OhMthj Ohhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj Ohhhj,OhMtubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjEOjHjEOjIjJjKuh1hhhhjNhNhNubjM)}(h@``wait_event_interruptible_lock_irq (wq_head, condition, lock)``h]jS)}(hjKOh]hhjkSubjQ)}(h h]h }(hj|ShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkSubh)}(hhh]j)}(hwait_queue_headh]hwait_queue_head}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jsjUSsb c.__wake_upasbuh1hhjkSubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkSubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkSubj)}(hwq_headh]hwq_head}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgSubj:)}(hunsigned int modeh](j)}(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 }(hj ThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hmodeh]hmode}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgSubj:)}(hint nr_exclusiveh](j)}(hinth]hint}(hj2ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.TubjQ)}(h h]h }(hj@ThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.Tubj)}(h nr_exclusiveh]h nr_exclusive}(hjNThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Tubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgSubj:)}(h void *keyh](j)}(hvoidh]hvoid}(hjgThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcTubjQ)}(h h]h }(hjuThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcTubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcTubj)}(hkeyh]hkey}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcTubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgSubeh}(h]h ]h"]h$]h&]jjuh1j3hj.Shhhj@ShKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj*Shhhj@ShKubah}(h]j%Sah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj@ShKhj'Shhubj4)}(hhh]jM)}(h'wake up threads blocked on a waitqueue.h]h'wake up threads blocked on a waitqueue.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjThhubah}(h]h ]h"]h$]h&]uh1j3hj'Shhhj@ShKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjTjHjTjIjJjKuh1hhhhjNhNhNubj)}(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)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjTubj)}(hhh](j)}(h2``struct wait_queue_head *wq_head`` the waitqueue h](j)}(h#``struct wait_queue_head *wq_head``h]jS)}(hjTh]hstruct wait_queue_head *wq_head}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjTubj)}(hhh]jM)}(h the waitqueueh]h the waitqueue}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhKhjUubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjUhKhjTubj)}(h$``unsigned int mode`` which threads h](j)}(h``unsigned int mode``h]jS)}(hj4Uh]hunsigned int mode}(hj6UhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2Uubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj.Uubj)}(hhh]jM)}(h which threadsh]h which threads}(hjMUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIUhKhjJUubah}(h]h ]h"]h$]h&]uh1jhj.Uubeh}(h]h ]h"]h$]h&]uh1jhjIUhKhjTubj)}(hG``int nr_exclusive`` how many wake-one or wake-many threads to wake up h](j)}(h``int nr_exclusive``h]jS)}(hjmUh]hint nr_exclusive}(hjoUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkUubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjgUubj)}(hhh]jM)}(h1how many wake-one or wake-many threads to wake uph]h1how many wake-one or wake-many threads to wake up}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhKhjUubah}(h]h ]h"]h$]h&]uh1jhjgUubeh}(h]h ]h"]h$]h&]uh1jhjUhKhjTubj)}(h8``void *key`` is directly passed to the wakeup function h](j)}(h ``void *key``h]jS)}(hjUh]h void *key}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjUubj)}(hhh]jM)}(h)is directly passed to the wakeup functionh]h)is directly passed to the wakeup function}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhKhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhKhjTubeh}(h]h ]h"]h$]h&]uh1jhjTubjM)}(h**Description**h]j)}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjTubjM)}(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.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__wake_up_sync_key (C function)c.__wake_up_sync_keyhNtauh1hhjNhhhNhNubh)}(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&VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"VhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKubjQ)}(h h]h }(hj5VhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"Vhhhj4VhKubh)}(h__wake_up_sync_keyh]j)}(h__wake_up_sync_keyh]h__wake_up_sync_key}(hjGVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCVubah}(h]h ](jjeh"]h$]h&]jjuh1hhj"Vhhhj4VhKubj4)}(h?(struct wait_queue_head *wq_head, unsigned int mode, void *key)h](j:)}(hstruct wait_queue_head *wq_headh](j?)}(hjBh]hstruct}(hjcVhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj_VubjQ)}(h h]h }(hjpVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_Vubh)}(hhh]j)}(hwait_queue_headh]hwait_queue_head}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Vubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjVmodnameN classnameNjwjz)}j}]j)}jsjIVsbc.__wake_up_sync_keyasbuh1hhj_VubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_Vubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Vubj)}(hwq_headh]hwq_head}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Vubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[Vubj:)}(hunsigned int modeh](j)}(hunsignedh]hunsigned}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(hinth]hint}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(hmodeh]hmode}(hj WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[Vubj:)}(h void *keyh](j)}(hvoidh]hvoid}(hj&WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"WubjQ)}(h h]h }(hj4WhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"Wubj)}(hjh]h*}(hjBWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Wubj)}(hkeyh]hkey}(hjOWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Wubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[Vubeh}(h]h ]h"]h$]h&]jjuh1j3hj"Vhhhj4VhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjVhhhj4VhKubah}(h]jVah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj4VhKhjVhhubj4)}(hhh]jM)}(h'wake up threads blocked on a waitqueue.h]h'wake up threads blocked on a waitqueue.}(hjyWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjvWhhubah}(h]h ]h"]h$]h&]uh1j3hjVhhhj4VhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjWjHjWjIjJjKuh1hhhhjNhNhNubj)}(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)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjWubj)}(hhh](j)}(h2``struct wait_queue_head *wq_head`` the waitqueue h](j)}(h#``struct wait_queue_head *wq_head``h]jS)}(hjWh]hstruct wait_queue_head *wq_head}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjWubj)}(hhh]jM)}(h the waitqueueh]h the waitqueue}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhKhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhKhjWubj)}(h$``unsigned int mode`` which threads h](j)}(h``unsigned int mode``h]jS)}(hjWh]hunsigned int mode}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjWubj)}(hhh]jM)}(h which threadsh]h which threads}(hj XhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhKhj Xubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjXhKhjWubj)}(h:``void *key`` opaque value to be passed to wakeup targets h](j)}(h ``void *key``h]jS)}(hj,Xh]h void *key}(hj.XhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*Xubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj&Xubj)}(hhh]jM)}(h+opaque value to be passed to wakeup targetsh]h+opaque value to be passed to wakeup targets}(hjEXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAXhKhjBXubah}(h]h ]h"]h$]h&]uh1jhj&Xubeh}(h]h ]h"]h$]h&]uh1jhjAXhKhjWubeh}(h]h ]h"]h$]h&]uh1jhjWubjM)}(h**Description**h]j)}(hjgXh]h Description}(hjiXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeXubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjWubjM)}(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}XhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjWubjM)}(h&On UP it can prevent extra preemption.h]h&On UP it can prevent extra preemption.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjWubjM)}(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.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&__wake_up_locked_sync_key (C function)c.__wake_up_locked_sync_keyhNtauh1hhjNhhhNhNubh)}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXhhhjXhKubh)}(h__wake_up_locked_sync_keyh]j)}(h__wake_up_locked_sync_keyh]h__wake_up_locked_sync_key}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1hhjXhhhjXhKubj4)}(h?(struct wait_queue_head *wq_head, unsigned int mode, void *key)h](j:)}(hstruct wait_queue_head *wq_headh](j?)}(hjBh]hstruct}(hjYhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjYubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubh)}(hhh]j)}(hwait_queue_headh]hwait_queue_head}(hj%YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Yubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj'YmodnameN classnameNjwjz)}j}]j)}jsjXsbc.__wake_up_locked_sync_keyasbuh1hhjYubjQ)}(h h]h }(hjEYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hjSYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hwq_headh]hwq_head}(hj`YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXubj:)}(hunsigned int modeh](j)}(hunsignedh]hunsigned}(hjyYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuYubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuYubj)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuYubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuYubj)}(hmodeh]hmode}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXubj:)}(h void *keyh](j)}(hvoidh]hvoid}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hkeyh]hkey}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjXubeh}(h]h ]h"]h$]h&]jjuh1j3hjXhhhjXhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjXhhhjXhKubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjXhKhjXhhubj4)}(hhh]jM)}(h/wake up a thread blocked on a locked waitqueue.h]h/wake up a thread blocked on a locked waitqueue.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjZhhubah}(h]h ]h"]h$]h&]uh1j3hjXhhhjXhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj5ZjHj5ZjIjJjKuh1hhhhjNhNhNubj)}(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)}(hj?Zh]h Parameters}(hjAZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Zubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj9Zubj)}(hhh](j)}(h2``struct wait_queue_head *wq_head`` the waitqueue h](j)}(h#``struct wait_queue_head *wq_head``h]jS)}(hj^Zh]hstruct wait_queue_head *wq_head}(hj`ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\Zubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjXZubj)}(hhh]jM)}(h the waitqueueh]h the waitqueue}(hjwZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjsZhKhjtZubah}(h]h ]h"]h$]h&]uh1jhjXZubeh}(h]h ]h"]h$]h&]uh1jhjsZhKhjUZubj)}(h$``unsigned int mode`` which threads h](j)}(h``unsigned int mode``h]jS)}(hjZh]hunsigned int mode}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjZubj)}(hhh]jM)}(h which threadsh]h which threads}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZhKhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhKhjUZubj)}(h:``void *key`` opaque value to be passed to wakeup targets h](j)}(h ``void *key``h]jS)}(hjZh]h void *key}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhjZubj)}(hhh]jM)}(h+opaque value to be passed to wakeup targetsh]h+opaque value to be passed to wakeup targets}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZhKhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhKhjUZubeh}(h]h ]h"]h$]h&]uh1jhj9ZubjM)}(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.chKhj9ZubjM)}(hXThe sync wakeup differs in that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are 'synchronized' with each other. This can prevent needless bouncing between CPUs.h]hXThe sync wakeup differs in that the waker knows that it will schedule away soon, so while the target thread will be woken up, it will not be migrated to another CPU - ie. the two threads are ‘synchronized’ with each other. This can prevent needless bouncing between CPUs.}(hj![hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj9ZubjM)}(h&On UP it can prevent extra preemption.h]h&On UP it can prevent extra preemption.}(hj0[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chKhj9ZubjM)}(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.chKhj9Zubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfinish_wait (C function) c.finish_waithNtauh1hhjNhhhNhNubh)}(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}(hjn[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj[hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMoubjQ)}(h h]h }(hj}[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjj[hhhj|[hMoubh)}(h finish_waith]j)}(h finish_waith]h finish_wait}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjj[hhhj|[hMoubj4)}(hD(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)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[sb c.finish_waitasbuh1hhj[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)}(hwq_headh]hwq_head}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubj:)}(h!struct wait_queue_entry *wq_entryh](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_entryh]hwait_queue_entry}(hj;\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=\modnameN classnameNjwjz)}j}]j[ c.finish_waitasbuh1hhj\ubjQ)}(h h]h }(hjY\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ubj)}(hjh]h*}(hjg\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hwq_entryh]hwq_entry}(hjt\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubeh}(h]h ]h"]h$]h&]jjuh1j3hjj[hhhj|[hMoubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjf[hhhj|[hMoubah}(h]ja[ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj|[hMohjc[hhubj4)}(hhh]jM)}(h!clean up after waiting in a queueh]h!clean up after waiting in a queue}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMohj\hhubah}(h]h ]h"]h$]h&]uh1j3hjc[hhhj|[hMoubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj\jHj\jIjJjKuh1hhhhjNhNhNubj)}(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)}(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.chMshj\ubj)}(hhh](j)}(h8``struct wait_queue_head *wq_head`` waitqueue waited on 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.chMphj\ubj)}(hhh]jM)}(hwaitqueue waited onh]hwaitqueue waited on}(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)}(h6``struct wait_queue_entry *wq_entry`` wait descriptor h](j)}(h%``struct wait_queue_entry *wq_entry``h]jS)}(hj]h]h!struct wait_queue_entry *wq_entry}(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.chMqhj]ubj)}(hhh]jM)}(hwait descriptorh]hwait descriptor}(hj1]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-]hMqhj.]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)}(hjS]h]h Description}(hjU]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ]ubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMshj\ubjM)}(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.}(hji]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhU/var/lib/git/docbuild/linux/Documentation/driver-api/basics:66: ./kernel/sched/wait.chMrhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjNhhhNhNubeh}(h]wait-queues-and-wake-eventsah ]h"]wait queues and wake eventsah$]h&]uh1hhhhhhhhK=ubh)}(hhh](h)}(hInternal Functionsh]hInternal Functions}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hhhhhKFubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hwait_task_stopped (C function)c.wait_task_stoppedhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hOint wait_task_stopped (struct wait_opts *wo, int ptrace, struct task_struct *p)h]h)}(hNint wait_task_stopped(struct wait_opts *wo, int ptrace, struct task_struct *p)h](j)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]hhhj]hMubh)}(hwait_task_stoppedh]j)}(hwait_task_stoppedh]hwait_task_stopped}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj]hhhj]hMubj4)}(h9(struct wait_opts *wo, int ptrace, struct task_struct *p)h](j:)}(hstruct wait_opts *woh](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 wait_optsh]h wait_opts}(hj ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj^modnameN classnameNjwjz)}j}]j)}jsj]sbc.wait_task_stoppedasbuh1hhj]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)}(hwoh]hwo}(hjG^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj]ubj:)}(h int ptraceh](j)}(hinth]hint}(hj`^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\^ubjQ)}(h h]h }(hjn^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\^ubj)}(hptraceh]hptrace}(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(^c.wait_task_stoppedasbuh1hhj^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]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,Wait for ``TASK_STOPPED`` or ``TASK_TRACED``h](h Wait for }(hj_hhhNhNubjS)}(h``TASK_STOPPED``h]h TASK_STOPPED}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubh or }(hj_hhhNhNubjS)}(h``TASK_TRACED``h]h TASK_TRACED}(hj/_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubeh}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chMhj_hhubah}(h]h ]h"]h$]h&]uh1j3hj]hhhj]hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjM_jHjM_jIjJjKuh1hhhhj]hNhNubj)}(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)}(hjW_h]h Parameters}(hjY_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU_ubah}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM#hjQ_ubj)}(hhh](j)}(h&``struct wait_opts *wo`` wait options h](j)}(h``struct wait_opts *wo``h]jS)}(hjv_h]hstruct wait_opts *wo}(hjx_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjt_ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM hjp_ubj)}(hhh]jM)}(h wait optionsh]h wait options}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhjp_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM hjm_ubj)}(h&``int ptrace`` is the wait for ptrace h](j)}(h``int ptrace``h]jS)}(hj_h]h int ptrace}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM!hj_ubj)}(hhh]jM)}(his the wait for ptraceh]his the wait for ptrace}(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!hjm_ubj)}(h+``struct task_struct *p`` task to wait for 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&]uh1jhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM"hj_ubj)}(hhh]jM)}(htask to wait forh]htask to wait for}(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"hjm_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&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM$hjQ_ubjM)}(hOHandle sys_wait4() work for ``p`` in state ``TASK_STOPPED`` or ``TASK_TRACED``.h](hHandle sys_wait4() work for }(hj9`hhhNhNubjS)}(h``p``h]hp}(hjA`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9`ubh in state }(hj9`hhhNhNubjS)}(h``TASK_STOPPED``h]h TASK_STOPPED}(hjS`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9`ubh or }(hj9`hhhNhNubjS)}(h``TASK_TRACED``h]h TASK_TRACED}(hje`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9`ubh.}(hj9`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM#hjQ_ubjM)}(h **Context**h]j)}(hj`h]hContext}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~`ubah}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM%hjQ_ubjM)}(hread_lock(:c:type:`tasklist_lock`), which is released if return value is non-zero. Also, grabs and releases **p->sighand->siglock**.h](h read_lock(}(hj`hhhNhNubh)}(h:c:type:`tasklist_lock`h]jS)}(hj`h]h tasklist_lock}(hj`hhhNhNubah}(h]h ](jjAc-typeeh"]h$]h&]uh1jRhj`ubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj tasklist_lockuh1hhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM&hj`ubhL), which is released if return value is non-zero. Also, grabs and releases }(hj`hhhNhNubj)}(h**p->sighand->siglock**h]hp->sighand->siglock}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhj`hM&hjQ_ubjM)}(h **Return**h]j)}(hj`h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM)hjQ_ubjM)}(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 }(hj`hhhNhNubj)}(h**p**h]hp}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubhg’s pid on success, implies that tasklist_lock is released and wait condition search should terminate.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhO/var/lib/git/docbuild/linux/Documentation/driver-api/basics:72: ./kernel/exit.chM*hjQ_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$task_set_jobctl_pending (C function)c.task_set_jobctl_pendinghNtauh1hhj]hhhNhNubh)}(hhh](h)}(hKbool task_set_jobctl_pending (struct task_struct *task, unsigned long mask)h]h)}(hJbool task_set_jobctl_pending(struct task_struct *task, unsigned long mask)h](j)}(hjh]hbool}(hj3ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ahhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hjAahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ahhhj@ahMubh)}(htask_set_jobctl_pendingh]j)}(htask_set_jobctl_pendingh]htask_set_jobctl_pending}(hjSahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOaubah}(h]h ](jjeh"]h$]h&]jjuh1hhj/ahhhj@ahMubj4)}(h.(struct task_struct *task, unsigned long mask)h](j:)}(hstruct task_struct *taskh](j?)}(hjBh]hstruct}(hjoahhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjkaubjQ)}(h h]h }(hj|ahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkaubh)}(hhh]j)}(h task_structh]h task_struct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjamodnameN classnameNjwjz)}j}]j)}jsjUasbc.task_set_jobctl_pendingasbuh1hhjkaubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkaubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkaubj)}(htaskh]htask}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkaubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgaubj:)}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hlongh]hlong}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjQ)}(h h]h }(hj bhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hmaskh]hmask}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjgaubeh}(h]h ]h"]h$]h&]jjuh1j3hj/ahhhj@ahMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj+ahhhj@ahMubah}(h]j&aah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj@ahMhj(ahhubj4)}(hhh]jM)}(hset jobctl pending bitsh]hset jobctl pending bits}(hjCbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj@bhhubah}(h]h ]h"]h$]h&]uh1j3hj(ahhhj@ahMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj[bjHj[bjIjJjKuh1hhhhj]hNhNubj)}(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)}(hjebh]h Parameters}(hjgbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcbubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj_bubj)}(hhh](j)}(h)``struct task_struct *task`` target task h](j)}(h``struct task_struct *task``h]jS)}(hjbh]hstruct task_struct *task}(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 hj~bubj)}(hhh]jM)}(h target taskh]h target task}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhM hjbubah}(h]h ]h"]h$]h&]uh1jhj~bubeh}(h]h ]h"]h$]h&]uh1jhjbhM hj{bubj)}(h+``unsigned long mask`` pending bits to set h](j)}(h``unsigned long mask``h]jS)}(hjbh]hunsigned long mask}(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)}(hpending bits to seth]hpending bits to set}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhM hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM hj{bubeh}(h]h ]h"]h$]h&]uh1jhj_bubjM)}(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 hj_bubjM)}(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 }(hjchhhNhNubj)}(h**mask**h]hmask}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh from }(hjchhhNhNubj)}(h**task->jobctl**h]h task->jobctl}(hj(chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh. }(hjchhhNhNubj)}(h**mask**h]hmask}(hj:chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh must be subset of }(hjchhhNhNubjS)}(h``JOBCTL_PENDING_MASK``h]hJOBCTL_PENDING_MASK}(hjLchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubh | }(hjchhhNhNubjS)}(h``JOBCTL_STOP_CONSUME``h]hJOBCTL_STOP_CONSUME}(hj^chhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubh | }hjcsbjS)}(h``JOBCTL_STOP_SIGMASK``h]hJOBCTL_STOP_SIGMASK}(hjpchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubh | }(hjchhhNhNubjS)}(h``JOBCTL_TRAPPING``h]hJOBCTL_TRAPPING}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubhB. If stop signo is being set, the existing signo is cleared. If }(hjchhhNhNubj)}(h**task**h]htask}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh@ is already being killed or exiting, this function becomes noop.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj_bubjM)}(h **Context**h]j)}(hjch]hContext}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj_bubjM)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hjchhhNhNubj)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh held.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj_bubjM)}(h **Return**h]j)}(hjch]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj_bubjM)}(hO``true`` if **mask** is set, ``false`` if made noop because **task** was dying.h](jS)}(h``true``h]htrue}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubh if }(hjchhhNhNubj)}(h**mask**h]hmask}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh is set, }(hjchhhNhNubjS)}(h ``false``h]hfalse}(hj&dhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubh if made noop because }(hjchhhNhNubj)}(h**task**h]htask}(hj8dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh was dying.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj_bubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'task_clear_jobctl_trapping (C function)c.task_clear_jobctl_trappinghNtauh1hhj]hhhNhNubh)}(hhh](h)}(h:void task_clear_jobctl_trapping (struct task_struct *task)h]h)}(h9void task_clear_jobctl_trapping(struct task_struct *task)h](j)}(hvoidh]hvoid}(hjqdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmdhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM)ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmdhhhjdhM)ubh)}(htask_clear_jobctl_trappingh]j)}(htask_clear_jobctl_trappingh]htask_clear_jobctl_trapping}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhjmdhhhjdhM)ubj4)}(h(struct task_struct *task)h]j:)}(hstruct task_struct *taskh](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 task_structh]h task_struct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}jsjdsbc.task_clear_jobctl_trappingasbuh1hhjdubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(htaskh]htask}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjdubah}(h]h ]h"]h$]h&]jjuh1j3hjmdhhhjdhM)ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjidhhhjdhM)ubah}(h]jddah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjdhM)hjfdhhubj4)}(hhh]jM)}(hclear jobctl trapping bith]hclear jobctl trapping bit}(hj1ehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM)hj.ehhubah}(h]h ]h"]h$]h&]uh1j3hjfdhhhjdhM)ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjIejHjIejIjJjKuh1hhhhj]hNhNubj)}(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)}(hjSeh]h Parameters}(hjUehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQeubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM-hjMeubj)}(hhh]j)}(h)``struct task_struct *task`` target task h](j)}(h``struct task_struct *task``h]jS)}(hjreh]hstruct task_struct *task}(hjtehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpeubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM*hjleubj)}(hhh]jM)}(h target taskh]h target task}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehM*hjeubah}(h]h ]h"]h$]h&]uh1jhjleubeh}(h]h ]h"]h$]h&]uh1jhjehM*hjieubah}(h]h ]h"]h$]h&]uh1jhjMeubjM)}(h**Description**h]j)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM,hjMeubjM)}(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. }(hjehhhNhNubj)}(h**task->siglock**h]h task->siglock}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh guarantees that }(hjehhhNhNubj)}(h**task->parent**h]h task->parent}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh points to the ptracer.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM+hjMeubjM)}(h **Context**h]j)}(hjeh]hContext}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM0hjMeubjM)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hjfhhhNhNubj)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh held.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM1hjMeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&task_clear_jobctl_pending (C function)c.task_clear_jobctl_pendinghNtauh1hhj]hhhNhNubh)}(hhh](h)}(hMvoid task_clear_jobctl_pending (struct task_struct *task, unsigned long mask)h]h)}(hLvoid task_clear_jobctl_pending(struct task_struct *task, unsigned long mask)h](j)}(hvoidh]hvoid}(hjOfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKfhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM>ubjQ)}(h h]h }(hj^fhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKfhhhj]fhM>ubh)}(htask_clear_jobctl_pendingh]j)}(htask_clear_jobctl_pendingh]htask_clear_jobctl_pending}(hjpfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlfubah}(h]h ](jjeh"]h$]h&]jjuh1hhjKfhhhj]fhM>ubj4)}(h.(struct task_struct *task, unsigned long mask)h](j:)}(hstruct task_struct *taskh](j?)}(hjBh]hstruct}(hjfhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjfubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubh)}(hhh]j)}(h task_structh]h task_struct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjfmodnameN classnameNjwjz)}j}]j)}jsjrfsbc.task_clear_jobctl_pendingasbuh1hhjfubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(htaskh]htask}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubj:)}(hunsigned long maskh](j)}(hunsignedh]hunsigned}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjQ)}(h h]h }(hj ghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hlongh]hlong}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjQ)}(h h]h }(hj(ghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hmaskh]hmask}(hj6ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubeh}(h]h ]h"]h$]h&]jjuh1j3hjKfhhhj]fhM>ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjGfhhhj]fhM>ubah}(h]jBfah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj]fhM>hjDfhhubj4)}(hhh]jM)}(hclear jobctl pending bitsh]hclear jobctl pending bits}(hj`ghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM>hj]ghhubah}(h]h ]h"]h$]h&]uh1j3hjDfhhhj]fhM>ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjxgjHjxgjIjJjKuh1hhhhj]hNhNubj)}(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)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMBhj|gubj)}(hhh](j)}(h)``struct task_struct *task`` target task h](j)}(h``struct task_struct *task``h]jS)}(hjgh]hstruct task_struct *task}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM?hjgubj)}(hhh]jM)}(h target taskh]h target task}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghM?hjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghM?hjgubj)}(h-``unsigned long mask`` pending bits to clear h](j)}(h``unsigned long mask``h]jS)}(hjgh]hunsigned long mask}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM@hjgubj)}(hhh]jM)}(hpending bits to clearh]hpending bits to clear}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghM@hjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghM@hjgubeh}(h]h ]h"]h$]h&]uh1jhj|gubjM)}(h**Description**h]j)}(hjhh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMBhj|gubjM)}(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+hhhhNhNubj)}(h**mask**h]hmask}(hj3hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+hubh from }(hj+hhhhNhNubj)}(h**task->jobctl**h]h task->jobctl}(hjEhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+hubh. }(hj+hhhhNhNubj)}(h**mask**h]hmask}(hjWhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+hubh must be subset of }(hj+hhhhNhNubjS)}(h``JOBCTL_PENDING_MASK``h]hJOBCTL_PENDING_MASK}(hjihhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+hubh. If }(hj+hhhhNhNubjS)}(h``JOBCTL_STOP_PENDING``h]hJOBCTL_STOP_PENDING}(hj{hhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+hubh8 is being cleared, other STOP bits are cleared together.}(hj+hhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMAhj|gubjM)}(hiIf clearing of **mask** leaves no stop or trap pending, this function calls task_clear_jobctl_trapping().h](hIf clearing of }(hjhhhhNhNubj)}(h**mask**h]hmask}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubhR leaves no stop or trap pending, this function calls task_clear_jobctl_trapping().}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMEhj|gubjM)}(h **Context**h]j)}(hjhh]hContext}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMHhj|gubjM)}(h4Must be called with **task->sighand->siglock** held.h](hMust be called with }(hjhhhhNhNubj)}(h**task->sighand->siglock**h]htask->sighand->siglock}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh held.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMIhj|gubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(task_participate_group_stop (C function)c.task_participate_group_stophNtauh1hhj]hhhNhNubh)}(hhh](h)}(h;bool task_participate_group_stop (struct task_struct *task)h]h)}(h:bool task_participate_group_stop(struct task_struct *task)h](j)}(hjh]hbool}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ihhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMZubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ihhhjihMZubh)}(htask_participate_group_stoph]j)}(htask_participate_group_stoph]htask_participate_group_stop}(hj.ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*iubah}(h]h ](jjeh"]h$]h&]jjuh1hhj ihhhjihMZubj4)}(h(struct task_struct *task)h]j:)}(hstruct task_struct *taskh](j?)}(hjBh]hstruct}(hjJihhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjFiubjQ)}(h h]h }(hjWihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFiubh)}(hhh]j)}(h task_structh]h task_struct}(hjhihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeiubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjjimodnameN classnameNjwjz)}j}]j)}jsj0isbc.task_participate_group_stopasbuh1hhjFiubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFiubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFiubj)}(htaskh]htask}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFiubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBiubah}(h]h ]h"]h$]h&]jjuh1j3hj ihhhjihMZubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjihhhjihMZubah}(h]jiah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjihMZhjihhubj4)}(hhh]jM)}(hparticipate in a group stoph]hparticipate in a group stop}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMZhjihhubah}(h]h ]h"]h$]h&]uh1j3hjihhhjihMZubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjijHjijIjJjKuh1hhhhj]hNhNubj)}(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)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM^hjiubj)}(hhh]j)}(h@``struct task_struct *task`` task participating in a group stop h](j)}(h``struct task_struct *task``h]jS)}(hjjh]hstruct task_struct *task}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj jubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM[hjjubj)}(hhh]jM)}(h"task participating in a group stoph]h"task participating in a group stop}(hj'jhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#jhM[hj$jubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhj#jhM[hjjubah}(h]h ]h"]h$]h&]uh1jhjiubjM)}(h**Description**h]j)}(hjIjh]h Description}(hjKjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGjubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM]hjiubjM)}(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}(hjcjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_jubh has }(hj_jhhhNhNubjS)}(h``JOBCTL_STOP_PENDING``h]hJOBCTL_STOP_PENDING}(hjujhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_jubhq set and is participating in a group stop. Group stop states are cleared and the group stop count is consumed if }(hj_jhhhNhNubjS)}(h``JOBCTL_STOP_CONSUME``h]hJOBCTL_STOP_CONSUME}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_jubhH was set. If the consumption completes the group stop, the appropriate }(hj_jhhhNhNubhtitle_reference)}(h `SIGNAL_*`h]hSIGNAL_*}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj_jubh flags are set.}(hj_jhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM\hjiubjM)}(h **Context**h]j)}(hjjh]hContext}(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.chMahjiubjM)}(h4Must be called with **task->sighand->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.chMbhjiubjM)}(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.chMdhjiubjM)}(hX``true`` if group stop completion should be notified to the parent, ``false`` otherwise.h](jS)}(h``true``h]htrue}(hj khhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubh< if group stop completion should be notified to the parent, }(hjkhhhNhNubjS)}(h ``false``h]hfalse}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubh otherwise.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMehjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hptrace_trap_notify (C function)c.ptrace_trap_notifyhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h/void ptrace_trap_notify (struct task_struct *t)h]h)}(h.void ptrace_trap_notify(struct task_struct *t)h](j)}(hvoidh]hvoid}(hjTkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPkhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMDubjQ)}(h h]h }(hjck hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPkhhhjbkhMDubh)}(hptrace_trap_notifyh]j)}(hptrace_trap_notifyh]hptrace_trap_notify}(hjukhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqkubah}(h]h ](jjeh"]h$]h&]jjuh1hhjPkhhhjbkhMDubj4)}(h(struct task_struct *t)h]j:)}(hstruct task_struct *th](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)}jsjwksbc.ptrace_trap_notifyasbuh1hhjkubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hth]ht}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjkubah}(h]h ]h"]h$]h&]jjuh1j3hjPkhhhjbkhMDubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjLkhhhjbkhMDubah}(h]jGkah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjbkhMDhjIkhhubj4)}(hhh]jM)}(hschedule trap to notify ptracerh]hschedule trap to notify ptracer}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMDhjlhhubah}(h]h ]h"]h$]h&]uh1j3hjIkhhhjbkhMDubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,ljHj,ljIjJjKuh1hhhhj]hNhNubj)}(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)}(hj6lh]h Parameters}(hj8lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4lubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMHhj0lubj)}(hhh]j)}(h:``struct task_struct *t`` tracee wanting to notify tracer h](j)}(h``struct task_struct *t``h]jS)}(hjUlh]hstruct task_struct *t}(hjWlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSlubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMEhjOlubj)}(hhh]jM)}(htracee wanting to notify tracerh]htracee wanting to notify tracer}(hjnlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjlhMEhjklubah}(h]h ]h"]h$]h&]uh1jhjOlubeh}(h]h ]h"]h$]h&]uh1jhjjlhMEhjLlubah}(h]h ]h"]h$]h&]uh1jhj0lubjM)}(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.chMGhj0lubjM)}(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. }(hjlhhhNhNubj)}(h**t**h]ht}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh" must have been seized by ptracer.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMFhj0lubjM)}(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 }(hjlhhhNhNubj)}(h**t**h]ht}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubhX* 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.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMJhj0lubjM)}(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.chMPhj0lubjM)}(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.chMQhj0lubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hforce_sig_seccomp (C function)c.force_sig_seccomphNtauh1hhj]hhhNhNubh)}(hhh](h)}(hDint force_sig_seccomp (int syscall, int reason, bool force_coredump)h]h)}(hCint force_sig_seccomp(int syscall, int reason, bool force_coredump)h](j)}(hinth]hint}(hjAmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=mhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubjQ)}(h h]h }(hjPmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=mhhhjOmhM ubh)}(hforce_sig_seccomph]j)}(hforce_sig_seccomph]hforce_sig_seccomp}(hjbmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^mubah}(h]h ](jjeh"]h$]h&]jjuh1hhj=mhhhjOmhM ubj4)}(h.(int syscall, int reason, bool force_coredump)h](j:)}(h int syscallh](j)}(hinth]hint}(hj~mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzmubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzmubj)}(hsyscallh]hsyscall}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvmubj:)}(h int reasonh](j)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hreasonh]hreason}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvmubj:)}(hbool force_coredumph](j)}(hjh]hbool}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hforce_coredumph]hforce_coredump}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjvmubeh}(h]h ]h"]h$]h&]jjuh1j3hj=mhhhjOmhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9mhhhjOmhM ubah}(h]j4mah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjOmhM hj6mhhubj4)}(hhh]jM)}(h6signals the task to allow in-process syscall emulationh]h6signals the task to allow in-process syscall emulation}(hj-nhhhNhNubah}(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&]uh1j3hj6mhhhjOmhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjEnjHjEnjIjJjKuh1hhhhj]hNhNubj)}(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)}(hjOnh]h Parameters}(hjQnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMnubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjInubj)}(hhh](j)}(h3``int syscall`` syscall number to send to userland h](j)}(h``int syscall``h]jS)}(hjnnh]h int syscall}(hjpnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlnubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjhnubj)}(hhh]jM)}(h"syscall number to send to userlandh]h"syscall number to send to userland}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhM hjnubah}(h]h ]h"]h$]h&]uh1jhjhnubeh}(h]h ]h"]h$]h&]uh1jhjnhM hjenubj)}(hN``int reason`` filter-supplied reason code to send to userland (via si_errno) h](j)}(h``int reason``h]jS)}(hjnh]h int reason}(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>filter-supplied reason code to send to userland (via si_errno)h]h>filter-supplied reason code to send to userland (via si_errno)}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhM hjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhM hjenubj)}(h3``bool force_coredump`` true to trigger a coredump h](j)}(h``bool force_coredump``h]jS)}(hjnh]hbool force_coredump}(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)}(htrue to trigger a coredumph]htrue to trigger a coredump}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhM hjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhM hjenubeh}(h]h ]h"]h$]h&]uh1jhjInubjM)}(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.chMhjInubjM)}(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.}(hj1ohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjInubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%do_notify_parent_cldstop (C function)c.do_notify_parent_cldstophNtauh1hhj]hhhNhNubh)}(hhh](h)}(hRvoid do_notify_parent_cldstop (struct task_struct *tsk, bool for_ptracer, int why)h]h)}(hQvoid do_notify_parent_cldstop(struct task_struct *tsk, bool for_ptracer, int why)h](j)}(hvoidh]hvoid}(hj`ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ohhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hjoohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ohhhjnohMubh)}(hdo_notify_parent_cldstoph]j)}(hdo_notify_parent_cldstoph]hdo_notify_parent_cldstop}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}oubah}(h]h ](jjeh"]h$]h&]jjuh1hhj\ohhhjnohMubj4)}(h4(struct task_struct *tsk, bool for_ptracer, int why)h](j:)}(hstruct task_struct *tskh](j?)}(hjBh]hstruct}(hjohhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjoubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoubh)}(hhh]j)}(h task_structh]h task_struct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjomodnameN classnameNjwjz)}j}]j)}jsjosbc.do_notify_parent_cldstopasbuh1hhjoubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(htskh]htsk}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjoubj:)}(hbool for_ptracerh](j)}(hjh]hbool}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj pubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj pubj)}(h for_ptracerh]h for_ptracer}(hj*phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj pubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjoubj:)}(hint whyh](j)}(hinth]hint}(hjCphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?pubjQ)}(h h]h }(hjQphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?pubj)}(hwhyh]hwhy}(hj_phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?pubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjoubeh}(h]h ]h"]h$]h&]jjuh1j3hj\ohhhjnohMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjXohhhjnohMubah}(h]jSoah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjnohMhjUohhubj4)}(hhh]jM)}(h/notify parent of stopped/continued state changeh]h/notify parent of stopped/continued state change}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjphhubah}(h]h ]h"]h$]h&]uh1j3hjUohhhjnohMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjpjHjpjIjJjKuh1hhhhj]hNhNubj)}(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)}(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.chMhjpubj)}(hhh](j)}(h<``struct task_struct *tsk`` task reporting the state change h](j)}(h``struct task_struct *tsk``h]jS)}(hjph]hstruct task_struct *tsk}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjpubj)}(hhh]jM)}(htask reporting the state changeh]htask reporting the state change}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphMhjpubj)}(h5``bool for_ptracer`` the notification is for ptracer h](j)}(h``bool for_ptracer``h]jS)}(hjqh]hbool for_ptracer}(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.chMhjpubj)}(hhh]jM)}(hthe notification is for ptracerh]hthe notification is for ptracer}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjpubj)}(h6``int why`` CLD_{CONTINUED|STOPPED|TRAPPED} to report h](j)}(h ``int why``h]jS)}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:qubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj6qubj)}(hhh]jM)}(h)CLD_{CONTINUED|STOPPED|TRAPPED} to reporth]h)CLD_{CONTINUED|STOPPED|TRAPPED} to report}(hjUqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQqhMhjRqubah}(h]h ]h"]h$]h&]uh1jhj6qubeh}(h]h ]h"]h$]h&]uh1jhjQqhMhjpubeh}(h]h ]h"]h$]h&]uh1jhjpubjM)}(h**Description**h]j)}(hjwqh]h Description}(hjyqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuqubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjpubjM)}(hNotify **tsk**'s parent that the stopped/continued state has changed. If **for_ptracer** is ``false``, **tsk**'s group leader notifies to its real parent. If ``true``, **tsk** reports to **tsk->parent** which should be the ptracer.h](hNotify }(hjqhhhNhNubj)}(h**tsk**h]htsk}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh>’s parent that the stopped/continued state has changed. If }(hjqhhhNhNubj)}(h**for_ptracer**h]h for_ptracer}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh is }(hjqhhhNhNubjS)}(h ``false``h]hfalse}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubh, }(hjqhhhNhNubj)}(h**tsk**h]htsk}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh2’s group leader notifies to its real parent. If }(hjqhhhNhNubjS)}(h``true``h]htrue}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubh, }hjqsbj)}(h**tsk**h]htsk}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh reports to }(hjqhhhNhNubj)}(h**tsk->parent**h]h tsk->parent}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh which should be the ptracer.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjpubjM)}(h **Context**h]j)}(hjrh]hContext}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjpubjM)}(h7Must be called with tasklist_lock at least read locked.h]h7Must be called with tasklist_lock at least read locked.}(hj2rhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdo_signal_stop (C function)c.do_signal_stophNtauh1hhj]hhhNhNubh)}(hhh](h)}(hbool do_signal_stop (int signr)h]h)}(hbool do_signal_stop(int signr)h](j)}(hjh]hbool}(hjarhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]rhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubjQ)}(h h]h }(hjorhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]rhhhjnrhM ubh)}(hdo_signal_stoph]j)}(hdo_signal_stoph]hdo_signal_stop}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}rubah}(h]h ](jjeh"]h$]h&]jjuh1hhj]rhhhjnrhM ubj4)}(h (int signr)h]j:)}(h int signrh](j)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hsignrh]hsignr}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrubah}(h]h ]h"]h$]h&]jjuh1j3hj]rhhhjnrhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjYrhhhjnrhM ubah}(h]jTrah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjnrhM hjVrhhubj4)}(hhh]jM)}(h4handle group stop for SIGSTOP and other stop signalsh]h4handle group stop for SIGSTOP and other stop signals}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjrhhubah}(h]h ]h"]h$]h&]uh1j3hjVrhhhjnrhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjrjHjrjIjJjKuh1hhhhj]hNhNubj)}(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)}(hjsh]h Parameters}(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 hjrubj)}(hhh]j)}(h5``int signr`` signr causing group stop if initiating h](j)}(h ``int signr``h]jS)}(hj$sh]h int signr}(hj&shhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"subah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjsubj)}(hhh]jM)}(h&signr causing group stop if initiatingh]h&signr causing group stop if initiating}(hj=shhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9shM hj:subah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhj9shM hjsubah}(h]h ]h"]h$]h&]uh1jhjrubjM)}(h**Description**h]j)}(hj_sh]h Description}(hjashhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]subah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjrubjM)}(hIf ``JOBCTL_STOP_PENDING`` is not set yet, initiate group stop with **signr** and participate in it. If already set, participate in the existing group stop. If participated in a group stop (and thus slept), ``true`` is returned with siglock released.h](hIf }(hjushhhNhNubjS)}(h``JOBCTL_STOP_PENDING``h]hJOBCTL_STOP_PENDING}(hj}shhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjusubh* is not set yet, initiate group stop with }(hjushhhNhNubj)}(h **signr**h]hsignr}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjusubh and participate in it. If already set, participate in the existing group stop. If participated in a group stop (and thus slept), }(hjushhhNhNubjS)}(h``true``h]htrue}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjusubh# is returned with siglock released.}(hjushhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjrubjM)}(hIf ptraced, this function doesn't handle stop itself. Instead, ``JOBCTL_TRAP_STOP`` is scheduled and ``false`` is returned with siglock untouched. The caller must ensure that INTERRUPT trap handling takes places afterwards.h](hBIf ptraced, this function doesn’t handle stop itself. Instead, }(hjshhhNhNubjS)}(h``JOBCTL_TRAP_STOP``h]hJOBCTL_TRAP_STOP}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsubh is scheduled and }(hjshhhNhNubjS)}(h ``false``h]hfalse}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsubhr is returned with siglock untouched. The caller must ensure that INTERRUPT trap handling takes places afterwards.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjrubjM)}(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 hjrubjM)}(h]Must be called with **current->sighand->siglock** held, which is released on ``true`` return.h](hMust be called with }(hjthhhNhNubj)}(h**current->sighand->siglock**h]hcurrent->sighand->siglock}(hj thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh held, which is released on }(hjthhhNhNubjS)}(h``true``h]htrue}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtubh return.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjrubjM)}(h **Return**h]j)}(hj:th]hReturn}(hjsighand->siglock** held, which may be released and re-acquired before returning with intervening sleep.h](jM)}(h**Parameters**h]j)}(hj(uh]h Parameters}(hj*uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&uubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMd hj"uubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjGuh]hvoid}(hjIuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEuubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhjAuubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hj`uhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\uhKhj]uubah}(h]h ]h"]h$]h&]uh1jhjAuubeh}(h]h ]h"]h$]h&]uh1jhj\uhKhj>uubah}(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&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhj"uubjM)}(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, }(hjuhhhNhNubjS)}(h ``SIGTRAP``h]hSIGTRAP}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubh.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMa hj"uubjM)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMf hj"uubjM)}(h **Context**h]j)}(hjuh]hContext}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMi hj"uubjM)}(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 }(hjuhhhNhNubj)}(h**current->sighand->siglock**h]hcurrent->sighand->siglock}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubhU held, which may be released and re-acquired before returning with intervening sleep.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMj hj"uubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdo_freezer_trap (C function)c.do_freezer_traphNtauh1hhj]hhhNhNubh)}(hhh](h)}(hvoid do_freezer_trap (void)h]h)}(hvoid do_freezer_trap(void)h](j)}(hvoidh]hvoid}(hj!vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubjQ)}(h h]h }(hj0vhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvhhhj/vhM ubh)}(hdo_freezer_traph]j)}(hdo_freezer_traph]hdo_freezer_trap}(hjBvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>vubah}(h]h ](jjeh"]h$]h&]jjuh1hhjvhhhj/vhM ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj^vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZvubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjVvubah}(h]h ]h"]h$]h&]jjuh1j3hjvhhhj/vhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjvhhhj/vhM ubah}(h]jvah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/vhM hjvhhubj4)}(hhh]jM)}(hhandle the freezer jobctl traph]hhandle the freezer jobctl trap}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjvhhubah}(h]h ]h"]h$]h&]uh1j3hjvhhhj/vhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjvjHjvjIjJjKuh1hhhhj]hNhNubj)}(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)}(hjvh]h Parameters}(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.chM hjvubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjvh]hvoid}(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.chKhjvubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhKhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhKhjvubah}(h]h ]h"]h$]h&]uh1jhjvubjM)}(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.chKhjvubjM)}(hqPuts the task into frozen state, if only the task is not about to quit. In this case it drops JOBCTL_TRAP_FREEZE.h]hqPuts the task into frozen state, if only the task is not about to quit. In this case it drops JOBCTL_TRAP_FREEZE.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjvubjM)}(h **Context**h]j)}(hj+wh]hContext}(hj-whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)wubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjvubjM)}(hbMust be called with **current->sighand->siglock** held, which is always released before returning.h](hMust be called with }(hjAwhhhNhNubj)}(h**current->sighand->siglock**h]hcurrent->sighand->siglock}(hjIwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAwubh1 held, which is always released before returning.}(hjAwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsignal_delivered (C function)c.signal_deliveredhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h:void signal_delivered (struct ksignal *ksig, int stepping)h]h)}(h9void signal_delivered(struct ksignal *ksig, int stepping)h](j)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~whhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~whhhjwhM ubh)}(hsignal_deliveredh]j)}(hsignal_deliveredh]hsignal_delivered}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~whhhjwhM ubj4)}(h$(struct ksignal *ksig, int stepping)h](j:)}(hstruct ksignal *ksigh](j?)}(hjBh]hstruct}(hjwhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjwubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubh)}(hhh]j)}(hksignalh]hksignal}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j)}jsjwsbc.signal_deliveredasbuh1hhjwubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]h*}(hj xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hksigh]hksig}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubj:)}(h int steppingh](j)}(hinth]hint}(hj1xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-xubjQ)}(h h]h }(hj?xhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-xubj)}(hsteppingh]hstepping}(hjMxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-xubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubeh}(h]h ]h"]h$]h&]jjuh1j3hj~whhhjwhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjzwhhhjwhM ubah}(h]juwah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhM hjwwhhubj4)}(hhh]jM)}(h6called after signal delivery to update blocked signalsh]h6called after signal delivery to update blocked signals}(hjwxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjtxhhubah}(h]h ]h"]h$]h&]uh1j3hjwwhhhjwhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjxjHjxjIjJjKuh1hhhhj]hNhNubj)}(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)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjxubj)}(hhh](j)}(h.``struct ksignal *ksig`` kernel signal struct h](j)}(h``struct ksignal *ksig``h]jS)}(hjxh]hstruct ksignal *ksig}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjxubj)}(hhh]jM)}(hkernel signal structh]hkernel signal struct}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhM hjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhM hjxubj)}(hF``int stepping`` nonzero if debugger single-step or block-step in use h](j)}(h``int stepping``h]jS)}(hjxh]h int stepping}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjxubj)}(hhh]jM)}(h4nonzero if debugger single-step or block-step in useh]h4nonzero if debugger single-step or block-step in use}(hj yhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhM hjyubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjyhM hjxubeh}(h]h ]h"]h$]h&]uh1jhjxubjM)}(h**Description**h]j)}(hj,yh]h Description}(hj.yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*yubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjxubjM)}(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 (}(hjByhhhNhNubj)}(h**ksig->ka.sa.sa_mask**h]hksig->ka.sa.sa_mask}(hjJyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjByubh= is always blocked), and the signal itself is blocked unless }(hjByhhhNhNubjS)}(h``SA_NODEFER``h]h SA_NODEFER}(hj\yhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjByubh is set in }(hjByhhhNhNubj)}(h**ksig->ka.sa.sa_flags**h]hksig->ka.sa.sa_flags}(hjnyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjByubh. Tracing is notified.}(hjByhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sys_restart_syscall (C function)c.sys_restart_syscallhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hlong sys_restart_syscall (void)h]h)}(hlong sys_restart_syscall(void)h](j)}(hlongh]hlong}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMf ubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyhhhjyhMf ubh)}(hsys_restart_syscallh]j)}(hsys_restart_syscallh]hsys_restart_syscall}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1hhjyhhhjyhMf ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubah}(h]h ]h"]h$]h&]jjuh1j3hjyhhhjyhMf ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjyhhhjyhMf ubah}(h]jyah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjyhMf hjyhhubj4)}(hhh]jM)}(hrestart a system callh]hrestart a system call}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMf hj zhhubah}(h]h ]h"]h$]h&]uh1j3hjyhhhjyhMf ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj&zjHj&zjIjJjKuh1hhhhj]hNhNubj)}(h'**Parameters** ``void`` no argumentsh](jM)}(h**Parameters**h]j)}(hj0zh]h Parameters}(hj2zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.zubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMj hj*zubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]jS)}(hjOzh]hvoid}(hjQzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMzubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMl hjIzubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chKhjezubah}(h]h ]h"]h$]h&]uh1jhjIzubeh}(h]h ]h"]h$]h&]uh1jhjdzhMl hjFzubah}(h]h ]h"]h$]h&]uh1jhj*zubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h set_current_blocked (C function)c.set_current_blockedhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h+void set_current_blocked (sigset_t *newset)h]h)}(h*void set_current_blocked(sigset_t *newset)h](j)}(hvoidh]hvoid}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM ubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzhhhjzhM ubh)}(hset_current_blockedh]j)}(hset_current_blockedh]hset_current_blocked}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1hhjzhhhjzhM ubj4)}(h(sigset_t *newset)h]j:)}(hsigset_t *newseth](h)}(hhh]j)}(hsigset_th]hsigset_t}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]j)}jsjzsbc.set_current_blockedasbuh1hhjzubjQ)}(h h]h }(hj {hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hnewseth]hnewset}(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)}(hchange current->blocked maskh]hchange current->blocked mask}(hjN{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjK{hhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjzhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjf{jHjf{jIjJjKuh1hhhhj]hNhNubj)}(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)}(hjp{h]h Parameters}(hjr{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn{ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjj{ubj)}(hhh]j)}(h``sigset_t *newset`` new mask h](j)}(h``sigset_t *newset``h]jS)}(hj{h]hsigset_t *newset}(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)}(hnew maskh]hnew mask}(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&]uh1jhjj{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.chM hjj{ubjM)}(hIt is wrong to change ->blocked directly, this helper should be used to ensure the process can't miss a shared signal we are going to block.h]hIt is wrong to change ->blocked directly, this helper should be used to ensure the process can’t miss a shared signal we are going to block.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_rt_sigprocmask (C function)c.sys_rt_sigprocmaskhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hdlong sys_rt_sigprocmask (int how, sigset_t __user * nset, sigset_t __user * oset, size_t sigsetsize)h]h)}(halong sys_rt_sigprocmask(int how, sigset_t __user *nset, sigset_t __user *oset, size_t sigsetsize)h](j)}(hlongh]hlong}(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)}(hsys_rt_sigprocmaskh]j)}(hsys_rt_sigprocmaskh]hsys_rt_sigprocmask}(hj0|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,|ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj |hhhj|hM ubj4)}(hJ(int how, sigset_t __user *nset, sigset_t __user *oset, size_t sigsetsize)h](j:)}(hint howh](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)}(hhowh]hhow}(hjh|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjD|ubj:)}(hsigset_t __user *nseth](h)}(hhh]j)}(hsigset_th]hsigset_t}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]j)}jsj2|sbc.sys_rt_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)}(hnseth]hnset}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjD|ubj:)}(hsigset_t __user *oseth](h)}(hhh]j)}(hsigset_th]hsigset_t}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]j|c.sys_rt_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}(hj8}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjD|ubj:)}(hsize_t sigsetsizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjT}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ}ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjV}modnameN classnameNjwjz)}j}]j|c.sys_rt_sigprocmaskasbuh1hhjM}ubjQ)}(h h]h }(hjr}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjM}ubj)}(h sigsetsizeh]h sigsetsize}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjD|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,change the list of currently blocked signalsh]h,change the list of currently blocked signals}(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|hhhj|hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj}jHj}jIjJjKuh1hhhhj]hNhNubj)}(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)}(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)}(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&]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)}(h&whether to add, remove, or set signalsh]h&whether to add, remove, or set signals}(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)}(h2``sigset_t __user * nset`` stores pending signals h](j)}(h``sigset_t __user * nset``h]jS)}(hj$~h]hsigset_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.chM hj~ubj)}(hhh]jM)}(hstores pending signalsh]hstores pending signals}(hj=~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9~hM hj:~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj9~hM hj}ubj)}(hE``sigset_t __user * oset`` previous value of signal mask if non-null h](j)}(h``sigset_t __user * oset``h]jS)}(hj]~h]hsigset_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.chM hjW~ubj)}(hhh]jM)}(h)previous value of signal mask if non-nullh]h)previous value of signal mask if non-null}(hjv~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjr~hM hjs~ubah}(h]h ]h"]h$]h&]uh1jhjW~ubeh}(h]h ]h"]h$]h&]uh1jhjr~hM hj}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.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 hj}ubeh}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_rt_sigpending (C function)c.sys_rt_sigpendinghNtauh1hhj]hhhNhNubh)}(hhh](h)}(hBlong sys_rt_sigpending (sigset_t __user * uset, size_t sigsetsize)h]h)}(h@long sys_rt_sigpending(sigset_t __user *uset, size_t sigsetsize)h](j)}(hlongh]hlong}(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)}(hsys_rt_sigpendingh]j)}(hsys_rt_sigpendingh]hsys_rt_sigpending}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~hhhj~hM: ubj4)}(h*(sigset_t __user *uset, size_t sigsetsize)h](j:)}(hsigset_t __user *useth](h)}(hhh]j)}(hsigset_th]hsigset_t}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsjsbc.sys_rt_sigpendingasbuh1hhj)ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubh__user}(hj)hhhNhNubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(huseth]huset}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubj:)}(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}]jLc.sys_rt_sigpendingasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(h sigsetsizeh]h sigsetsize}(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;examine a pending signal that has been raised while blockedh]h;examine a pending signal that has been raised while blocked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM: hjhhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhj~hM: ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(h|**Parameters** ``sigset_t __user * uset`` stores pending signals ``size_t sigsetsize`` size of sigset_t type or largerh](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.chM> hj ubj)}(hhh](j)}(h2``sigset_t __user * uset`` stores pending signals h](j)}(h``sigset_t __user * uset``h]jS)}(hj0h]hsigset_t __user * uset}(hj2hhhNhNubah}(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)}(hstores pending signalsh]hstores pending signals}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhM< hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhM< hj'ubj)}(h5``size_t sigsetsize`` size of sigset_t type or largerh](j)}(h``size_t sigsetsize``h]jS)}(hjih]hsize_t sigsetsize}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM> hjcubj)}(hhh]jM)}(hsize of sigset_t type or largerh]hsize of sigset_t type or larger}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM= hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hM> hj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'copy_siginfo_to_external32 (C function)c.copy_siginfo_to_external32hNtauh1hhj]hhhNhNubh)}(hhh](h)}(h^void copy_siginfo_to_external32 (struct compat_siginfo *to, const struct kernel_siginfo *from)h]h)}(h]void copy_siginfo_to_external32(struct compat_siginfo *to, const struct kernel_siginfo *from)h](j)}(hvoidh]hvoid}(hjÀhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/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&]uh1jPhjhhhjрhM ubh)}(hcopy_siginfo_to_external32h]j)}(hcopy_siginfo_to_external32h]hcopy_siginfo_to_external32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjрhM ubj4)}(h>(struct compat_siginfo *to, const struct kernel_siginfo *from)h](j:)}(hstruct compat_siginfo *toh](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)}(hcompat_siginfoh]hcompat_siginfo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.copy_siginfo_to_external32asbuh1hhjubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htoh]hto}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h!const struct kernel_siginfo *fromh](j?)}(hjP*h]hconst}(hjrhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjnubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjnubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubh)}(hhh]j)}(hkernel_siginfoh]hkernel_siginfo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j:c.copy_siginfo_to_external32asbuh1hhjnubjQ)}(h h]h }(hjɁhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hjh]h*}(hjׁhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hfromh]hfrom}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(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)}(h0copy a kernel siginfo into a compat user siginfoh]h0copy a kernel siginfo into a compat user siginfo}(hjhhhNhNubah}(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&]uh1j3hjhhhjрhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj&jHj&jIjJjKuh1hhhhj]hNhNubj)}(hX**Parameters** ``struct compat_siginfo *to`` compat siginfo destination ``const struct kernel_siginfo *from`` kernel siginfo source **Note** This function does not work properly for the SIGCHLD on x32, but fortunately it doesn't have to. The only valid callers for this function are copy_siginfo_to_user32, which is overriden for x32 and the coredump code. The latter does not care because SIGCHLD will never cause a coredump.h](jM)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj2hhhNhNubah}(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)}(h9``struct compat_siginfo *to`` compat siginfo destination h](j)}(h``struct compat_siginfo *to``h]jS)}(hjOh]hstruct compat_siginfo *to}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hjIubj)}(hhh]jM)}(hcompat siginfo destinationh]hcompat siginfo destination}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdhM hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhM hjFubj)}(h<``const struct kernel_siginfo *from`` kernel siginfo source h](j)}(h%``const struct kernel_siginfo *from``h]jS)}(hjh]h!const struct kernel_siginfo *from}(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)}(hkernel siginfo sourceh]hkernel siginfo source}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubjM)}(h**Note**h]j)}(hjÂh]hNote}(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.chM hj*ubjM)}(hXThis function does not work properly for the SIGCHLD on x32, but fortunately it doesn't have to. The only valid callers for this function are copy_siginfo_to_user32, which is overriden for x32 and the coredump code. The latter does not care because SIGCHLD will never cause a coredump.h]hX This function does not work properly for the SIGCHLD on x32, but fortunately it doesn’t have to. The only valid callers for this function are copy_siginfo_to_user32, which is overriden for x32 and the coredump code. The latter does not care because SIGCHLD will never cause a coredump.}(hjقhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdo_sigtimedwait (C function)c.do_sigtimedwaithNtauh1hhj]hhhNhNubh)}(hhh](h)}(h`int do_sigtimedwait (const sigset_t *which, kernel_siginfo_t *info, const struct timespec64 *ts)h]h)}(h_int do_sigtimedwait(const sigset_t *which, kernel_siginfo_t *info, const struct timespec64 *ts)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hdo_sigtimedwaith]j)}(hdo_sigtimedwaith]hdo_sigtimedwait}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hL(const sigset_t *which, kernel_siginfo_t *info, const struct timespec64 *ts)h](j:)}(hconst sigset_t *whichh](j?)}(hjP*h]hconst}(hjEhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjAubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubh)}(hhh]j)}(hsigset_th]hsigset_t}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjemodnameN classnameNjwjz)}j}]j)}jsj+sbc.do_sigtimedwaitasbuh1hhjAubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hwhichh]hwhich}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(hkernel_siginfo_t *infoh](h)}(hhh]j)}(hkernel_siginfo_th]hkernel_siginfo_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.do_sigtimedwaitasbuh1hhjubjQ)}(h h]h }(hj؃hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(hconst struct timespec64 *tsh](j?)}(hjP*h]hconst}(hj hhhNhNubah}(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 }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h timespec64h]h timespec64}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGmodnameN classnameNjwjz)}j}]jc.do_sigtimedwaitasbuh1hhjubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjqhhhNhNubah}(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&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h.wait for queued signals specified in **which**h](h%wait for queued signals specified in }(hjhhhNhNubj)}(h **which**h]hwhich}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj΄jHj΄jIjJjKuh1hhhhj]hNhNubj)}(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)}(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.chMhj҄ubj)}(hhh](j)}(h5``const sigset_t *which`` queued signals to wait for h](j)}(h``const sigset_t *which``h]jS)}(hjh]hconst sigset_t *which}(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)}(hqueued signals to wait forh]hqueued signals to wait for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hN``kernel_siginfo_t *info`` if non-null, the signal's siginfo is returned here h](j)}(h``kernel_siginfo_t *info``h]jS)}(hj0h]hkernel_siginfo_t *info}(hj2hhhNhNubah}(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)}(h2if non-null, the signal's siginfo is returned hereh]h4if non-null, the signal’s siginfo is returned here}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubj)}(hF``const struct timespec64 *ts`` upper bound on process time suspensionh](j)}(h``const struct timespec64 *ts``h]jS)}(hjih]hconst struct timespec64 *ts}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjcubj)}(hhh]jM)}(h&upper bound on process time suspensionh]h&upper bound on process time suspension}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjubeh}(h]h ]h"]h$]h&]uh1jhj҄ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sys_rt_sigtimedwait (C function)c.sys_rt_sigtimedwaithNtauh1hhj]hhhNhNubh)}(hhh](h)}(hlong sys_rt_sigtimedwait (const sigset_t __user * uthese, siginfo_t __user * uinfo, const struct __kernel_timespec __user * uts, size_t sigsetsize)h]h)}(hlong sys_rt_sigtimedwait(const sigset_t __user *uthese, siginfo_t __user *uinfo, const struct __kernel_timespec __user *uts, size_t sigsetsize)h](j)}(hlongh]hlong}(hjÅhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hj҅hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjхhMubh)}(hsys_rt_sigtimedwaith]j)}(hsys_rt_sigtimedwaith]hsys_rt_sigtimedwait}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjхhMubj4)}(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?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(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_sigtimedwaitasbuh1hhjubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh__user}(hjhhhNhNubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hutheseh]huthese}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hsiginfo_t __user *uinfoh](h)}(hhh]j)}(h siginfo_th]h siginfo_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j:c.sys_rt_sigtimedwaitasbuh1hhjubjQ)}(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)}(huinfoh]huinfo}(hj҆hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h*const struct __kernel_timespec __user *utsh](j?)}(hjP*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__kernel_timespech]h__kernel_timespec}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj&modnameN classnameNjwjz)}j}]j:c.sys_rt_sigtimedwaitasbuh1hhjubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh__user}(hjhhhNhNubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hutsh]huts}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(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}]j:c.sys_rt_sigtimedwaitasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(h sigsetsizeh]h sigsetsize}(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)}(h=synchronously wait for queued signals specified in **uthese**h](h3synchronously wait for queued signals specified in }(hjhhhNhNubj)}(h **uthese**h]huthese}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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&]uh1j3hjhhhjхhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(hX+**Parameters** ``const sigset_t __user * uthese`` queued signals to wait for ``siginfo_t __user * uinfo`` if non-null, the signal's siginfo is returned here ``const struct __kernel_timespec __user * uts`` upper bound on process time suspension ``size_t sigsetsize`` size of sigset_t typeh](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.chMhj ubj)}(hhh](j)}(h>``const sigset_t __user * uthese`` queued signals to wait for h](j)}(h"``const sigset_t __user * uthese``h]jS)}(hj0h]hconst sigset_t __user * uthese}(hj2hhhNhNubah}(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)}(hqueued signals to wait forh]hqueued signals to wait for}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj'ubj)}(hP``siginfo_t __user * uinfo`` if non-null, the signal's siginfo is returned here h](j)}(h``siginfo_t __user * uinfo``h]jS)}(hjih]hsiginfo_t __user * uinfo}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjcubj)}(hhh]jM)}(h2if non-null, the signal's siginfo is returned hereh]h4if non-null, the signal’s siginfo is returned here}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj'ubj)}(hW``const struct __kernel_timespec __user * uts`` upper bound on process time suspension h](j)}(h/``const struct __kernel_timespec __user * uts``h]jS)}(hjh]h+const struct __kernel_timespec __user * uts}(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&upper bound on process time suspensionh]h&upper bound on process time suspension}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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.chMhjՈubj)}(hhh]jM)}(hsize of sigset_t typeh]hsize of sigset_t type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubah}(h]h ]h"]h$]h&]uh1jhjՈubeh}(h]h ]h"]h$]h&]uh1jhjhMhj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_kill (C function) c.sys_killhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h"long sys_kill (pid_t pid, int sig)h]h)}(h!long sys_kill(pid_t pid, int sig)h](j)}(hlongh]hlong}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMjubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1hhhjChMjubh)}(hsys_killh]j)}(hsys_killh]hsys_kill}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]jjuh1hhj1hhhjChMjubj4)}(h(pid_t pid, int sig)h](j:)}(h pid_t pidh](h)}(hhh]j)}(hpid_th]hpid_t}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j)}jsjXsb c.sys_killasbuh1hhjnubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hpidh]hpid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjjubj:)}(hint sigh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjʉhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hsigh]hsig}(hj؉hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjjubeh}(h]h ]h"]h$]h&]jjuh1j3hj1hhhjChMjubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj-hhhjChMjubah}(h]j(ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjChMjhj*hhubj4)}(hhh]jM)}(hsend a signal to a processh]hsend a signal to a process}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMjhjhhubah}(h]h ]h"]h$]h&]uh1j3hj*hhhjChMjubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(hW**Parameters** ``pid_t pid`` the PID of the process ``int sig`` signal to be senth](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.chMnhjubj)}(hhh](j)}(h%``pid_t pid`` the PID of the process h](j)}(h ``pid_t pid``h]jS)}(hjCh]h pid_t pid}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMkhj=ubj)}(hhh]jM)}(hthe PID of the processh]hthe PID of the process}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMkhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMkhj:ubj)}(h``int sig`` signal to be senth](j)}(h ``int sig``h]jS)}(hj|h]hint sig}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMmhjvubj)}(hhh]jM)}(hsignal to be senth]hsignal to be sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMlhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMmhj:ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"sys_pidfd_send_signal (C function)c.sys_pidfd_send_signalhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h\long sys_pidfd_send_signal (int pidfd, int sig, siginfo_t __user * info, unsigned int flags)h]h)}(hZlong sys_pidfd_send_signal(int pidfd, int sig, siginfo_t __user *info, unsigned int flags)h](j)}(hlongh]hlong}(hj֊hhhNhNubah}(h]h ]jah"]h$]h&]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_pidfd_send_signalh]j)}(hsys_pidfd_send_signalh]hsys_pidfd_send_signal}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjҊhhhjhMubj4)}(h@(int pidfd, int sig, siginfo_t __user *info, unsigned int flags)h](j:)}(h int pidfdh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hpidfdh]hpidfd}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hint sigh](j)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(hsigh]hsig}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hsiginfo_t __user *infoh](h)}(hhh]j)}(h siginfo_th]h siginfo_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.sys_pidfd_send_signalasbuh1hhjyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubh__user}(hjyhhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hinfoh]hinfo}(hj͋hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(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&]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 Signal a process through a pidfdh]h Signal a process through a pidfd}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjEhhubah}(h]h ]h"]h$]h&]uh1j3hjˊhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj`jHj`jIjJjKuh1hhhhj]hNhNubj)}(hX**Parameters** ``int pidfd`` file descriptor of the process ``int sig`` signal to send ``siginfo_t __user * info`` signal info ``unsigned int flags`` future flags **Description** Send the signal to the thread group or to the individual thread depending on PIDFD_THREAD. In the future extension to **flags** may be used to override the default scope of **pidfd**. **Return** 0 on success, negative errno on failureh](jM)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjdubj)}(hhh](j)}(h-``int pidfd`` file descriptor of the process h](j)}(h ``int pidfd``h]jS)}(hjh]h int pidfd}(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)}(hfile descriptor of the processh]hfile descriptor of the process}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int sig`` signal to send h](j)}(h ``int sig``h]jS)}(hjŒh]hint sig}(hjČhhhNhNubah}(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)}(hsignal to sendh]hsignal to send}(hjیhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj׌hMhj،ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj׌hMhjubj)}(h(``siginfo_t __user * info`` signal info h](j)}(h``siginfo_t __user * info``h]jS)}(hjh]hsiginfo_t __user * info}(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 signal infoh]h signal info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``unsigned int flags`` future flags h](j)}(h``unsigned int flags``h]jS)}(hj4h]hunsigned int flags}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj.ubj)}(hhh]jM)}(h future flagsh]h future flags}(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&]uh1jhjdubjM)}(h**Description**h]j)}(hjoh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjdubjM)}(hSend the signal to the thread group or to the individual thread depending on PIDFD_THREAD. In the future extension to **flags** may be used to override the default scope of **pidfd**.h](hvSend the signal to the thread group or to the individual thread depending on PIDFD_THREAD. In the future extension to }(hjhhhNhNubj)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. may be used to override the default scope of }(hjhhhNhNubj)}(h **pidfd**h]hpidfd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjdubjM)}(h **Return**h]j)}(hjh]hReturn}(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.chMhjdubjM)}(h'0 on success, negative errno on failureh]h'0 on success, negative errno on failure}(hjЍhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_tgkill (C function) c.sys_tgkillhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h0long sys_tgkill (pid_t tgid, pid_t pid, int sig)h]h)}(h/long sys_tgkill(pid_t tgid, pid_t pid, int sig)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM?ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hM?ubh)}(h sys_tgkillh]j)}(h sys_tgkillh]h sys_tgkill}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hM?ubj4)}(h (pid_t tgid, pid_t pid, int sig)h](j:)}(h pid_t tgidh](h)}(hhh]j)}(hpid_th]hpid_t}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjAmodnameN classnameNjwjz)}j}]j)}jsj"sb c.sys_tgkillasbuh1hhj8ubjQ)}(h h]h }(hj_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(htgidh]htgid}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubj:)}(h pid_t pidh](h)}(hhh]j)}(hpid_th]hpid_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j[ c.sys_tgkillasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hpidh]hpid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubj:)}(hint sigh](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)}(hsigh]hsig}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʎubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubeh}(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"send signal to one specific threadh]h"send signal to one specific thread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM?hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hM?ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,jHj,jIjJjKuh1hhhhj]hNhNubj)}(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)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMChj0ubj)}(hhh](j)}(h1``pid_t tgid`` the thread group ID of the thread h](j)}(h``pid_t tgid``h]jS)}(hjUh]h pid_t tgid}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chM@hjOubj)}(hhh]jM)}(h!the thread group ID of the threadh]h!the thread group ID of the thread}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjhM@hjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhM@hjLubj)}(h$``pid_t pid`` the PID of the thread h](j)}(h ``pid_t pid``h]jS)}(hjh]h pid_t pid}(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.chMAhjubj)}(hhh]jM)}(hthe PID of the threadh]hthe PID of the thread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMAhjLubj)}(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&]uh1jRhjŏubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMBhjubj)}(hhh]jM)}(hsignal to be senth]hsignal to be sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj܏hMBhjݏubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj܏hMBhjLubeh}(h]h ]h"]h$]h&]uh1jhj0ubjM)}(h**Description**h]j)}(hjh]h Description}(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.chMDhj0ubji)}(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 }(hjhhhNhNubj)}(h**tgid**h]htgid}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and returns -ESRCH even if the PID exists but it’s not belonging to the target process anymore. This method solves the problem of threads exiting and PIDs getting reused.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMChjubah}(h]h ]h"]h$]h&]uh1jhhj<hMChj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_tkill (C function) c.sys_tkillhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h#long sys_tkill (pid_t pid, int sig)h]h)}(h"long sys_tkill(pid_t pid, int sig)h](j)}(hlongh]hlong}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMRubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_hhhjqhMRubh)}(h sys_tkillh]j)}(h sys_tkillh]h sys_tkill}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj_hhhjqhMRubj4)}(h(pid_t pid, int sig)h](j:)}(h pid_t pidh](h)}(hhh]j)}(hpid_th]hpid_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.sys_tkillasbuh1hhjubjQ)}(h h]h }(hjÐhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hpidh]hpid}(hjѐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(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&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj_hhhjqhMRubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[hhhjqhMRubah}(h]jVah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjqhMRhjXhhubj4)}(hhh]jM)}(h send signal to one specific taskh]h send signal to one specific task}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMRhj-hhubah}(h]h ]h"]h$]h&]uh1j3hjXhhhjqhMRubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjHjHjHjIjJjKuh1hhhhj]hNhNubj)}(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)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMVhjLubj)}(hhh](j)}(h"``pid_t pid`` the PID of the task h](j)}(h ``pid_t pid``h]jS)}(hjqh]h pid_t pid}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMShjkubj)}(hhh]jM)}(hthe PID of the taskh]hthe PID of the task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMShjhubj)}(h``int sig`` signal to be sent h](j)}(h ``int sig``h]jS)}(hjh]hint sig}(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.chMThjubj)}(hhh]jM)}(hsignal to be senth]hsignal to be sent}(hjÑhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjhubeh}(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&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMVhjLubji)}(hASend a signal to only one task, even if it's a CLONE_THREAD task.h]jM)}(hjh]hCSend a signal to only one task, even if it’s a CLONE_THREAD task.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMUhjubah}(h]h ]h"]h$]h&]uh1jhhj hMUhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sys_rt_sigqueueinfo (C function)c.sys_rt_sigqueueinfohNtauh1hhj]hhhNhNubh)}(hhh](h)}(hGlong sys_rt_sigqueueinfo (pid_t pid, int sig, siginfo_t __user * uinfo)h]h)}(hElong sys_rt_sigqueueinfo(pid_t pid, int sig, siginfo_t __user *uinfo)h](j)}(hlongh]hlong}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMoubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/hhhjAhMoubh)}(hsys_rt_sigqueueinfoh]j)}(hsys_rt_sigqueueinfoh]hsys_rt_sigqueueinfo}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1hhj/hhhjAhMoubj4)}(h-(pid_t pid, int sig, siginfo_t __user *uinfo)h](j:)}(h pid_t pidh](h)}(hhh]j)}(hpid_th]hpid_t}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjumodnameN classnameNjwjz)}j}]j)}jsjVsbc.sys_rt_sigqueueinfoasbuh1hhjlubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjlubj)}(hpidh]hpid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubj:)}(hint sigh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjȒhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hsigh]hsig}(hj֒hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubj:)}(hsiginfo_t __user *uinfoh](h)}(hhh]j)}(h siginfo_th]h siginfo_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.sys_rt_sigqueueinfoasbuh1hhjubjQ)}(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*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(huinfoh]huinfo}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjhubeh}(h]h ]h"]h$]h&]jjuh1j3hj/hhhjAhMoubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj+hhhjAhMoubah}(h]j&ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjAhMohj(hhubj4)}(hhh]jM)}(h#send signal information to a signalh]h#send signal information to a signal}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMohjdhhubah}(h]h ]h"]h$]h&]uh1j3hj(hhhjAhMoubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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)}(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.chMshjubj)}(hhh](j)}(h$``pid_t pid`` the PID of the thread h](j)}(h ``pid_t pid``h]jS)}(hjh]h pid_t pid}(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.chMphjubj)}(hhh]jM)}(hthe PID of the threadh]hthe PID of the thread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMphjubj)}(h``int sig`` signal to be sent h](j)}(h ``int sig``h]jS)}(hjh]hint sig}(hjhhhNhNubah}(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.chMqhjۓubj)}(hhh]jM)}(hsignal to be senth]hsignal to be sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMqhjubah}(h]h ]h"]h$]h&]uh1jhjۓubeh}(h]h ]h"]h$]h&]uh1jhjhMqhjubj)}(h3``siginfo_t __user * uinfo`` signal info to be senth](j)}(h``siginfo_t __user * uinfo``h]jS)}(hjh]hsiginfo_t __user * uinfo}(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.chMshjubj)}(hhh]jM)}(hsignal info to be senth]hsignal info to be sent}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMrhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMshjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_sigpending (C function)c.sys_sigpendinghNtauh1hhj]hhhNhNubh)}(hhh](h)}(h0long sys_sigpending (old_sigset_t __user * uset)h]h)}(h.long sys_sigpending(old_sigset_t __user *uset)h](j)}(hlongh]hlong}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjphhhjhMubh)}(hsys_sigpendingh]j)}(hsys_sigpendingh]hsys_sigpending}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjphhhjhMubj4)}(h(old_sigset_t __user *uset)h]j:)}(hold_sigset_t __user *useth](h)}(hhh]j)}(h old_sigset_th]h old_sigset_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.sys_sigpendingasbuh1hhjubjQ)}(h h]h }(hjԔhhhNhNubah}(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)}(huseth]huset}(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)}(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&]uh1j3hjihhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjCjHjCjIjJjKuh1hhhhj]hNhNubj)}(hY**Parameters** ``old_sigset_t __user * uset`` where mask of pending signal is returnedh](jM)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjGubj)}(hhh]j)}(hG``old_sigset_t __user * uset`` where mask of pending signal is returnedh](j)}(h``old_sigset_t __user * uset``h]jS)}(hjlh]hold_sigset_t __user * uset}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjfubj)}(hhh]jM)}(h(where mask of pending signal is returnedh]h(where mask of pending signal is returned}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_sigprocmask (C function)c.sys_sigprocmaskhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hVlong sys_sigprocmask (int how, old_sigset_t __user * nset, old_sigset_t __user * oset)h]h)}(hSlong sys_sigprocmask(int how, old_sigset_t __user *nset, old_sigset_t __user *oset)h](j)}(hlongh]hlong}(hjƕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj•hhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hjՕhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj•hhhjԕhMubh)}(hsys_sigprocmaskh]j)}(hsys_sigprocmaskh]hsys_sigprocmask}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hhowh]hhow}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hold_sigset_t __user *nseth](h)}(hhh]j)}(h old_sigset_th]h old_sigset_t}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=modnameN classnameNjwjz)}j}]j)}jsjsbc.sys_sigprocmaskasbuh1hhj4ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubh__user}(hj4hhhNhNubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hnseth]hnset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hold_sigset_t __user *oseth](h)}(hhh]j)}(h old_sigset_th]h old_sigset_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jWc.sys_sigprocmaskasbuh1hhjubjQ)}(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*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hoseth]hoset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj•hhhjԕhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjԕhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjԕhMhjhhubj4)}(hhh]jM)}(h"examine and change blocked signalsh]h"examine and change blocked signals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjԕhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1jHj1jIjJjKuh1hhhhj]hNhNubj)}(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&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj5ubj)}(hhh](j)}(h3``int how`` whether to add, remove, or set signals h](j)}(h ``int how``h]jS)}(hjZh]hint how}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjTubj)}(hhh]jM)}(h&whether to add, remove, or set signalsh]h&whether to add, remove, or set signals}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjQubj)}(hF``old_sigset_t __user * nset`` signals to add or remove (if non-null) h](j)}(h``old_sigset_t __user * nset``h]jS)}(hjh]hold_sigset_t __user * nset}(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&signals to add or remove (if non-null)h]h&signals to add or remove (if non-null)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjQubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjƗubeh}(h]h ]h"]h$]h&]uh1jhjhMhjQubeh}(h]h ]h"]h$]h&]uh1jhj5ubjM)}(h**Description**h]j)}(hjh]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.chMhj5ubjM)}(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.chMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_rt_sigaction (C function)c.sys_rt_sigactionhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hwlong sys_rt_sigaction (int sig, const struct sigaction __user * act, struct sigaction __user * oact, size_t sigsetsize)h]h)}(htlong sys_rt_sigaction(int sig, const struct sigaction __user *act, struct sigaction __user *oact, size_t sigsetsize)h](j)}(hlongh]hlong}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHhhhjZhMubh)}(hsys_rt_sigactionh]j)}(hsys_rt_sigactionh]hsys_rt_sigaction}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1hhjHhhhjZhMubj4)}(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?)}(hjP*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 }(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)}jsjosbc.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*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hacth]hact}(hjDhhhNhNubah}(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>hjYubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubh)}(hhh]j)}(h sigactionh]h sigaction}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}modnameN classnameNjwjz)}j}]jc.sys_rt_sigactionasbuh1hhjYubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubh__user}(hjYhhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hoacth]hoact}(hjƙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hsize_t sigsetsizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߙubah}(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&]jjuh1j3hjHhhhjZhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjDhhhjZhMubah}(h]j?ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjZhMhjAhhubj4)}(hhh]jM)}(h"alter an action taken by a processh]h"alter an action taken by a process}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhj5hhubah}(h]h ]h"]h$]h&]uh1j3hjAhhhjZhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjPjHjPjIjJjKuh1hhhhj]hNhNubj)}(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)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjTubj)}(hhh](j)}(h``int sig`` signal to be sent h](j)}(h ``int sig``h]jS)}(hjyh]hint sig}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjwubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjsubj)}(hhh]jM)}(hsignal to be senth]hsignal to be sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(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ǚhMhjpubj)}(hG``struct sigaction __user * oact`` used to save the previous sigaction h](j)}(h"``struct sigaction __user * oact``h]jS)}(hjh]hstruct sigaction __user * oact}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjubj)}(hhh]jM)}(h#used to save the previous sigactionh]h#used to save the previous sigaction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(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&]uh1jhj9hMhjpubeh}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsys_rt_sigsuspend (C function)c.sys_rt_sigsuspendhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hElong sys_rt_sigsuspend (sigset_t __user * unewset, size_t sigsetsize)h]h)}(hClong sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize)h](j)}(hlongh]hlong}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzhhhjhMubh)}(hsys_rt_sigsuspendh]j)}(hsys_rt_sigsuspendh]hsys_rt_sigsuspend}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjzhhhjhMubj4)}(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 reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.sys_rt_sigsuspendasbuh1hhjubjQ)}(h h]h }(hjޛhhhNhNubah}(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 }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(h sigsetsizeh]h sigsetsize}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjzhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjvhhhjhMubah}(h]jqah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjshhubj4)}(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 }(hj}hhhNhNubj)}(h **unewset**h]hunewset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh! value until a signal is received}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:75: ./kernel/signal.chMhjzhhubah}(h]h ]h"]h$]h&]uh1j3hjshhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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&]uh1jRhjubah}(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.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjǜubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_create (C macro)c.kthread_createhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hkthread_createh]h)}(hkthread_createh]h)}(hkthread_createh]j)}(hj]h]hkthread_create}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ](jjeh"]h$]h&]jjuh1hhj_hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK#ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[hhhjzhK#ubah}(h]jVah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjzhK#hjXhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjXhhhjzhK#ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubjM)}(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%hj]hhubji)}(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&]uh1jhhjhK#hj]hhubj)}(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 }(hj?hhhNhNubj)}(h**threadfn\(\)**h]h threadfn()}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(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)}(hjmh]hnamefmt}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjkubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK&hjgubj)}(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&]uh1jhjgubeh}(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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_run (C macro) c.kthread_runhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h kthread_runh]h)}(h kthread_runh]h)}(h kthread_runh]j)}(hj2h]h kthread_run}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj4hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK=ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0hhhjOhK=ubah}(h]j+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjOhK=hj-hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj-hhhjOhK=ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhj]hNhNubjM)}(h.``kthread_run (threadfn, data, namefmt, ...)``h]jS)}(hjnh]h*kthread_run (threadfn, data, namefmt, ...)}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhK?hj]hhubji)}(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=hj]hhubj)}(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&]uh1jRhjubah}(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)}(hjFh]hnamefmt}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(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!printf-style name for the thread.h]h!printf-style name for the thread.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hK@hj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hK@hjubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjh]h...}(hjhhhNhNubah}(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.hhKhjyubj)}(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&]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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_run_on_cpu (C function)c.kthread_run_on_cpuhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hxstruct task_struct * kthread_run_on_cpu (int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h]h)}(hvstruct task_struct *kthread_run_on_cpu(int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h](j?)}(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 }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hKOubh)}(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)}jskthread_run_on_cpusbc.kthread_run_on_cpuasbuh1hhjhhhj hKOubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hKOubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hKOubh)}(hkthread_run_on_cpuh]j)}(hj<h]hkthread_run_on_cpu}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hKOubj4)}(hP(int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h](j:)}(hint (*threadfn)(void *data)h](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hthreadfnh]hthreadfn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hj6h]h(}(hjʡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hvoidh]hvoid}(hjסhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hjh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubj:)}(h void *datah](j)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hdatah]hdata}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubj:)}(hunsigned int cpuh](j)}(hunsignedh]hunsigned}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubj:)}(hconst char *namefmth](j?)}(hjP*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&]noemphjjuh1j9hjqubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hKOubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hKOubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hKOhjhhubj4)}(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&]uh1j3hjhhhj hKOubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj?jHj?jIjJjKuh1hhhhj]hNhNubj)}(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)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKShjCubj)}(hhh](j)}(hS``int (*threadfn)(void *data)`` the function to run until signal_pending(current). h](j)}(h``int (*threadfn)(void *data)``h]jS)}(hjhh]hint (*threadfn)(void *data)}(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.hhKPhjbubj)}(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&]uh1jLhj}hKPhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hKPhj_ubj)}(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&]uh1jhjhKQhj_ubj)}(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&]uh1jhjhKRhj_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)}(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.hhKThjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hKThj_ubeh}(h]h ]h"]h$]h&]uh1jhjCubjM)}(h**Description**h]j)}(hjah]h Description}(hjchhhNhNubah}(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.hhKVhjCubjM)}(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).}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKVhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_run_worker (C macro)c.kthread_run_workerhNtauh1hhj]hhhNhNubh)}(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֤jIjJjKuh1hhhhj]hNhNubjM)}(h,``kthread_run_worker (flags, namefmt, ...)``h]jS)}(hjܤh]h(kthread_run_worker (flags, namefmt, ...)}(hjޤhhhNhNubah}(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.hhKhj]hhubji)}(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&]uh1jhhjhKhj]hhubj)}(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)}(hj0h]hflags}(hj2hhhNhNubah}(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.hhKhj*ubj)}(hhh]jM)}(h2flags modifying the default behavior of the workerh]h2flags modifying the default behavior of the worker}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhKhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhKhj'ubj)}(h.``namefmt`` printf-style name for the thread. h](j)}(h ``namefmt``h]jS)}(hjih]hnamefmt}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjcubj)}(hhh]jM)}(h!printf-style name for the thread.h]h!printf-style name for the thread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hKhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj'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}(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.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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&kthread_run_worker_on_cpu (C function)c.kthread_run_worker_on_cpuhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hestruct kthread_worker * kthread_run_worker_on_cpu (int cpu, unsigned int flags, const char namefmt[])h]h)}(hcstruct kthread_worker *kthread_run_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[])h](j?)}(hjBh]hstruct}(hj"hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj/hKubh)}(hhh]j)}(hkthread_workerh]hkthread_worker}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCmodnameN classnameNjwjz)}j}]j)}jskthread_run_worker_on_cpusbc.kthread_run_worker_on_cpuasbuh1hhjhhhj/hKubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj/hKubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hKubh)}(hkthread_run_worker_on_cpuh]j)}(hj_h]hkthread_run_worker_on_cpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj/hKubj4)}(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 }(hjߦhhhNhNubah}(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?)}(hjP*h]hconst}(hj"hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnamefmth]hnamefmt}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h[h]h[}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h]h]h]}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(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+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&]uh1j3hjhhhj/hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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)}(hjh]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&]uh1jRhjާubah}(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}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj.hKhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hKhjק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)}(hjRh]hconst char namefmt[]}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjLubj)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:78: ./include/linux/kthread.hhKhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghKhjק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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h kthread_should_stop (C function)c.kthread_should_stophNtauh1hhj]hhhNhNubh)}(hhh](h)}(hbool kthread_should_stop (void)h]h)}(hbool kthread_should_stop(void)h](j)}(hjh]hbool}(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&]noemphjjuh1j9hjubah}(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?}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj6hhubah}(h]h ]h"]h$]h&]uh1j3hjȨhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjQjHjQjIjJjKuh1hhhhj]hNhNubj)}(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&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjUubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjzh]hvoid}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjtubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhKhjqubah}(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&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjUubjM)}(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.chKhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h kthread_should_park (C function)c.kthread_should_parkhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hbool kthread_should_park (void)h]h)}(hbool kthread_should_park(void)h](j)}(hjh]hbool}(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&]uh1jPhjhhhjhKubh)}(hkthread_should_parkh]j)}(hkthread_should_parkh]hkthread_should_park}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(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)}(hshould this kthread park now?h]hshould this kthread park now?}(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&]jFjAjGjxjHjxjIjJjKuh1hhhhj]hNhNubj)}(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}(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)}(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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*kthread_freezable_should_stop (C function)c.kthread_freezable_should_stophNtauh1hhj]hhhNhNubh)}(hhh](h)}(h5bool kthread_freezable_should_stop (bool *was_frozen)h]h)}(h4bool kthread_freezable_should_stop(bool *was_frozen)h](j)}(hjh]hbool}(hj0hhhNhNubah}(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhj,hhhj=hKubj4)}(h(bool *was_frozen)h]j:)}(hbool *was_frozenh](j)}(hjh]hbool}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h was_frozenh]h was_frozen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjdubah}(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֫jIjJjKuh1hhhhj]hNhNubj)}(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&]uh1jhjޫubah}(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)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(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.}(hjbhhhNhNubah}(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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_func (C function)c.kthread_funchNtauh1hhj]hhhNhNubh)}(hhh](h)}(h.void * kthread_func (struct task_struct *task)h]h)}(h,void *kthread_func(struct task_struct *task)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.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)}jsjsbc.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}(hj4hhhNhNubah}(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&]jFjAjGjvjHjvjIjJjKuh1hhhhj]hNhNubj)}(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&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjzubj)}(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&]uh1jhjzubjM)}(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.chKhjzubjM)}(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.chKhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_data (C function)c.kthread_datahNtauh1hhj]hhhNhNubh)}(hhh](h)}(h.void * kthread_data (struct task_struct *task)h]h)}(h,void *kthread_data(struct task_struct *task)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKubjQ)}(h h]h }(hj.hhhNhNubah}(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}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj-hKubj4)}(h(struct task_struct *task)h]j:)}(hstruct task_struct *taskh](j?)}(hjBh]hstruct}(hjihhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjeubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeubh)}(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)}jsjOsbc.kthread_dataasbuh1hhjeubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(htaskh]htask}(hj®hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjaubah}(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&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubj)}(hhh]j)}(h6``struct task_struct *task`` kthread task in question h](j)}(h``struct task_struct *task``h]jS)}(hj-h]hstruct task_struct *task}(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.chKhj'ubj)}(hhh]jM)}(hkthread task in questionh]hkthread task in question}(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&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubjM)}(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 }(hj~hhhNhNubj)}(h**task**h]htask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubhE was created. The caller is responsible for ensuring the validity of }(hj~hhhNhNubj)}(h**task**h]htask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh when calling this function.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&kthread_complete_and_exit (C function)c.kthread_complete_and_exithNtauh1hhj]hhhNhNubh)}(hhh](h)}(hNvoid __noreturn kthread_complete_and_exit (struct completion *comp, long code)h]h)}(hMvoid __noreturn kthread_complete_and_exit(struct completion *comp, long code)h](j)}(hvoidh]hvoid}(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ͯhhhj߯hM6ubh __noreturn}(hjͯhhhNhNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjͯhhhj߯hM6ubh)}(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ͯhhhj߯hM6ubj4)}(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 reftargetj@modnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_complete_and_exitasbuh1hhjubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcomph]hcomp}(hjyhhhNhNubah}(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ͯhhhj߯hM6ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjɯhhhj߯hM6ubah}(h]jįah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj߯hM6hjƯ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Ưhhhj߯hM6ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj.hM7hj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hM7hjubj)}(h=``long code`` The integer value to return to kthread_stop(). h](j)}(h ``long code``h]jS)}(hjRh]h long code}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM8hjLubj)}(hhh]jM)}(h.The integer value to return to kthread_stop().h]h.The integer value to return to kthread_stop().}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghM8hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghM8hjubeh}(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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#kthread_create_on_node (C function)c.kthread_create_on_nodehNtauh1hhj]hhhNhNubh)}(hhh](h)}(hzstruct task_struct * kthread_create_on_node (int (*threadfn)(void *data), void *data, int node, const char namefmt[], ...)h]h)}(hxstruct task_struct *kthread_create_on_node(int (*threadfn)(void *data), void *data, int node, const char namefmt[], ...)h](j?)}(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}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j)}jskthread_create_on_nodesbc.kthread_create_on_nodeasbuh1hhjhhhj!hMubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj!hMubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj!hMubh)}(hkthread_create_on_nodeh]j)}(hjQh]hkthread_create_on_node}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(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)}(hj6h]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hthreadfnh]hthreadfn}(hjIJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjҲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj6h]h(}(hj߲hhhNhNubah}(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*}(hjhhhNhNubah}(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&]uh1jhj7ubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hdatah]hdata}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint nodeh](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char namefmt[]h](j?)}(hjP*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)}(hjih]h[}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjwh]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'hj hhhj!hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj!hMhj hhubj4)}(hhh]jM)}(hcreate a kthread.h]hcreate a kthread.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjChhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj!hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj^jHj^jIjJjKuh1hhhhj]hNhNubj)}(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)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjbubj)}(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&]uh1jhjhMhj~ubj)}(h*``void *data`` data ptr for **threadfn**. h](j)}(h``void *data``h]jS)}(hjh]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մhMhj~ubj)}(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}(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)}(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 hMhj~ubj)}(h;``const char namefmt[]`` printf-style name for the thread. h](j)}(h``const char namefmt[]``h]jS)}(hjDh]hconst char namefmt[]}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(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&]uh1jLhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhj~ubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hj}h]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.chKhjwubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhKhj~ubeh}(h]h ]h"]h$]h&]uh1jhjbubjM)}(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.chKhjbubjM)}(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.chMhjbubjM)}(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ݵhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjbubjM)}(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).}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM$hjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_bind (C function)c.kthread_bindhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h;void kthread_bind (struct task_struct *p, unsigned int cpu)h]h)}(h:void kthread_bind(struct task_struct *p, unsigned int cpu)h](j)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMQubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_hhhjqhMQubh)}(h kthread_bindh]j)}(h kthread_bindh]h kthread_bind}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj_hhhjqhMQubj4)}(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 reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_bindasbuh1hhjubjQ)}(h h]h }(hj޶hhhNhNubah}(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&]uh1jhj ubjQ)}(h h]h }(hjhhhNhNubah}(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)}(hcpuh]hcpu}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj_hhhjqhMQubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[hhhjqhMQubah}(h]jVah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjqhMQhjXhhubj4)}(hhh]jM)}(h%bind a just-created kthread to a cpu.h]h%bind a just-created kthread to a cpu.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMQhjphhubah}(h]h ]h"]h$]h&]uh1j3hjXhhhjqhMQubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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&]uh1jhj8ubah}(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 }(hjPhhhNhNubj)}(h**cpu**h]hcpu}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubhi doesn’t need to be online, and the thread must be stopped (i.e., just returned from kthread_create()).}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMUhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"kthread_create_on_cpu (C function)c.kthread_create_on_cpuhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h{struct task_struct * kthread_create_on_cpu (int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h]h)}(hystruct task_struct *kthread_create_on_cpu(int (*threadfn)(void *data), void *data, unsigned int cpu, const char *namefmt)h](j?)}(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*}(hj߸hhhNhNubah}(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&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hj6h]h(}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hthreadfnh]hthreadfn}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj6h]h(}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdatah]hdata}(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 }(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 }(hjhhhNhNubah}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *namefmth](j?)}(hjP*h]hconst}(hjKhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjGubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubj)}(hcharh]hchar}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hnamefmth]hnamefmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(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ѺjIjJjKuh1hhhhj]hNhNubj)}(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)}(hj3h]h void *data}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(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 }(hjLhhhNhNubj)}(h **threadfn**h]hthreadfn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhjHhMdhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMdhjubj)}(hB``unsigned int cpu`` The cpu on which the thread should be bound, h](j)}(h``unsigned int cpu``h]jS)}(hj~h]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.chMehjxubj)}(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&]uh1jhjxubeh}(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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_unpark (C function)c.kthread_unparkhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h+void kthread_unpark (struct task_struct *k)h]h)}(h*void kthread_unpark(struct task_struct *k)h](j)}(hvoidh]hvoid}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4hhhjFhMubh)}(hkthread_unparkh]j)}(hkthread_unparkh]hkthread_unpark}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1hhj4hhhjFhMubj4)}(h(struct task_struct *k)h]j:)}(hstruct task_struct *kh](j?)}(hjBh]hstruct}(hjuhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubh)}(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_unparkasbuh1hhjqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hjKh]hk}(hjμhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmubah}(h]h ]h"]h$]h&]jjuh1j3hj4hhhjFhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0hhhjFhMubah}(h]j+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjFhMhj-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-hhhjFhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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)}(hj8h]hstruct task_struct *k}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj2ubj)}(hhh]jM)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_park (C function)c.kthread_parkhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h(int kthread_park (struct task_struct *k)h]h)}(h'int kthread_park(struct task_struct *k)h](j)}(hinth]hint}(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}(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_parkasbuh1hhjubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjKh]hk}(hj`hhhNhNubah}(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&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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&]uh1jLhj߾hMhjubah}(h]h ]h"]h$]h&]uh1jhjľubeh}(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&]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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_stop (C function)c.kthread_stophNtauh1hhj]hhhNhNubh)}(hhh](h)}(h(int kthread_stop (struct task_struct *k)h]h)}(h'int kthread_stop(struct task_struct *k)h](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjghhhjyhMubh)}(h kthread_stoph]j)}(h kthread_stoph]h kthread_stop}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjghhhjyhMubj4)}(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&]jjuh1j3hjghhhjyhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjchhhjyhMubah}(h]j^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjyhMhj`hhubj4)}(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&]uh1j3hj`hhhjyhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjBjHjBjIjJjKuh1hhhhj]hNhNubj)}(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)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjFubj)}(hhh]j)}(h>``struct task_struct *k`` thread created by kthread_create(). h](j)}(h``struct task_struct *k``h]jS)}(hjkh]hstruct task_struct *k}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjeubj)}(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&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhjbubah}(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&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjFubjM)}(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}(hjhhhNhNubah}(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.chMhjFubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjFubjM)}(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.chMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_stop_put (C function)c.kthread_stop_puthNtauh1hhj]hhhNhNubh)}(hhh](h)}(h,int kthread_stop_put (struct task_struct *k)h]h)}(h+int kthread_stop_put(struct task_struct *k)h](j)}(hinth]hint}(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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhj;hMubj4)}(h(struct task_struct *k)h]j:)}(hstruct task_struct *kh](j?)}(hjBh]hstruct}(hjjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjfubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubh)}(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)}jsjPsbc.kthread_stop_putasbuh1hhjfubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hjKh]hk}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubah}(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&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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&]uh1jhj ubah}(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().}(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&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubjM)}(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().}(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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%kthread_affine_preferred (C function)c.kthread_affine_preferredhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hPint kthread_affine_preferred (struct task_struct *p, const struct cpumask *mask)h]h)}(hOint kthread_affine_preferred(struct task_struct *p, const struct cpumask *mask)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM<ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM<ubh)}(hkthread_affine_preferredh]j)}(hkthread_affine_preferredh]hkthread_affine_preferred}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.kthread_affine_preferredasbuh1hhjubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hp}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst struct cpumask *maskh](j?)}(hjP*h]hconst}(hj[hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjWubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj?)}(hjBh]hstruct}(hjvhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjWubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubh)}(hhh]j)}(hcpumaskh]hcpumask}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j$c.kthread_affine_preferredasbuh1hhjWubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hmaskh]hmask}(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)}(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&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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)}(hj8h]hstruct task_struct *p}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM=hj2ubj)}(hhh]jM)}(h#thread created by kthread_create().h]h#thread created by kthread_create().}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhM=hjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhM=hj/ubj)}(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)}(hjqh]hconst struct cpumask *mask}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM?hjkubj)}(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&]uh1jhjkubeh}(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&]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.}(hjhhhNhNubah}(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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_worker_fn (C function)c.kthread_worker_fnhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h(int kthread_worker_fn (void *worker_ptr)h]h)}(h'int kthread_worker_fn(void *worker_ptr)h](j)}(hinth]hint}(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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj!hMubj4)}(h(void *worker_ptr)h]j:)}(hvoid *worker_ptrh](j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h worker_ptrh]h worker_ptr}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjHubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj!hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj!hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj!hMhjhhubj4)}(hhh]jM)}(h*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&]uh1j3hjhhhj!hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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)}(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;``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&]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&]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.}(hj5hhhNhNubah}(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.}(hjDhhhNhNubah}(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().}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*kthread_create_worker_on_node (C function)c.kthread_create_worker_on_nodehNtauh1hhj]hhhNhNubh)}(hhh](h)}(hostruct kthread_worker * kthread_create_worker_on_node (unsigned int flags, int node, const char namefmt[], ...)h]h)}(hmstruct kthread_worker *kthread_create_worker_on_node(unsigned int flags, int node, const char namefmt[], ...)h](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj~hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM5ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhjhM5ubh)}(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_nodeasbuh1hhj~hhhjhM5ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhjhM5ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhM5ubh)}(hkthread_create_worker_on_nodeh]j)}(hjh]hkthread_create_worker_on_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~hhhjhM5ubj4)}(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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint nodeh](j)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hnodeh]hnode}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char namefmt[]h](j?)}(hjP*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)}(hnamefmth]hnamefmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hjih]h[}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hjwh]h]}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h...h]j)}(hjh]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj~hhhjhM5ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjzhhhjhM5ubah}(h]juah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM5hjwhhubj4)}(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&]uh1j3hjwhhhjhM5ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj-jHj-jIjJjKuh1hhhhj]hNhNubj)}(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)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM9hj1ubj)}(hhh](j)}(hJ``unsigned int flags`` flags modifying the default behavior of the worker h](j)}(h``unsigned int flags``h]jS)}(hjVh]hunsigned int flags}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM6hjPubj)}(hhh]jM)}(h2flags modifying the default behavior of the workerh]h2flags modifying the default behavior of the worker}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjkhM6hjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhM6hjMubj)}(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&]uh1jhjhM7hjMubj)}(hJ``const char namefmt[]`` printf-style name for the kthread worker (task). 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.chM8hjubj)}(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&]uh1jLhjhM8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM8hjMubj)}(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&]uh1jhjhKhjMubeh}(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&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chKhj1ubjM)}(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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM9hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)kthread_create_worker_on_cpu (C function)c.kthread_create_worker_on_cpuhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hhstruct kthread_worker * kthread_create_worker_on_cpu (int cpu, unsigned int flags, const char namefmt[])h]h)}(hfstruct kthread_worker *kthread_create_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[])h](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj}hhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhjhMMubh)}(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_cpuasbuh1hhj}hhhjhMMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhjhMMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhjhMMubh)}(hkthread_create_worker_on_cpuh]j)}(hjh]hkthread_create_worker_on_cpu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj}hhhjhMMubj4)}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj)}(hflagsh]hflags}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char namefmt[]h](j?)}(hjP*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)}(hnamefmth]hnamefmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hjih]h[}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hjwh]h]}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj}hhhjhMMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjyhhhjhMMubah}(h]jtah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMMhjvhhubj4)}(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&]uh1j3hjvhhhjhMMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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)}(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.chMQhjubj)}(hhh](j)}(h``int cpu`` CPU number 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&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMOhj7ubj)}(hhh]jM)}(h CPU numberh]h CPU number}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhMOhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMOhj4ubj)}(hJ``unsigned int flags`` flags modifying the default behavior of the worker h](j)}(h``unsigned int flags``h]jS)}(hjvh]hunsigned int flags}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMPhjpubj)}(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&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMPhj4ubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhj4ubeh}(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.}(hj1hhhNhNubah}(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:}(hj@hhhNhNubah}(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]jp_)}(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.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMbhjVubah}(h]h ]h"]h$]h&]uh1jhjSubj)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMdhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]j_j_uh1jo_hjhhMbhjOubah}(h]h ]h"]h$]h&]uh1jhhjhhMbhjubjM)}(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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_queue_work (C function)c.kthread_queue_workhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hRbool kthread_queue_work (struct kthread_worker *worker, struct kthread_work *work)h]h)}(hQbool kthread_queue_work(struct kthread_worker *worker, struct kthread_work *work)h](j)}(hjh]hbool}(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 }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubh)}(hhh]j)}(hkthread_workerh]hkthread_worker}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]j)}jsj sbc.kthread_queue_workasbuh1hhj"ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hworkerh]hworker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(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`c.kthread_queue_workasbuh1hhjubjQ)}(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&]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)}(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&]jFjAjGj1jHj1jIjJjKuh1hhhhj]hNhNubj)}(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&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj5ubj)}(hhh](j)}(h8``struct kthread_worker *worker`` target kthread_worker h](j)}(h!``struct kthread_worker *worker``h]jS)}(hjZh]hstruct kthread_worker *worker}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjTubj)}(hhh]jM)}(htarget kthread_workerh]htarget kthread_worker}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjQubj)}(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&]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&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj5ubjM)}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was successfully queued, }(hjhhhNhNubjS)}(h ``false``h]hfalse}(hjFhhhNhNubah}(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.chMhj5ubjM)}(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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*kthread_delayed_work_timer_fn (C function)c.kthread_delayed_work_timer_fnhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h9void kthread_delayed_work_timer_fn (struct timer_list *t)h]h)}(h8void kthread_delayed_work_timer_fn(struct timer_list *t)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.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}(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.kthread_delayed_work_timer_fnasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjkh]ht}(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)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjJhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjejHjejIjJjKuh1hhhhj]hNhNubj)}(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)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjiubj)}(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&]uh1jhjiubjM)}(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.chMhjiubjM)}(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.chMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'kthread_queue_delayed_work (C function)c.kthread_queue_delayed_workhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hxbool kthread_queue_delayed_work (struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h]h)}(hwbool kthread_queue_delayed_work(struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h](j)}(hjh]hbool}(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}(hj.hhhNhNubah}(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}(hjJhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjFubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubh)}(hhh]j)}(hkthread_workerh]hkthread_worker}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjjmodnameN classnameNjwjz)}j}]j)}jsj0sbc.kthread_queue_delayed_workasbuh1hhjFubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hworkerh]hworker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubj:)}(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}]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&]noemphjjuh1j9hjBubj:)}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj)}(hdelayh]hdelay}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubeh}(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&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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)}(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)}(htarget kthread_workerh]htarget kthread_worker}(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)}(hjh]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&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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)}(hjAh]hunsigned long delay}(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.chMhj;ubj)}(hhh]jM)}(h(number of jiffies to wait before queuingh]h(number of jiffies to wait before queuing}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(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.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)}(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.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&]uh1jRhjubh if the }(hjhhhNhNubj)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhi has already been pending. It means that either the timer was running or the work was queued. It returns }(hjhhhNhNubjS)}(h``true``h]htrue}(hjhhhNhNubah}(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.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_flush_work (C function)c.kthread_flush_workhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h3void kthread_flush_work (struct kthread_work *work)h]h)}(h2void kthread_flush_work(struct kthread_work *work)h](j)}(hvoidh]hvoid}(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 }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:hhhjLhM1ubh)}(hkthread_flush_workh]j)}(hkthread_flush_workh]hkthread_flush_work}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj:hhhjLhM1ubj4)}(h(struct kthread_work *work)h]j:)}(hstruct kthread_work *workh](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)}(h kthread_workh]h kthread_work}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjasbc.kthread_flush_workasbuh1hhjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hworkh]hwork}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubah}(h]h ]h"]h$]h&]jjuh1j3hj:hhhjLhM1ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6hhhjLhM1ubah}(h]j1ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjLhM1hj3hhubj4)}(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&]uh1j3hj3hhhjLhM1ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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&]uh1jhjubah}(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)}(hj?h]hstruct kthread_work *work}(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.chM2hj9ubj)}(hhh]jM)}(h work to flushh]h work to flush}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjThM2hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThM2hj6ubah}(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&]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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%kthread_mod_delayed_work (C function)c.kthread_mod_delayed_workhNtauh1hhj]hhhNhNubh)}(hhh](h)}(hvbool kthread_mod_delayed_work (struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h]h)}(hubool kthread_mod_delayed_work(struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h](j)}(hjh]hbool}(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_mod_delayed_workh]j)}(hkthread_mod_delayed_workh]hkthread_mod_delayed_work}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hX(struct kthread_worker *worker, struct kthread_delayed_work *dwork, unsigned long delay)h](j:)}(hstruct kthread_worker *workerh](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)}(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 }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hworkerh]hworker}(hjfhhhNhNubah}(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}]jGc.kthread_mod_delayed_workasbuh1hhj{ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hdworkh]hdwork}(hjhhhNhNubah}(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&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h/modify delay of or queue a kthread delayed workh]h/modify delay of or queue a kthread delayed work}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjNhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjijHjijIjJjKuh1hhhhj]hNhNubj)}(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)}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjmubj)}(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)}(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)}(hkthread delayed work to queueh]hkthread delayed work to queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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&]uh1jhjmubjM)}(h**Description**h]j)}(hj?h]h Description}(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.chMhjmubjM)}(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 }(hjUhhhNhNubj)}(h **dwork**h]hdwork}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubhH is idle, equivalent to kthread_queue_delayed_work(). Otherwise, modify }(hjUhhhNhNubj)}(h **dwork**h]hdwork}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh$’s timer so that it expires after }(hjUhhhNhNubj)}(h **delay**h]hdelay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh. If }(hjUhhhNhNubj)}(h **delay**h]hdelay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh is zero, }(hjUhhhNhNubj)}(h**work**h]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh( is guaranteed to be queued immediately.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjmubjM)}(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}(hjhhhNhNubah}(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.chMhjmubjM)}(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.chMhjmubjM)}(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.chMhjmubjM)}(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}(hj.hhhNhNubah}(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.chMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%kthread_cancel_work_sync (C function)c.kthread_cancel_work_synchNtauh1hhj]hhhNhNubh)}(hhh](h)}(h9bool kthread_cancel_work_sync (struct kthread_work *work)h]h)}(h8bool kthread_cancel_work_sync(struct kthread_work *work)h](j)}(hjh]hbool}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjchhhjthMubh)}(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&]jjuh1hhjchhhjthMubj4)}(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&]jjuh1j3hjchhhjthMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_hhhjthMubah}(h]jZah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjthMhj\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\hhhjthMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj>jHj>jIjJjKuh1hhhhj]hNhNubj)}(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)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjBubj)}(hhh]j)}(h9``struct kthread_work *work`` the kthread work to cancel h](j)}(h``struct kthread_work *work``h]jS)}(hjgh]hstruct kthread_work *work}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjaubj)}(hhh]jM)}(hthe kthread work to cancelh]hthe kthread work to cancel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubjM)}(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.chMhjBubjM)}(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.chMhjBubjM)}(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 ](jjAc-typeeh"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]refdocj refdomainjAreftypetype refexplicitrefwarnjwjj 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&]uh1jLhjhMhjBubjM)}(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.chMhjBubjM)}(h **Return**h]j)}(hj@h]hReturn}(hjBhhhNhNubah}(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.chMhjBubjM)}(h6``true`` if **work** was pending, ``false`` otherwise.h](jS)}(h``true``h]htrue}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubh if }(hjVhhhNhNubj)}(h**work**h]hwork}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh was pending, }(hjVhhhNhNubjS)}(h ``false``h]hfalse}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubh otherwise.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-kthread_cancel_delayed_work_sync (C function)"c.kthread_cancel_delayed_work_synchNtauh1hhj]hhhNhNubh)}(hhh](h)}(hJbool kthread_cancel_delayed_work_sync (struct kthread_delayed_work *dwork)h]h)}(hIbool kthread_cancel_delayed_work_sync(struct kthread_delayed_work *dwork)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.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 }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdworkh]hdwork}(hjLhhhNhNubah}(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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjshhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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.}(hjhhhNhNubah}(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}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubh if }(hj/hhhNhNubj)}(h **dwork**h]hdwork}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh was pending, }(hj/hhhNhNubjS)}(h ``false``h]hfalse}(hjWhhhNhNubah}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!kthread_flush_worker (C function)c.kthread_flush_workerhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h9void kthread_flush_worker (struct kthread_worker *worker)h]h)}(h8void kthread_flush_worker(struct kthread_worker *worker)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.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}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMhjMhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhj]hNhNubj)}(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)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM!hjlubj)}(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&]uh1jhjlubjM)}(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 hjlubjM)}(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.chMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#kthread_destroy_worker (C function)c.kthread_destroy_workerhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h;void kthread_destroy_worker (struct kthread_worker *worker)h]h)}(h:void kthread_destroy_worker(struct kthread_worker *worker)h](j)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM0ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj1hM0ubh)}(hkthread_destroy_workerh]j)}(hkthread_destroy_workerh]hkthread_destroy_worker}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj1hM0ubj4)}(h(struct kthread_worker *worker)h]j:)}(hstruct kthread_worker *workerh](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)}(hkthread_workerh]hkthread_worker}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjFsbc.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&]noemphjjuh1j9hjXubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj1hM0ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj1hM0ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hM0hjhhubj4)}(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&]uh1j3hjhhhj1hM0ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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}(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.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.chM1hjubj)}(hhh]jM)}(hworker to be destroyedh]hworker to be destroyed}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hM1hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hM1hjubah}(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&]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 }(hjuhhhNhNubj)}(h **worker**h]hworker}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh. The simple flush is enough because the kthread worker API is used only in trivial scenarios. There are no multi-step state machines needed.}(hjuhhhNhNubeh}(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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_use_mm (C function)c.kthread_use_mmhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h*void kthread_use_mm (struct mm_struct *mm)h]h)}(h)void kthread_use_mm(struct mm_struct *mm)h](j)}(hvoidh]hvoid}(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 }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjNhhhNhNubah}(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&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkthread_unuse_mm (C function)c.kthread_unuse_mmhNtauh1hhj]hhhNhNubh)}(hhh](h)}(h,void kthread_unuse_mm (struct mm_struct *mm)h]h)}(h+void kthread_unuse_mm(struct mm_struct *mm)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chM{ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj.hM{ubh)}(hkthread_unuse_mmh]j)}(hkthread_unuse_mmh]hkthread_unuse_mm}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj.hM{ubj4)}(h(struct mm_struct *mm)h]j:)}(hstruct mm_struct *mmh](j?)}(hjBh]hstruct}(hj]hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjYubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubh)}(hhh]j)}(h mm_structh]h mm_struct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}modnameN classnameNjwjz)}j}]j)}jsjCsbc.kthread_unuse_mmasbuh1hhjYubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hmmh]hmm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubah}(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&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.chM{hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj.hM{ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhj]hNhNubj)}(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.chMhjubj)}(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&]uh1jRhjubah}(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|hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$kthread_associate_blkcg (C function)c.kthread_associate_blkcghNtauh1hhj]hhhNhNubh)}(hhh](h)}(h>void kthread_associate_blkcg (struct cgroup_subsys_state *css)h]h)}(h=void kthread_associate_blkcg(struct cgroup_subsys_state *css)h](j)}(hvoidh]hvoid}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhR/var/lib/git/docbuild/linux/Documentation/driver-api/basics:81: ./kernel/kthread.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwhhhjhMubh)}(hkthread_associate_blkcgh]j)}(hkthread_associate_blkcgh]hkthread_associate_blkcg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjwhhhjhMubj4)}(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&]jjuh1j3hjwhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjshhhjhMubah}(h]jnah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjphhubj4)}(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.chMhj8hhubah}(h]h ]h"]h$]h&]uh1j3hjphhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjSjHjSjIjJjKuh1hhhhj]hNhNubj)}(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}(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.chMhjWubj)}(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}(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)}(hthe cgroup infoh]hthe cgroup info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhjsubah}(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.chMhjWubjM)}(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.chMhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]hhhNhNubeh}(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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsj8sbc.refcount_setasbuh1hhjNubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hrh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJubj:)}(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&]noemphjjuh1j9hjJubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj#hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj#hKubah}(h]jah ](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)}(hj/h]h refcount_t *r}(hj1hhhNhNubah}(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}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhKhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhKhj&ubj)}(h1``int n`` value to which the refcount will be seth](j)}(h ``int n``h]jS)}(hjhh]hint n}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjbubj)}(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.hhKhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hKhj&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*}(hj0hhhNhNubah}(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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]hn}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(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)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(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.}(hjehhhNhNubah}(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.}(hjthhhNhNubah}(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?)}(hjP*h]hconst}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(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_readasbuh1hhjubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hr}(hjdhhhNhNubah}(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)}(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&]uh1jhjubah}(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}(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](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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhZ/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&]uh1jPhjJhhhj[hKubh)}(hrefcount_add_not_zeroh]j)}(hrefcount_add_not_zeroh]hrefcount_add_not_zero}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhj[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)}jsjpsbc.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&]jjuh1j3hjJhhhj[hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhj[hKubah}(h]jAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj[hKhjChhubj4)}(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&]uh1j3hjChhhj[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)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjBubj)}(hhh](j)}(h+``int i`` the value to add to the refcount h](j)}(h ``int i``h]jS)}(hjgh]hint i}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjaubj)}(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|hKhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(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&]uh1jhjBubjM)}(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.hhKhjBubjM)}(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.hhKhjBubjM)}(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.hhKhjBubjM)}(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.hhKhjBubjM)}(h **Return**h]j)}(hj h]hReturn}(hj"hhhNhNubah}(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.hhKhjBubjM)}(h1false if the passed refcount is 0, true otherwiseh]h1false if the passed refcount is 0, true otherwise}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKhjBubeh}(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}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhKubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjrhKubh)}(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&]jjuh1hhjahhhjrhKubj4)}(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&]jjuh1j3hjahhhjrhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]hhhjrhKubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhKhjZhhubj4)}(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.hhKhj9hhubah}(h]h ]h"]h$]h&]uh1j3hjZhhhjrhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjTjHjTjIjJjKuh1hhhhjhNhNubj)}(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}(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.hhMhjXubj)}(hhh](j)}(h+``int i`` the value to add to the refcount h](j)}(h ``int i``h]jS)}(hj}h]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.hhMhjwubj)}(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&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhjtubj)}(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&]uh1jhjhMhjtubeh}(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&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjXubjM)}(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.hhMhjXubjM)}(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.hhMhjXubjM)}(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.hhMhjXubjM)}(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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM hjXubjM)}(h **Return**h]j)}(hjEh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjXubjM)}(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.hhMhjXubeh}(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 }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hr}(hj9hhhNhNubah}(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]j}ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM'hjhhubj4)}(hhh]jM)}(hadd a value to a refcounth]hadd a value to a refcount}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM'hj_hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM'ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjzjHjzjIjJjKuh1hhhhjhNhNubj)}(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+hj~ubj)}(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&]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.hhM+hj~ubjM)}(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*hj~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.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM,hj~ubjM)}(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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhM0hj~ubeh}(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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMAubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvhhhjhMAubh)}(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&]jjuh1hhjvhhhjhMAubj4)}(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&]jjuh1j3hjvhhhjhMAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjrhhhjhMAubah}(h]jmah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMAhjohhubj4)}(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&]uh1j3hjohhhjhMAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj5jHj5jIjJjKuh1hhhhjhNhNubj)}(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)}(hj?h]h Parameters}(hjAhhhNhNubah}(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.hhMEhj9ubj)}(hhh]j)}(h,``refcount_t *r`` the refcount to increment 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.hhMBhjXubj)}(hhh]jM)}(hthe refcount to incrementh]hthe refcount to increment}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjshMBhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMBhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMDhj9ubjM)}(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.hhMChj9ubjM)}(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.hhMFhj9ubjM)}(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.hhMJhj9ubjM)}(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.hhMKhj9ubeh}(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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(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}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]j)}jsj6sbc.refcount_inc_not_zero_acquireasbuh1hhjLubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjHubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj!hMXubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj!hMXubah}(h]jah ](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&]uh1jLhj hMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMYhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(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.}(hjIhhhNhNubah}(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.}(hjXhhhNhNubah}(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.}(hjghhhNhNubah}(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)}(hjxh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(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}(hj8hhhNhNubah}(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}(hjahhhNhNubah}(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&]jFjAjGjyjHjyjIjJjKuh1hhhhjhNhNubj)}(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.hhMvhj}ubj)}(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&]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.hhMuhj}ubjM)}(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.hhMthj}ubjM)}(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.hhMvhj}ubjM)}(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.hhMyhj}ubeh}(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}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<hhhjMhMubh)}(hrefcount_sub_and_testh]j)}(hrefcount_sub_and_testh]hrefcount_sub_and_test}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj<hhhjMhMubj4)}(h(int i, refcount_t *r)h](j:)}(hint ih](j)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubj:)}(h 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)}jsjbsbc.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&]noemphjjuh1j9hjtubeh}(h]h ]h"]h$]h&]jjuh1j3hj<hhhjMhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8hhhjMhMubah}(h]j3ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjMhMhj5hhubj4)}(hhh]jM)}(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&]uh1j3hj5hhhjMhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/jHj/jIjJjKuh1hhhhjhNhNubj)}(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)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj3ubj)}(hhh](j)}(h/``int i`` amount to subtract from the refcount h](j)}(h ``int i``h]jS)}(hjXh]hint i}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhjRubj)}(hhh]jM)}(h$amount to subtract from the refcounth]h$amount to subtract from the refcount}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjOubj)}(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&]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&]uh1jLhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj3ubjM)}(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.hhMhj3ubjM)}(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.hhMhj3ubjM)}(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.hhMhj3ubjM)}(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.hhMhj3ubjM)}(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.hhMhj3ubeh}(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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRhhhjchMubh)}(hrefcount_dec_and_testh]j)}(hrefcount_dec_and_testh]hrefcount_dec_and_test}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1hhjRhhhjchMubj4)}(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)}jsjxsbc.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&]jjuh1j3hjRhhhjchMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjNhhhjchMubah}(h]jIah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjchMhjKhhubj4)}(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&]uh1j3hjKhhhjchMubeh}(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&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:87: ./include/linux/refcount.hhMhj4ubj)}(hhh]jM)}(h the refcounth]h the refcount}(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&]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&]uh1jhj ubah}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsjsbc.refcount_decasbuh1hhj)ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hjh]hr}(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)}(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.}(hj5hhhNhNubah}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK(ubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`hhhjqhK(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&]jjuh1hhj`hhhjqhK(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&]jjuh1j3hj`hhhjqhK(ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj\hhhjqhK(ubah}(h]jWah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjqhK(hjYhhubj4)}(hhh]jM)}(hdecrement a refcount if it is 1h]hdecrement a refcount if it is 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&]uh1j3hjYhhhjqhK(ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(hjHh]h refcount_t *r}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chK)hjBubj)}(hhh]jM)}(h the refcounth]h the refcount}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hK)hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hK)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&]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}(hj hhhNhNubah}(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}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]j)}jsj/sbc.refcount_dec_not_oneasbuh1hhjEubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hjh]hr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAubah}(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&]uh1jLhjhKAhjubah}(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}(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.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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKBhjubjM)}(hhjXubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubh)}(hhh]j)}(hmutexh]hmutex}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]j%c.refcount_dec_and_mutex_lockasbuh1hhjXubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hlockh]hlock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(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)}(hjh]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}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hKdhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hKdhjubj)}(h.``struct mutex *lock`` the mutex to be locked h](j)}(h``struct mutex *lock``h]jS)}(hjWh]hstruct mutex *lock}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKehjQubj)}(hhh]jM)}(hthe mutex to be lockedh]hthe mutex to be locked}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhKehjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhKehjubeh}(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)}(hh]hunsigned long *flags}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhj8ubj)}(hhh]jM)}(h"saved IRQ-flags if the is acquiredh]h"saved IRQ-flags if the is acquired}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjShKhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShKhjubeh}(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&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubjM)}(hdSame as refcount_dec_and_lock() above except that the spinlock is acquired with disabled interrupts.h]hdSame as refcount_dec_and_lock() above except that the spinlock is acquired with disabled interrupts.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubjM)}(hJtrue and hold spinlock if able to decrement refcount to 0, false otherwiseh]hJtrue and hold spinlock if able to decrement refcount to 0, false otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:90: ./lib/refcount.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]reference-countingah ]h"]reference countingah$]h&]uh1hhhhhhhhKUubh)}(hhh](h)}(hAtomicsh]hAtomics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK^ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_read (C function) c.atomic_readhNtauh1hhjhhhNhNubh)}(hhh](h)}(h#int atomic_read (const atomic_t *v)h]h)}(h"int atomic_read(const atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hKubh)}(h atomic_readh]j)}(h atomic_readh]h atomic_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hKubj4)}(h(const atomic_t *v)h]j:)}(hconst atomic_t *vh](j?)}(hjP*h]hconst}(hj;hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj7ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubh)}(hhh]j)}(hatomic_th]hatomic_t}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj[modnameN classnameNjwjz)}j}]j)}jsj!sb c.atomic_readasbuh1hhj7ubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hvh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubah}(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!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``const atomic_t *v`` pointer to atomic_t **Description** Atomically loads the value of **v** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_read() there. **Return** The value loaded from **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]j)}(h*``const atomic_t *v`` pointer to atomic_t h](j)}(h``const atomic_t *v``h]jS)}(hjh]hconst atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hjPhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(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:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h;Unsafe to use in noinstr code; use raw_atomic_read() there.h]h;Unsafe to use in noinstr code; use raw_atomic_read() there.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_read_acquire (C function)c.atomic_read_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h+int atomic_read_acquire (const atomic_t *v)h]h)}(h*int atomic_read_acquire(const atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK%ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhK%ubh)}(hatomic_read_acquireh]j)}(hatomic_read_acquireh]hatomic_read_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhK%ubj4)}(h(const atomic_t *v)h]j:)}(hconst atomic_t *vh](j?)}(hjP*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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_read_acquireasbuh1hhjubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhK%ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhK%ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK%hjhhubj4)}(hhh]jM)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK%hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhK%ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``const atomic_t *v`` pointer to atomic_t **Description** Atomically loads the value of **v** with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_read_acquire() there. **Return** The value loaded from **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK)hjubj)}(hhh]j)}(h*``const atomic_t *v`` pointer to atomic_t h](j)}(h``const atomic_t *v``h]jS)}(hjh]hconst atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK&hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK&hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK(hjubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hj*hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh with acquire ordering.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK'hjubjM)}(hCUnsafe to use in noinstr code; use raw_atomic_read_acquire() there.h]hCUnsafe to use in noinstr code; use raw_atomic_read_acquire() there.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK)hjubjM)}(h **Return**h]j)}(hj\h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK+hjubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjrhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK,hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_set (C function) c.atomic_sethNtauh1hhjhhhNhNubh)}(hhh](h)}(h$void atomic_set (atomic_t *v, int i)h]h)}(h#void atomic_set(atomic_t *v, int i)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK6ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhK6ubh)}(h atomic_seth]j)}(h atomic_seth]h atomic_set}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhK6ubj4)}(h(atomic_t *v, int i)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_setasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj! hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj. hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint ih](j)}(hinth]hint}(hjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB ubjQ)}(h h]h }(hjT hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjB ubj)}(hjh]hi}(hjb hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB ubeh}(h]h ]h"]h$]h&]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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK6hj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhK6ubeh}(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 relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_set() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK:hj ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj h]h atomic_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK7hj ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hK7hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK7hj 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK8hj ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hK8hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK8hj 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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK:hj ubjM)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hjV hhhNhNubj)}(h**v**h]hv}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubh to }(hjV hhhNhNubj)}(h**i**h]hi}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubh with relaxed ordering.}(hjV hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK9hj ubjM)}(h:Unsafe to use in noinstr code; use raw_atomic_set() there.h]h:Unsafe to use in noinstr code; use raw_atomic_set() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK;hj ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK=hj ubjM)}(hNothing.h]hNothing.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK>hj ubeh}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKHubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hKHubh)}(hatomic_set_releaseh]j)}(hatomic_set_releaseh]hatomic_set_release}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hKHubj4)}(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.atomic_set_releaseasbuh1hhj ubjQ)}(h h]h }(hj? hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjM hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjZ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hint ih](j)}(hinth]hint}(hjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjn ubj)}(hjh]hi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hKHubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hKHubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hKHhj 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:96: ./include/linux/atomic/atomic-instrumented.hhKHhj hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hKHubeh}(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. Unsafe to use in noinstr code; use raw_atomic_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:96: ./include/linux/atomic/atomic-instrumented.hhKLhj ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj h]h atomic_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKIhj ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hKIhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKIhj ubj)}(h``int i`` int value to assign 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKJhj+ ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjF hKJhjG ubah}(h]h ]h"]h$]h&]uh1jhj+ ubeh}(h]h ]h"]h$]h&]uh1jhjF hKJhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjl h]h Description}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKLhj ubjM)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to }(hj hhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh with release ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKKhj ubjM)}(hBUnsafe to use in noinstr code; use raw_atomic_set_release() there.h]hBUnsafe to use in noinstr code; use raw_atomic_set_release() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKMhj ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKOhj ubjM)}(hNothing.h]hNothing.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKPhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_add (C function) c.atomic_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h$void atomic_add (int i, atomic_t *v)h]h)}(h#void atomic_add(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK[ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hK[ubh)}(h atomic_addh]j)}(h atomic_addh]h atomic_add}(hj, hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj( ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hK[ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjH hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD ubjQ)}(h h]h }(hjV hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjD ubj)}(hjh]hi}(hjd hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ ubj:)}(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_addasbuh1hhjx ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjx ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ ubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hK[ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hK[ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hK[hj hhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK[hj hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hK[ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. 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:96: ./include/linux/atomic/atomic-instrumented.hhK_hj 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:96: ./include/linux/atomic/atomic-instrumented.hhK\hjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hK\hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hK\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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK]hjWubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjrhK]hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhK]hjubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK_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:96: ./include/linux/atomic/atomic-instrumented.hhK^hj ubjM)}(h:Unsafe to use in noinstr code; use raw_atomic_add() there.h]h:Unsafe to use in noinstr code; use raw_atomic_add() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhK`hj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKbhj ubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKchj ubeh}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKmubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEhhhjWhKmubh)}(hatomic_add_returnh]j)}(hatomic_add_returnh]hatomic_add_return}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1hhjEhhhjWhKmubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjlsbc.atomic_add_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubeh}(h]h ]h"]h$]h&]jjuh1j3hjEhhhjWhKmubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjAhhhjWhKmubah}(h]j<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjWhKmhj>hhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKmhjhhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhjWhKmubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj9jHj9jIjJjKuh1hhhhjhNhNubj)}(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)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKqhj=ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjbh]hint i}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKnhj\ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjwhKnhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhKnhjYubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKohjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKohjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKohjYubeh}(h]h ]h"]h$]h&]uh1jhj=ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKqhj=ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKphj=ubjM)}(hAUnsafe to use in noinstr code; use raw_atomic_add_return() there.h]hAUnsafe to use in noinstr code; use raw_atomic_add_return() there.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKrhj=ubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKthj=ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjXhhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKuhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_add_return_acquire (C function)c.atomic_add_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h2int atomic_add_return_acquire (int i, atomic_t *v)h]h)}(h1int atomic_add_return_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hatomic_add_return_acquireh]j)}(hatomic_add_return_acquireh]hatomic_add_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_add_return_acquireasbuh1hhjubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjnhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_add_return_acquire() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj<hhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh to (}(hj<hhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh + }(hj<hhhNhNubj)}(h**i**h]hi}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh) with acquire ordering.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_add_return_acquire() there.h]hIUnsafe to use in noinstr code; use raw_atomic_add_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_add_return_release (C function)c.atomic_add_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h2int atomic_add_return_release (int i, atomic_t *v)h]h)}(h1int atomic_add_return_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hatomic_add_return_releaseh]j)}(hatomic_add_return_releaseh]hatomic_add_return_release}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]hi}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj_modnameN classnameNjwjz)}j}]j)}jsj sbc.atomic_add_return_releaseasbuh1hhjVubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_add_return_release() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj;h]h atomic_t *v}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj5ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhKhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_add_return_release() there.h]hIUnsafe to use in noinstr code; use raw_atomic_add_return_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_add_return_relaxed (C function)c.atomic_add_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h2int atomic_add_return_relaxed (int i, atomic_t *v)h]h)}(h1int atomic_add_return_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5hhhjGhKubh)}(hatomic_add_return_relaxedh]j)}(hatomic_add_return_relaxedh]hatomic_add_return_relaxed}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5hhhjGhKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj\sbc.atomic_add_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubeh}(h]h ]h"]h$]h&]jjuh1j3hj5hhhjGhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1hhhjGhKubah}(h]j,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjGhKhj.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:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj.hhhjGhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)jHj)jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_add_return_relaxed() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj-ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjRh]hint i}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjLubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghKhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghKhjIubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubeh}(h]h ]h"]h$]h&]uh1jhj-ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj-ubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj-ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_add_return_relaxed() there.h]hIUnsafe to use in noinstr code; use raw_atomic_add_return_relaxed() there.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj-ubjM)}(h **Return**h]j)}(hj2h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj-ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjHhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_fetch_add (C function)c.atomic_fetch_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h)int atomic_fetch_add (int i, atomic_t *v)h]h)}(h(int atomic_fetch_add(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hatomic_fetch_addh]j)}(hatomic_fetch_addh]hatomic_fetch_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_fetch_addasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]j|ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhj~hhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj^hhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjyjHjyjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_add() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj}ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhj}ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj}ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj,hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh to (}(hj,hhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh + }(hj,hhhNhNubj)}(h**i**h]hi}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh) with full ordering.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj}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.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj}ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj}ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj}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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hatomic_fetch_add_acquireh]j)}(hatomic_fetch_add_acquireh]hatomic_fetch_add_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(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.atomic_fetch_add_acquireasbuh1hhjFubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_add_acquire() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj+h]h atomic_t *v}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj%ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hKhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjfh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj|hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh to (}(hj|hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh + }(hj|hhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh) with acquire ordering.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_add_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_add_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_add_release (C function)c.atomic_fetch_add_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h1int atomic_fetch_add_release (int i, atomic_t *v)h]h)}(h0int atomic_fetch_add_release(int i, atomic_t *v)h](j)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj7hKubh)}(hatomic_fetch_add_releaseh]j)}(hatomic_fetch_add_releaseh]hatomic_fetch_add_release}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%hhhj7hKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjLsbc.atomic_fetch_add_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubeh}(h]h ]h"]h$]h&]jjuh1j3hj%hhhj7hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj!hhhj7hKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hKhjhhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj7hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_add_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjBh]hint i}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhj<ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhKhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhKhj9ubj)}(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&]uh1jRhjyubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjuubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhKhj9ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_add_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_add_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(h **Return**h]j)}(hj"h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj8hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_add_relaxed (C function)c.atomic_fetch_add_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1int atomic_fetch_add_relaxed (int i, atomic_t *v)h]h)}(h0int atomic_fetch_add_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuhhhjhKubh)}(hatomic_fetch_add_relaxedh]j)}(hatomic_fetch_add_relaxedh]hatomic_fetch_add_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjuhhhjhKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_fetch_add_relaxedasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj( hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjuhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjqhhhjhKubah}(h]jlah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjnhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjN hhubah}(h]h ]h"]h$]h&]uh1j3hjnhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGji jHji 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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhKhjm 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:96: ./include/linux/atomic/atomic-instrumented.hhKhj ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]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:96: ./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&]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:96: ./include/linux/atomic/atomic-instrumented.hhKhjm 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}(hj6!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh + }(hj!hhhNhNubj)}(h**i**h]hi}(hjH!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh) with relaxed ordering.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjm 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.}(hja!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjm ubjM)}(h **Return**h]j)}(hjr!h]hReturn}(hjt!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp!ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjm ubjM)}(hThe original value of **v**.h](hThe original value of }(hj!hhhNhNubj)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhKhjm 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:96: ./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_subasbuh1hhj6"ubjQ)}(h h]h }(hj]"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6"ubj)}(hjh]h*}(hjk"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6"ubj)}(hjh]hv}(hjx"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj!ubeh}(h]h ]h"]h$]h&]jjuh1j3hj!hhhj!hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj!hhhj!hMubah}(h]j!ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj!hMhj!hhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"hhubah}(h]h ]h"]h$]h&]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:96: ./include/linux/atomic/atomic-instrumented.hhMhj"ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj"h]hint i}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj"ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj#h]h atomic_t *v}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj#ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj4#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0#hMhj1#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj0#hMhj"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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjl#hhhNhNubj)}(h**v**h]hv}(hjt#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl#ubh to (}(hjl#hhhNhNubj)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl#ubh - }(hjl#hhhNhNubj)}(h**i**h]hi}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl#ubh) with relaxed ordering.}(hjl#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"ubjM)}(h:Unsafe to use in noinstr code; use raw_atomic_sub() there.h]h:Unsafe to use in noinstr code; use raw_atomic_sub() there.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"ubjM)}(h **Return**h]j)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"ubjM)}(hNothing.h]hNothing.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_sub_return (C function)c.atomic_sub_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h*int atomic_sub_return (int i, atomic_t *v)h]h)}(h)int atomic_sub_return(int i, atomic_t *v)h](j)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$hhhj$hMubh)}(hatomic_sub_returnh]j)}(hatomic_sub_returnh]hatomic_sub_return}(hj($hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj$hhhj$hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjD$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@$ubjQ)}(h h]h }(hjR$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@$ubj)}(hjh]hi}(hj`$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<$ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj{$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx$ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}$modnameN classnameNjwjz)}j}]j)}jsj*$sbc.atomic_sub_returnasbuh1hhjt$ubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjt$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt$ubj)}(hjh]hv}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<$ubeh}(h]h ]h"]h$]h&]jjuh1j3hj$hhhj$hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#hhhj$hMubah}(h]j#ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj$hMhj#hhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$hhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj$hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$jHj$jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_sub_return() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj %h]hint i}(hj"%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj9%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5%hMhj6%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj5%hMhj%ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjY%h]h atomic_t *v}(hj[%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjW%ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjS%ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjr%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjn%hMhjo%ubah}(h]h ]h"]h$]h&]uh1jhjS%ubeh}(h]h ]h"]h$]h&]uh1jhjn%hMhj%ubeh}(h]h ]h"]h$]h&]uh1jhj$ubjM)}(h**Description**h]j)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj%hhhNhNubj)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh to (}(hj%hhhNhNubj)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh - }(hj%hhhNhNubj)}(h**i**h]hi}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh) with full ordering.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubjM)}(hAUnsafe to use in noinstr code; use raw_atomic_sub_return() there.h]hAUnsafe to use in noinstr code; use raw_atomic_sub_return() there.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubjM)}(h **Return**h]j)}(hj&h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj&hhhNhNubj)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_sub_return_acquire (C function)c.atomic_sub_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h2int atomic_sub_return_acquire (int i, atomic_t *v)h]h)}(h1int atomic_sub_return_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjW&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS&hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&ubjQ)}(h h]h }(hjf&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjS&hhhje&hM&ubh)}(hatomic_sub_return_acquireh]j)}(hatomic_sub_return_acquireh]hatomic_sub_return_acquire}(hjx&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt&ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjS&hhhje&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)}jsjz&sbc.atomic_sub_return_acquireasbuh1hhj&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hjh]hv}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubeh}(h]h ]h"]h$]h&]jjuh1j3hjS&hhhje&hM&ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjO&hhhje&hM&ubah}(h]jJ&ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhje&hM&hjL&hhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj/'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&hj,'hhubah}(h]h ]h"]h$]h&]uh1j3hjL&hhhje&hM&ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjG'jHjG'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_sub_return_acquire() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjQ'h]h Parameters}(hjS'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO'ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hjK'ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjp'h]hint i}(hjr'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjn'ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hjj'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&]uh1jhjj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hM'hjg'ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj'h]h atomic_t *v}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hjK'ubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj'hhhNhNubj)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh to (}(hj'hhhNhNubj)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh - }(hj'hhhNhNubj)}(h**i**h]hi}(hj&(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh) with acquire ordering.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM)hjK'ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_sub_return_acquire() there.h]hIUnsafe to use in noinstr code; use raw_atomic_sub_return_acquire() there.}(hj?(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjK'ubjM)}(h **Return**h]j)}(hjP(h]hReturn}(hjR(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN(ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hjK'ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjf(hhhNhNubj)}(h**v**h]hv}(hjn(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf(ubh.}(hjf(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjK'ubeh}(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}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(hhhj(hM8ubh)}(hatomic_sub_return_releaseh]j)}(hatomic_sub_return_releaseh]hatomic_sub_return_release}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj(hhhj(hM8ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj)}(hjh]hi}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj)modnameN classnameNjwjz)}j}]j)}jsj(sbc.atomic_sub_return_releaseasbuh1hhj)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)}(hjh]hv}(hjV)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubeh}(h]h ]h"]h$]h&]jjuh1j3hj(hhhj(hM8ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj(hhhj(hM8ubah}(h]j(ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj(hM8hj(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:96: ./include/linux/atomic/atomic-instrumented.hhM8hj|)hhubah}(h]h ]h"]h$]h&]uh1j3hj(hhhj(hM8ubeh}(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_sub_return_release() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hj)ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj)hM9hj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hM9hj)ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj)h]h atomic_t *v}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hj)ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*hM:hj*ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj*hM:hj)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubjM)}(h**Description**h]j)}(hj4*h]h Description}(hj6*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2*ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hj)ubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjJ*hhhNhNubj)}(h**v**h]hv}(hjR*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ*ubh to (}(hjJ*hhhNhNubj)}(h**v**h]hv}(hjd*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ*ubh - }(hjJ*hhhNhNubj)}(h**i**h]hi}(hjv*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ*ubh) with release ordering.}(hjJ*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hj)ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_sub_return_release() there.h]hIUnsafe to use in noinstr code; use raw_atomic_sub_return_release() there.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hj)ubjM)}(h **Return**h]j)}(hj*h]hReturn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hj)ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj*hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_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}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*hhhj+hMKubh)}(hatomic_sub_return_relaxedh]j)}(hatomic_sub_return_relaxedh]hatomic_sub_return_relaxed}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj*hhhj+hMKubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](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)}(hjh]hi}(hjP+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj,+ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjk+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh+ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjm+modnameN classnameNjwjz)}j}]j)}jsj+sbc.atomic_sub_return_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)}(hjh]hv}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj,+ubeh}(h]h ]h"]h$]h&]jjuh1j3hj*hhhj+hMKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj*hhhj+hMKubah}(h]j*ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj+hMKhj*hhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj+hhubah}(h]h ]h"]h$]h&]uh1j3hj*hhhj+hMKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj+jHj+jIjJjKuh1hhhhjhNhNubj)}(hX!**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_sub_return_relaxed() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj+ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj,h]hint i}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhj ,ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj),hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%,hMLhj&,ubah}(h]h ]h"]h$]h&]uh1jhj ,ubeh}(h]h ]h"]h$]h&]uh1jhj%,hMLhj,ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjI,h]h atomic_t *v}(hjK,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjG,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjC,ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjb,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj^,hMMhj_,ubah}(h]h ]h"]h$]h&]uh1jhjC,ubeh}(h]h ]h"]h$]h&]uh1jhj^,hMMhj,ubeh}(h]h ]h"]h$]h&]uh1jhj+ubjM)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj+ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj,hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh to (}(hj,hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh - }(hj,hhhNhNubj)}(h**i**h]hi}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh) with relaxed ordering.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhj+ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_sub_return_relaxed() there.h]hIUnsafe to use in noinstr code; use raw_atomic_sub_return_relaxed() there.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhj+ubjM)}(h **Return**h]j)}(hj,h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhj+ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj-hhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShj+ubeh}(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}(hjG-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC-hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]ubjQ)}(h h]h }(hjV-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjC-hhhjU-hM]ubh)}(hatomic_fetch_subh]j)}(hatomic_fetch_subh]hatomic_fetch_sub}(hjh-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd-ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjC-hhhjU-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)}jsjj-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)}(hjh]hv}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|-ubeh}(h]h ]h"]h$]h&]jjuh1j3hjC-hhhjU-hM]ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj?-hhhjU-hM]ubah}(h]j:-ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjU-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:96: ./include/linux/atomic/atomic-instrumented.hhM]hj.hhubah}(h]h ]h"]h$]h&]uh1j3hj<-hhhjU-hM]ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj7.jHj7.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)}(hjA.h]h Parameters}(hjC.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?.ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahj;.ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj`.h]hint i}(hjb.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^.ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjZ.ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjy.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhju.hM^hjv.ubah}(h]h ]h"]h$]h&]uh1jhjZ.ubeh}(h]h ]h"]h$]h&]uh1jhju.hM^hjW.ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj.h]h atomic_t *v}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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_hjW.ubeh}(h]h ]h"]h$]h&]uh1jhj;.ubjM)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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:96: ./include/linux/atomic/atomic-instrumented.hhM`hj;.ubjM)}(h@Unsafe to use in noinstr code; use raw_atomic_fetch_sub() there.h]h@Unsafe to use in noinstr code; use raw_atomic_fetch_sub() there.}(hj//hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhj;.ubjM)}(h **Return**h]j)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMdhj;.ubjM)}(hThe original value of **v**.h](hThe original 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:96: ./include/linux/atomic/atomic-instrumented.hhMehj;.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_sub_acquire (C function)c.atomic_fetch_sub_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h1int atomic_fetch_sub_acquire (int i, atomic_t *v)h]h)}(h0int atomic_fetch_sub_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMpubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/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&]jjuh1hhj/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 0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj 0modnameN classnameNjwjz)}j}]j)}jsj/sbc.atomic_fetch_sub_acquireasbuh1hhj0ubjQ)}(h h]h }(hj+0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]h*}(hj90hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]hv}(hjF0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubeh}(h]h ]h"]h$]h&]jjuh1j3hj/hhhj/hMpubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/hhhj/hMpubah}(h]j/ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/hMphj/hhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjo0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphjl0hhubah}(h]h ]h"]h$]h&]uh1j3hj/hhhj/hMpubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj0jHj0jIjJjKuh1hhhhjhNhNubj)}(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)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthj0ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj0h]hint i}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhj0ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMqhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMqhj0ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj0h]h atomic_t *v}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhj0ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMrhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMrhj0ubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthj0ubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj:1hhhNhNubj)}(h**v**h]hv}(hjB1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:1ubh to (}(hj:1hhhNhNubj)}(h**v**h]hv}(hjT1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:1ubh - }(hj:1hhhNhNubj)}(h**i**h]hi}(hjf1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:1ubh) with acquire ordering.}(hj:1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshj0ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_sub_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_sub_acquire() there.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhj0ubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMwhj0ubjM)}(hThe original value of **v**.h](hThe original value of }(hj1hhhNhNubj)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhj0ubeh}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1hhhj1hMubh)}(hatomic_fetch_sub_releaseh]j)}(hatomic_fetch_sub_releaseh]hatomic_fetch_sub_release}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj1hhhj1hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj$2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 2ubjQ)}(h h]h }(hj22hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj 2ubj)}(hjh]hi}(hj@2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj[2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj]2modnameN classnameNjwjz)}j}]j)}jsj 2sbc.atomic_fetch_sub_releaseasbuh1hhjT2ubjQ)}(h h]h }(hj{2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjT2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT2ubj)}(hjh]hv}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubeh}(h]h ]h"]h$]h&]jjuh1j3hj1hhhj1hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1hhhj1hMubah}(h]j1ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hMhj1hhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2hhubah}(h]h ]h"]h$]h&]uh1j3hj1hhhj1hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj2jHj2jIjJjKuh1hhhhjhNhNubj)}(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)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj3h]hint i}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj2ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj93h]h atomic_t *v}(hj;3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj73ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj33ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjR3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjN3hMhjO3ubah}(h]h ]h"]h$]h&]uh1jhj33ubeh}(h]h ]h"]h$]h&]uh1jhjN3hMhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubjM)}(h**Description**h]j)}(hjt3h]h Description}(hjv3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr3ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubjM)}(hBAtomically updates **v** to (**v** - **i**) with release 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 - }(hj3hhhNhNubj)}(h**i**h]hi}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh) with release ordering.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubjM)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubjM)}(h **Return**h]j)}(hj3h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubjM)}(hThe original value of **v**.h](hThe original value of }(hj3hhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](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}(hj74hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj34hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjF4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj34hhhjE4hMubh)}(hatomic_fetch_sub_relaxedh]j)}(hatomic_fetch_sub_relaxedh]hatomic_fetch_sub_relaxed}(hjX4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj34hhhjE4hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjt4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjp4ubj)}(hjh]hi}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjl4ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j)}jsjZ4sbc.atomic_fetch_sub_relaxedasbuh1hhj4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hjh]hv}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjl4ubeh}(h]h ]h"]h$]h&]jjuh1j3hj34hhhjE4hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/4hhhjE4hMubah}(h]j*4ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjE4hMhj,4hhubj4)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj 5hhubah}(h]h ]h"]h$]h&]uh1j3hj,4hhhjE4hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj'5jHj'5jIjJjKuh1hhhhjhNhNubj)}(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)}(hj15h]h Parameters}(hj35hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/5ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+5ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjP5h]hint i}(hjR5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjN5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJ5ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hji5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhje5hMhjf5ubah}(h]h ]h"]h$]h&]uh1jhjJ5ubeh}(h]h ]h"]h$]h&]uh1jhje5hMhjG5ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj5h]h atomic_t *v}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjG5ubeh}(h]h ]h"]h$]h&]uh1jhj+5ubjM)}(h**Description**h]j)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+5ubjM)}(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}(hj5hhhNhNubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+5ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_sub_relaxed() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_sub_relaxed() there.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+5ubjM)}(h **Return**h]j)}(hj06h]hReturn}(hj26hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.6ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+5ubjM)}(hThe original value of **v**.h](hThe original value of }(hjF6hhhNhNubj)}(h**v**h]hv}(hjN6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF6ubh.}(hjF6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+5ubeh}(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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6hhhj6hMubh)}(h atomic_inch]j)}(h atomic_inch]h atomic_inc}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj6hhhj6hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6modnameN classnameNjwjz)}j}]j)}jsj6sb c.atomic_incasbuh1hhj6ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]hv}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubah}(h]h ]h"]h$]h&]jjuh1j3hj6hhhj6hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6hhhj6hMubah}(h]jz6ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6hMhj|6hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj+7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(7hhubah}(h]h ]h"]h$]h&]uh1j3hj|6hhhj6hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjC7jHjC7jIjJjKuh1hhhhjhNhNubj)}(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)}(hjM7h]h Parameters}(hjO7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK7ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjG7ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjl7h]h atomic_t *v}(hjn7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjj7ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjf7ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjf7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjc7ubah}(h]h ]h"]h$]h&]uh1jhjG7ubjM)}(h**Description**h]j)}(hj7h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjG7ubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj7hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh to (}(hj7hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh + 1) with relaxed ordering.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjG7ubjM)}(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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjG7ubjM)}(h **Return**h]j)}(hj8h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjG7ubjM)}(hNothing.h]hNothing.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjG7ubeh}(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}(hjF8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB8hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjU8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjB8hhhjT8hMubh)}(hatomic_inc_returnh]j)}(hatomic_inc_returnh]hatomic_inc_return}(hjg8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc8ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjB8hhhjT8hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]j)}jsji8sbc.atomic_inc_returnasbuh1hhj8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hjh]hv}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj{8ubah}(h]h ]h"]h$]h&]jjuh1j3hjB8hhhjT8hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>8hhhjT8hMubah}(h]j98ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjT8hMhj;8hhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1j3hj;8hhhjT8hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj9jHj9jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_inc_return() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj 9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 9ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj+9h]h atomic_t *v}(hj-9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj%9ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjD9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@9hMhjA9ubah}(h]h ]h"]h$]h&]uh1jhj%9ubeh}(h]h ]h"]h$]h&]uh1jhj@9hMhj"9ubah}(h]h ]h"]h$]h&]uh1jhj9ubjM)}(h**Description**h]j)}(hjf9h]h Description}(hjh9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd9ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj|9hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|9ubh to (}(hj|9hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|9ubh + 1) with full ordering.}(hj|9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubjM)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_inc_return_acquire (C function)c.atomic_inc_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h+int atomic_inc_return_acquire (atomic_t *v)h]h)}(h*int atomic_inc_return_acquire(atomic_t *v)h](j)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj&:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:hhhj%:hMubh)}(hatomic_inc_return_acquireh]j)}(hatomic_inc_return_acquireh]hatomic_inc_return_acquire}(hj8:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4: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}(hjW:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjY:modnameN classnameNjwjz)}j}]j)}jsj::sbc.atomic_inc_return_acquireasbuh1hhjP:ubjQ)}(h h]h }(hjw:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjP:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP:ubj)}(hjh]hv}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjL: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 acquire orderingh]h&atomic increment with acquire ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1j3hj :hhhj%:hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:jHj:jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with 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)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj:h]h atomic_t *v}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubjM)}(h**Description**h]j)}(hj7;h]h Description}(hj9;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5;ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjM;hhhNhNubj)}(h**v**h]hv}(hjU;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM;ubh to (}(hjM;hhhNhNubj)}(h**v**h]hv}(hjg;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM;ubh + 1) with acquire ordering.}(hjM;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_inc_return_acquire() there.h]hIUnsafe to use in noinstr code; use raw_atomic_inc_return_acquire() there.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(h **Return**h]j)}(hj;h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_inc_return_release (C function)c.atomic_inc_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h+int atomic_inc_return_release (atomic_t *v)h]h)}(h*int atomic_inc_return_release(atomic_t *v)h](j)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;hhhj;hMubh)}(hatomic_inc_return_releaseh]j)}(hatomic_inc_return_releaseh]hatomic_inc_return_release}(hj <hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj;hhhj;hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj(<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj*<modnameN classnameNjwjz)}j}]j)}jsj <sbc.atomic_inc_return_releaseasbuh1hhj!<ubjQ)}(h h]h }(hjH<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!<ubj)}(hjh]h*}(hjV<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!<ubj)}(hjh]hv}(hjc<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubah}(h]h ]h"]h$]h&]jjuh1j3hj;hhhj;hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj;hhhj;hMubah}(h]j;ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj;hMhj;hhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<hhubah}(h]h ]h"]h$]h&]uh1j3hj;hhhj;hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj<jHj<jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic_inc_return_release() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj<h]h atomic_t *v}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubjM)}(h**Description**h]j)}(hj=h]h Description}(hj =hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hj=hhhNhNubj)}(h**v**h]hv}(hj&=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh to (}(hj=hhhNhNubj)}(h**v**h]hv}(hj8=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh + 1) with release ordering.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_inc_return_release() there.h]hIUnsafe to use in noinstr code; use raw_atomic_inc_return_release() there.}(hjQ=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubjM)}(h **Return**h]j)}(hjb=h]hReturn}(hjd=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`=ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjx=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx=ubh.}(hjx=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_inc_return_relaxed (C function)c.atomic_inc_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h+int atomic_inc_return_relaxed (atomic_t *v)h]h)}(h*int atomic_inc_return_relaxed(atomic_t *v)h](j)}(hinth]hint}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=hhhj=hMubh)}(hatomic_inc_return_relaxedh]j)}(hatomic_inc_return_relaxedh]hatomic_inc_return_relaxed}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj=hhhj=hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=modnameN classnameNjwjz)}j}]j)}jsj=sbc.atomic_inc_return_relaxedasbuh1hhj=ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hjh]h*}(hj'>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]hv}(hj4>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubah}(h]h ]h"]h$]h&]jjuh1j3hj=hhhj=hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj=hhhj=hMubah}(h]j=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj=hMhj=hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj]>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZ>hhubah}(h]h ]h"]h$]h&]uh1j3hj=hhhj=hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGju>jHju>jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_inc_return_relaxed() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}>ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjy>ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj>h]h atomic_t *v}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj>ubah}(h]h ]h"]h$]h&]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:96: ./include/linux/atomic/atomic-instrumented.hhMhjy>ubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj>hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh to (}(hj>hhhNhNubj)}(h**v**h]hv}(hj ?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh + 1) with relaxed ordering.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjy>ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_inc_return_relaxed() there.h]hIUnsafe to use in noinstr code; use raw_atomic_inc_return_relaxed() there.}(hj"?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjy>ubjM)}(h **Return**h]j)}(hj3?h]hReturn}(hj5?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1?ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjy>ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjI?hhhNhNubj)}(h**v**h]hv}(hjQ?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI?ubh.}(hjI?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjy>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_fetch_inc (C function)c.atomic_fetch_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(h"int atomic_fetch_inc (atomic_t *v)h]h)}(h!int atomic_fetch_inc(atomic_t *v)h](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?hhhj?hMubh)}(hatomic_fetch_inch]j)}(hatomic_fetch_inch]hatomic_fetch_inc}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj?hhhj?hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?modnameN classnameNjwjz)}j}]j)}jsj?sbc.atomic_fetch_incasbuh1hhj?ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hjh]hv}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj?ubah}(h]h ]h"]h$]h&]jjuh1j3hj?hhhj?hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj?hhhj?hMubah}(h]j}?ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj?hMhj?hhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj.@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+@hhubah}(h]h ]h"]h$]h&]uh1j3hj?hhhj?hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjF@jHjF@jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_inc() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjJ@ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjo@h]h atomic_t *v}(hjq@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjm@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhji@ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhji@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjf@ubah}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjJ@ubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj@hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh to (}(hj@hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh + 1) with full ordering.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJ@ubjM)}(h@Unsafe to use in noinstr code; use raw_atomic_fetch_inc() there.h]h@Unsafe to use in noinstr code; use raw_atomic_fetch_inc() there.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJ@ubjM)}(h **Return**h]j)}(hjAh]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJ@ubjM)}(hThe original value of **v**.h](hThe original value of }(hjAhhhNhNubj)}(h**v**h]hv}(hj"AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjJ@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_inc_acquire (C function)c.atomic_fetch_inc_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h*int atomic_fetch_inc_acquire (atomic_t *v)h]h)}(h)int atomic_fetch_inc_acquire(atomic_t *v)h](j)}(hinth]hint}(hj[AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWAhhhjiAhMubh)}(hatomic_fetch_inc_acquireh]j)}(hatomic_fetch_inc_acquireh]hatomic_fetch_inc_acquire}(hj|AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxAubah}(h]h ](jjeh"]h$]h&]jjuh1hhjWAhhhjiAhMubj4)}(h (atomic_t *v)h]j:)}(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_inc_acquireasbuh1hhjAubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hjh]hv}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAubah}(h]h ]h"]h$]h&]jjuh1j3hjWAhhhjiAhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjSAhhhjiAhMubah}(h]jNAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjiAhMhjPAhhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjAhhubah}(h]h ]h"]h$]h&]uh1j3hjPAhhhjiAhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjBjHjBjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_inc_acquire() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj!Bh]h Parameters}(hj#BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj@Bh]h atomic_t *v}(hjBBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>Bubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:Bubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjYBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUBhMhjVBubah}(h]h ]h"]h$]h&]uh1jhj:Bubeh}(h]h ]h"]h$]h&]uh1jhjUBhMhj7Bubah}(h]h ]h"]h$]h&]uh1jhjBubjM)}(h**Description**h]j)}(hj{Bh]h Description}(hj}BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyBubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire 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 + 1) with acquire ordering.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubjM)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubjM)}(hThe original value of **v**.h](hThe original value of }(hjBhhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_inc_release (C function)c.atomic_fetch_inc_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h*int atomic_fetch_inc_release (atomic_t *v)h]h)}(h)int atomic_fetch_inc_release(atomic_t *v)h](j)}(hinth]hint}(hj,ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Chhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!ubjQ)}(h h]h }(hj;ChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(Chhhj:ChM!ubh)}(hatomic_fetch_inc_releaseh]j)}(hatomic_fetch_inc_releaseh]hatomic_fetch_inc_release}(hjMChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjICubah}(h]h ](jjeh"]h$]h&]jjuh1hhj(Chhhj:ChM!ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjlChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjnCmodnameN classnameNjwjz)}j}]j)}jsjOCsbc.atomic_fetch_inc_releaseasbuh1hhjeCubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeCubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeCubj)}(hjh]hv}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjaCubah}(h]h ]h"]h$]h&]jjuh1j3hj(Chhhj:ChM!ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj$Chhhj:ChM!ubah}(h]jCah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj:ChM!hj!Chhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjChhubah}(h]h ]h"]h$]h&]uh1j3hj!Chhhj:ChM!ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjCjHjCjIjJjKuh1hhhhjhNhNubj)}(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)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjCubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjDh]h atomic_t *v}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hj Dubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj*DhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&DhM"hj'Dubah}(h]h ]h"]h$]h&]uh1jhj Dubeh}(h]h ]h"]h$]h&]uh1jhj&DhM"hjDubah}(h]h ]h"]h$]h&]uh1jhjCubjM)}(h**Description**h]j)}(hjLDh]h Description}(hjNDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJDubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hjCubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjbDhhhNhNubj)}(h**v**h]hv}(hjjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbDubh to (}(hjbDhhhNhNubj)}(h**v**h]hv}(hj|DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbDubh + 1) with release ordering.}(hjbDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM#hjCubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_inc_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_inc_release() there.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjCubjM)}(h **Return**h]j)}(hjDh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM'hjCubjM)}(hThe original value of **v**.h](hThe original value of }(hjDhhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjCubeh}(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3ubjQ)}(h h]h }(hj EhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhj EhM3ubh)}(hatomic_fetch_inc_relaxedh]j)}(hatomic_fetch_inc_relaxedh]hatomic_fetch_inc_relaxed}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhhj EhM3ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj=EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Eubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?EmodnameN classnameNjwjz)}j}]j)}jsj Esbc.atomic_fetch_inc_relaxedasbuh1hhj6EubjQ)}(h h]h }(hj]EhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6Eubj)}(hjh]h*}(hjkEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Eubj)}(hjh]hv}(hjxEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Eubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2Eubah}(h]h ]h"]h$]h&]jjuh1j3hjDhhhj EhM3ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjDhhhj EhM3ubah}(h]jDah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj EhM3hjDhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjEhhubah}(h]h ]h"]h$]h&]uh1j3hjDhhhj EhM3ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjEjHjEjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_inc_relaxed() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hjEubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjEh]h atomic_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hjEubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhM4hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhM4hjEubah}(h]h ]h"]h$]h&]uh1jhjEubjM)}(h**Description**h]j)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjEubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj3FhhhNhNubj)}(h**v**h]hv}(hj;FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Fubh to (}(hj3FhhhNhNubj)}(h**v**h]hv}(hjMFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Fubh + 1) with relaxed ordering.}(hj3FhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjEubjM)}(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.}(hjfFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hjEubjM)}(h **Return**h]j)}(hjwFh]hReturn}(hjyFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuFubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hjEubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM:hjEubeh}(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}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFhhhjFhMDubh)}(h atomic_dech]j)}(h atomic_dech]h atomic_dec}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFhhhjFhMDubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Gubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGmodnameN classnameNjwjz)}j}]j)}jsjFsb c.atomic_decasbuh1hhjGubjQ)}(h h]h }(hj.GhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubj)}(hjh]h*}(hjAtomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjHhhhNhNubj)}(h**v**h]hv}(hj HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh to (}(hjHhhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh - 1) with relaxed ordering.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhjGubjM)}(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.}(hj7HhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjGubjM)}(h **Return**h]j)}(hjHHh]hReturn}(hjJHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFHubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjGubjM)}(hNothing.h]hNothing.}(hj^HhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjGubeh}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHhhhjHhMUubh)}(hatomic_dec_returnh]j)}(hatomic_dec_returnh]hatomic_dec_return}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1hhjHhhhjHhMUubj4)}(h (atomic_t *v)h]j:)}(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_dec_returnasbuh1hhjHubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]hv}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjHubah}(h]h ]h"]h$]h&]jjuh1j3hjHhhhjHhMUubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjHhhhjHhMUubah}(h]jHah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjHhMUhjHhhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hj1IhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhj.Ihhubah}(h]h ]h"]h$]h&]uh1j3hjHhhhjHhMUubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjIIjHjIIjIjJjKuh1hhhhjhNhNubj)}(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)}(hjSIh]h Parameters}(hjUIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQIubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjMIubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjrIh]h atomic_t *v}(hjtIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpIubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjlIubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhMVhjIubah}(h]h ]h"]h$]h&]uh1jhjlIubeh}(h]h ]h"]h$]h&]uh1jhjIhMVhjiIubah}(h]h ]h"]h$]h&]uh1jhjMIubjM)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjMIubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjIhhhNhNubj)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh to (}(hjIhhhNhNubj)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh - 1) with full ordering.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMWhjMIubjM)}(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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjMIubjM)}(h **Return**h]j)}(hjJh]hReturn}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjMIubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjJhhhNhNubj)}(h**v**h]hv}(hj%JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjMIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic_dec_return_acquire (C function)c.atomic_dec_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h+int atomic_dec_return_acquire (atomic_t *v)h]h)}(h*int atomic_dec_return_acquire(atomic_t *v)h](j)}(hinth]hint}(hj^JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZJhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMgubjQ)}(h h]h }(hjmJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZJhhhjlJhMgubh)}(hatomic_dec_return_acquireh]j)}(hatomic_dec_return_acquireh]hatomic_dec_return_acquire}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Jubah}(h]h ](jjeh"]h$]h&]jjuh1hhjZJhhhjlJhMgubj4)}(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_dec_return_acquireasbuh1hhjJubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hjh]hv}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJubah}(h]h ]h"]h$]h&]jjuh1j3hjZJhhhjlJhMgubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjVJhhhjlJhMgubah}(h]jQJah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjlJhMghjSJhhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjJhhubah}(h]h ]h"]h$]h&]uh1j3hjSJhhhjlJhMgubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjKjHjKjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_dec_return_acquire() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj$Kh]h Parameters}(hj&KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Kubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhjKubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjCKh]h atomic_t *v}(hjEKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAKubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhj=Kubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj\KhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXKhMhhjYKubah}(h]h ]h"]h$]h&]uh1jhj=Kubeh}(h]h ]h"]h$]h&]uh1jhjXKhMhhj:Kubah}(h]h ]h"]h$]h&]uh1jhjKubjM)}(h**Description**h]j)}(hj~Kh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|Kubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjKubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire 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 acquire ordering.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMihjKubjM)}(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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhjKubjM)}(h **Return**h]j)}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmhjKubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjKhhhNhNubj)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhjKubeh}(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}(hj/LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+Lhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxubjQ)}(h h]h }(hj>LhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+Lhhhj=LhMxubh)}(hatomic_dec_return_releaseh]j)}(hatomic_dec_return_releaseh]hatomic_dec_return_release}(hjPLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLLubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+Lhhhj=LhMxubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjoLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlLubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjqLmodnameN classnameNjwjz)}j}]j)}jsjRLsbc.atomic_dec_return_releaseasbuh1hhjhLubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhLubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhLubj)}(hjh]hv}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjdLubah}(h]h ]h"]h$]h&]jjuh1j3hj+Lhhhj=LhMxubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj'Lhhhj=LhMxubah}(h]j"Lah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj=LhMxhj$Lhhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhjLhhubah}(h]h ]h"]h$]h&]uh1j3hj$Lhhhj=LhMxubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjLjHjLjIjJjKuh1hhhhjhNhNubj)}(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)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjLubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjMh]h atomic_t *v}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjMubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj-MhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj)MhMyhj*Mubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhj)MhMyhj Mubah}(h]h ]h"]h$]h&]uh1jhjLubjM)}(h**Description**h]j)}(hjOMh]h Description}(hjQMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMMubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hjLubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjeMhhhNhNubj)}(h**v**h]hv}(hjmMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeMubh to (}(hjeMhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeMubh - 1) with release ordering.}(hjeMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjLubjM)}(hIUnsafe to use in noinstr code; use raw_atomic_dec_return_release() there.h]hIUnsafe to use in noinstr code; use raw_atomic_dec_return_release() there.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjLubjM)}(h **Return**h]j)}(hjMh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hjLubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjMhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjLubeh}(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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMhhhjNhMubh)}(hatomic_dec_return_relaxedh]j)}(hatomic_dec_return_relaxedh]hatomic_dec_return_relaxed}(hj!NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1hhjMhhhjNhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj@NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Nubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBNmodnameN classnameNjwjz)}j}]j)}jsj#Nsbc.atomic_dec_return_relaxedasbuh1hhj9NubjQ)}(h h]h }(hj`NhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9Nubj)}(hjh]h*}(hjnNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Nubj)}(hjh]hv}(hj{NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Nubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5Nubah}(h]h ]h"]h$]h&]jjuh1j3hjMhhhjNhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjMhhhjNhMubah}(h]jMah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjNhMhjMhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNhhubah}(h]h ]h"]h$]h&]uh1j3hjMhhhjNhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjNjHjNjIjJjKuh1hhhhjhNhNubj)}(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)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNubj)}(hhh]j)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubjM)}(h**Description**h]j)}(hj Oh]h Description}(hj"OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj6OhhhNhNubj)}(h**v**h]hv}(hj>OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Oubh to (}(hj6OhhhNhNubj)}(h**v**h]hv}(hjPOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Oubh - 1) with relaxed ordering.}(hj6OhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNubjM)}(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.}(hjiOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNubjM)}(h **Return**h]j)}(hjzOh]hReturn}(hj|OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxOubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjNubjM)}(hThe updated value of **v**.h](hThe updated 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:96: ./include/linux/atomic/atomic-instrumented.hhMhjNubeh}(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}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOhhhjOhMubh)}(hatomic_fetch_dech]j)}(hatomic_fetch_dech]hatomic_fetch_dec}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOhhhjOhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjPmodnameN classnameNjwjz)}j}]j)}jsjOsbc.atomic_fetch_decasbuh1hhj PubjQ)}(h h]h }(hj1PhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Pubj)}(hjh]h*}(hj?PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Pubj)}(hjh]hv}(hjLPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Pubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubah}(h]h ]h"]h$]h&]jjuh1j3hjOhhhjOhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjOhhhjOhMubah}(h]jOah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjOhMhjOhhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjuPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjrPhhubah}(h]h ]h"]h$]h&]uh1j3hjOhhhjOhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjPjHjPjIjJjKuh1hhhhjhNhNubj)}(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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjPubjM)}(h**Description**h]j)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjQhhhNhNubj)}(h**v**h]hv}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh to (}(hjQhhhNhNubj)}(h**v**h]hv}(hj!QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh - 1) with full ordering.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubjM)}(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:QhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubjM)}(h **Return**h]j)}(hjKQh]hReturn}(hjMQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIQubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubjM)}(hThe original value of **v**.h](hThe original value of }(hjaQhhhNhNubj)}(h**v**h]hv}(hjiQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaQubh.}(hjaQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjPubeh}(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}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQhhhjQhMubh)}(hatomic_fetch_dec_acquireh]j)}(hatomic_fetch_dec_acquireh]hatomic_fetch_dec_acquire}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQhhhjQhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjQmodnameN classnameNjwjz)}j}]j)}jsjQsbc.atomic_fetch_dec_acquireasbuh1hhjQubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hjh]hv}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjQubah}(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)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjFRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjCRhhubah}(h]h ]h"]h$]h&]uh1j3hjQhhhjQhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj^RjHj^RjIjJjKuh1hhhhjhNhNubj)}(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)}(hjhRh]h Parameters}(hjjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfRubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbRubj)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhj~Rubah}(h]h ]h"]h$]h&]uh1jhjbRubjM)}(h**Description**h]j)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbRubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjRhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh to (}(hjRhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh - 1) with acquire ordering.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbRubjM)}(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 ShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbRubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjbRubjM)}(hThe original value of **v**.h](hThe original value of }(hj2ShhhNhNubj)}(h**v**h]hv}(hj:ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Subh.}(hj2ShhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjbRubeh}(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}(hjsShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoShhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoShhhjShMubh)}(hatomic_fetch_dec_releaseh]j)}(hatomic_fetch_dec_releaseh]hatomic_fetch_dec_release}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1hhjoShhhjShMubj4)}(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)}jsjSsbc.atomic_fetch_dec_releaseasbuh1hhjSubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hjh]hv}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubah}(h]h ]h"]h$]h&]jjuh1j3hjoShhhjShMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkShhhjShMubah}(h]jfSah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjShMhjhShhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjThhubah}(h]h ]h"]h$]h&]uh1j3hjhShhhjShMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/TjHj/TjIjJjKuh1hhhhjhNhNubj)}(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)}(hj9Th]h Parameters}(hj;ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Tubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3Tubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjXTh]h atomic_t *v}(hjZThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVTubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRTubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjqThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmThMhjnTubah}(h]h ]h"]h$]h&]uh1jhjRTubeh}(h]h ]h"]h$]h&]uh1jhjmThMhjOTubah}(h]h ]h"]h$]h&]uh1jhj3TubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj3TubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh to (}(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh - 1) with release ordering.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3TubjM)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3TubjM)}(h **Return**h]j)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3TubjM)}(hThe original value of **v**.h](hThe original value of }(hjUhhhNhNubj)}(h**v**h]hv}(hj UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3Tubeh}(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}(hjDUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Uhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjSUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@UhhhjRUhMubh)}(hatomic_fetch_dec_relaxedh]j)}(hatomic_fetch_dec_relaxedh]hatomic_fetch_dec_relaxed}(hjeUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaUubah}(h]h ](jjeh"]h$]h&]jjuh1hhj@UhhhjRUhMubj4)}(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)}jsjgUsbc.atomic_fetch_dec_relaxedasbuh1hhj}UubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}Uubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Uubj)}(hjh]hv}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Uubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyUubah}(h]h ]h"]h$]h&]jjuh1j3hj@UhhhjRUhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjVhMhj?Vubah}(h]h ]h"]h$]h&]uh1jhj#Vubeh}(h]h ]h"]h$]h&]uh1jhj>VhMhj Vubah}(h]h ]h"]h$]h&]uh1jhjVubjM)}(h**Description**h]j)}(hjdVh]h Description}(hjfVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjzVhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzVubh to (}(hjzVhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzVubh - 1) with relaxed ordering.}(hjzVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVubjM)}(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.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVubjM)}(h **Return**h]j)}(hjVh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj$WhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWhhhj#WhMubh)}(h atomic_andh]j)}(h atomic_andh]h atomic_and}(hj6WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Wubah}(h]h ](jjeh"]h$]h&]jjuh1hhjWhhhj#WhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjRWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNWubjQ)}(h h]h }(hj`WhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNWubj)}(hjh]hi}(hjnWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJWubj:)}(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)}jsj8Wsb c.atomic_andasbuh1hhjWubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]hv}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJWubeh}(h]h ]h"]h$]h&]jjuh1j3hjWhhhj#WhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj Whhhj#WhMubah}(h]jWah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj#WhMhj Whhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjWhhubah}(h]h ]h"]h$]h&]uh1j3hj Whhhj#WhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjXjHjXjIjJjKuh1hhhhjhNhNubj)}(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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj Xubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj.Xh]hint i}(hj0XhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,Xubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(Xubj)}(hhh]jM)}(h int valueh]h int value}(hjGXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjCXhMhjDXubah}(h]h ]h"]h$]h&]uh1jhj(Xubeh}(h]h ]h"]h$]h&]uh1jhjCXhMhj%Xubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjgXh]h atomic_t *v}(hjiXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeXubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjaXubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|XhMhj}Xubah}(h]h ]h"]h$]h&]uh1jhjaXubeh}(h]h ]h"]h$]h&]uh1jhj|XhMhj%Xubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj XubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjXhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh to (}(hjXhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh & }(hjXhhhNhNubj)}(h**i**h]hi}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh) with relaxed ordering.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj XubjM)}(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.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj XubjM)}(h **Return**h]j)}(hjYh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Yubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj XubjM)}(hNothing.h]hNothing.}(hj$YhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj Xubeh}(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}(hjSYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOYhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjbYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOYhhhjaYhMubh)}(hatomic_fetch_andh]j)}(hatomic_fetch_andh]hatomic_fetch_and}(hjtYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpYubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOYhhhjaYhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]hi}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYmodnameN classnameNjwjz)}j}]j)}jsjvYsbc.atomic_fetch_andasbuh1hhjYubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]hv}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubeh}(h]h ]h"]h$]h&]jjuh1j3hjOYhhhjaYhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKYhhhjaYhMubah}(h]jFYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjaYhMhjHYhhubj4)}(hhh]jM)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hj+ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(Zhhubah}(h]h ]h"]h$]h&]uh1j3hjHYhhhjaYhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjCZjHjCZjIjJjKuh1hhhhjhNhNubj)}(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)}(hjMZh]h Parameters}(hjOZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKZubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGZubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjlZh]hint i}(hjnZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjZubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjfZubj)}(hhh]jM)}(h int valueh]h int value}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZhMhjZubah}(h]h ]h"]h$]h&]uh1jhjfZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjcZubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjZh]h atomic_t *v}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjZubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZhMhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjcZubeh}(h]h ]h"]h$]h&]uh1jhjGZubjM)}(h**Description**h]j)}(hjZh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGZubjM)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hjZhhhNhNubj)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh to (}(hjZhhhNhNubj)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh & }(hjZhhhNhNubj)}(h**i**h]hi}(hj"[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh) with full ordering.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGZubjM)}(h@Unsafe to use in noinstr code; use raw_atomic_fetch_and() there.h]h@Unsafe to use in noinstr code; use raw_atomic_fetch_and() there.}(hj;[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjGZubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjGZubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjGZubeh}(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}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhj[hMubh)}(hatomic_fetch_and_acquireh]j)}(hatomic_fetch_and_acquireh]hatomic_fetch_and_acquire}(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[sbc.atomic_fetch_and_acquireasbuh1hhj\ubjQ)}(h h]h }(hj7\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ubj)}(hjh]h*}(hjE\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hjh]hv}(hjR\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 with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj{\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjx\hhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhj[hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj\jHj\jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with 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)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj\h]hint i}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\ubj)}(hhh]jM)}(h int valueh]h int value}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj\ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj\h]h atomic_t *v}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj ]hMhj ]ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj ]hMhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\ubjM)}(h**Description**h]j)}(hj0]h]h Description}(hj2]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.]ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubjM)}(hBAtomically updates **v** to (**v** & **i**) with acquire ordering.h](hAtomically updates }(hjF]hhhNhNubj)}(h**v**h]hv}(hjN]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF]ubh to (}(hjF]hhhNhNubj)}(h**v**h]hv}(hj`]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF]ubh & }(hjF]hhhNhNubj)}(h**i**h]hi}(hjr]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF]ubh) with acquire ordering.}(hjF]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_and_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_and_acquire() there.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubjM)}(h **Return**h]j)}(hj]h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubjM)}(hThe original value of **v**.h](hThe original value of }(hj]hhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\ubeh}(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}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]hhhj^hMubh)}(hatomic_fetch_and_releaseh]j)}(hatomic_fetch_and_releaseh]hatomic_fetch_and_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}(hj0^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,^ubjQ)}(h h]h }(hj>^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,^ubj)}(hjh]hi}(hjL^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}(hjg^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetji^modnameN classnameNjwjz)}j}]j)}jsj^sbc.atomic_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)}(hjh]hv}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(^ubeh}(h]h ]h"]h$]h&]jjuh1j3hj]hhhj^hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]hhhj^hMubah}(h]j]ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj^hMhj]hhubj4)}(hhh]jM)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj^hhubah}(h]h ]h"]h$]h&]uh1j3hj]hhhj^hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj^jHj^jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_and_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj^ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj _h]hint i}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj _ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj_ubj)}(hhh]jM)}(h int valueh]h int value}(hj%_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj!_hMhj"_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj!_hMhj_ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjE_h]h atomic_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:96: ./include/linux/atomic/atomic-instrumented.hhMhj?_ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj^_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZ_hMhj[_ubah}(h]h ]h"]h$]h&]uh1jhj?_ubeh}(h]h ]h"]h$]h&]uh1jhjZ_hMhj_ubeh}(h]h ]h"]h$]h&]uh1jhj^ubjM)}(h**Description**h]j)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~_ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj^ubjM)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hj_hhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh to (}(hj_hhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh & }(hj_hhhNhNubj)}(h**i**h]hi}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh) with release ordering.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj^ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_and_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_and_release() there.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj^ubjM)}(h **Return**h]j)}(hj_h]hReturn}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj^ubjM)}(hThe original value of **v**.h](hThe original value of }(hj`hhhNhNubj)}(h**v**h]hv}(hj `hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj^ubeh}(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}(hjC`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?`hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+ubjQ)}(h h]h }(hjR`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?`hhhjQ`hM+ubh)}(hatomic_fetch_and_relaxedh]j)}(hatomic_fetch_and_relaxedh]hatomic_fetch_and_relaxed}(hjd`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj``ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj?`hhhjQ`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&]noemphjjuh1j9hjx`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)}jsjf`sbc.atomic_fetch_and_relaxedasbuh1hhj`ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hjh]hv}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjx`ubeh}(h]h ]h"]h$]h&]jjuh1j3hj?`hhhjQ`hM+ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj;`hhhjQ`hM+ubah}(h]j6`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjQ`hM+hj8`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:96: ./include/linux/atomic/atomic-instrumented.hhM+hjahhubah}(h]h ]h"]h$]h&]uh1j3hj8`hhhjQ`hM+ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3ajHj3ajIjJjKuh1hhhhjhNhNubj)}(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=ah]h Parameters}(hj?ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;aubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hj7aubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj\ah]hint i}(hj^ahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZaubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjVaubj)}(hhh]jM)}(h int valueh]h int value}(hjuahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjqahM,hjraubah}(h]h ]h"]h$]h&]uh1jhjVaubeh}(h]h ]h"]h$]h&]uh1jhjqahM,hjSaubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjah]h atomic_t *v}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hjaubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahM-hjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahM-hjSaubeh}(h]h ]h"]h$]h&]uh1jhj7aubjM)}(h**Description**h]j)}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hj7aubjM)}(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}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh & }(hjahhhNhNubj)}(h**i**h]hi}(hjbhhhNhNubah}(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:96: ./include/linux/atomic/atomic-instrumented.hhM.hj7aubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_fetch_and_relaxed() there.h]hHUnsafe to use in noinstr code; use raw_atomic_fetch_and_relaxed() there.}(hj+bhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hj7aubjM)}(h **Return**h]j)}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:bubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hj7aubjM)}(hThe original value of **v**.h](hThe original value of }(hjRbhhhNhNubj)}(h**v**h]hv}(hjZbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRbubh.}(hjRbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hj7aubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_andnot (C function)c.atomic_andnothNtauh1hhjhhhNhNubh)}(hhh](h)}(h'void atomic_andnot (int i, atomic_t *v)h]h)}(h&void atomic_andnot(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=ubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbhhhjbhM=ubh)}(h atomic_andnoth]j)}(h atomic_andnoth]h atomic_andnot}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1hhjbhhhjbhM=ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubj)}(hjh]hi}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj cmodnameN classnameNjwjz)}j}]j)}jsjbsbc.atomic_andnotasbuh1hhjcubjQ)}(h h]h }(hj'chhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubj)}(hjh]h*}(hj5chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]hv}(hjBchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubeh}(h]h ]h"]h$]h&]jjuh1j3hjbhhhjbhM=ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjbhhhjbhM=ubah}(h]jbah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjbhM=hjbhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjkchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjhchhubah}(h]h ]h"]h$]h&]uh1j3hjbhhhjbhM=ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjcjHjcjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_andnot() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjcubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjch]hint i}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hjcubj)}(hhh]jM)}(h int valueh]h int value}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchM>hjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchM>hjcubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjch]h atomic_t *v}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjcubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchM?hjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchM?hjcubeh}(h]h ]h"]h$]h&]uh1jhjcubjM)}(h**Description**h]j)}(hj dh]h Description}(hj"dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjcubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj6dhhhNhNubj)}(h**v**h]hv}(hj>dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6dubh to (}(hj6dhhhNhNubj)}(h**v**h]hv}(hjPdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6dubh & }(hj6dhhhNhNubj)}(h**~i**h]h~i}(hjbdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6dubh) with relaxed ordering.}(hj6dhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hjcubjM)}(h=Unsafe to use in noinstr code; use raw_atomic_andnot() there.h]h=Unsafe to use in noinstr code; use raw_atomic_andnot() there.}(hj{dhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjcubjM)}(h **Return**h]j)}(hjdh]hReturn}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjcubjM)}(hNothing.h]hNothing.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjcubeh}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhjdhMOubh)}(hatomic_fetch_andnoth]j)}(hatomic_fetch_andnoth]hatomic_fetch_andnot}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhjdhhhjdhMOubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj eubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj eubj)}(hjh]hi}(hj*ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj eubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjeubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjEehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBeubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGemodnameN classnameNjwjz)}j}]j)}jsjdsbc.atomic_fetch_andnotasbuh1hhj>eubjQ)}(h h]h }(hjeehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>eubj)}(hjh]h*}(hjsehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>eubj)}(hjh]hv}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>eubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjeubeh}(h]h ]h"]h$]h&]jjuh1j3hjdhhhjdhMOubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjdhhhjdhMOubah}(h]jdah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjdhMOhjdhhubj4)}(hhh]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjehhubah}(h]h ]h"]h$]h&]uh1j3hjdhhhjdhMOubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjejHjejIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with 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)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjeubj)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMPhjeubj)}(hhh]jM)}(h int valueh]h int value}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehMPhjfubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMPhjeubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj#fh]h atomic_t *v}(hj%fhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!fubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjfubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjgubah}(h]h ](jjeh"]h$]h&]jjuh1hhjghhhj/ghMbubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj^ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZgubjQ)}(h h]h }(hjlghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZgubj)}(hjh]hi}(hjzghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVgubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjgmodnameN classnameNjwjz)}j}]j)}jsjDgsbc.atomic_fetch_andnot_acquireasbuh1hhjgubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]hv}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVgubeh}(h]h ]h"]h$]h&]jjuh1j3hjghhhj/ghMbubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjghhhj/ghMbubah}(h]jgah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/ghMbhjghhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhjghhubah}(h]h ]h"]h$]h&]uh1j3hjghhhj/ghMbubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_fetch_andnot_acquire() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMfhjhubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj:hh]hint i}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubeh}(h]h ]h"]h$]h&]jjuh1j3hjyhhhjyhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjyhhhjyhMubah}(h]jyah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjyhMhjyhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjgzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjdzhhubah}(h]h ]h"]h$]h&]uh1j3hjyhhhjyhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjzjHjzjIjJjKuh1hhhhjhNhNubj)}(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)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjzh]hint i}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubj)}(hhh]jM)}(h int valueh]h int value}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjzubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjzh]h atomic_t *v}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjzubeh}(h]h ]h"]h$]h&]uh1jhjzubjM)}(h**Description**h]j)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubjM)}(hBAtomically updates **v** to (**v** ^ **i**) 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 ^ }(hj2{hhhNhNubj)}(h**i**h]hi}(hj^{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2{ubh) with relaxed ordering.}(hj2{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubjM)}(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.}(hjw{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubjM)}(h **Return**h]j)}(hj{h]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubjM)}(hNothing.h]hNothing.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubeh}(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}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{hhhj{hMubh)}(hatomic_fetch_xorh]j)}(hatomic_fetch_xorh]hatomic_fetch_xor}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{hhhj{hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj |hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|ubj)}(hjh]hi}(hj&|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjA|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjC|modnameN classnameNjwjz)}j}]j)}jsj{sbc.atomic_fetch_xorasbuh1hhj:|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)}(hjh]hv}(hj||hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubeh}(h]h ]h"]h$]h&]jjuh1j3hj{hhhj{hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj{hhhj{hMubah}(h]j{ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj{hMhj{hhubj4)}(hhh]jM)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|hhubah}(h]h ]h"]h$]h&]uh1j3hj{hhhj{hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj|jHj|jIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``int i`` int value ``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)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj|h]hint i}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubj)}(hhh]jM)}(h int valueh]h int value}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj|ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj}h]h atomic_t *v}(hj!}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj8}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4}hM hj5}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj4}hM hj|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:96: ./include/linux/atomic/atomic-instrumented.hhM hj|ubjM)}(h?Atomically updates **v** to (**v** ^ **i**) with full 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 full ordering.}(hjp}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|ubjM)}(h@Unsafe to use in noinstr code; use raw_atomic_fetch_xor() there.h]h@Unsafe to use in noinstr code; use raw_atomic_fetch_xor() there.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|ubjM)}(h **Return**h]j)}(hj}h]hReturn}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubjM)}(hThe original value of **v**.h](hThe original value of }(hj}hhhNhNubj)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_fetch_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}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj,~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhj+~hMubh)}(hatomic_fetch_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&]jjuh1hhj~hhhj+~hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjZ~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV~ubjQ)}(h h]h }(hjh~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjV~ubj)}(hjh]hi}(hjv~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjR~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_xor_acquireasbuh1hhj~ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hjh]hv}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjR~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 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:96: ./include/linux/atomic/atomic-instrumented.hhMhj~hhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhj+~hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with 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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj6h]hint i}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubj)}(hhh]jM)}(h int valueh]h int value}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj-ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjoh]h atomic_t *v}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjmubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjiubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ^ }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjubjM)}(hThe original value of **v**.h](hThe original value of }(hj,hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"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}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,ubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjihhhj{hM,ubh)}(hatomic_fetch_xor_releaseh]j)}(hatomic_fetch_xor_releaseh]hatomic_fetch_xor_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjihhhj{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}(hjƀhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjހubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_fetch_xor_releaseasbuh1hhjڀubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjڀubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڀubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڀubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjihhhj{hM,ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjehhhj{hM,ubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj{hM,hjbhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjBhhubah}(h]h ]h"]h$]h&]uh1j3hjbhhhj{hM,ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]jHj]jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with release ordering. 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)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hjaubj)}(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:96: ./include/linux/atomic/atomic-instrumented.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-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&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hjaubjM)}(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}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ^ }(hjhhhNhNubj)}(h**i**h]hi}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjaubjM)}(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.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjaubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM3hjaubjM)}(hThe original value of **v**.h](hThe original value of }(hj|hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hjaubeh}(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:96: ./include/linux/atomic/atomic-instrumented.hhM?ubjQ)}(h h]h }(hĵhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj˂hM?ubh)}(hatomic_fetch_xor_relaxedh]j)}(hatomic_fetch_xor_relaxedh]hatomic_fetch_xor_relaxed}(hjނhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڂubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj˂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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj3modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_fetch_xor_relaxedasbuh1hhj*ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjh]hv}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]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 relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj˂hM?ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with 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:96: ./include/linux/atomic/atomic-instrumented.hhMChjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjփh]hint i}(hj؃hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjԃubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hjЃubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjЃubeh}(h]h ]h"]h$]h&]uh1jhjhM@hj̓ubj)}(h$``atomic_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:96: ./include/linux/atomic/atomic-instrumented.hhMAhj ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$hMAhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMAhj̓ubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjubjM)}(hBAtomically updates **v** to (**v** ^ **i**) 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 ^ }(hj`hhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh) with relaxed ordering.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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:96: ./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:96: ./include/linux/atomic/atomic-instrumented.hhMFhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj̄hhhNhNubj)}(h**v**h]hv}(hjԄhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̄ubh.}(hj̄hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhMQubh)}(h atomic_xchgh]j)}(h atomic_xchgh]h atomic_xchg}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhMQubj4)}(h(atomic_t *v, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjOmodnameN classnameNjwjz)}j}]j)}jsj0sb c.atomic_xchgasbuh1hhjFubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubj:)}(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&]noemphjjuh1j9hjBubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhjhMQubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjhhubah}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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<hMRhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hj`h]hint new}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj^ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjZubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjuhMShjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMShjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHhhhjZhMdubh)}(hatomic_xchg_acquireh]j)}(hatomic_xchg_acquireh]hatomic_xchg_acquire}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1hhjHhhhjZhMdubj4)}(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)}jsjosbc.atomic_xchg_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjLJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hj߇hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۇ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&]jjuh1j3hjHhhhjZhMdubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjDhhhjZhMdubah}(h]j?ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjZhMdhjAhhubj4)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMdhj"hhubah}(h]h ]h"]h$]h&]uh1j3hjAhhhjZhMdubeh}(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)}(hjGh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjAubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjfh]h atomic_t *v}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehj`ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{hMehj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMehj]ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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&]uh1jhjhMfhj]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:96: ./include/linux/atomic/atomic-instrumented.hhMhhjAubjM)}(h:Atomically updates **v** to **new** with acquire 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 acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjAubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMihjAubjM)}(h **Return**h]j)}(hj4h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhjAubjM)}(hThe original value of **v**.h](hThe original value of }(hjJhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjAubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMvubh)}(hatomic_xchg_releaseh]j)}(hatomic_xchg_releaseh]hatomic_xchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMvubj4)}(h(atomic_t *v, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjˉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȉubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj͉modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_xchg_releaseasbuh1hhjĉubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjĉubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĉubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĉubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(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&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMvubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMvubah}(h]j~ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMvhjhhubj4)}(hhh]jM)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhjahhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMvubeh}(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 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj܊ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhj؊ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMxhjubah}(h]h ]h"]h$]h&]uh1jhj؊ubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjubjM)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hj/hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh to }(hj/hhhNhNubj)}(h**new**h]hnew}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh with release ordering.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjubjM)}(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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hjubjM)}(h **Return**h]j)}(hjsh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM}hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_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}(hjʋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƋhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjًhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjƋhhhj؋hMubh)}(hatomic_xchg_relaxedh]j)}(hatomic_xchg_relaxedh]hatomic_xchg_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjƋhhhj؋hMubj4)}(h(atomic_t *v, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_xchg_relaxedasbuh1hhjubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hnewh]hnew}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjƋhhhj؋hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj‹hhhj؋hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj؋hMhjhhubj4)}(hhh]jM)}(h%atomic 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:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj؋hMubeh}(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)}(hjŌh]h Parameters}(hjnjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÌubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjތubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjތubeh}(h]h ]h"]h$]h&]uh1jhjhMhjیubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjیubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjnhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh to }(hjnhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh with relaxed ordering.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hCUnsafe to use in noinstr code; use raw_atomic_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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjȍhhhNhNubj)}(h**v**h]hv}(hjЍhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȍubh.}(hjȍhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_cmpxchgh]j)}(hatomic_cmpxchgh]hatomic_cmpxchg}(hj*hhhNhNubah}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjKmodnameN classnameNjwjz)}j}]j)}jsj,sbc.atomic_cmpxchgasbuh1hhjBubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hint oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hint newh](j)}(hinth]hint}(hjюhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͎ubjQ)}(h h]h }(hjߎhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj͎ubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͎ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/jHj/jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int old`` 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)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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:96: ./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 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjOubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjʏh]hint new}(hj̏hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjȏubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjďubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjߏhMhjubah}(h]h ]h"]h$]h&]uh1jhjďubeh}(h]h ]h"]h$]h&]uh1jhjߏhMhjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(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}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(h>Unsafe to use in noinstr code; use raw_atomic_cmpxchg() there.h]h>Unsafe to use in noinstr code; use raw_atomic_cmpxchg() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./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:96: ./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:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_cmpxchg_acquireh]j)}(hatomic_cmpxchg_acquireh]hatomic_cmpxchg_acquire}(hj hhhNhNubah}(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 reftargetj.modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_cmpxchg_acquireasbuh1hhj%ubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hjh]hv}(hjghhhNhNubah}(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]jߐah ](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:96: ./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 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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj;h]h atomic_t *v}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhj2ubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]jS)}(hjth]hint old}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjnubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhj2ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjƒhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj’hMhjÒubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj’hMhj2ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with acquire ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjxh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_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}(hjϓhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˓hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjޓhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj˓hhhjݓhMubh)}(hatomic_cmpxchg_releaseh]j)}(hatomic_cmpxchg_releaseh]hatomic_cmpxchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj˓hhhjݓhMubj4)}(h(atomic_t *v, int old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_cmpxchg_releaseasbuh1hhjubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint oldh](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubjQ)}(h h]h }(hjphhhNhNubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj˓hhhjݓhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjڔhhubah}(h]h ]h"]h$]h&]uh1j3hjēhhhjݓhMubeh}(h]h ](jAfunctioneh"]h$]h&]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. 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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubj)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjQubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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:96: ./include/linux/atomic/atomic-instrumented.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}(hj hhhNhNubah}(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}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hj[h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(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:96: ./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}(hjӖhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjՖsbc.atomic_cmpxchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjؗjHjؗjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int old`` int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_cmpxchg_relaxed() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjܗubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj4ubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjsh]hint new}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjܗubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjܗubjM)}(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}(hjޘhhhNhNubah}(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 relaxed ordering. Otherwise, }(hjĘhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĘubh2 is not modified and relaxed ordering is provided.}(hjĘhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjܗubjM)}(hFUnsafe to use in noinstr code; use raw_atomic_cmpxchg_relaxed() there.h]hFUnsafe to use in noinstr code; use raw_atomic_cmpxchg_relaxed() there.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjܗubjM)}(h **Return**h]j)}(hj>h]hReturn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjܗubjM)}(hThe original value of **v**.h](hThe original value of }(hjThhhNhNubj)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjܗubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_try_cmpxchg (C function)c.atomic_try_cmpxchghNtauh1hhjhhhNhNubh)}(hhh](h)}(h8bool atomic_try_cmpxchg (atomic_t *v, int *old, int new)h]h)}(h7bool atomic_try_cmpxchg(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_try_cmpxchgh]j)}(hatomic_try_cmpxchgh]hatomic_try_cmpxchg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h (atomic_t *v, int *old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjԙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjљubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj֙modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_try_cmpxchgasbuh1hhj͙ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj͙ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͙ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͙ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjəubj:)}(hint *oldh](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(holdh]hold}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjəubj:)}(hint newh](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeubj)}(hnewh]hnew}(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 compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjǚjHjǚjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjњh]h Parameters}(hjӚhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϚubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj˚ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hj)h]hint *old}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj>hMhj?ubah}(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)}(hjbh]hint new}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj\ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjubeh}(h]h ]h"]h$]h&]uh1jhj˚ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj˚ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hj͛hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjߛhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj˚ubjM)}(hBUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg() there.h]hBUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg() there.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj˚ubjM)}(h **Return**h]j)}(hjQh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj˚ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh if the exchange occurred, }(hjghhhNhNubj)}(h **false**h]hfalse}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh otherwise.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj˚ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic_try_cmpxchg_acquire (C function)c.atomic_try_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h@bool atomic_try_cmpxchg_acquire (atomic_t *v, int *old, int new)h]h)}(h?bool atomic_try_cmpxchg_acquire(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjĜhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjÜhMubh)}(hatomic_try_cmpxchg_acquireh]j)}(hatomic_try_cmpxchg_acquireh]hatomic_try_cmpxchg_acquire}(hj֜hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҜubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjÜhMubj4)}(h (atomic_t *v, int *old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj؜sbc.atomic_try_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(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)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(holdh]hold}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjÜhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjÜhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjÜhMhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjНhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj͝hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjÜhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_acquire() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hjJh]hint *old}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjDubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj}ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjԞhhhNhNubj)}(h**v**h]hv}(hjܞhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԞubh == }(hjԞhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԞubh), atomically updates }(hjԞhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԞubh to }(hjԞhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԞubh# with acquire ordering. Otherwise, }(hjԞhhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԞubh is not modified, }(hjԞhhhNhNubj)}(h**old**h]hold}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԞubh$ is updated to the current value of }(hjԞhhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԞubh#, and relaxed ordering is provided.}(hjԞhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_acquire() there.h]hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_acquire() there.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjrh]hReturn}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic_try_cmpxchg_release (C function)c.atomic_try_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h@bool atomic_try_cmpxchg_release (atomic_t *v, int *old, int new)h]h)}(h?bool atomic_try_cmpxchg_release(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjןhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӟhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjӟhhhjhMubh)}(hatomic_try_cmpxchg_releaseh]j)}(hatomic_try_cmpxchg_releaseh]hatomic_try_cmpxchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjӟhhhjhMubj4)}(h (atomic_t *v, int *old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_try_cmpxchg_releaseasbuh1hhjubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hint *oldh](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjǠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hjӟhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjϟhhhjhMubah}(h]jʟah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj̟hhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj̟hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_release() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj2h]h atomic_t *v}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj,ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhj)ubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hjkh]hint *old}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjeubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhj)ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjߡh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݡubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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}(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}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with release ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hj ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic_try_cmpxchg_relaxed (C function)c.atomic_try_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h@bool atomic_try_cmpxchg_relaxed (atomic_t *v, int *old, int new)h]h)}(h?bool atomic_try_cmpxchg_relaxed(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM1ubh)}(hatomic_try_cmpxchg_relaxedh]j)}(hatomic_try_cmpxchg_relaxedh]hatomic_try_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM1ubj4)}(h (atomic_t *v, int *old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_try_cmpxchg_relaxedasbuh1hhj0ubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]hv}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj,ubj:)}(hint *oldh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj,ubj:)}(hint newh](j)}(hinth]hint}(hj̣hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȣubjQ)}(h h]h }(hjڣhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjȣubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȣubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj,ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM1ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM1ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM1hjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM1ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj*jHj*jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_try_cmpxchg_relaxed() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM5hj.ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjSh]h atomic_t *v}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjMubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhM2hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhM2hjJubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hjh]hint *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjJubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjŤh]hint new}(hjǤhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjäubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjޤhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjڤhM4hjۤubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjڤhM4hjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hj.ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hj.ubjM)}(hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic_try_cmpxchg_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hj.ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hj.ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjΥhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʥubh if the exchange occurred, }(hjʥhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʥubh otherwise.}(hjʥhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_sub_and_test (C function)c.atomic_sub_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-bool atomic_sub_and_test (int i, atomic_t *v)h]h)}(h,bool atomic_sub_and_test(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj&hMGubh)}(hatomic_sub_and_testh]j)}(hatomic_sub_and_testh]hatomic_sub_and_test}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj&hMGubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]hi}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj;sbc.atomic_sub_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjǦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj&hMGubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj&hMGubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj&hMGhjhhubj4)}(hhh]jM)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj&hMGubeh}(h]h ](jAfunctioneh"]h$]h&]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:96: ./include/linux/atomic/atomic-instrumented.hhMKhj ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj1h]hint i}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhj+ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMHhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMHhj(ubj)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMIhjdubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMIhj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjçhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjէhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhj ubjM)}(hCUnsafe to use in noinstr code; use raw_atomic_sub_and_test() there.h]hCUnsafe to use in noinstr code; use raw_atomic_sub_and_test() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhj 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}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh otherwise.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_dec_and_test (C function)c.atomic_dec_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h&bool atomic_dec_and_test (atomic_t *v)h]h)}(h%bool atomic_dec_and_test(atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMZubh)}(hatomic_dec_and_testh]j)}(hatomic_dec_and_testh]hatomic_dec_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMZubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjǨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĨubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjɨmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_dec_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMZubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMZubah}(h]j{ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMZhj}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:96: ./include/linux/atomic/atomic-instrumented.hhMZhj(hhubah}(h]h ]h"]h$]h&]uh1j3hj}hhhjhMZubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjCjHjCjIjJjKuh1hhhhjhNhNubj)}(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)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjGubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjlh]h atomic_t *v}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjfubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjcubah}(h]h ]h"]h$]h&]uh1jhjGubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjGubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjũhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjשhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjGubjM)}(hCUnsafe to use in noinstr code; use raw_atomic_dec_and_test() there.h]hCUnsafe to use in noinstr code; use raw_atomic_dec_and_test() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjGubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjGubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is zero, }(hjhhhNhNubj)}(h **false**h]hfalse}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjGubeh}(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}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjthhhjhMlubh)}(hatomic_inc_and_testh]j)}(hatomic_inc_and_testh]hatomic_inc_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjthhhjhMlubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_inc_and_testasbuh1hhjubjQ)}(h h]h }(hjתhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjthhhjhMlubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjphhhjhMlubah}(h]jkah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMlhjmhhubj4)}(hhh]jM)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhjhhubah}(h]h ]h"]h$]h&]uh1j3hjmhhhjhMlubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhjhNhNubj)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMphj7ubj)}(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&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmhjVubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjqhMmhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMmhjSubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohj7ubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjǫhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhj7ubjM)}(hCUnsafe to use in noinstr code; use raw_atomic_inc_and_test() there.h]hCUnsafe to use in noinstr code; use raw_atomic_inc_and_test() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphj7ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhj7ubjM)}(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&]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:96: ./include/linux/atomic/atomic-instrumented.hhMshj7ubeh}(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}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhjuhM~ubh)}(hatomic_add_negativeh]j)}(hatomic_add_negativeh]hatomic_add_negative}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjdhhhjuhM~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)}jsjsbc.atomic_add_negativeasbuh1hhjԬubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjԬubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԬubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԬubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjdhhhjuhM~ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj`hhhjuhM~ubah}(h]j[ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjuhM~hj]hhubj4)}(hhh]jM)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~hj<hhubah}(h]h ]h"]h$]h&]uh1j3hj]hhhjuhM~ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjWjHjWjIjJjKuh1hhhhjhNhNubj)}(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)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjzubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjҭhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjέhMhjϭubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjέhMhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh + }(hj hhhNhNubj)}(h**i**h]hi}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with full ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubjM)}(hCUnsafe to use in noinstr code; use raw_atomic_add_negative() there.h]hCUnsafe to use in noinstr code; use raw_atomic_add_negative() there.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubjM)}(h **Return**h]j)}(hj`h]hReturn}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh if the resulting value of }(hjvhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh is negative, }(hjvhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh otherwise.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_add_negative_acquire (C function)c.atomic_add_negative_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5bool atomic_add_negative_acquire (int i, atomic_t *v)h]h)}(h4bool atomic_add_negative_acquire(int i, atomic_t *v)h](j)}(hjh]hbool}(hj׮hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӮhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjӮhhhjhMubh)}(hatomic_add_negative_acquireh]j)}(hatomic_add_negative_acquireh]hatomic_add_negative_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjӮhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(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.atomic_add_negative_acquireasbuh1hhjCubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hjh]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)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj̮hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjƯjHjƯjIjJjKuh1hhhhjhNhNubj)}(hXM**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_add_negative_acquire() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjЯh]h Parameters}(hjүhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjίubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjʯubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj"ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjʯubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(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 acquire ordering.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjʯubjM)}(hKUnsafe to use in noinstr code; use raw_atomic_add_negative_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic_add_negative_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjʯubjM)}(h **Return**h]j)}(hjϰh]hReturn}(hjѰhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjͰubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjʯubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is negative, }(hjhhhNhNubj)}(h **false**h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjʯubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_add_negative_release (C function)c.atomic_add_negative_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5bool atomic_add_negative_release (int i, atomic_t *v)h]h)}(h4bool atomic_add_negative_release(int i, atomic_t *v)h](j)}(hjh]hbool}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBhhhjShMubh)}(hatomic_add_negative_releaseh]j)}(hatomic_add_negative_releaseh]hatomic_add_negative_release}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1hhjBhhhjShMubj4)}(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&]noemphjjuh1j9hjzubj:)}(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)}jsjhsbc.atomic_add_negative_releaseasbuh1hhjubjQ)}(h h]h }(hjٱhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzubeh}(h]h ]h"]h$]h&]jjuh1j3hjBhhhjShMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>hhhjShMubah}(h]j9ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjShMhj;hhubj4)}(hhh]jM)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj;hhhjShMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj5jHj5jIjJjKuh1hhhhjhNhNubj)}(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}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hj^h]hint i}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjXubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjUubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubjM)}(hKUnsafe to use in noinstr code; use raw_atomic_add_negative_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic_add_negative_release() there.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh if the resulting value of }(hjThhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh is negative, }(hjThhhNhNubj)}(h **false**h]hfalse}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh otherwise.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_add_negative_relaxed (C function)c.atomic_add_negative_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5bool atomic_add_negative_relaxed (int i, atomic_t *v)h]h)}(h4bool atomic_add_negative_relaxed(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjóhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj³hMubh)}(hatomic_add_negative_relaxedh]j)}(hatomic_add_negative_relaxedh]hatomic_add_negative_relaxed}(hjճhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѳubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj³hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(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_add_negative_relaxedasbuh1hhj!ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hjh]hv}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj³hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj³hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj³hMhjhhubj4)}(hhh]jM)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj³hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXM**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_add_negative_relaxed() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjʹh]hint i}(hjϴhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj˴ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjǴubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjǴubeh}(h]h ]h"]h$]h&]uh1jhjhMhjĴubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjĴubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjWhhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh to (}(hjWhhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh + }(hjWhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh) with relaxed ordering.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic_add_negative_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic_add_negative_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjǵhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjõubh if the resulting value of }(hjõhhhNhNubj)}(h**v**h]hv}(hjٵhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjõubh is negative, }(hjõhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjõubh otherwise.}(hjõhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$atomic_fetch_add_unless (C function)c.atomic_fetch_add_unlesshNtauh1hhjhhhNhNubh)}(hhh](h)}(h7int atomic_fetch_add_unless (atomic_t *v, int a, int u)h]h)}(h6int atomic_fetch_add_unless(atomic_t *v, int a, int u)h](j)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj2hMubh)}(hatomic_fetch_add_unlessh]j)}(hatomic_fetch_add_unlessh]hatomic_fetch_add_unless}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj2hMubj4)}(h(atomic_t *v, int a, int u)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjfmodnameN classnameNjwjz)}j}]j)}jsjGsbc.atomic_fetch_add_unlessasbuh1hhj]ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubj:)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjŶhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hah]ha}(hjӶhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubj:)}(hint uh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hj\h]hu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubeh}(h]h ]h"]h$]h&]jjuh1j3hj hhhj2hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj2hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hMhjhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj2hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjIjHjIjIjJjKuh1hhhhjhNhNubj)}(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)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjMubj)}(hhh](j)}(h$``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:96: ./include/linux/atomic/atomic-instrumented.hhMhjlubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhjiubj)}(h``int a`` int value to add h](j)}(h ``int a``h]jS)}(hjh]hint a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjķhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjiubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]jS)}(hjh]hint u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj޷ubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj޷ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjiubeh}(h]h ]h"]h$]h&]uh1jhjMubjM)}(h**Description**h]j)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjMubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj5hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh != }(hj5hhhNhNubj)}(h**u**h]hu}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh), atomically updates }(hj5hhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh to (}(hj5hhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh + }(hj5hhhNhNubj)}(h**a**h]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh!) with full ordering. Otherwise, }(hj5hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh2 is not modified and relaxed ordering is provided.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjMubjM)}(hGUnsafe to use in noinstr code; use raw_atomic_fetch_add_unless() there.h]hGUnsafe to use in noinstr code; use raw_atomic_fetch_add_unless() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjMubjM)}(h **Return**h]j)}(hjh]hReturn}(hjøhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjMubjM)}(hThe original value of **v**.h](hThe original value of }(hj׸hhhNhNubj)}(h**v**h]hv}(hj߸hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj׸ubh.}(hj׸hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_add_unless (C function)c.atomic_add_unlesshNtauh1hhjhhhNhNubh)}(hhh](h)}(h2bool atomic_add_unless (atomic_t *v, int a, int u)h]h)}(h1bool atomic_add_unless(atomic_t *v, int a, int u)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj%hMubh)}(hatomic_add_unlessh]j)}(hatomic_add_unlessh]hatomic_add_unless}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYmodnameN classnameNjwjz)}j}]j)}jsj:sbc.atomic_add_unlessasbuh1hhjPubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubj:)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjնh]ha}(hjƹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubj:)}(hint uh](j)}(hinth]hint}(hj޹hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڹubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjڹubj)}(hj\h]hu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڹubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubeh}(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 add unless value with full orderingh]h*atomic add unless value with full ordering}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj%hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj;jHj;jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_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)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjdh]h atomic_t *v}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj^ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj[ubj)}(h``int a`` int value to add h](j)}(h ``int a``h]jS)}(hjh]hint a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj[ubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]jS)}(hjֺh]hint u}(hjغhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjԺubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjкubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjкubeh}(h]h ]h"]h$]h&]uh1jhjhMhj[ubeh}(h]h ]h"]h$]h&]uh1jhj?ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?ubjM)}(hIf (**v** != **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}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh), atomically updates }(hj'hhhNhNubj)}(h**v**h]hv}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh to (}(hj'hhhNhNubj)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh + }(hj'hhhNhNubj)}(h**a**h]ha}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh!) with full ordering. Otherwise, }(hj'hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh2 is not modified and relaxed ordering is provided.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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:96: ./include/linux/atomic/atomic-instrumented.hhMhj?ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?ubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_inc_not_zero (C function)c.atomic_inc_not_zerohNtauh1hhjhhhNhNubh)}(hhh](h)}(h&bool atomic_inc_not_zero (atomic_t *v)h]h)}(h%bool atomic_inc_not_zero(atomic_t *v)h](j)}(hjh]hbool}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&hhhj7hMubh)}(hatomic_inc_not_zeroh]j)}(hatomic_inc_not_zeroh]hatomic_inc_not_zero}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1hhj&hhhj7hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]j)}jsjLsbc.atomic_inc_not_zeroasbuh1hhjbubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubah}(h]h ]h"]h$]h&]jjuh1j3hj&hhhj7hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj"hhhj7hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hMhjhhubj4)}(hhh]jM)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjͼhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjʼhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj7hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX]**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_inc_not_zero() there. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj'hhhNhNubah}(h]h ]h"]h$]h&]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)}(hjIh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh != 0), atomically updates }(hj_hhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hCUnsafe to use in noinstr code; use raw_atomic_inc_not_zero() there.h]hCUnsafe to use in noinstr code; use raw_atomic_inc_not_zero() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjǽh]hReturn}(hjɽhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjŽubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݽubh if }(hjݽhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݽubh was updated, }(hjݽhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݽubh otherwise.}(hjݽhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic_inc_unless_negative (C function)c.atomic_inc_unless_negativehNtauh1hhjhhhNhNubh)}(hhh](h)}(h-bool atomic_inc_unless_negative (atomic_t *v)h]h)}(h,bool atomic_inc_unless_negative(atomic_t *v)h](j)}(hjh]hbool}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:hhhjKhMubh)}(hatomic_inc_unless_negativeh]j)}(hatomic_inc_unless_negativeh]hatomic_inc_unless_negative}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1hhj:hhhjKhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj`sbc.atomic_inc_unless_negativeasbuh1hhjvubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrubah}(h]h ]h"]h$]h&]jjuh1j3hj:hhhjKhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6hhhjKhMubah}(h]j1ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjKhMhj3hhubj4)}(hhh]jM)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj޾hhubah}(h]h ]h"]h$]h&]uh1j3hj3hhhjKhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXd**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_inc_unless_negative() there. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj"h]h atomic_t *v}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjshhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh >= 0), atomically updates }(hjshhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh to (}(hjshhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh% + 1) with full ordering. Otherwise, }(hjshhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh2 is not modified and relaxed ordering is provided.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hJUnsafe to use in noinstr code; use raw_atomic_inc_unless_negative() there.h]hJUnsafe to use in noinstr code; use raw_atomic_inc_unless_negative() there.}(hjʿhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjۿh]hReturn}(hjݿhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٿubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic_dec_unless_positive (C function)c.atomic_dec_unless_positivehNtauh1hhjhhhNhNubh)}(hhh](h)}(h-bool atomic_dec_unless_positive (atomic_t *v)h]h)}(h,bool atomic_dec_unless_positive(atomic_t *v)h](j)}(hjh]hbool}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNhhhj_hMubh)}(hatomic_dec_unless_positiveh]j)}(hatomic_dec_unless_positiveh]hatomic_dec_unless_positive}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1hhjNhhhj_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)}jsjtsbc.atomic_dec_unless_positiveasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(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)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjGhhhj_hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(hXd**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_dec_unless_positive() there. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj6h]h atomic_t *v}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj0ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh <= 0), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% - 1) with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hJUnsafe to use in noinstr code; use raw_atomic_dec_unless_positive() there.h]hJUnsafe to use in noinstr code; use raw_atomic_dec_unless_positive() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_dec_if_positive (C function)c.atomic_dec_if_positivehNtauh1hhjhhhNhNubh)}(hhh](h)}(h(int atomic_dec_if_positive (atomic_t *v)h]h)}(h'int atomic_dec_if_positive(atomic_t *v)h](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+ubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbhhhjthM+ubh)}(hatomic_dec_if_positiveh]j)}(hatomic_dec_if_positiveh]hatomic_dec_if_positive}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjbhhhjthM+ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_dec_if_positiveasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjbhhhjthM+ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^hhhjthM+ubah}(h]jYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjthM+hj[hhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjhhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhjthM+ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj"jHj"jIjJjKuh1hhhhjhNhNubj)}(hXr**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_dec_if_positive() there. **Return** The old value of (**v** - 1), regardless of whether **v** was updated.h](jM)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hj&ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjKh]h atomic_t *v}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjEubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`hM,hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hM,hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hj&ubjM)}(hIf (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh > 0), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(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:96: ./include/linux/atomic/atomic-instrumented.hhM-hj&ubjM)}(hFUnsafe to use in noinstr code; use raw_atomic_dec_if_positive() there.h]hFUnsafe to use in noinstr code; use raw_atomic_dec_if_positive() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hj&ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hj&ubjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjhhhNhNubj)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1), regardless of whether }(hjhhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_read (C function)c.atomic64_readhNtauh1hhjhhhNhNubh)}(hhh](h)}(h's64 atomic64_read (const atomic64_t *v)h]h)}(h&s64 atomic64_read(const atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjrmodnameN classnameNjwjz)}j}]j)}js atomic64_readsbc.atomic64_readasbuh1hhjihhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjihhhjhM>ubh)}(h atomic64_readh]j)}(hjh]h atomic64_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjihhhjhM>ubj4)}(h(const atomic64_t *v)h]j:)}(hconst atomic64_t *vh](j?)}(hjP*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}]jc.atomic64_readasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjihhhjhM>ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjehhhjhM>ubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM>hjbhhubj4)}(hhh]jM)}(h!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:96: ./include/linux/atomic/atomic-instrumented.hhM>hj<hhubah}(h]h ]h"]h$]h&]uh1j3hjbhhhjhM>ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjWjHjWjIjJjKuh1hhhhjhNhNubj)}(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)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhj[ubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]jS)}(hjh]hconst atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjzubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhj[ubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(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:96: ./include/linux/atomic/atomic-instrumented.hhM@hj[ubjM)}(h=Unsafe to use in noinstr code; use raw_atomic64_read() there.h]h=Unsafe to use in noinstr code; use raw_atomic64_read() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhj[ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhj[ubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic64_read_acquire (C function)c.atomic64_read_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h/s64 atomic64_read_acquire (const atomic64_t *v)h]h)}(h.s64 atomic64_read_acquire(const atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj_modnameN classnameNjwjz)}j}]j)}jsatomic64_read_acquiresbc.atomic64_read_acquireasbuh1hhjVhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVhhhj~hMOubh)}(hatomic64_read_acquireh]j)}(hj{h]hatomic64_read_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjVhhhj~hMOubj4)}(h(const atomic64_t *v)h]j:)}(hconst atomic64_t *vh](j?)}(hjP*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}]jyc.atomic64_read_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjVhhhj~hMOubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjRhhhj~hMOubah}(h]jMah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj~hMOhjOhhubj4)}(hhh]jM)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhj)hhubah}(h]h ]h"]h$]h&]uh1j3hjOhhhj~hMOubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjDjHjDjIjJjKuh1hhhhjhNhNubj)}(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)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjHubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]jS)}(hjmh]hconst 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:96: ./include/linux/atomic/atomic-instrumented.hhMPhjgubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjdubah}(h]h ]h"]h$]h&]uh1jhjHubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjHubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMQhjHubjM)}(hEUnsafe to use in noinstr code; use raw_atomic64_read_acquire() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_read_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjHubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjHubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjHubeh}(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}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`ubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjChhhjUhM`ubh)}(h atomic64_seth]j)}(h atomic64_seth]h atomic64_set}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhjChhhjUhM`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)}jsjjsbc.atomic64_setasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubj:)}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubeh}(h]h ]h"]h$]h&]jjuh1j3hjChhhjUhM`ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj?hhhjUhM`ubah}(h]j:ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjUhM`hj<hhubj4)}(hhh]jM)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hj/hhubah}(h]h ]h"]h$]h&]uh1j3hj<hhhjUhM`ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjJjHjJjIjJjKuh1hhhhjhNhNubj)}(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)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjNubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjsh]h 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:96: ./include/linux/atomic/atomic-instrumented.hhMahjmubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMahjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMahjjubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjjubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjNubjM)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchjNubjM)}(hhjPubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjkhM>hjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhM>hjMubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjMubeh}(h]h ]h"]h$]h&]uh1jhj1ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhj1ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hj1ubjM)}(hCUnsafe to use in noinstr code; use raw_atomic64_sub_return() there.h]hCUnsafe to use in noinstr code; use raw_atomic64_sub_return() there.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhj1ubjM)}(h **Return**h]j)}(hj6h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhj1ubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMEhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_sub_return_acquire (C function)c.atomic64_sub_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6s64 atomic64_sub_return_acquire (s64 i, atomic64_t *v)h]h)}(h5s64 atomic64_sub_return_acquire(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_sub_return_acquiresbc.atomic64_sub_return_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMPubh)}(hatomic64_sub_return_acquireh]j)}(hjh]hatomic64_sub_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMPubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_sub_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj+modnameN classnameNjwjz)}j}]jc.atomic64_sub_return_acquireasbuh1hhj"ubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hjh]hv}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMPubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMPubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMPhjhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMPubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX'**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_sub_return_acquire() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjubj)}(hhh]jM)}(hpointer to 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}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMThjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjVhhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh to (}(hjVhhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh - }(hjVhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh) with acquire ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMShjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMUhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMWhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_sub_return_release (C function)c.atomic64_sub_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6s64 atomic64_sub_return_release (s64 i, atomic64_t *v)h]h)}(h5s64 atomic64_sub_return_release(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_sub_return_releasesbc.atomic64_sub_return_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj'hMbubh)}(hatomic64_sub_return_releaseh]j)}(hj$h]hatomic64_sub_return_release}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj'hMbubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j"c.atomic64_sub_return_releaseasbuh1hhjQubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j"c.atomic64_sub_return_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj'hMbubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj'hMbubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj'hMbhjhhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj'hMbubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX'**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_sub_return_release() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMchj<ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhMchjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMchj9ubj)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMdhjuubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMdhj9ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjubjM)}(h **Return**h]j)}(hj"h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMihjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj8hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_sub_return_relaxed (C function)c.atomic64_sub_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h6s64 atomic64_sub_return_relaxed (s64 i, atomic64_t *v)h]h)}(h5s64 atomic64_sub_return_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj~modnameN classnameNjwjz)}j}]j)}jsatomic64_sub_return_relaxedsbc.atomic64_sub_return_relaxedasbuh1hhjuhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuhhhjhMuubh)}(hatomic64_sub_return_relaxedh]j)}(hjh]hatomic64_sub_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjuhhhjhMuubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_sub_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_sub_return_relaxedasbuh1hhjubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjuhhhjhMuubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjqhhhjhMuubah}(h]jlah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMuhjnhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhjthhubah}(h]h ]h"]h$]h&]uh1j3hjnhhhjhMuubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX'**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_sub_return_relaxed() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjBhhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh to (}(hjBhhhNhNubj)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh - }(hjBhhhNhNubj)}(h**i**h]hi}(hjnhhhNhNubah}(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:96: ./include/linux/atomic/atomic-instrumented.hhMxhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_sub_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMzhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM}hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_fetch_sub (C function)c.atomic64_fetch_subhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-s64 atomic64_fetch_sub (s64 i, atomic64_t *v)h]h)}(h,s64 atomic64_fetch_sub(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_subsbc.atomic64_fetch_subasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_subh]j)}(hjh]hatomic64_fetch_sub}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_subasbuh1hhj=ubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hjh]hi}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_subasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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 subtract with full orderingh]h"atomic subtract with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_sub() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hj.h]hs64 i}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj(ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhj%ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjgh]h atomic64_t *v}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjaubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_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:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hBUnsafe to use in noinstr code; use raw_atomic64_fetch_sub() there.h]hBUnsafe to use in noinstr code; use raw_atomic64_fetch_sub() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hThe original value of **v**.h](hThe original value of }(hj$hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_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}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_sub_acquiresbc.atomic64_fetch_sub_acquireasbuh1hhjahhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjhMubh)}(hatomic64_fetch_sub_acquireh]j)}(hjh]hatomic64_fetch_sub_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhjhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_sub_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_sub_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjahhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]hhhjhMubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjZhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj`hhubah}(h]h ]h"]h$]h&]uh1j3hjZhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj{jHj{jIjJjKuh1hhhhjhNhNubj)}(hX'**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_sub_acquire() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj.hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh to (}(hj.hhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh - }(hj.hhhNhNubj)}(h**i**h]hi}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh) with acquire ordering.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_sub_acquire() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_sub_acquire() there.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_sub_release (C function)c.atomic64_fetch_sub_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_sub_release (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_sub_release(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_sub_releasesbc.atomic64_fetch_sub_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_sub_releaseh]j)}(hjh]hatomic64_fetch_sub_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]jc.atomic64_fetch_sub_releaseasbuh1hhj)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&]noemphjjuh1j9hj%ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjymodnameN classnameNjwjz)}j}]jc.atomic64_fetch_sub_releaseasbuh1hhjpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX'**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_sub_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjSh]h 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:96: ./include/linux/atomic/atomic-instrumented.hhMhjMubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_sub_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_sub_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_sub_relaxed (C function)c.atomic64_fetch_sub_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5s64 atomic64_fetch_sub_relaxed (s64 i, atomic64_t *v)h]h)}(h4s64 atomic64_fetch_sub_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjVmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_sub_relaxedsbc.atomic64_fetch_sub_relaxedasbuh1hhjMhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMhhhjuhMubh)}(hatomic64_fetch_sub_relaxedh]j)}(hjrh]hatomic64_fetch_sub_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjMhhhjuhMubj4)}(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}]jpc.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}]jpc.atomic64_fetch_sub_relaxedasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjMhhhjuhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjIhhhjuhMubah}(h]jDah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjuhMhjFhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjLhhubah}(h]h ]h"]h$]h&]uh1j3hjFhhhjuhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjgjHjgjIjJjKuh1hhhhjhNhNubj)}(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)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjkubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkubjM)}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkubjM)}(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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjkubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_inc (C function)c.atomic64_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(h!void atomic64_inc (atomic64_t *v)h]h)}(h void atomic64_inc(atomic64_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h atomic64_inch]j)}(h atomic64_inch]h atomic64_inc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_incasbuh1hhjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]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 increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_inc() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hAtomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_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}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjSmodnameN classnameNjwjz)}j}]j)}jsatomic64_inc_return_releasesbc.atomic64_inc_return_releaseasbuh1hhjJhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhjrhMubh)}(hatomic64_inc_return_releaseh]j)}(hjoh]hatomic64_inc_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhjrhMubj4)}(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}]jmc.atomic64_inc_return_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjJhhhjrhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhjrhMubah}(h]jAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhMhjChhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjChhhjrhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_inc_return_release() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj!ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjFh]h 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:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!ubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj!ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj!ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_inc_return_relaxed (C function)c.atomic64_inc_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/s64 atomic64_inc_return_relaxed (atomic64_t *v)h]h)}(h.s64 atomic64_inc_return_relaxed(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]j)}jsatomic64_inc_return_relaxedsbc.atomic64_inc_return_relaxedasbuh1hhj.hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.hhhjVhMubh)}(hatomic64_inc_return_relaxedh]j)}(hjSh]hatomic64_inc_return_relaxed}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1hhj.hhhjVhMubj4)}(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}]jQc.atomic64_inc_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubah}(h]h ]h"]h$]h&]jjuh1j3hj.hhhjVhMubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj'hhhjVhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_inc_return_relaxed() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj*h]h atomic64_t *v}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj$ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj{hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh to (}(hj{hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh + 1) with relaxed ordering.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_inc_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_fetch_inc (C function)c.atomic64_fetch_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(h&s64 atomic64_fetch_inc (atomic64_t *v)h]h)}(h%s64 atomic64_fetch_inc(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_incsbc.atomic64_fetch_incasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(ubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj:hM(ubh)}(hatomic64_fetch_inch]j)}(hj7h]hatomic64_fetch_inc}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(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}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmmodnameN classnameNjwjz)}j}]j5c.atomic64_fetch_incasbuh1hhjdubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj:hM(ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj:hM(ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj:hM(hj hhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj:hM(ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_inc() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM)hjubj)}(hhh]jM)}(hpointer to 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)}(hjIh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj_hhhNhNubj)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh to (}(hj_hhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh + 1) with full ordering.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hjubjM)}(hBUnsafe to use in noinstr code; use raw_atomic64_fetch_inc() there.h]hBUnsafe to use in noinstr code; use raw_atomic64_fetch_inc() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM,hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_inc_acquire (C function)c.atomic64_fetch_inc_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h.s64 atomic64_fetch_inc_acquire (atomic64_t *v)h]h)}(h-s64 atomic64_fetch_inc_acquire(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_inc_acquiresbc.atomic64_fetch_inc_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM:ubh)}(hatomic64_fetch_inc_acquireh]j)}(hjh]hatomic64_fetch_inc_acquire}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM:ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjQmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_inc_acquireasbuh1hhjHubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDubah}(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:96: ./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:96: ./include/linux/atomic/atomic-instrumented.hhM>hjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(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 acquire ordering.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_acquire() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_acquire() there.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM>hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM@hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_inc_release (C function)c.atomic64_fetch_inc_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h.s64 atomic64_fetch_inc_release (atomic64_t *v)h]h)}(h-s64 atomic64_fetch_inc_release(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_inc_releasesbc.atomic64_fetch_inc_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMKubh)}(hatomic64_fetch_inc_releaseh]j)}(hjh]hatomic64_fetch_inc_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMKubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]jc.atomic64_fetch_inc_releaseasbuh1hhj,ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]hv}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMKhjhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_inc_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hj'hhhNhNubj)}(h**v**h]hv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh to (}(hj'hhhNhNubj)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh + 1) with release ordering.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_release() there.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjubjM)}(h **Return**h]j)}(hjkh]hReturn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_inc_relaxed (C function)c.atomic64_fetch_inc_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.s64 atomic64_fetch_inc_relaxed (atomic64_t *v)h]h)}(h-s64 atomic64_fetch_inc_relaxed(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_inc_relaxedsbc.atomic64_fetch_inc_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM]ubh)}(hatomic64_fetch_inc_relaxedh]j)}(hjh]hatomic64_fetch_inc_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM]ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_inc_relaxedasbuh1hhjubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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 relaxed orderingh]h&atomic increment with relaxed ordering}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjvhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM]ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_inc_relaxed() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh + 1) with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hjubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_inc_relaxed() there.}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjubjM)}(h **Return**h]j)}(hjO h]hReturn}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchjubjM)}(hThe original value of **v**.h](hThe original value of }(hje hhhNhNubj)}(h**v**h]hv}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje ubh.}(hje hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_dec (C function)c.atomic64_dechNtauh1hhjhhhNhNubh)}(hhh](h)}(h!void atomic64_dec (atomic64_t *v)h]h)}(h void atomic64_dec(atomic64_t *v)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMnubh)}(h atomic64_dech]j)}(h atomic64_dech]h atomic64_dec}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hMnubj4)}(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_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)}(hjh]hv}(hj! hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhj hMnubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj hMnubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMnhj hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhjG hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hMnubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjb jHjb jIjJjKuh1hhhhjhNhNubj)}(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)}(hjl h]h Parameters}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhjf 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:96: ./include/linux/atomic/atomic-instrumented.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 ubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhjf ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh - 1) with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphjf ubjM)}(h h]h Parameters}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj< ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8 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:96: ./include/linux/atomic/atomic-instrumented.hhMhjW ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjr hMhjs ubah}(h]h ]h"]h$]h&]uh1jhjW ubeh}(h]h ]h"]h$]h&]uh1jhjr hMhjT ubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8 ubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh - 1) with full ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8 ubjM)}(hCUnsafe to use in noinstr code; use raw_atomic64_dec_return() there.h]hCUnsafe to use in noinstr code; use raw_atomic64_dec_return() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8 ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8 ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8 ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_dec_return_acquire (C function)c.atomic64_dec_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h/s64 atomic64_dec_return_acquire (atomic64_t *v)h]h)}(h.s64 atomic64_dec_return_acquire(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjL hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjN modnameN classnameNjwjz)}j}]j)}jsatomic64_dec_return_acquiresbc.atomic64_dec_return_acquireasbuh1hhjE hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjn hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjE hhhjm hMubh)}(hatomic64_dec_return_acquireh]j)}(hjj h]hatomic64_dec_return_acquire}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj| ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjE hhhjm 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}]jh c.atomic64_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)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hjE hhhjm hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjA hhhjm hMubah}(h]j< ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjm hMhj> hhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hj> hhhjm hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_dec_return_acquire() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj;ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhj8ubah}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_dec_return_release (C function)c.atomic64_dec_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h/s64 atomic64_dec_return_release (atomic64_t *v)h]h)}(h.s64 atomic64_dec_return_release(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsatomic64_dec_return_releasesbc.atomic64_dec_return_releaseasbuh1hhj)hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)hhhjQhMubh)}(hatomic64_dec_return_releaseh]j)}(hjNh]hatomic64_dec_return_release}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhjQhMubj4)}(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}]jLc.atomic64_dec_return_releaseasbuh1hhj{ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubah}(h]h ]h"]h$]h&]jjuh1j3hj)hhhjQhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj%hhhjQhMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjQhMhj"hhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj"hhhjQhMubeh}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj%h]h atomic64_t *v}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj#ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with release 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 - 1) with release ordering.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic64_dec_return_relaxed (C function)c.atomic64_dec_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/s64 atomic64_dec_return_relaxed (atomic64_t *v)h]h)}(h.s64 atomic64_dec_return_relaxed(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_dec_return_relaxedsbc.atomic64_dec_return_relaxedasbuh1hhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj5hMubh)}(hatomic64_dec_return_relaxedh]j)}(hj2h]hatomic64_dec_return_relaxed}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj5hMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjhmodnameN classnameNjwjz)}j}]j0c.atomic64_dec_return_relaxedasbuh1hhj_ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhj5hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhj5hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj5hMhjhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj5hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_dec_return_relaxed() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj h]h atomic64_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(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)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed 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 - 1) with relaxed ordering.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_relaxed() there.h]hKUnsafe to use in noinstr code; use raw_atomic64_dec_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_fetch_dec (C function)c.atomic64_fetch_dechNtauh1hhjhhhNhNubh)}(hhh](h)}(h&s64 atomic64_fetch_dec (atomic64_t *v)h]h)}(h%s64 atomic64_fetch_dec(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_decsbc.atomic64_fetch_decasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_dech]j)}(hjh]hatomic64_fetch_dec}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjLmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_decasbuh1hhjCubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_dec() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj>hhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh to (}(hj>hhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh - 1) with full ordering.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBUnsafe to use in noinstr code; use raw_atomic64_fetch_dec() there.h]hBUnsafe to use in noinstr code; use raw_atomic64_fetch_dec() there.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_dec_acquire (C function)c.atomic64_fetch_dec_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h.s64 atomic64_fetch_dec_acquire (atomic64_t *v)h]h)}(h-s64 atomic64_fetch_dec_acquire(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_dec_acquiresbc.atomic64_fetch_dec_acquireasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_dec_acquireh]j)}(hjh]hatomic64_fetch_dec_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]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}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0modnameN classnameNjwjz)}j}]jc.atomic64_fetch_dec_acquireasbuh1hhj'ubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'ubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hjh]hv}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_dec_acquire() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hj"hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh to (}(hj"hhhNhNubj)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh - 1) with acquire ordering.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_acquire() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_acquire() there.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjfh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj|hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_dec_release (C function)c.atomic64_fetch_dec_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h.s64 atomic64_fetch_dec_release (atomic64_t *v)h]h)}(h-s64 atomic64_fetch_dec_release(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_dec_releasesbc.atomic64_fetch_dec_releaseasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_dec_releaseh]j)}(hjh]hatomic64_fetch_dec_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_dec_releaseasbuh1hhj ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjqhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_dec_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_release() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_release() there.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjJh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj`hhhNhNubj)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'atomic64_fetch_dec_relaxed (C function)c.atomic64_fetch_dec_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.s64 atomic64_fetch_dec_relaxed (atomic64_t *v)h]h)}(h-s64 atomic64_fetch_dec_relaxed(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_dec_relaxedsbc.atomic64_fetch_dec_relaxedasbuh1hhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic64_fetch_dec_relaxedh]j)}(hjh]hatomic64_fetch_dec_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_fetch_dec_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(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 relaxed orderingh]h&atomic decrement with relaxed ordering}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjUhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjpjHjpjIjJjKuh1hhhhjhNhNubj)}(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)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjtubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjtubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjtubjM)}(hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_relaxed() there.h]hJUnsafe to use in noinstr code; use raw_atomic64_fetch_dec_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjtubjM)}(h **Return**h]j)}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtubjM)}(hThe original value of **v**.h](hThe original value of }(hjDhhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_and (C function)c.atomic64_andhNtauh1hhjhhhNhNubh)}(hhh](h)}(h(void atomic64_and (s64 i, atomic64_t *v)h]h)}(h'void atomic64_and(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(h atomic64_andh]j)}(h atomic64_andh]h atomic64_and}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_andasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.atomic64_andasbuh1hhjubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjGhhhNhNubah}(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]jxah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjzhhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjmhhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_and() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj;hhhNhNubj)}(h**v**h]hv}(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}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh) with relaxed ordering.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h*h]hs64 i}(hj@*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz hj8*ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjW*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjS*hMz hjT*ubah}(h]h ]h"]h$]h&]uh1jhj8*ubeh}(h]h ]h"]h$]h&]uh1jhjS*hMz hj5*ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjw*h]h atomic64_t *v}(hjy*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhju*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{ hjq*ubj)}(hhh]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&]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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hj*ubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(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 full ordering.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hj*ubjM)}(hEUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot() there.h]hEUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot() there.}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ hj*ubjM)}(h **Return**h]j)}(hj+h]hReturn}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj*ubjM)}(hThe original value of **v**.h](hThe original value of }(hj4+hhhNhNubj)}(h**v**h]hv}(hj<+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4+ubh.}(hj4+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj*ubeh}(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}(hjx+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju+ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjz+modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_andnot_acquiresbc.atomic64_fetch_andnot_acquireasbuh1hhjq+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjq+hhhj+hM ubh)}(hatomic64_fetch_andnot_acquireh]j)}(hj+h]hatomic64_fetch_andnot_acquire}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjq+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_acquireasbuh1hhj+ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hjh]hi}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,modnameN classnameNjwjz)}j}]j+c.atomic64_fetch_andnot_acquireasbuh1hhj ,ubjQ)}(h h]h }(hj/,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ,ubj)}(hjh]h*}(hj=,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ,ubj)}(hjh]hv}(hjJ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubeh}(h]h ]h"]h$]h&]jjuh1j3hjq+hhhj+hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjm+hhhj+hM ubah}(h]jh+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj+hM hjj+hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjs,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjp,hhubah}(h]h ]h"]h$]h&]uh1j3hjj+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 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,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj,h]hs64 i}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hM hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM hj,ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj,h]h atomic64_t *v}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-hM hj-ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj-hM hj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubjM)}(h**Description**h]j)}(hj(-h]h Description}(hj*-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&-ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubjM)}(hCAtomically updates **v** to (**v** & **~i**) 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**v**h]hv}(hjX-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>-ubh & }(hj>-hhhNhNubj)}(h**~i**h]h~i}(hjj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>-ubh) with acquire ordering.}(hj>-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubjM)}(hMUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic64_fetch_andnot_acquire() there.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubjM)}(h **Return**h]j)}(hj-h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubjM)}(hThe original value of **v**.h](hThe original value of }(hj-hhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic64_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:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-hhhj.hM ubh)}(hatomic64_fetch_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 reftargetjB.modnameN classnameNjwjz)}j}]j .c.atomic64_fetch_andnot_releaseasbuh1hhj9.ubjQ)}(h h]h }(hj^.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9.ubj)}(hjh]hi}(hjl.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5.ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj.modnameN classnameNjwjz)}j}]j .c.atomic64_fetch_andnot_releaseasbuh1hhj.ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hjh]hv}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5.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:96: ./include/linux/atomic/atomic-instrumented.hhM hj.hhubah}(h]h ]h"]h$]h&]uh1j3hj-hhhj.hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/jHj/jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** & **~i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_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:96: ./include/linux/atomic/atomic-instrumented.hhM hj/ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj*/h]hs64 i}(hj,/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj$/ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjC/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)}(hjc/h]h atomic64_t *v}(hje/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhja/ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj]/ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj|/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjx/hM hjy/ubah}(h]h ]h"]h$]h&]uh1jhj]/ubeh}(h]h ]h"]h$]h&]uh1jhjx/hM hj!/ubeh}(h]h ]h"]h$]h&]uh1jhj/ubjM)}(h**Description**h]j)}(hj/h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj/ubjM)}(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:96: ./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:96: ./include/linux/atomic/atomic-instrumented.hhM hj/ubjM)}(h **Return**h]j)}(hj 0h]hReturn}(hj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj/ubjM)}(hThe original value of **v**.h](hThe original value of }(hj 0hhhNhNubj)}(h**v**h]hv}(hj(0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 0ubh.}(hj 0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic64_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}(hjd0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjf0modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_andnot_relaxedsbc.atomic64_fetch_andnot_relaxedasbuh1hhj]0hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]0hhhj0hM ubh)}(hatomic64_fetch_andnot_relaxedh]j)}(hj0h]hatomic64_fetch_andnot_relaxed}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj]0hhhj0hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0modnameN classnameNjwjz)}j}]j0c.atomic64_fetch_andnot_relaxedasbuh1hhj0ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]hi}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0modnameN classnameNjwjz)}j}]j0c.atomic64_fetch_andnot_relaxedasbuh1hhj0ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]h*}(hj)1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]hv}(hj61hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubeh}(h]h ]h"]h$]h&]jjuh1j3hj]0hhhj0hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjY0hhhj0hM ubah}(h]jT0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0hM hjV0hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj_1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\1hhubah}(h]h ]h"]h$]h&]uh1j3hjV0hhhj0hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjw1jHjw1jIjJjKuh1hhhhjhNhNubj)}(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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hj{1ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj1h]hs64 i}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj1ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hM hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM hj1ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj1h]h atomic64_t *v}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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 hj1ubeh}(h]h ]h"]h$]h&]uh1jhj{1ubjM)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{1ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj*2hhhNhNubj)}(h**v**h]hv}(hj22hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*2ubh to (}(hj*2hhhNhNubj)}(h**v**h]hv}(hjD2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*2ubh & }(hj*2hhhNhNubj)}(h**~i**h]h~i}(hjV2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*2ubh) with relaxed ordering.}(hj*2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{1ubjM)}(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.}(hjo2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{1ubjM)}(h **Return**h]j)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{1ubjM)}(hThe original value of **v**.h](hThe original value of }(hj2hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj{1ubeh}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2hhhj2hM ubh)}(h atomic64_orh]j)}(h atomic64_orh]h atomic64_or}(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}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj3modnameN classnameNjwjz)}j}]j)}jsj2sb c.atomic64_orasbuh1hhj3ubjQ)}(h h]h }(hj73hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]hi}(hjE3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj 3ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj`3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjb3modnameN classnameNjwjz)}j}]j33 c.atomic64_orasbuh1hhjY3ubjQ)}(h h]h }(hj~3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY3ubj)}(hjh]hv}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj 3ubeh}(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 bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3hhubah}(h]h ]h"]h$]h&]uh1j3hj2hhhj2hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhjhNhNubj)}(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)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3ubj)}(hhh](j)}(h``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:96: ./include/linux/atomic/atomic-instrumented.hhM hj3ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hM hj4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hM hj3ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj<4h]h atomic64_t *v}(hj>4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:4ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj64ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjU4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQ4hM hjR4ubah}(h]h ]h"]h$]h&]uh1jhj64ubeh}(h]h ]h"]h$]h&]uh1jhjQ4hM hj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubjM)}(h**Description**h]j)}(hjw4h]h Description}(hjy4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3ubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh to (}(hj4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh | }(hj4hhhNhNubj)}(h**i**h]hi}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh) with relaxed ordering.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3ubjM)}(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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3ubjM)}(h **Return**h]j)}(hj4h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3ubjM)}(hNothing.h]hNothing.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_fetch_or (C function)c.atomic64_fetch_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h,s64 atomic64_fetch_or (s64 i, atomic64_t *v)h]h)}(h+s64 atomic64_fetch_or(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj+5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-5modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_orsbc.atomic64_fetch_orasbuh1hhj$5hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjM5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$5hhhjL5hM ubh)}(hatomic64_fetch_orh]j)}(hjI5h]hatomic64_fetch_or}(hj_5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[5ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj$5hhhjL5hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj}5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]jG5c.atomic64_fetch_orasbuh1hhjv5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjv5ubj)}(hjh]hi}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjr5ubj:)}(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}]jG5c.atomic64_fetch_orasbuh1hhj5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]hv}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjr5ubeh}(h]h ]h"]h$]h&]jjuh1j3hj$5hhhjL5hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj 5hhhjL5hM ubah}(h]j5ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjL5hM hj5hhubj4)}(hhh]jM)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hj&6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj#6hhubah}(h]h ]h"]h$]h&]uh1j3hj5hhhjL5hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj>6jHj>6jIjJjKuh1hhhhjhNhNubj)}(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)}(hjH6h]h Parameters}(hjJ6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF6ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjB6ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjg6h]hs64 i}(hji6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhje6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hja6ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|6hM hj}6ubah}(h]h ]h"]h$]h&]uh1jhja6ubeh}(h]h ]h"]h$]h&]uh1jhj|6hM hj^6ubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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 hj^6ubeh}(h]h ]h"]h$]h&]uh1jhjB6ubjM)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjB6ubjM)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hj6hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh to (}(hj6hhhNhNubj)}(h**v**h]hv}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh | }(hj6hhhNhNubj)}(h**i**h]hi}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh) with full ordering.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjB6ubjM)}(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.}(hj67hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjB6ubjM)}(h **Return**h]j)}(hjG7h]hReturn}(hjI7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE7ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjB6ubjM)}(hThe original value of **v**.h](hThe original value of }(hj]7hhhNhNubj)}(h**v**h]hv}(hje7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]7ubh.}(hj]7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjB6ubeh}(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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_or_acquiresbc.atomic64_fetch_or_acquireasbuh1hhj7hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7hhhj7hM ubh)}(hatomic64_fetch_or_acquireh]j)}(hj7h]hatomic64_fetch_or_acquire}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7hhhj7hM 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}]j7c.atomic64_fetch_or_acquireasbuh1hhj7ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]hi}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj:8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj78ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<8modnameN classnameNjwjz)}j}]j7c.atomic64_fetch_or_acquireasbuh1hhj38ubjQ)}(h h]h }(hjX8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj38ubj)}(hjh]h*}(hjf8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj38ubj)}(hjh]hv}(hjs8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj38ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubeh}(h]h ]h"]h$]h&]jjuh1j3hj7hhhj7hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj7hhhj7hM ubah}(h]j7ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hM hj7hhubj4)}(hhh]jM)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8hhubah}(h]h ]h"]h$]h&]uh1j3hj7hhhj7hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj8jHj8jIjJjKuh1hhhhjhNhNubj)}(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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj8h]hs64 i}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hM hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM hj8ubj)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hj9ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj/9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+9hM hj,9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj+9hM hj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubjM)}(h**Description**h]j)}(hjQ9h]h Description}(hjS9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO9ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubjM)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hjg9hhhNhNubj)}(h**v**h]hv}(hjo9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg9ubh to (}(hjg9hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg9ubh | }(hjg9hhhNhNubj)}(h**i**h]hi}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg9ubh) with acquire ordering.}(hjg9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubjM)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubjM)}(hThe original value of **v**.h](hThe original value of }(hj9hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic64_fetch_or_release (C function)c.atomic64_fetch_or_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h4s64 atomic64_fetch_or_release (s64 i, atomic64_t *v)h]h)}(h3s64 atomic64_fetch_or_release(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_or_releasesbc.atomic64_fetch_or_releaseasbuh1hhj:hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj9:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:hhhj8:hM ubh)}(hatomic64_fetch_or_releaseh]j)}(hj5:h]hatomic64_fetch_or_release}(hjK:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG:ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj:hhhj8:hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hji:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjk:modnameN classnameNjwjz)}j}]j3:c.atomic64_fetch_or_releaseasbuh1hhjb:ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjb:ubj)}(hjh]hi}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb: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}]j3:c.atomic64_fetch_or_releaseasbuh1hhj:ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hjh]hv}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^:ubeh}(h]h ]h"]h$]h&]jjuh1j3hj:hhhj8:hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj :hhhj8:hM ubah}(h]j:ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj8:hM hj :hhubj4)}(hhh]jM)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj;hhubah}(h]h ]h"]h$]h&]uh1j3hj :hhhj8:hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj*;jHj*;jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_or_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj4;h]h Parameters}(hj6;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2;ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj.;ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjS;h]hs64 i}(hjU;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQ;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjM;ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjl;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjh;hM hji;ubah}(h]h ]h"]h$]h&]uh1jhjM;ubeh}(h]h ]h"]h$]h&]uh1jhjh;hM hjJ;ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj;h]h atomic64_t *v}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj;ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;hM hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM hjJ;ubeh}(h]h ]h"]h$]h&]uh1jhj.;ubjM)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj.;ubjM)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hj;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh to (}(hj;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh | }(hj;hhhNhNubj)}(h**i**h]hi}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh) with release ordering.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj.;ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_release() there.h]hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_release() there.}(hj"<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj.;ubjM)}(h **Return**h]j)}(hj3<h]hReturn}(hj5<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1<ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj.;ubjM)}(hThe original value of **v**.h](hThe original value of }(hjI<hhhNhNubj)}(h**v**h]hv}(hjQ<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI<ubh.}(hjI<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj.;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&atomic64_fetch_or_relaxed (C function)c.atomic64_fetch_or_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h4s64 atomic64_fetch_or_relaxed (s64 i, atomic64_t *v)h]h)}(h3s64 atomic64_fetch_or_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_or_relaxedsbc.atomic64_fetch_or_relaxedasbuh1hhj<hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<hhhj<hM ubh)}(hatomic64_fetch_or_relaxedh]j)}(hj<h]hatomic64_fetch_or_relaxed}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj<hhhj<hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<modnameN classnameNjwjz)}j}]j<c.atomic64_fetch_or_relaxedasbuh1hhj<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj)}(hjh]hi}(hj =hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj&=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(=modnameN classnameNjwjz)}j}]j<c.atomic64_fetch_or_relaxedasbuh1hhj=ubjQ)}(h h]h }(hjD=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hjh]h*}(hjR=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]hv}(hj_=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubeh}(h]h ]h"]h$]h&]jjuh1j3hj<hhhj<hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj<hhhj<hM ubah}(h]j}<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj<hM hj<hhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=hhubah}(h]h ]h"]h$]h&]uh1j3hj<hhhj<hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj=jHj=jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_fetch_or_relaxed() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj=h]hs64 i}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hj=ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj>h]h atomic64_t *v}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj>hM hj>ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj>hM hj=ubeh}(h]h ]h"]h$]h&]uh1jhj=ubjM)}(h**Description**h]j)}(hj=>h]h Description}(hj?>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;>ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjS>hhhNhNubj)}(h**v**h]hv}(hj[>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS>ubh to (}(hjS>hhhNhNubj)}(h**v**h]hv}(hjm>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS>ubh | }(hjS>hhhNhNubj)}(h**i**h]hi}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS>ubh) with relaxed ordering.}(hjS>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubjM)}(hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_relaxed() there.h]hIUnsafe to use in noinstr code; use raw_atomic64_fetch_or_relaxed() there.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubjM)}(h **Return**h]j)}(hj>h]hReturn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubjM)}(hThe original value of **v**.h](hThe original value of }(hj>hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic64_xor (C function)c.atomic64_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h(void atomic64_xor (s64 i, atomic64_t *v)h]h)}(h'void atomic64_xor(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>hhhj?hM ubh)}(h atomic64_xorh]j)}(h atomic64_xorh]h atomic64_xor}(hj!?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj>hhhj?hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj@?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjB?modnameN classnameNjwjz)}j}]j)}jsj#?sbc.atomic64_xorasbuh1hhj9?ubjQ)}(h h]h }(hj`?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9?ubj)}(hjh]hi}(hjn?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5?ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj?modnameN classnameNjwjz)}j}]j\?c.atomic64_xorasbuh1hhj?ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hjh]hv}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5?ubeh}(h]h ]h"]h$]h&]jjuh1j3hj>hhhj?hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>hhhj?hM ubah}(h]j>ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj?hM hj>hhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj?hhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhj?hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj@jHj@jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``s64 i`` s64 value ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic64_xor() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hj @h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj @ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM# hj@ubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hj,@h]hs64 i}(hj.@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj&@ubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjE@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjA@hM hjB@ubah}(h]h ]h"]h$]h&]uh1jhj&@ubeh}(h]h ]h"]h$]h&]uh1jhjA@hM hj#@ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hje@h]h atomic64_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:96: ./include/linux/atomic/atomic-instrumented.hhM! hj_@ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj~@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjz@hM! hj{@ubah}(h]h ]h"]h$]h&]uh1jhj_@ubeh}(h]h ]h"]h$]h&]uh1jhjz@hM! hj#@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubjM)}(h**Description**h]j)}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM# hj@ubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hj@hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh to (}(hj@hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh ^ }(hj@hhhNhNubj)}(h**i**h]hi}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh) with relaxed ordering.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM" hj@ubjM)}(hUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Uubj)}(hjh]hv}(hjKUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Uubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjfUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjhUmodnameN classnameNjwjz)}j}]jTc.atomic64_cmpxchgasbuh1hhj_UubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_Uubj)}(holdh]hold}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_Uubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubj:)}(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_cmpxchgasbuh1hhjUubjQ)}(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&]noemphjjuh1j9hjUubeh}(h]h ]h"]h$]h&]jjuh1j3hjThhhjThM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjThhhjThM ubah}(h]jTah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjThM hjThhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjVhhubah}(h]h ]h"]h$]h&]uh1j3hjThhhjThM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVjHjVjIjJjKuh1hhhhjhNhNubj)}(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&Vh]h Parameters}(hj(VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Vubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj Vubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjEVh]h atomic64_t *v}(hjGVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj?Vubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj^VhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZVhM hj[Vubah}(h]h ]h"]h$]h&]uh1jhj?Vubeh}(h]h ]h"]h$]h&]uh1jhjZVhM hjs64 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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsatomic64_cmpxchg_acquiresbc.atomic64_cmpxchg_acquireasbuh1hhjWhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWhhhjWhM ubh)}(hatomic64_cmpxchg_acquireh]j)}(hjWh]hatomic64_cmpxchg_acquire}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Xubah}(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 reftargetj0XmodnameN classnameNjwjz)}j}]jWc.atomic64_cmpxchg_acquireasbuh1hhj'XubjQ)}(h h]h }(hjLXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'Xubj)}(hjh]h*}(hjZXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Xubj)}(hjh]hv}(hjgXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'Xubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#Xubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]jWc.atomic64_cmpxchg_acquireasbuh1hhj{XubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{Xubj)}(holdh]hold}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Xubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#Xubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]jWc.atomic64_cmpxchg_acquireasbuh1hhjXubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(hnewh]hnew}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#Xubeh}(h]h ]h"]h$]h&]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 acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYhhubah}(h]h ]h"]h$]h&]uh1j3hjWhhhjWhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj8YjHj8YjIjJjKuh1hhhhjhNhNubj)}(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)}(hjBYh]h Parameters}(hjDYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Yubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Zubh), atomically updates }(hj$ZhhhNhNubj)}(h**v**h]hv}(hjPZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Zubh to }(hj$ZhhhNhNubj)}(h**new**h]hnew}(hjbZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Zubh# with acquire ordering. Otherwise, }(hj$ZhhhNhNubj)}(h**v**h]hv}(hjtZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Zubh2 is not modified and relaxed ordering is provided.}(hj$ZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjs64 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}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j)}jsatomic64_cmpxchg_releasesbc.atomic64_cmpxchg_releaseasbuh1hhjZhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZhhhj[hM ubh)}(hatomic64_cmpxchg_releaseh]j)}(hj[h]hatomic64_cmpxchg_release}(hj,[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj([ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjZhhhj[hM ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjJ[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG[ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjL[modnameN classnameNjwjz)}j}]j[c.atomic64_cmpxchg_releaseasbuh1hhjC[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)}(hjh]hv}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj?[ubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj[modnameN classnameNjwjz)}j}]j[c.atomic64_cmpxchg_releaseasbuh1hhj[ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(holdh]hold}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj?[ubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj[modnameN classnameNjwjz)}j}]j[c.atomic64_cmpxchg_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&]jjuh1j3hjZhhhj[hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjZhhhj[hM ubah}(h]jZah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj[hM hjZhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj<\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj9\hhubah}(h]h ]h"]h$]h&]uh1j3hjZhhhj[hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjT\jHjT\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 release ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_cmpxchg_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj^\h]h Parameters}(hj`\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\\ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjX\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:96: ./include/linux/atomic/atomic-instrumented.hhM hjw\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&]uh1jhjw\ubeh}(h]h ]h"]h$]h&]uh1jhj\hM hjt\ubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hj\h]hs64 old}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hM hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hM hjt\ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hj\h]hs64 new}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj\ubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hM hj]ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj]hM hjt\ubeh}(h]h ]h"]h$]h&]uh1jhjX\ubjM)}(h**Description**h]j)}(hj*]h]h Description}(hj,]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(]ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjX\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}(hjH]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@]ubh == }(hj@]hhhNhNubj)}(h**old**h]hold}(hjZ]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@]ubh), atomically updates }(hj@]hhhNhNubj)}(h**v**h]hv}(hjl]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@]ubh to }(hj@]hhhNhNubj)}(h**new**h]hnew}(hj~]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@]ubh# with release ordering. Otherwise, }(hj@]hhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@]ubh2 is not modified and relaxed ordering is provided.}(hj@]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjX\ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic64_cmpxchg_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic64_cmpxchg_release() there.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjX\ubjM)}(h **Return**h]j)}(hj]h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjX\ubjM)}(hThe original value of **v**.h](hThe original value of }(hj]hhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjX\ubeh}(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}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj^modnameN classnameNjwjz)}j}]j)}jsatomic64_cmpxchg_relaxedsbc.atomic64_cmpxchg_relaxedasbuh1hhj ^hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj6^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ^hhhj5^hM ubh)}(hatomic64_cmpxchg_relaxedh]j)}(hj2^h]hatomic64_cmpxchg_relaxed}(hjH^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj ^hhhj5^hM ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjf^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjh^modnameN classnameNjwjz)}j}]j0^c.atomic64_cmpxchg_relaxedasbuh1hhj_^ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_^ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_^ubj)}(hjh]hv}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[^ubj:)}(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}]j0^c.atomic64_cmpxchg_relaxedasbuh1hhj^ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(holdh]hold}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[^ubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj_modnameN classnameNjwjz)}j}]j0^c.atomic64_cmpxchg_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 ^hhhj5^hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj ^hhhj5^hM ubah}(h]j^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj5^hM hj^hhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjX_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjU_hhubah}(h]h ]h"]h$]h&]uh1j3hj^hhhj5^hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjp_jHjp_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 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)}(hjz_h]h Parameters}(hj|_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx_ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjt_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:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM hj_ubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hj_h]hs64 old}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj_ubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM hj_ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hj `h]hs64 new}(hj `hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj `ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj`ubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hj$`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj `hM hj!`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj `hM hj_ubeh}(h]h ]h"]h$]h&]uh1jhjt_ubjM)}(h**Description**h]j)}(hjF`h]h Description}(hjH`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD`ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjt_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}(hjd`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\`ubh == }(hj\`hhhNhNubj)}(h**old**h]hold}(hjv`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\`ubh), atomically updates }(hj\`hhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\`ubh to }(hj\`hhhNhNubj)}(h**new**h]hnew}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\`ubh# with relaxed ordering. Otherwise, }(hj\`hhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\`ubh2 is not modified and relaxed ordering is provided.}(hj\`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjt_ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic64_cmpxchg_relaxed() there.h]hHUnsafe to use in noinstr code; use raw_atomic64_cmpxchg_relaxed() there.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjt_ubjM)}(h **Return**h]j)}(hj`h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjt_ubjM)}(hThe original value of **v**.h](hThe original value of }(hj`hhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjt_ubeh}(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)}(hihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:iubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhME hj6iubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjUihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQihME hjRiubah}(h]h ]h"]h$]h&]uh1jhj6iubeh}(h]h ]h"]h$]h&]uh1jhjQihME hj3iubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]jS)}(hjuih]hs64 *old}(hjwihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsiubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMF hjoiubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihMF hjiubah}(h]h ]h"]h$]h&]uh1jhjoiubeh}(h]h ]h"]h$]h&]uh1jhjihMF hj3iubj)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMG hjiubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihMG hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMG hj3iubeh}(h]h ]h"]h$]h&]uh1jhjiubjM)}(h**Description**h]j)}(hjih]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMI hjiubjM)}(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 (}(hjihhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh == }(hjihhhNhNubj)}(h**old**h]hold}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh), atomically updates }(hjihhhNhNubj)}(h**v**h]hv}(hj+jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh to }(hjihhhNhNubj)}(h**new**h]hnew}(hj=jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh# with release ordering. Otherwise, }(hjihhhNhNubj)}(h**v**h]hv}(hjOjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh is not modified, }(hjihhhNhNubj)}(h**old**h]hold}(hjajhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh$ is updated to the current value of }(hjihhhNhNubj)}(h**v**h]hv}(hjsjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh#, and relaxed ordering is provided.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMH hjiubjM)}(hLUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_release() there.h]hLUnsafe to use in noinstr code; use raw_atomic64_try_cmpxchg_release() there.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhML hjiubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMN hjiubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh if the exchange occurred, }(hjjhhhNhNubj)}(h **false**h]hfalse}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh otherwise.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMO hjiubeh}(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}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[ ubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjhhhjkhM[ ubh)}(hatomic64_try_cmpxchg_relaxedh]j)}(hatomic64_try_cmpxchg_relaxedh]hatomic64_try_cmpxchg_relaxed}(hj"khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(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}(hjAkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>kubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCkmodnameN classnameNjwjz)}j}]j)}jsj$ksbc.atomic64_try_cmpxchg_relaxedasbuh1hhj:kubjQ)}(h h]h }(hjakhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:kubj)}(hjh]h*}(hjokhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:kubj)}(hjh]hv}(hj|khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:kubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6kubj:)}(hs64 *oldh](h)}(hhh]j)}(hs64h]hs64}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]j]kc.atomic64_try_cmpxchg_relaxedasbuh1hhjkubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkubj)}(hjh]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(holdh]hold}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6kubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]j]kc.atomic64_try_cmpxchg_relaxedasbuh1hhjkubjQ)}(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&]noemphjjuh1j9hj6kubeh}(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}(hjBlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[ hj?lhhubah}(h]h ]h"]h$]h&]uh1j3hjjhhhjkhM[ ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjZljHjZljIjJjKuh1hhhhjhNhNubj)}(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)}(hjdlh]h Parameters}(hjflhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjblubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_ hj^lubj)}(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&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\ hj}lubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhM\ hjlubah}(h]h ]h"]h$]h&]uh1jhj}lubeh}(h]h ]h"]h$]h&]uh1jhjlhM\ hjzlubj)}(h2``s64 *old`` pointer to 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:96: ./include/linux/atomic/atomic-instrumented.hhM] hjlubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhM] hjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhM] hjzlubj)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM^ hjlubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj mhM^ hj mubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhj mhM^ hjzlubeh}(h]h ]h"]h$]h&]uh1jhj^lubjM)}(h**Description**h]j)}(hj0mh]h Description}(hj2mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.mubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM` hj^lubjM)}(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 (}(hjFmhhhNhNubj)}(h**v**h]hv}(hjNmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFmubh == }(hjFmhhhNhNubj)}(h**old**h]hold}(hj`mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFmubh), atomically updates }(hjFmhhhNhNubj)}(h**v**h]hv}(hjrmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFmubh to }(hjFmhhhNhNubj)}(h**new**h]hnew}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFmubh# with relaxed ordering. Otherwise, }(hjFmhhhNhNubj)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFmubh is not modified, }(hjFmhhhNhNubj)}(h**old**h]hold}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFmubh$ is updated to the current value of }(hjFmhhhNhNubj)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFmubh#, and relaxed ordering is provided.}(hjFmhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_ hj^lubjM)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMc hj^lubjM)}(h **Return**h]j)}(hjmh]hReturn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMe hj^lubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh if the exchange occurred, }(hjmhhhNhNubj)}(h **false**h]hfalse}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh otherwise.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMf hj^lubeh}(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}(hjInhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEnhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMq ubjQ)}(h h]h }(hjWnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEnhhhjVnhMq ubh)}(hatomic64_sub_and_testh]j)}(hatomic64_sub_and_testh]hatomic64_sub_and_test}(hjinhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjenubah}(h]h ](jjeh"]h$]h&]jjuh1hhjEnhhhjVnhMq ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjnmodnameN classnameNjwjz)}j}]j)}jsjknsbc.atomic64_sub_and_testasbuh1hhjnubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hjh]hi}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj}nubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjnmodnameN classnameNjwjz)}j}]jnc.atomic64_sub_and_testasbuh1hhjnubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjh]hv}(hj ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj}nubeh}(h]h ]h"]h$]h&]jjuh1j3hjEnhhhjVnhMq ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjAnhhhjVnhMq ubah}(h]jnhhubj4)}(hhh]jM)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hj3ohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMq hj0ohhubah}(h]h ]h"]h$]h&]uh1j3hj>nhhhjVnhMq ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjKojHjKojIjJjKuh1hhhhjhNhNubj)}(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)}(hjUoh]h Parameters}(hjWohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSoubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMu hjOoubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjtoh]hs64 i}(hjvohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjroubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMr hjnoubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMr hjoubah}(h]h ]h"]h$]h&]uh1jhjnoubeh}(h]h ]h"]h$]h&]uh1jhjohMr hjkoubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjoh]h atomic64_t *v}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMs hjoubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMs hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMs hjkoubeh}(h]h ]h"]h$]h&]uh1jhjOoubjM)}(h**Description**h]j)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMu hjOoubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjohhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh to (}(hjohhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh - }(hjohhhNhNubj)}(h**i**h]hi}(hj*phhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh) with full ordering.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMt hjOoubjM)}(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.}(hjCphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMv hjOoubjM)}(h **Return**h]j)}(hjTph]hReturn}(hjVphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRpubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMx hjOoubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjnphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjpubh if the resulting value of }(hjjphhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjpubh is zero, }(hjjphhhNhNubj)}(h **false**h]hfalse}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjpubh otherwise.}(hjjphhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy hjOoubeh}(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}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjphhhjphM ubh)}(hatomic64_dec_and_testh]j)}(hatomic64_dec_and_testh]hatomic64_dec_and_test}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1hhjphhhjphM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj qmodnameN classnameNjwjz)}j}]j)}jsjpsbc.atomic64_dec_and_testasbuh1hhjqubjQ)}(h h]h }(hj*qhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hjh]h*}(hj8qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hjh]hv}(hjEqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpubah}(h]h ]h"]h$]h&]jjuh1j3hjphhhjphM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjphhhjphM ubah}(h]jpah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjphM hjphhubj4)}(hhh]jM)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjnqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjkqhhubah}(h]h ]h"]h$]h&]uh1j3hjphhhjphM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjqjHjqjIjJjKuh1hhhhjhNhNubj)}(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)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjqh]h atomic64_t *v}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjqhM hjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhM hjqubah}(h]h ]h"]h$]h&]uh1jhjqubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjrhhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh to (}(hjrhhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh - 1) with full ordering.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubjM)}(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.}(hj3rhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubjM)}(h **Return**h]j)}(hjDrh]hReturn}(hjFrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBrubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hj^rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZrubh if the resulting value of }(hjZrhhhNhNubj)}(h**v**h]hv}(hjprhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZrubh is zero, }(hjZrhhhNhNubj)}(h **false**h]hfalse}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZrubh otherwise.}(hjZrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjqubeh}(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}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrhhhjrhM ubh)}(hatomic64_inc_and_testh]j)}(hatomic64_inc_and_testh]hatomic64_inc_and_test}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1hhjrhhhjrhM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjrmodnameN classnameNjwjz)}j}]j)}jsjrsbc.atomic64_inc_and_testasbuh1hhjrubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hjh]h*}(hj(shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hjh]hv}(hj5shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrubah}(h]h ]h"]h$]h&]jjuh1j3hjrhhhjrhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjrhhhjrhM ubah}(h]jrah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhM hjrhhubj4)}(hhh]jM)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hj^shhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj[shhubah}(h]h ]h"]h$]h&]uh1j3hjrhhhjrhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjvsjHjvsjIjJjKuh1hhhhjhNhNubj)}(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)}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~subah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzsubj)}(hhh]j)}(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&]uh1jRhjsubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjsubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjshM hjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshM hjsubah}(h]h ]h"]h$]h&]uh1jhjzsubjM)}(h**Description**h]j)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzsubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjshhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh to (}(hjshhhNhNubj)}(h**v**h]hv}(hj thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh + 1) with full ordering.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzsubjM)}(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#thhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzsubjM)}(h **Return**h]j)}(hj4th]hReturn}(hj6thhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2tubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzsubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjNthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJtubh if the resulting value of }(hjJthhhNhNubj)}(h**v**h]hv}(hj`thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJtubh is zero, }(hjJthhhNhNubj)}(h **false**h]hfalse}(hjrthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJtubh otherwise.}(hjJthhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzsubeh}(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}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjthhhjthM ubh)}(hatomic64_add_negativeh]j)}(hatomic64_add_negativeh]hatomic64_add_negative}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1hhjthhhjthM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjtmodnameN classnameNjwjz)}j}]j)}jsjtsbc.atomic64_add_negativeasbuh1hhjtubjQ)}(h h]h }(hj uhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]hi}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj3uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0uubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5umodnameN classnameNjwjz)}j}]juc.atomic64_add_negativeasbuh1hhj,uubjQ)}(h h]h }(hjQuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,uubj)}(hjh]h*}(hj_uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,uubj)}(hjh]hv}(hjluhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,uubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubeh}(h]h ]h"]h$]h&]jjuh1j3hjthhhjthM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjthhhjthM ubah}(h]jtah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjthM hjthhubj4)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjuhhubah}(h]h ]h"]h$]h&]uh1j3hjthhhjthM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjujHjujIjJjKuh1hhhhjhNhNubj)}(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)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjuubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjuh]hs64 i}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjuubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjuhM hjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhM hjuubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjvh]h atomic64_t *v}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj vubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj vubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj(vhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$vhM hj%vubah}(h]h ]h"]h$]h&]uh1jhj vubeh}(h]h ]h"]h$]h&]uh1jhj$vhM hjuubeh}(h]h ]h"]h$]h&]uh1jhjuubjM)}(h**Description**h]j)}(hjJvh]h Description}(hjLvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHvubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjuubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj`vhhhNhNubj)}(h**v**h]hv}(hjhvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`vubh to (}(hj`vhhhNhNubj)}(h**v**h]hv}(hjzvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`vubh + }(hj`vhhhNhNubj)}(h**i**h]hi}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`vubh) with full ordering.}(hj`vhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjuubjM)}(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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjuubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hjuubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh if the resulting value of }(hjvhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh is negative, }(hjvhhhNhNubj)}(h **false**h]hfalse}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh otherwise.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic64_add_negative_acquire (C function)c.atomic64_add_negative_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9bool atomic64_add_negative_acquire (s64 i, atomic64_t *v)h]h)}(h8bool atomic64_add_negative_acquire(s64 i, atomic64_t *v)h](j)}(hjh]hbool}(hj-whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)whhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj;whhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)whhhj:whM ubh)}(hatomic64_add_negative_acquireh]j)}(hatomic64_add_negative_acquireh]hatomic64_add_negative_acquire}(hjMwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIwubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)whhhj:whM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjlwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjnwmodnameN classnameNjwjz)}j}]j)}jsjOwsbc.atomic64_add_negative_acquireasbuh1hhjewubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjewubj)}(hjh]hi}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjewubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjawubj:)}(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 reftargetjwmodnameN classnameNjwjz)}j}]jwc.atomic64_add_negative_acquireasbuh1hhjwubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]hv}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjawubeh}(h]h ]h"]h$]h&]jjuh1j3hj)whhhj:whM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj%whhhj:whM ubah}(h]j wah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj:whM hj"whhubj4)}(hhh]jM)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxhhubah}(h]h ]h"]h$]h&]uh1j3hj"whhhj:whM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/xjHj/xjIjJjKuh1hhhhjhNhNubj)}(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)}(hj9xh]h Parameters}(hj;xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7xubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3xubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjXxh]hs64 i}(hjZxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVxubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjRxubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjqxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmxhM hjnxubah}(h]h ]h"]h$]h&]uh1jhjRxubeh}(h]h ]h"]h$]h&]uh1jhjmxhM hjOxubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjxh]h atomic64_t *v}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhM hjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhM hjOxubeh}(h]h ]h"]h$]h&]uh1jhj3xubjM)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3xubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjxhhhNhNubj)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh to (}(hjxhhhNhNubj)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh + }(hjxhhhNhNubj)}(h**i**h]hi}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh) with acquire ordering.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3xubjM)}(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'yhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3xubjM)}(h **Return**h]j)}(hj8yh]hReturn}(hj:yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6yubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3xubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjRyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNyubh if the resulting value of }(hjNyhhhNhNubj)}(h**v**h]hv}(hjdyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNyubh is negative, }(hjNyhhhNhNubj)}(h **false**h]hfalse}(hjvyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNyubh otherwise.}(hjNyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj3xubeh}(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}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyhhhjyhM ubh)}(hatomic64_add_negative_releaseh]j)}(hatomic64_add_negative_releaseh]hatomic64_add_negative_release}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1hhjyhhhjyhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjymodnameN classnameNjwjz)}j}]j)}jsjysbc.atomic64_add_negative_releaseasbuh1hhjyubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(hjh]hi}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj7zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4zubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9zmodnameN classnameNjwjz)}j}]j zc.atomic64_add_negative_releaseasbuh1hhj0zubjQ)}(h h]h }(hjUzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0zubj)}(hjh]h*}(hjczhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0zubj)}(hjh]hv}(hjpzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0zubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubeh}(h]h ]h"]h$]h&]jjuh1j3hjyhhhjyhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjyhhhjyhM ubah}(h]jyah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjyhM hjyhhubj4)}(hhh]jM)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzhhubah}(h]h ]h"]h$]h&]uh1j3hjyhhhjyhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjzjHjzjIjJjKuh1hhhhjhNhNubj)}(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)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjzh]hs64 i}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhM hjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhM hjzubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj{h]h atomic64_t *v}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj {ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj,{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj({hM hj){ubah}(h]h ]h"]h$]h&]uh1jhj {ubeh}(h]h ]h"]h$]h&]uh1jhj({hM hjzubeh}(h]h ]h"]h$]h&]uh1jhjzubjM)}(h**Description**h]j)}(hjN{h]h Description}(hjP{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL{ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjd{hhhNhNubj)}(h**v**h]hv}(hjl{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd{ubh to (}(hjd{hhhNhNubj)}(h**v**h]hv}(hj~{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd{ubh + }(hjd{hhhNhNubj)}(h**i**h]hi}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd{ubh) with release ordering.}(hjd{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubjM)}(hMUnsafe to use in noinstr code; use raw_atomic64_add_negative_release() there.h]hMUnsafe to use in noinstr code; use raw_atomic64_add_negative_release() there.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubjM)}(h **Return**h]j)}(hj{h]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh if the resulting value of }(hj{hhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh is negative, }(hj{hhhNhNubj)}(h **false**h]hfalse}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh otherwise.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjzubeh}(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}(hj1|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-|hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj?|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-|hhhj>|hM ubh)}(hatomic64_add_negative_relaxedh]j)}(hatomic64_add_negative_relaxedh]hatomic64_add_negative_relaxed}(hjQ|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM|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}(hjp|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjr|modnameN classnameNjwjz)}j}]j)}jsjS|sbc.atomic64_add_negative_relaxedasbuh1hhji|ubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhji|ubj)}(hjh]hi}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hje|ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]j|c.atomic64_add_negative_relaxedasbuh1hhj|ubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hjh]hv}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hje|ubeh}(h]h ]h"]h$]h&]jjuh1j3hj-|hhhj>|hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj)|hhhj>|hM ubah}(h]j$|ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj>|hM hj&|hhubj4)}(hhh]jM)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}hhubah}(h]h ]h"]h$]h&]uh1j3hj&|hhhj>|hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3}jHj3}jIjJjKuh1hhhhjhNhNubj)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hj7}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&]uh1jRhjZ}ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjV}ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hju}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjq}hM hjr}ubah}(h]h ]h"]h$]h&]uh1jhjV}ubeh}(h]h ]h"]h$]h&]uh1jhjq}hM hjS}ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj}h]h atomic64_t *v}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj}ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hM hj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hM hjS}ubeh}(h]h ]h"]h$]h&]uh1jhj7}ubjM)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj7}ubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj}hhhNhNubj)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh to (}(hj}hhhNhNubj)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh + }(hj}hhhNhNubj)}(h**i**h]hi}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh) with relaxed ordering.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj7}ubjM)}(hMUnsafe to use in noinstr code; use raw_atomic64_add_negative_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic64_add_negative_relaxed() there.}(hj+~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj7}ubjM)}(h **Return**h]j)}(hj<~h]hReturn}(hj>~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:~ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj7}ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjV~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR~ubh if the resulting value of }(hjR~hhhNhNubj)}(h**v**h]hv}(hjh~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR~ubh is negative, }(hjR~hhhNhNubj)}(h **false**h]hfalse}(hjz~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR~ubh otherwise.}(hjR~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj7}ubeh}(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}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj~modnameN classnameNjwjz)}j}]j)}jsatomic64_fetch_add_unlesssbc.atomic64_fetch_add_unlessasbuh1hhj~hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhj~hM ubh)}(hatomic64_fetch_add_unlessh]j)}(hj~h]hatomic64_fetch_add_unless}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~hhhj~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 reftargetj modnameN classnameNjwjz)}j}]j~c.atomic64_fetch_add_unlessasbuh1hhjubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubj:)}(hs64 ah](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.atomic64_fetch_add_unlessasbuh1hhjUubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hjնh]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubj:)}(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_fetch_add_unlessasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hj\h]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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj~hhhj~hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``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:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hj3ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhM hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhM hj0ubj)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]jS)}(hjrh]hs64 a}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjlubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhM hj0ubj)}(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:96: ./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 hj0ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**a**h]ha}(hjLhhhNhNubah}(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:96: ./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.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic64_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&]uh1jhjہhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjہhhhjhM ubh)}(hatomic64_add_unlessh]j)}(hatomic64_add_unlessh]hatomic64_add_unless}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjہhhhjhM 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 reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic64_add_unlessasbuh1hhjubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 ah](h)}(hhh]j)}(hs64h]hs64}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjvmodnameN classnameNjwjz)}j}]j:c.atomic64_add_unlessasbuh1hhjmubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmubj)}(hjնh]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(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 }(hjقhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hj\h]hu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjہhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjׁhhhjhM ubah}(h]jҁah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM 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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj hhubah}(h]h ]h"]h$]h&]uh1j3hjԁhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj(jHj(jIjJjKuh1hhhhjhNhNubj)}(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)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubj)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hjKubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjfhM hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhM hjHubj)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]jS)}(hjh]hs64 a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjHubj)}(h$``s64 u`` s64 value to compare with h](j)}(h ``s64 u``h]jS)}(hjÃh]hs64 u}(hjŃhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hj܃hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj؃hM hjكubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj؃hM hjHubeh}(h]h ]h"]h$]h&]uh1jhj,ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh != }(hjhhhNhNubj)}(h**u**h]hu}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**a**h]ha}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh!) with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubjM)}(hCUnsafe to use in noinstr code; use raw_atomic64_add_unless() there.h]hCUnsafe to use in noinstr code; use raw_atomic64_add_unless() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic64_inc_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:96: ./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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}jsj9sbc.atomic64_inc_not_zeroasbuh1hhjOubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hjh]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 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:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj$hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj҅jHj҅jIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhjڅubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjօubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjօubjM)}(h**Description**h]j)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM 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 (}(hjLhhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh != 0), atomically updates }(hjLhhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh to (}(hjLhhhNhNubj)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh% + 1) with full ordering. Otherwise, }(hjLhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh2 is not modified and relaxed ordering is provided.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjօubjM)}(hEUnsafe to use in noinstr code; use raw_atomic64_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:96: ./include/linux/atomic/atomic-instrumented.hhM! hjօubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM# hjօubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjΆhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʆubh if }(hjʆhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʆubh was updated, }(hjʆhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʆubh otherwise.}(hjʆhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$ hjօubeh}(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}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/ ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'hhhj8hM/ ubh)}(hatomic64_inc_unless_negativeh]j)}(hatomic64_inc_unless_negativeh]hatomic64_inc_unless_negative}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](jjeh"]h$]h&]jjuh1hhj'hhhj8hM/ ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjlmodnameN classnameNjwjz)}j}]j)}jsjMsbc.atomic64_inc_unless_negativeasbuh1hhjcubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj_ubah}(h]h ]h"]h$]h&]jjuh1j3hj'hhhj8hM/ ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#hhhj8hM/ ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj8hM/ hj hhubj4)}(hhh]jM)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hj·hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/ hjˇhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj8hM/ 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_inc_unless_negative() there. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3 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:96: ./include/linux/atomic/atomic-instrumented.hhM0 hj ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$hM0 hj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hM0 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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2 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}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh >= 0), atomically updates }(hj`hhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1 hjubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM4 hjubjM)}(h **Return**h]j)}(hjȈh]hReturn}(hjʈhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƈubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6 hjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjވubh if }(hjވhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjވubh was updated, }(hjވhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjވubh otherwise.}(hjވhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7 hjubeh}(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:96: ./include/linux/atomic/atomic-instrumented.hhMB ubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;hhhjLhMB ubh)}(hatomic64_dec_unless_positiveh]j)}(hatomic64_dec_unless_positiveh]hatomic64_dec_unless_positive}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj;hhhjLhMB 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 reftargetjmodnameN classnameNjwjz)}j}]j)}jsjasbc.atomic64_dec_unless_positiveasbuh1hhjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubah}(h]h ]h"]h$]h&]jjuh1j3hj;hhhjLhMB ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj7hhhjLhMB ubah}(h]j2ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjLhMB hj4hhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMB hj߉hhubah}(h]h ]h"]h$]h&]uh1j3hj4hhhjLhMB 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:96: ./include/linux/atomic/atomic-instrumented.hhMF hjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj#h]h atomic64_t *v}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMC hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hMC hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMC hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj^h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./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 (}(hjthhhNhNubj)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh <= 0), 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% - 1) 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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./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.}(hjˊhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMG hjubjM)}(h **Return**h]j)}(hj܊h]hReturn}(hjފhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڊubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMI 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:96: ./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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}jsatomic64_dec_if_positivesbc.atomic64_dec_if_positiveasbuh1hhjOhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU ubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOhhhjwhMU ubh)}(hatomic64_dec_if_positiveh]j)}(hjth]hatomic64_dec_if_positive}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOhhhjwhMU 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}]jrc.atomic64_dec_if_positiveasbuh1hhjubjQ)}(h h]h }(hjƋhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjԋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjOhhhjwhMU ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhjwhMU ubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhMU hjHhhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMU hjhhubah}(h]h ]h"]h$]h&]uh1j3hjHhhhjwhMU ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj"jHj"jIjJjKuh1hhhhjhNhNubj)}(hXx**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** If (**v** > 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic64_dec_if_positive() there. **Return** The old value of (**v** - 1), regardless of whether **v** was updated.h](jM)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMY hj&ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjKh]h atomic64_t *v}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMV hjEubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`hMV hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMV hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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}(hjȌhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% - 1) with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjڌhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./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:96: ./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}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1), regardless of whether }(hjhhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMh ubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjihhhj{hMh ubh)}(hatomic_long_readh]j)}(hatomic_long_readh]hatomic_long_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjihhhj{hMh ubj4)}(h(const atomic_long_t *v)h]j:)}(hconst atomic_long_t *vh](j?)}(hjP*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}(hjȍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjōubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjʍmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_readasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjihhhj{hMh ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjehhhj{hMh ubah}(h]j`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj{hMh hjbhhubj4)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMh hj)hhubah}(h]h ]h"]h$]h&]uh1j3hjbhhhj{hMh ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjDjHjDjIjJjKuh1hhhhjhNhNubj)}(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)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMl hjHubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]jS)}(hjmh]hconst atomic_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:96: ./include/linux/atomic/atomic-instrumented.hhMi hjgubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMi hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMi hjdubah}(h]h ]h"]h$]h&]uh1jhjHubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMk hjHubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hjhhhNhNubj)}(h**v**h]hv}(hjƎhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMj hjHubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMl hjHubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMn hjHubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMo hjHubeh}(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}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMy ubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjChhhjUhMy ubh)}(hatomic_long_read_acquireh]j)}(hatomic_long_read_acquireh]hatomic_long_read_acquire}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhjChhhjUhMy ubj4)}(h(const atomic_long_t *v)h]j:)}(hconst atomic_long_t *vh](j?)}(hjP*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)}jsjjsbc.atomic_long_read_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjЏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjݏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubah}(h]h ]h"]h$]h&]jjuh1j3hjChhhjUhMy ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj?hhhjUhMy ubah}(h]j:ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjUhMy 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:96: ./include/linux/atomic/atomic-instrumented.hhMy hjhhubah}(h]h ]h"]h$]h&]uh1j3hj<hhhjUhMy 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)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hj"ubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]jS)}(hjGh]hconst atomic_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:96: ./include/linux/atomic/atomic-instrumented.hhMz hjAubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hMz hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMz 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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hj"ubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{ hj"ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_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:96: ./include/linux/atomic/atomic-instrumented.hhM} hj"ubjM)}(h **Return**h]j)}(hjʐh]hReturn}(hj̐hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȐubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj"ubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_set (C function)c.atomic_long_sethNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void atomic_long_set (atomic_long_t *v, long i)h]h)}(h.void atomic_long_set(atomic_long_t *v, long i)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj/hM ubh)}(hatomic_long_seth]j)}(hatomic_long_seth]hatomic_long_set}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj/hM 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}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]j)}jsjDsbc.atomic_long_setasbuh1hhjZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubj:)}(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&]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 set with relaxed orderingh]h atomic set with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj/hM 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:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj:h]hatomic_long_t *v}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj4ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhM hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhM hj1ubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]jS)}(hjsh]hlong i}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjmubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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}(hjޒhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĒubh with relaxed ordering.}(hjĒhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](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}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIhhhj[hM ubh)}(hatomic_long_set_releaseh]j)}(hatomic_long_set_releaseh]hatomic_long_set_release}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjIhhhj[hM 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjpsbc.atomic_long_set_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjȓhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܓubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjܓubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܓubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjIhhhj[hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjEhhhj[hM ubah}(h]j@ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj[hM hjBhhubj4)}(hhh]jM)}(h atomic set with release orderingh]h atomic set with release ordering}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj"hhubah}(h]h ]h"]h$]h&]uh1j3hjBhhhj[hM 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)}(hjGh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjAubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjfh]hatomic_long_t *v}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj`ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{hM hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hM hj]ubj)}(h ``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:96: ./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 hj]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:96: ./include/linux/atomic/atomic-instrumented.hhM hjAubjM)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjAubjM)}(hGUnsafe to use in noinstr code; use raw_atomic_long_set_release() there.h]hGUnsafe to use in noinstr code; use raw_atomic_long_set_release() there.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjAubjM)}(h **Return**h]j)}(hj4h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjAubjM)}(hNothing.h]hNothing.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](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}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuhhhjhM ubh)}(hatomic_long_addh]j)}(hatomic_long_addh]hatomic_long_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjuhhhjhM 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_addasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjuhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjqhhhjhM ubah}(h]jlah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjnhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjNhhubah}(h]h ]h"]h$]h&]uh1j3hjnhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjijHjijIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_add() 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:96: ./include/linux/atomic/atomic-instrumented.hhM hjmubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj˖h]hatomic_long_t *v}(hj͖hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjɖubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM 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&]uh1jhjmubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjmubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjmubjM)}(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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjmubjM)}(h **Return**h]j)}(hjrh]hReturn}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjmubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjmubeh}(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:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjƗhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjŗhM ubh)}(hatomic_long_add_returnh]j)}(hatomic_long_add_returnh]hatomic_long_add_return}(hjؗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԗubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjŗhM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-modnameN classnameNjwjz)}j}]j)}jsjڗsbc.atomic_long_add_returnasbuh1hhj$ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]hv}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjŗhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjŗhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjŗhM hjhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjŗhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX"**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_return() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjИh]hlong i}(hjҘhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjΘubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjʘubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjʘubeh}(h]h ]h"]h$]h&]uh1jhjhM hjǘubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjǘubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjZhhhNhNubj)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh to (}(hjZhhhNhNubj)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh + }(hjZhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh) with full ordering.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hFUnsafe to use in noinstr code; use raw_atomic_long_add_return() there.h]hFUnsafe to use in noinstr code; use raw_atomic_long_add_return() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjƙhhhNhNubj)}(h**v**h]hv}(hjΙhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƙubh.}(hjƙhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_add_return_acquire (C function) c.atomic_long_add_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h>long atomic_long_add_return_acquire (long i, atomic_long_t *v)h]h)}(h=long atomic_long_add_return_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic_long_add_return_acquireh]j)}(hatomic_long_add_return_acquireh]hatomic_long_add_return_acquire}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(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.atomic_long_add_return_acquireasbuh1hhjtubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj<ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjߚhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjܚhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX-**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_return_acquire() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hj h]hlong i}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hM hj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hM hjubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjSubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjěhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hj֛hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_add_return_acquire() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_add_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjShhhjehM ubh)}(hatomic_long_add_return_releaseh]j)}(hatomic_long_add_return_releaseh]hatomic_long_add_return_release}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1hhjShhhjehM 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)}jsjzsb c.atomic_long_add_return_releaseasbuh1hhjĜubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjĜubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĜubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĜubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjShhhjehM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjOhhhjehM ubah}(h]jJah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjehM hjLhhubj4)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hj,hhubah}(h]h ]h"]h$]h&]uh1j3hjLhhhjehM ubeh}(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_return_release() there. **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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjKubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjgubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjgubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjKubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjKubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hjKubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hjKubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjfhhhNhNubj)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_add_return_relaxed (C function) c.atomic_long_add_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h>long atomic_long_add_return_relaxed (long i, atomic_long_t *v)h]h)}(h=long atomic_long_add_return_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic_long_add_return_relaxedh]j)}(hatomic_long_add_return_relaxedh]hatomic_long_add_return_relaxed}(hjȞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĞubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjܞubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjʞsb c.atomic_long_add_return_relaxedasbuh1hhjubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]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)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj|hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX-**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_return_relaxed() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjŸhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjٟhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj՟hM hj֟ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj՟hM hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_add_return_relaxed() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_add_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic_long_fetch_add (C function)c.atomic_long_fetch_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_add (long i, atomic_long_t *v)h]h)}(h4long atomic_long_fetch_add(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hatomic_long_fetch_addh]j)}(hatomic_long_fetch_addh]hatomic_long_fetch_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(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.atomic_long_fetch_addasbuh1hhjdubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj,ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjϡhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj̡hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX"**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_add() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%hM hj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hM 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjCubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjƢhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_add() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_add() there.}(hjߢhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_add_acquire (C function)c.atomic_long_fetch_add_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_add_acquire (long i, atomic_long_t *v)h]h)}(hubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM% hj;ubjM)}(hThe original value of **v**.h](hThe original value of }(hjVhhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM& hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_add_release (C function)c.atomic_long_fetch_add_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_add_release (long i, atomic_long_t *v)h]h)}(hlong atomic_long_sub_return_acquire (long i, atomic_long_t *v)h]h)}(h=long atomic_long_sub_return_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjŮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz ubjQ)}(h h]h }(hjԮhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjӮhMz ubh)}(hatomic_long_sub_return_acquireh]j)}(hatomic_long_sub_return_acquireh]hatomic_long_sub_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjӮhMz ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(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_sub_return_acquireasbuh1hhj2ubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hjh]hv}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjӮhMz ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjӮhMz ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjӮhMz hjhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMz hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjӮhMz ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX2**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_sub_return_acquire() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM~ hjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjޯh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjܯubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{ hjدubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM{ hjubah}(h]h ]h"]h$]h&]uh1jhjدubeh}(h]h ]h"]h$]h&]uh1jhjhM{ hjկubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM| hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hM| hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM| hjկubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM~ hjubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM} hjubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_sub_return_acquire() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_sub_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj԰hhhNhNubj)}(h**v**h]hv}(hjܰhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj԰ubh.}(hj԰hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_sub_return_release (C function) c.atomic_long_sub_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h>long atomic_long_sub_return_release (long i, atomic_long_t *v)h]h)}(h=long atomic_long_sub_return_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj#hM ubh)}(hatomic_long_sub_return_releaseh]j)}(hatomic_long_sub_return_releaseh]hatomic_long_sub_return_release}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj#hM 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 }(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_sub_return_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjıhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJubeh}(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 hj hhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj#hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX2**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_sub_return_release() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hj(ubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChM hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChM hj%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:96: ./include/linux/atomic/atomic-instrumented.hhM hjaubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(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 release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_sub_return_release() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_sub_return_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj$hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_sub_return_relaxed (C function) c.atomic_long_sub_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h>long atomic_long_sub_return_relaxed (long i, atomic_long_t *v)h]h)}(h=long atomic_long_sub_return_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjshM ubh)}(hatomic_long_sub_return_relaxedh]j)}(hatomic_long_sub_return_relaxedh]hatomic_long_sub_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhjshM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjٳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֳubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj۳modnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_long_sub_return_relaxedasbuh1hhjҳubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjҳubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҳubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҳubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjahhhjshM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]hhhjshM ubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjshM hjZhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj:hhubah}(h]h ]h"]h$]h&]uh1j3hjZhhhjshM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjUjHjUjIjJjKuh1hhhhjhNhNubj)}(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)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjxubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhM hjuubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjдhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj̴hM hjʹubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̴hM hjuubeh}(h]h ]h"]h$]h&]uh1jhjYubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubjM)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubjM)}(h **Return**h]j)}(hj^h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubjM)}(hThe updated value of **v**.h](hThe updated 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:96: ./include/linux/atomic/atomic-instrumented.hhM hjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic_long_fetch_sub (C function)c.atomic_long_fetch_subhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_sub (long i, atomic_long_t *v)h]h)}(h4long atomic_long_fetch_sub(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hjĵhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjõhM ubh)}(hatomic_long_fetch_subh]j)}(hatomic_long_fetch_subh]hatomic_long_fetch_sub}(hjֵhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҵubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjõhM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj+modnameN classnameNjwjz)}j}]j)}jsjصsbc.atomic_long_fetch_subasbuh1hhj"ubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hjh]hv}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjõhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjõhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjõhM hjhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjõhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX'**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_sub() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjζh]hlong i}(hjжhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj̶ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjȶubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjȶubeh}(h]h ]h"]h$]h&]uh1jhjhM hjŶubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjŶubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjXhhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh to (}(hjXhhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh - }(hjXhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh) with full ordering.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjķhhhNhNubj)}(h**v**h]hv}(hj̷hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjķubh.}(hjķhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_sub_acquire (C function)c.atomic_long_fetch_sub_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_sub_acquire (long i, atomic_long_t *v)h]h)}(hubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]hi}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj{modnameN classnameNjwjz)}j}]j)}jsj(sbc.atomic_long_fetch_sub_acquireasbuh1hhjrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubeh}(h]h ]h"]h$]h&]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 acquire orderingh]h%atomic subtract with acquire ordering}(hjݸhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjڸhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM 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_fetch_sub_acquire() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hM hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM hjubj)}(h.``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:96: ./include/linux/atomic/atomic-instrumented.hhM hjQubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhM hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj¹hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjԹhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_sub_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_sub_release (C function)c.atomic_long_fetch_sub_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_sub_release (long i, atomic_long_t *v)h]h)}(hAtomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj+hhhNhNubj)}(h**v**h]hv}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh to (}(hj+hhhNhNubj)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh + 1) with relaxed ordering.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h?Unsafe to use in noinstr code; use raw_atomic_long_inc() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_inc() there.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjoh]hReturn}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_long_inc_return (C function)c.atomic_long_inc_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.long atomic_long_inc_return (atomic_long_t *v)h]h)}(h-long atomic_long_inc_return(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(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*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjUhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjpjHjpjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_inc_return() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjtubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjtubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjtubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjtubjM)}(hFUnsafe to use in noinstr code; use raw_atomic_long_inc_return() there.h]hFUnsafe to use in noinstr code; use raw_atomic_long_inc_return() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjtubjM)}(h **Return**h]j)}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjtubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_inc_return_acquire (C function) c.atomic_long_inc_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6long atomic_long_inc_return_acquire (atomic_long_t *v)h]h)}(h5long atomic_long_inc_return_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_inc_return_acquireh]j)}(hatomic_long_inc_return_acquireh]hatomic_long_inc_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(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)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj}hhhjhMubah}(h]jxah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjzhhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj&hhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjAjHjAjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. 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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM"hjEubj)}(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}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjdubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubah}(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:96: ./include/linux/atomic/atomic-instrumented.hhM!hjEubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjEubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_acquire() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjEubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hjEubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjEubeh}(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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/ubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRhhhjdhM/ubh)}(hatomic_long_inc_return_releaseh]j)}(hatomic_long_inc_return_releaseh]hatomic_long_inc_return_release}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1hhjRhhhjdhM/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)}jsjysb c.atomic_long_inc_return_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjRhhhjdhM/ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjNhhhjdhM/ubah}(h]jIah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjdhM/hjKhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM/hjhhubah}(h]h ]h"]h$]h&]uh1j3hjKhhhjdhM/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:96: ./include/linux/atomic/atomic-instrumented.hhM3hjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj;h]hatomic_long_t *v}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM0hj5ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhM0hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM0hj2ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_release() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_inc_return_relaxed (C function) c.atomic_long_inc_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h6long atomic_long_inc_return_relaxed (atomic_long_t *v)h]h)}(h5long atomic_long_inc_return_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#hhhj5hMAubh)}(hatomic_long_inc_return_relaxedh]j)}(hatomic_long_inc_return_relaxedh]hatomic_long_inc_return_relaxed}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1hhj#hhhj5hMAubj4)}(h(atomic_long_t *v)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)}jsjJsb c.atomic_long_inc_return_relaxedasbuh1hhj`ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj\ubah}(h]h ]h"]h$]h&]jjuh1j3hj#hhhj5hMAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj5hMAubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj5hMAhjhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj5hMAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_inc_return_relaxed() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj h]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj!hMBhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMBhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhjubjM)}(h>Atomically updates **v** to (**v** + 1) 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 + 1) with relaxed ordering.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChjubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_relaxed() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_inc_return_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic_long_fetch_inc (C function)c.atomic_long_fetch_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(h-long atomic_long_fetch_inc (atomic_long_t *v)h]h)}(h,long atomic_long_fetch_inc(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRubjQ)}(h h]h }(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}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_incasbuh1hhj1ubjQ)}(h h]h }(hjXhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hjh]hv}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMRubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMRubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMRhjhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMRhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMRubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_inc() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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:96: ./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:96: ./include/linux/atomic/atomic-instrumented.hhMUhjubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj.hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh to (}(hj.hhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh + 1) with full ordering.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMVhjubjM)}(h **Return**h]j)}(hjrh]hReturn}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_inc_acquire (C function)c.atomic_long_fetch_inc_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_inc_acquire (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_inc_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_inc_acquireasbuh1hhjubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]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}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMdhjjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMdubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_inc_acquire() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMehjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMghjubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMfhjubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_acquire() there.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhhjubjM)}(h **Return**h]j)}(hjCh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMjhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjYhhhNhNubj)}(h**v**h]hv}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_inc_release (C function)c.atomic_long_fetch_inc_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_inc_release (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_inc_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMuubh)}(hatomic_long_fetch_inc_releaseh]j)}(hatomic_long_fetch_inc_releaseh]hatomic_long_fetch_inc_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMuubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(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)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMuubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMuubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMuhjhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMuhj;hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMuubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVjHjVjIjJjKuh1hhhhjhNhNubj)}(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)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjZubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhjyubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjvubah}(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:96: ./include/linux/atomic/atomic-instrumented.hhMxhjZubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMwhjZubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_release() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhjZubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM{hjZubjM)}(hThe original value of **v**.h](hThe original value of }(hj*hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM|hjZubeh}(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}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjghhhjyhMubh)}(hatomic_long_fetch_inc_relaxedh]j)}(hatomic_long_fetch_inc_relaxedh]hatomic_long_fetch_inc_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]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)}jsjsbc.atomic_long_fetch_inc_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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 relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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 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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj+ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(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:96: ./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:96: ./include/linux/atomic/atomic-instrumented.hhMhj+ubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+ubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_inc_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_dec (C function)c.atomic_long_dechNtauh1hhjhhhNhNubh)}(hhh](h)}(h'void atomic_long_dec (atomic_long_t *v)h]h)}(h&void atomic_long_dec(atomic_long_t *v)h](j)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8hhhjJhMubh)}(hatomic_long_dech]j)}(hatomic_long_dech]hatomic_long_dec}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhj8hhhjJhMubj4)}(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_sbc.atomic_long_decasbuh1hhjuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjqubah}(h]h ]h"]h$]h&]jjuh1j3hj8hhhjJhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj4hhhjJhMubah}(h]j/ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjJhMhj1hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj1hhhjJhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_dec() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj!h]hatomic_long_t *v}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjubah}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed 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 relaxed ordering.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h?Unsafe to use in noinstr code; use raw_atomic_long_dec() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_dec() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_long_dec_return (C function)c.atomic_long_dec_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.long atomic_long_dec_return (atomic_long_t *v)h]h)}(h-long atomic_long_dec_return(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hMubh)}(hatomic_long_dec_returnh]j)}(hatomic_long_dec_returnh]hatomic_long_dec_return}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_dec_returnasbuh1hhj4ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hjh]hv}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhjhhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_dec_return() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(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 - 1) with full ordering.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hFUnsafe to use in noinstr code; use raw_atomic_long_dec_return() there.h]hFUnsafe to use in noinstr code; use raw_atomic_long_dec_return() there.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjuh]hReturn}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_dec_return_acquire (C function) c.atomic_long_dec_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6long atomic_long_dec_return_acquire (atomic_long_t *v)h]h)}(h5long atomic_long_dec_return_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_dec_return_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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_long_dec_return_acquireasbuh1hhjubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjGhhhNhNubah}(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}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjmhhubah}(h]h ]h"]h$]h&]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_dec_return_acquire() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_acquire() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_acquire() there.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjFh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj\hhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_dec_return_release (C function) c.atomic_long_dec_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6long atomic_long_dec_return_release (atomic_long_t *v)h]h)}(h5long atomic_long_dec_return_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_dec_return_releaseh]j)}(hatomic_long_dec_return_releaseh]hatomic_long_dec_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(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*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]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}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj>hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjYjHjYjIjJjKuh1hhhhjhNhNubj)}(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)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj|ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]ubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]ubjM)}(hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_release() there.h]hNUnsafe to use in noinstr code; use raw_atomic_long_dec_return_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj-hhhNhNubj)}(h**v**h]hv}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+atomic_long_dec_return_relaxed (C function) c.atomic_long_dec_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h6long atomic_long_dec_return_relaxed (atomic_long_t *v)h]h)}(h5long atomic_long_dec_return_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjhhhj|hMubh)}(hatomic_long_dec_return_relaxedh]j)}(hatomic_long_dec_return_relaxedh]hatomic_long_dec_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjjhhhj|hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.atomic_long_dec_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]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 relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjchhhj|hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj*jHj*jIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_dec_return_relaxed() there. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjMubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"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:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;hhhjMhMubh)}(hatomic_long_fetch_dech]j)}(hatomic_long_fetch_dech]hatomic_long_fetch_dec}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj;hhhjMhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjbsbc.atomic_long_fetch_decasbuh1hhjxubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubah}(h]h ]h"]h$]h&]jjuh1j3hj;hhhjMhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj7hhhjMhMubah}(h]j2ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjMhMhj4hhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj4hhhjMhMubeh}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj$h]hatomic_long_t *v}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj_h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h;Atomically updates **v** to (**v** - 1) with full 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 - 1) with full ordering.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_dec_acquire (C function)c.atomic_long_fetch_dec_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_dec_acquire (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_dec_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhMubh)}(hatomic_long_fetch_dec_acquireh]j)}(hatomic_long_fetch_dec_acquireh]hatomic_long_fetch_dec_acquire}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjRmodnameN classnameNjwjz)}j}]j)}jsj3sbc.atomic_long_fetch_dec_acquireasbuh1hhjIubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubah}(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 decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_dec_acquire() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire 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 - 1) with acquire ordering.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_acquire() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_acquire() there.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_dec_release (C function)c.atomic_long_fetch_dec_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_dec_release (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_dec_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_fetch_dec_releaseh]j)}(hatomic_long_fetch_dec_releaseh]hatomic_long_fetch_dec_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_dec_releaseasbuh1hhjubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_dec_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_release() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_release() there.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hj[h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_dec_relaxed (C function)c.atomic_long_fetch_dec_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_dec_relaxed (atomic_long_t *v)h]h)}(h4long atomic_long_fetch_dec_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM$ubh)}(hatomic_long_fetch_dec_relaxedh]j)}(hatomic_long_fetch_dec_relaxedh]hatomic_long_fetch_dec_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM$ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_dec_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM$ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM$ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM$hjhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM$hjShhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM$ubeh}(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 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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM(hjrubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubah}(h]h ]h"]h$]h&]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:96: ./include/linux/atomic/atomic-instrumented.hhM'hjrubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&hjrubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_dec_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM(hjrubjM)}(h **Return**h]j)}(hj,h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM*hjrubjM)}(hThe original value of **v**.h](hThe original value of }(hjBhhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM+hjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_and (C function)c.atomic_long_andhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void atomic_long_and (long i, atomic_long_t *v)h]h)}(h.void atomic_long_and(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM5ubh)}(hatomic_long_andh]j)}(hatomic_long_andh]hatomic_long_and}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM5ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_andasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM5ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj{hhhjhM5ubah}(h]jvah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM5hjxhhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM5hjXhhubah}(h]h ]h"]h$]h&]uh1j3hjxhhhjhM5ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjsjHjsjIjJjKuh1hhhhjhNhNubj)}(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)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hjwubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjubeh}(h]h ]h"]h$]h&]uh1jhjwubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM9hjwubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj&hhhNhNubj)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh to (}(hj&hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh & }(hj&hhhNhNubj)}(h**i**h]hi}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh) with relaxed ordering.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8hjwubjM)}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjwubjM)}(h **Return**h]j)}(hj|h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM<hjwubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM=hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic_long_fetch_and (C function)c.atomic_long_fetch_andhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_and (long i, atomic_long_t *v)h]h)}(h4long atomic_long_fetch_and(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMGubh)}(hatomic_long_fetch_andh]j)}(hatomic_long_fetch_andh]hatomic_long_fetch_and}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMGubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_andasbuh1hhj.ubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hjh]hv}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMGubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMGubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMGhjhhubj4)}(hhh]jM)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMGubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_and() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMHhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjubjM)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hjdhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh to (}(hjdhhhNhNubj)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh & }(hjdhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh) with full ordering.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjubjM)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_and() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_and() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*atomic_long_fetch_and_acquire (C function)c.atomic_long_fetch_and_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=long atomic_long_fetch_and_acquire (long i, atomic_long_t *v)h]h)}(hh]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjThhhNhNubj)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh to (}(hjThhhNhNubj)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh & }(hjThhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_and_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_and_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_andnot (C function)c.atomic_long_andnothNtauh1hhjhhhNhNubh)}(hhh](h)}(h2void atomic_long_andnot (long i, atomic_long_t *v)h]h)}(h1void atomic_long_andnot(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_andnoth]j)}(hatomic_long_andnoth]hatomic_long_andnot}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubj)}(hjh]hi}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j)}jsj$sbc.atomic_long_andnotasbuh1hhjnubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_andnot() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(h long valueh]h long value}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjMubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hBUnsafe to use in noinstr code; use raw_atomic_long_andnot() there.h]hBUnsafe to use in noinstr code; use raw_atomic_long_andnot() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_long_fetch_andnot (C function)c.atomic_long_fetch_andnothNtauh1hhjhhhNhNubh)}(hhh](h)}(h8long atomic_long_fetch_andnot (long i, atomic_long_t *v)h]h)}(h7long atomic_long_fetch_andnot(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;hhhjMhMubh)}(hatomic_long_fetch_andnoth]j)}(hatomic_long_fetch_andnoth]hatomic_long_fetch_andnot}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj;hhhjMhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubj:)}(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)}jsjbsbc.atomic_long_fetch_andnotasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubeh}(h]h ]h"]h$]h&]jjuh1j3hj;hhhjMhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj7hhhjMhMubah}(h]j2ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjMhMhj4hhubj4)}(hhh]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj4hhhjMhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/jHj/jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_andnot() 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:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjXh]hlong i}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjRubj)}(hhh]jM)}(h long valueh]h long value}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjOubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot() there.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(h **Return**h]j)}(hj8h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-atomic_long_fetch_andnot_acquire (C function)"c.atomic_long_fetch_andnot_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h@long atomic_long_fetch_andnot_acquire (long i, atomic_long_t *v)h]h)}(h?long atomic_long_fetch_andnot_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h atomic_long_fetch_andnot_acquireh]j)}(h atomic_long_fetch_andnot_acquireh]h atomic_long_fetch_andnot_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb"c.atomic_long_fetch_andnot_acquireasbuh1hhjubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjdhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX***Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_acquire() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hj2hhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh to (}(hj2hhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh & }(hj2hhhNhNubj)}(h**~i**h]h~i}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh) with acquire ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hPUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_acquire() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_acquire() there.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-atomic_long_fetch_andnot_release (C function)"c.atomic_long_fetch_andnot_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h@long atomic_long_fetch_andnot_release (long i, atomic_long_t *v)h]h)}(h?long atomic_long_fetch_andnot_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h atomic_long_fetch_andnot_releaseh]j)}(h atomic_long_fetch_andnot_releaseh]h atomic_long_fetch_andnot_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj8hhhNhNubah}(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}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]j)}jsjsb"c.atomic_long_fetch_andnot_releaseasbuh1hhjLubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX***Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj1h]hatomic_long_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:96: ./include/linux/atomic/atomic-instrumented.hhMhj+ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjlh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hPUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_release() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-atomic_long_fetch_andnot_relaxed (C function)"c.atomic_long_fetch_andnot_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h@long atomic_long_fetch_andnot_relaxed (long i, atomic_long_t *v)h]h)}(h?long atomic_long_fetch_andnot_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+hhhj=hMubh)}(h atomic_long_fetch_andnot_relaxedh]j)}(h atomic_long_fetch_andnot_relaxedh]h atomic_long_fetch_andnot_relaxed}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+hhhj=hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(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:)}(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)}jsjRsb"c.atomic_long_fetch_andnot_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjdubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj$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)}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjHh]hlong i}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjBubj)}(hhh]jM)}(h long valueh]h long value}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj{ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj?ubeh}(h]h ]h"]h$]h&]uh1jhj#ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubjM)}(hPUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_relaxed() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_fetch_andnot_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubjM)}(h **Return**h]j)}(hj(h]hReturn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubjM)}(hThe original value of **v**.h](hThe original value of }(hj>hhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_or (C function)c.atomic_long_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.void atomic_long_or (long i, atomic_long_t *v)h]h)}(h-void atomic_long_or(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{hhhjhMubh)}(hatomic_long_orh]j)}(hatomic_long_orh]hatomic_long_or}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{hhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_orasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(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'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjThhubah}(h]h ]h"]h$]h&]uh1j3hjthhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjojHjojIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_or() 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:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjsubjM)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubjM)}(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}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh) with relaxed ordering.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubjM)}(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.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubjM)}(h **Return**h]j)}(hjxh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!atomic_long_fetch_or (C function)c.atomic_long_fetch_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h4long atomic_long_fetch_or (long i, atomic_long_t *v)h]h)}(h3long atomic_long_fetch_or(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_fetch_orh]j)}(hatomic_long_fetch_orh]hatomic_long_fetch_or}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj3modnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_fetch_orasbuh1hhj*ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjh]hv}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** | **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_or() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(h long valueh]h long value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubeh}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh) with full ordering.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hDUnsafe to use in noinstr code; use raw_atomic_long_fetch_or() there.h]hDUnsafe to use in noinstr code; use raw_atomic_long_fetch_or() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)atomic_long_fetch_or_acquire (C function)c.atomic_long_fetch_or_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM?hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_xor (C function)c.atomic_long_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void atomic_long_xor (long i, atomic_long_t *v)h]h)}(h.void atomic_long_xor(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hMIubh)}(hatomic_long_xorh]j)}(hatomic_long_xorh]hatomic_long_xor}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hMIubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]hi}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubj:)}(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)}jsj sbc.atomic_long_xorasbuh1hhjjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj2ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hMIubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hMIubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMIhjhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hMIubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_xor() there. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjubj)}(hhh]jM)}(h long valueh]h long value}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+hMJhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMJhj ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMKhjIubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdhMKhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMKhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ^ }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhjubjM)}(h?Unsafe to use in noinstr code; use raw_atomic_long_xor() there.h]h?Unsafe to use in noinstr code; use raw_atomic_long_xor() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMPhjubjM)}(hNothing.h]hNothing.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"atomic_long_fetch_xor (C function)c.atomic_long_fetch_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5long atomic_long_fetch_xor (long i, atomic_long_t *v)h]h)}(h4long atomic_long_fetch_xor(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[ubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7hhhjIhM[ubh)}(hatomic_long_fetch_xorh]j)}(hatomic_long_fetch_xorh]hatomic_long_fetch_xor}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7hhhjIhM[ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj^sbc.atomic_long_fetch_xorasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpubeh}(h]h ]h"]h$]h&]jjuh1j3hj7hhhjIhM[ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3hhhjIhM[ubah}(h]j.ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjIhM[hj0hhubj4)}(hhh]jM)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjhhubah}(h]h ]h"]h$]h&]uh1j3hj0hhhjIhM[ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj+jHj+jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** ^ **i**) with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_fetch_xor() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hj/ubj)}(hhh](j)}(h``long i`` long value 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:96: ./include/linux/atomic/atomic-instrumented.hhM\hjNubj)}(hhh]jM)}(h long valueh]h long value}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihM\hjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihM\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:96: ./include/linux/atomic/atomic-instrumented.hhM]hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjKubeh}(h]h ]h"]h$]h&]uh1jhj/ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM_hj/ubjM)}(h?Atomically updates **v** to (**v** ^ **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ^ }(hjhhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hj/ubjM)}(hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor() there.h]hEUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor() there.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hj/ubjM)}(h **Return**h]j)}(hj4h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhj/ubjM)}(hThe original value of **v**.h](hThe original value of }(hjJhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchj/ubeh}(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)}(h 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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjw 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&]uh1jhjw ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj; ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh ^ }(hj hhhNhNubj)}(h**i**h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor_relaxed() there.h]hMUnsafe to use in noinstr code; use raw_atomic_long_fetch_xor_relaxed() there.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(h **Return**h]j)}(hj$ h]hReturn}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj" ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubjM)}(hThe original value of **v**.h](hThe original value of }(hj: hhhNhNubj)}(h**v**h]hv}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj: ubh.}(hj: hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hatomic_long_xchg (C function)c.atomic_long_xchghNtauh1hhjhhhNhNubh)}(hhh](h)}(h2long atomic_long_xchg (atomic_long_t *v, long new)h]h)}(h1long atomic_long_xchg(atomic_long_t *v, long new)h](j)}(hlongh]hlong}(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw hhhj hMubh)}(hatomic_long_xchgh]j)}(hatomic_long_xchgh]hatomic_long_xchg}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjw hhhj hMubj4)}(h(atomic_long_t *v, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsj sbc.atomic_long_xchgasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(hlong newh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hnewh]hnew}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hjw hhhj hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjs hhhj hMubah}(h]jn ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMhjp hhubj4)}(hhh]jM)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1j3hjp hhhj hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjljHjljIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with full ordering. Unsafe to use in noinstr code; use raw_atomic_long_xchg() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjpubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjh]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjpubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjpubjM)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjpubjM)}(h@Unsafe to use in noinstr code; use raw_atomic_long_xchg() there.h]h@Unsafe to use in noinstr code; use raw_atomic_long_xchg() there.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjpubjM)}(h **Return**h]j)}(hjch]hReturn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjpubjM)}(hThe original value of **v**.h](hThe original value of }(hjyhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_long_xchg_acquire (C function)c.atomic_long_xchg_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h:long atomic_long_xchg_acquire (atomic_long_t *v, long new)h]h)}(h9long atomic_long_xchg_acquire(atomic_long_t *v, long new)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_xchg_acquireh]j)}(hatomic_long_xchg_acquireh]hatomic_long_xchg_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_xchg_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong newh](j)}(hlongh]hlong}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hnewh]hnew}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(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 acquire orderingh]h%atomic exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX%**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with acquire ordering. Unsafe to use in noinstr code; use raw_atomic_long_xchg_acquire() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj h]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjHh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hj^hhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh to }(hj^hhhNhNubj)}(h**new**h]hnew}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh with acquire ordering.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_long_xchg_acquire() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_xchg_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_long_xchg_release (C function)c.atomic_long_xchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h:long atomic_long_xchg_release (atomic_long_t *v, long new)h]h)}(h9long atomic_long_xchg_release(atomic_long_t *v, long new)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hatomic_long_xchg_releaseh]j)}(hatomic_long_xchg_releaseh]hatomic_long_xchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v, long new)h](j:)}(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)}jsjsbc.atomic_long_xchg_releaseasbuh1hhj2ubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hjh]hv}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.ubj:)}(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&]noemphjjuh1j9hj.ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX%**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_xchg_release() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjLh]hlong new}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjFubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_long_xchg_release() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_xchg_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_long_xchg_relaxed (C function)c.atomic_long_xchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h:long atomic_long_xchg_relaxed (atomic_long_t *v, long new)h]h)}(h9long atomic_long_xchg_relaxed(atomic_long_t *v, long new)h](j)}(hlongh]hlong}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4hhhjFhMubh)}(hatomic_long_xchg_relaxedh]j)}(hatomic_long_xchg_relaxedh]hatomic_long_xchg_relaxed}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1hhj4hhhjFhMubj4)}(h(atomic_long_t *v, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]j)}jsj[sbc.atomic_long_xchg_relaxedasbuh1hhjqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmubj:)}(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&]noemphjjuh1j9hjmubeh}(h]h ]h"]h$]h&]jjuh1j3hj4hhhjFhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0hhhjFhMubah}(h]j+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjFhMhj-hhubj4)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj-hhhjFhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)jHj)jIjJjKuh1hhhhjhNhNubj)}(hX%**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_xchg_relaxed() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjRh]hatomic_long_t *v}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjLubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjIubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjh]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjIubeh}(h]h ]h"]h$]h&]uh1jhj-ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubjM)}(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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_long_xchg_relaxed() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_xchg_relaxed() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubjM)}(hThe original value of **v**.h](hThe original value of }(hj6hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h atomic_long_cmpxchg (C function)c.atomic_long_cmpxchghNtauh1hhjhhhNhNubh)}(hhh](h)}(h?long atomic_long_cmpxchg (atomic_long_t *v, long old, long new)h]h)}(h>long atomic_long_cmpxchg(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjshhhjhMubh)}(hatomic_long_cmpxchgh]j)}(hatomic_long_cmpxchgh]hatomic_long_cmpxchg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjshhhjhMubj4)}(h&(atomic_long_t *v, long old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.atomic_long_cmpxchgasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong oldh](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong newh](j)}(hlongh]hlong}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjQ)}(h h]h }(hjMhhhNhNubah}(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&]jjuh1j3hjshhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjohhhjhMubah}(h]jjah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjlhhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjlhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long old`` long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hjh]hlong old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj8h]hlong new}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj2ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hCUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg() there.h]hCUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_long_cmpxchg_acquire (C function)c.atomic_long_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hGlong atomic_long_cmpxchg_acquire (atomic_long_t *v, long old, long new)h]h)}(hFlong atomic_long_cmpxchg_acquire(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVhhhjhhMubh)}(hatomic_long_cmpxchg_acquireh]j)}(hatomic_long_cmpxchg_acquireh]hatomic_long_cmpxchg_acquire}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1hhjVhhhjhhMubj4)}(h&(atomic_long_t *v, long old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj}sbc.atomic_long_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong oldh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong newh](j)}(hlongh]hlong}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj0hhhNhNubah}(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&]jjuh1j3hjVhhhjhhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjRhhhjhhMubah}(h]jMah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhhMhjOhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjehhubah}(h]h ]h"]h$]h&]uh1j3hjOhhhjhhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long old`` long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_cmpxchg_acquire() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hjh]hlong old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjh]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjVh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjlhhhNhNubj)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh == }(hjlhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh), atomically updates }(hjlhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh to }(hjlhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh# with acquire ordering. Otherwise, }(hjlhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh2 is not modified and relaxed ordering is provided.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubjM)}(hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_acquire() there.h]hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_acquire() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_long_cmpxchg_release (C function)c.atomic_long_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hGlong atomic_long_cmpxchg_release (atomic_long_t *v, long old, long new)h]h)}(hFlong atomic_long_cmpxchg_release(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9hhhjKhMubh)}(hatomic_long_cmpxchg_releaseh]j)}(hatomic_long_cmpxchg_releaseh]hatomic_long_cmpxchg_release}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](jjeh"]h$]h&]jjuh1hhj9hhhjKhMubj4)}(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&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj`sbc.atomic_long_cmpxchg_releaseasbuh1hhjvubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrubj:)}(hlong oldh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrubj:)}(hlong newh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrubeh}(h]h ]h"]h$]h&]jjuh1j3hj9hhhjKhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj5hhhjKhMubah}(h]j0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjKhMhj2hhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjHhhubah}(h]h ]h"]h$]h&]uh1j3hj2hhhjKhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjcjHjcjIjJjKuh1hhhhjhNhNubj)}(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)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjgubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hjh]hlong old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjh]hlong new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjgubjM)}(h**Description**h]j)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjgubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjOhhhNhNubj)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh == }(hjOhhhNhNubj)}(h**old**h]hold}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh), atomically updates }(hjOhhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh to }(hjOhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh# with release ordering. Otherwise, }(hjOhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh2 is not modified and relaxed ordering is provided.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjgubjM)}(hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_release() there.h]hKUnsafe to use in noinstr code; use raw_atomic_long_cmpxchg_release() there.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjgubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hjgubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM"hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(atomic_long_cmpxchg_relaxed (C function)c.atomic_long_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hGlong atomic_long_cmpxchg_relaxed (atomic_long_t *v, long old, long new)h]h)}(hFlong atomic_long_cmpxchg_relaxed(atomic_long_t *v, long old, long new)h](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj.hM-ubh)}(hatomic_long_cmpxchg_relaxedh]j)}(hatomic_long_cmpxchg_relaxedh]hatomic_long_cmpxchg_relaxed}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj.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}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjbmodnameN classnameNjwjz)}j}]j)}jsjCsbc.atomic_long_cmpxchg_relaxedasbuh1hhjYubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubj:)}(hlong oldh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubj:)}(hlong newh](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj.hM-ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj.hM-ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj.hM-hjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM-hj+ hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj.hM-ubeh}(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 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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM1hjJ ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjo h]hatomic_long_t *v}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjm ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM.hji ubj)}(hhh]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&]uh1jhji ubeh}(h]h ]h"]h$]h&]uh1jhj hM.hjf 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:96: ./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/hjf ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj h]hlong new}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.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 hM0hjf 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:96: ./include/linux/atomic/atomic-instrumented.hhM2hjJ ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj2!hhhNhNubj)}(h**v**h]hv}(hj:!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2!ubh == }(hj2!hhhNhNubj)}(h**old**h]hold}(hjL!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2!ubh), atomically updates }(hj2!hhhNhNubj)}(h**v**h]hv}(hj^!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2!ubh to }(hj2!hhhNhNubj)}(h**new**h]hnew}(hjp!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2!ubh# with relaxed ordering. Otherwise, }(hj2!hhhNhNubj)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2!ubh2 is not modified and relaxed ordering is provided.}(hj2!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjJ 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:96: ./include/linux/atomic/atomic-instrumented.hhM4hjJ ubjM)}(h **Return**h]j)}(hj!h]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjJ ubjM)}(hThe original value of **v**.h](hThe original value of }(hj!hhhNhNubj)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM7hjJ 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:96: ./include/linux/atomic/atomic-instrumented.hhMAubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj"hMAubh)}(hatomic_long_try_cmpxchgh]j)}(hatomic_long_try_cmpxchgh]hatomic_long_try_cmpxchg}(hj#"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj"hMAubj4)}(h'(atomic_long_t *v, long *old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjB"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?"ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjD"modnameN classnameNjwjz)}j}]j)}jsj%"sbc.atomic_long_try_cmpxchgasbuh1hhj;"ubjQ)}(h h]h }(hjb"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;"ubj)}(hjh]h*}(hjp"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;"ubj)}(hjh]hv}(hj}"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7"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&]noemphjjuh1j9hj7"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&]noemphjjuh1j9hj7"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}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMAhj#hhubah}(h]h ]h"]h$]h&]uh1j3hj!hhhj"hMAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj5#jHj5#jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMEhj9#ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj^#h]hatomic_long_t *v}(hj`#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\#ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMBhjX#ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjw#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjs#hMBhjt#ubah}(h]h ]h"]h$]h&]uh1jhjX#ubeh}(h]h ]h"]h$]h&]uh1jhjs#hMBhjU#ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hj#h]h long *old}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj#ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMChj#ubj)}(hhh]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#hMChj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMChjU#ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj#h]hlong new}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj#ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMDhj#ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#hMDhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMDhjU#ubeh}(h]h ]h"]h$]h&]uh1jhj9#ubjM)}(h**Description**h]j)}(hj $h]h Description}(hj $hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj $ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhj9#ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj!$hhhNhNubj)}(h**v**h]hv}(hj)$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!$ubh == }(hj!$hhhNhNubj)}(h**old**h]hold}(hj;$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!$ubh), atomically updates }(hj!$hhhNhNubj)}(h**v**h]hv}(hjM$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!$ubh to }(hj!$hhhNhNubj)}(h**new**h]hnew}(hj_$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!$ubh with full ordering. Otherwise, }(hj!$hhhNhNubj)}(h**v**h]hv}(hjq$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!$ubh is not modified, }(hj!$hhhNhNubj)}(h**old**h]hold}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!$ubh$ is updated to the current value of }(hj!$hhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!$ubh#, and relaxed ordering is provided.}(hj!$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMEhj9#ubjM)}(hGUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg() there.h]hGUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg() there.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMIhj9#ubjM)}(h **Return**h]j)}(hj$h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhj9#ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh if the exchange occurred, }(hj$hhhNhNubj)}(h **false**h]hfalse}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh otherwise.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMLhj9#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,atomic_long_try_cmpxchg_acquire (C function)!c.atomic_long_try_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hLbool atomic_long_try_cmpxchg_acquire (atomic_long_t *v, long *old, long new)h]h)}(hKbool atomic_long_try_cmpxchg_acquire(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hj$%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj %hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXubjQ)}(h h]h }(hj2%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj %hhhj1%hMXubh)}(hatomic_long_try_cmpxchg_acquireh]j)}(hatomic_long_try_cmpxchg_acquireh]hatomic_long_try_cmpxchg_acquire}(hjD%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj %hhhj1%hMXubj4)}(h'(atomic_long_t *v, long *old, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjc%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`%ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetje%modnameN classnameNjwjz)}j}]j)}jsjF%sb!c.atomic_long_try_cmpxchg_acquireasbuh1hhj\%ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\%ubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\%ubj)}(hjh]hv}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\%ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjX%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&]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%hMXubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj%hhhj1%hMXubah}(h]j%ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1%hMXhj%hhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hj>&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMXhj;&hhubah}(h]h ]h"]h$]h&]uh1j3hj%hhhj1%hMXubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjV&jHjV&jIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long *old`` pointer to long value to compare with ``long new`` long value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_acquire() there. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM\hjZ&ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj&h]hatomic_long_t *v}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}&ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjy&ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&hMYhj&ubah}(h]h ]h"]h$]h&]uh1jhjy&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMYhjv&ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hj&h]h long *old}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj&ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZhj&ubj)}(hhh]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&hMZhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMZhjv&ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj&h]hlong new}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj&ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hj&ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj 'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'hM[hj'ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj'hM[hjv&ubeh}(h]h ]h"]h$]h&]uh1jhjZ&ubjM)}(h**Description**h]j)}(hj,'h]h Description}(hj.'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*'ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjZ&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 (}(hjB'hhhNhNubj)}(h**v**h]hv}(hjJ'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB'ubh == }(hjB'hhhNhNubj)}(h**old**h]hold}(hj\'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB'ubh), atomically updates }(hjB'hhhNhNubj)}(h**v**h]hv}(hjn'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB'ubh to }(hjB'hhhNhNubj)}(h**new**h]hnew}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB'ubh# with acquire ordering. Otherwise, }(hjB'hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB'ubh is not modified, }(hjB'hhhNhNubj)}(h**old**h]hold}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB'ubh$ is updated to the current value of }(hjB'hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB'ubh#, and relaxed ordering is provided.}(hjB'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM\hjZ&ubjM)}(hOUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_acquire() there.h]hOUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_acquire() there.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjZ&ubjM)}(h **Return**h]j)}(hj'h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMbhjZ&ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh if the exchange occurred, }(hj'hhhNhNubj)}(h **false**h]hfalse}(hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh otherwise.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMchjZ&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,atomic_long_try_cmpxchg_release (C function)!c.atomic_long_try_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hLbool atomic_long_try_cmpxchg_release (atomic_long_t *v, long *old, long new)h]h)}(hKbool atomic_long_try_cmpxchg_release(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hjE(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA(hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnubjQ)}(h h]h }(hjS(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjA(hhhjR(hMnubh)}(hatomic_long_try_cmpxchg_releaseh]j)}(hatomic_long_try_cmpxchg_releaseh]hatomic_long_try_cmpxchg_release}(hje(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja(ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjA(hhhjR(hMnubj4)}(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)}jsjg(sb!c.atomic_long_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)}(hjh]hv}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjy(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&]noemphjjuh1j9hjy(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}(hj5)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjy(ubeh}(h]h ]h"]h$]h&]jjuh1j3hjA(hhhjR(hMnubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj=(hhhjR(hMnubah}(h]j8(ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjR(hMnhj:(hhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj_)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhj\)hhubah}(h]h ]h"]h$]h&]uh1j3hj:(hhhjR(hMnubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjw)jHjw)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. 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)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhj{)ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj)h]hatomic_long_t *v}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohj)ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_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)ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hj)h]h long *old}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMphj)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)hMphj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMphj)ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj*h]hlong new}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhj *ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj+*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'*hMqhj(*ubah}(h]h ]h"]h$]h&]uh1jhj *ubeh}(h]h ]h"]h$]h&]uh1jhj'*hMqhj)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&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshj{)ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjc*hhhNhNubj)}(h**v**h]hv}(hjk*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc*ubh == }(hjc*hhhNhNubj)}(h**old**h]hold}(hj}*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc*ubh), atomically updates }(hjc*hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc*ubh to }(hjc*hhhNhNubj)}(h**new**h]hnew}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc*ubh# with release ordering. Otherwise, }(hjc*hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc*ubh is not modified, }(hjc*hhhNhNubj)}(h**old**h]hold}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc*ubh$ is updated to the current value of }(hjc*hhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc*ubh#, and relaxed ordering is provided.}(hjc*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMrhj{)ubjM)}(hOUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_release() there.h]hOUnsafe to use in noinstr code; use raw_atomic_long_try_cmpxchg_release() there.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMvhj{)ubjM)}(h **Return**h]j)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMxhj{)ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh if the exchange occurred, }(hj+hhhNhNubj)}(h **false**h]hfalse}(hj-+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh otherwise.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMyhj{)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,atomic_long_try_cmpxchg_relaxed (C function)!c.atomic_long_try_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hLbool atomic_long_try_cmpxchg_relaxed (atomic_long_t *v, long *old, long new)h]h)}(hKbool atomic_long_try_cmpxchg_relaxed(atomic_long_t *v, long *old, long new)h](j)}(hjh]hbool}(hjf+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb+hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjt+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjb+hhhjs+hMubh)}(hatomic_long_try_cmpxchg_relaxedh]j)}(hatomic_long_try_cmpxchg_relaxedh]hatomic_long_try_cmpxchg_relaxed}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjb+hhhjs+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+sb!c.atomic_long_try_cmpxchg_relaxedasbuh1hhj+ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]hv}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubj:)}(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&]noemphjjuh1j9hj+ubj:)}(hlong newh](j)}(hlongh]hlong}(hj:,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6,ubjQ)}(h h]h }(hjH,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6,ubj)}(hnewh]hnew}(hjV,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubeh}(h]h ]h"]h$]h&]jjuh1j3hjb+hhhjs+hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^+hhhjs+hMubah}(h]jY+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjs+hMhj[+hhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj},hhubah}(h]h ]h"]h$]h&]uh1j3hj[+hhhjs+hMubeh}(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 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)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj,ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj,h]hatomic_long_t *v}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj,ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj,ubj)}(h4``long *old`` pointer to long value to compare with h](j)}(h ``long *old``h]jS)}(hj,h]h long *old}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj,ubj)}(hhh]jM)}(h%pointer to long value to compare withh]h%pointer to long value to compare with}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj,ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj3-h]hlong new}(hj5-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1-ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj--ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjL-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjH-hMhjI-ubah}(h]h ]h"]h$]h&]uh1jhj--ubeh}(h]h ]h"]h$]h&]uh1jhjH-hMhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubjM)}(h**Description**h]j)}(hjn-h]h Description}(hjp-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl-ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj,ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj-hhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh == }(hj-hhhNhNubj)}(h**old**h]hold}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh), atomically updates }(hj-hhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh to }(hj-hhhNhNubj)}(h**new**h]hnew}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh# with relaxed ordering. Otherwise, }(hj-hhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh is not modified, }(hj-hhhNhNubj)}(h**old**h]hold}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh$ is updated to the current value of }(hj-hhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh#, and relaxed ordering is provided.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj,ubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj,ubjM)}(h **Return**h]j)}(hj".h]hReturn}(hj$.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj .ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj,ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hj<.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8.ubh if the exchange occurred, }(hj8.hhhNhNubj)}(h **false**h]hfalse}(hjN.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8.ubh otherwise.}(hj8.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj,ubeh}(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}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.hhhj.hMubh)}(hatomic_long_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&]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.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)}(hjh]hv}(hj5/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]jz.ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj.hMhj|.hhubj4)}(hhh]jM)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hj^/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj[/hhubah}(h]h ]h"]h$]h&]uh1j3hj|.hhhj.hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjv/jHjv/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)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~/ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjz/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:96: ./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:96: ./include/linux/atomic/atomic-instrumented.hhMhj/ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhj/ubeh}(h]h ]h"]h$]h&]uh1jhjz/ubjM)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjz/ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj)0hhhNhNubj)}(h**v**h]hv}(hj10hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)0ubh to (}(hj)0hhhNhNubj)}(h**v**h]hv}(hjC0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)0ubh - }(hj)0hhhNhNubj)}(h**i**h]hi}(hjU0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)0ubh) with full ordering.}(hj)0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjz/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.}(hjn0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjz/ubjM)}(h **Return**h]j)}(hj0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}0ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjz/ubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh if the resulting value of }(hj0hhhNhNubj)}(h**v**h]hv}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh is zero, }(hj0hhhNhNubj)}(h **false**h]hfalse}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh otherwise.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjz/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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhj1hMubh)}(hatomic_long_dec_and_testh]j)}(hatomic_long_dec_and_testh]hatomic_long_dec_and_test}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhj1hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj51hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj21ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj71modnameN classnameNjwjz)}j}]j)}jsj1sbc.atomic_long_dec_and_testasbuh1hhj.1ubjQ)}(h h]h }(hjU1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.1ubj)}(hjh]h*}(hjc1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.1ubj)}(hjh]hv}(hjp1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj*1ubah}(h]h ]h"]h$]h&]jjuh1j3hj0hhhj1hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0hhhj1hMubah}(h]j0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj1hMhj0hhubj4)}(hhh]jM)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1j3hj0hhhj1hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1jHj1jIjJjKuh1hhhhjhNhNubj)}(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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj1h]hatomic_long_t *v}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubjM)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj+2hhhNhNubj)}(h**v**h]hv}(hj32hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+2ubh to (}(hj+2hhhNhNubj)}(h**v**h]hv}(hjE2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+2ubh - 1) with full ordering.}(hj+2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_long_dec_and_test() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_dec_and_test() there.}(hj^2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubjM)}(h **Return**h]j)}(hjo2h]hReturn}(hjq2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm2ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh if the resulting value of }(hj2hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh is zero, }(hj2hhhNhNubj)}(h **false**h]hfalse}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh otherwise.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj1ubeh}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2hhhj2hMubh)}(hatomic_long_inc_and_testh]j)}(hatomic_long_inc_and_testh]hatomic_long_inc_and_test}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj2hhhj2hMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj%3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj'3modnameN classnameNjwjz)}j}]j)}jsj3sbc.atomic_long_inc_and_testasbuh1hhj3ubjQ)}(h h]h }(hjE3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]h*}(hjS3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hjh]hv}(hj`3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubah}(h]h ]h"]h$]h&]jjuh1j3hj2hhhj2hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj2hhhj2hMubah}(h]j2ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hMhj2hhubj4)}(hhh]jM)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1j3hj2hhhj2hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhjhNhNubj)}(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)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj3h]hatomic_long_t *v}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hj4hhhNhNubj)}(h**v**h]hv}(hj#4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh to (}(hj4hhhNhNubj)}(h**v**h]hv}(hj54hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh + 1) with full ordering.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(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.}(hjN4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(h **Return**h]j)}(hj_4h]hReturn}(hja4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]4ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjy4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju4ubh if the resulting value of }(hju4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju4ubh is zero, }(hju4hhhNhNubj)}(h **false**h]hfalse}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju4ubh otherwise.}(hju4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%atomic_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}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4hhhj4hMubh)}(hatomic_long_add_negativeh]j)}(hatomic_long_add_negativeh]hatomic_long_add_negative}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj4hhhj4hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjQ)}(h h]h }(hj 5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]hi}(hj.5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj 5ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjI5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjK5modnameN classnameNjwjz)}j}]j)}jsj4sbc.atomic_long_add_negativeasbuh1hhjB5ubjQ)}(h h]h }(hji5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjB5ubj)}(hjh]h*}(hjw5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB5ubj)}(hjh]hv}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj 5ubeh}(h]h ]h"]h$]h&]jjuh1j3hj4hhhj4hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj4hhhj4hMubah}(h]j4ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj4hMhj4hhubj4)}(hhh]jM)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1j3hj4hhhj4hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj5jHj5jIjJjKuh1hhhhjhNhNubj)}(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)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hj5h]hlong i}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj5ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj'6h]hatomic_long_t *v}(hj)6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj%6ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj!6ubj)}(hh$h]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj@6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<6hMhj=6ubah}(h]h ]h"]h$]h&]uh1jhj!6ubeh}(h]h ]h"]h$]h&]uh1jhj<6hMhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5ubjM)}(h**Description**h]j)}(hjb6h]h Description}(hjd6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`6ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjx6hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx6ubh to (}(hjx6hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx6ubh + }(hjx6hhhNhNubj)}(h**i**h]hi}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx6ubh) with full ordering.}(hjx6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_long_add_negative() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_add_negative() there.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubjM)}(h **Return**h]j)}(hj6h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh if the resulting value of }(hj6hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh is negative, }(hj6hhhNhNubj)}(h **false**h]hfalse}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh otherwise.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](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}(hjE7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA7hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjS7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjA7hhhjR7hMubh)}(h atomic_long_add_negative_acquireh]j)}(h atomic_long_add_negative_acquireh]h atomic_long_add_negative_acquire}(hje7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjA7hhhjR7hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}7ubj)}(hjh]hi}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjy7ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]j)}jsjg7sb"c.atomic_long_add_negative_acquireasbuh1hhj7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hjh]hv}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjy7ubeh}(h]h ]h"]h$]h&]jjuh1j3hjA7hhhjR7hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj=7hhhjR7hMubah}(h]j87ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjR7hMhj:7hhubj4)}(hhh]jM)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1j3hj:7hhhjR7hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj48jHj48jIjJjKuh1hhhhjhNhNubj)}(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>8h]h Parameters}(hj@8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<8ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj88ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hj]8h]hlong i}(hj_8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjW8ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjv8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjr8hMhjs8ubah}(h]h ]h"]h$]h&]uh1jhjW8ubeh}(h]h ]h"]h$]h&]uh1jhjr8hMhjT8ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj8h]hatomic_long_t *v}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj8ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjT8ubeh}(h]h ]h"]h$]h&]uh1jhj88ubjM)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj88ubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj8hhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh to (}(hj8hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh + }(hj8hhhNhNubj)}(h**i**h]hi}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh) with acquire ordering.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj88ubjM)}(hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_acquire() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_acquire() there.}(hj,9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj88ubjM)}(h **Return**h]j)}(hj=9h]hReturn}(hj?9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;9ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj88ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjW9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS9ubh if the resulting value of }(hjS9hhhNhNubj)}(h**v**h]hv}(hji9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS9ubh is negative, }(hjS9hhhNhNubj)}(h **false**h]hfalse}(hj{9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS9ubh otherwise.}(hjS9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj88ubeh}(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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9hhhj9hMubh)}(h atomic_long_add_negative_releaseh]j)}(h atomic_long_add_negative_releaseh]h atomic_long_add_negative_release}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj9hhhj9hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]hi}(hj :hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubj:)}(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)}jsj9sb"c.atomic_long_add_negative_releaseasbuh1hhj :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)}(hjh]hv}(hjb:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj :ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubeh}(h]h ]h"]h$]h&]jjuh1j3hj9hhhj9hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9hhhj9hMubah}(h]j9ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj9hMhj9hhubj4)}(hhh]jM)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1j3hj9hhhj9hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:jHj:jIjJjKuh1hhhhjhNhNubj)}(hX^**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_negative_release() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hj:h]hlong i}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhj:ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj;h]hatomic_long_t *v}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:ubjM)}(h**Description**h]j)}(hj@;h]h Description}(hjB;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>;ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjV;hhhNhNubj)}(h**v**h]hv}(hj^;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV;ubh to (}(hjV;hhhNhNubj)}(h**v**h]hv}(hjp;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV;ubh + }(hjV;hhhNhNubj)}(h**i**h]hi}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV;ubh) with release ordering.}(hjV;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_release() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_release() there.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(h **Return**h]j)}(hj;h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh if the resulting value of }(hj;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh is negative, }(hj;hhhNhNubj)}(h **false**h]hfalse}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh otherwise.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-atomic_long_add_negative_relaxed (C function)"c.atomic_long_add_negative_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h@bool atomic_long_add_negative_relaxed (long i, atomic_long_t *v)h]h)}(h?bool atomic_long_add_negative_relaxed(long i, atomic_long_t *v)h](j)}(hjh]hbool}(hj#<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM ubjQ)}(h h]h }(hj1<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<hhhj0<hM ubh)}(h atomic_long_add_negative_relaxedh]j)}(h atomic_long_add_negative_relaxedh]h atomic_long_add_negative_relaxed}(hjC<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj<hhhj0<hM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj_<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[<ubjQ)}(h h]h }(hjm<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&]noemphjjuh1j9hjW<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)}jsjE<sb"c.atomic_long_add_negative_relaxedasbuh1hhj<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hjh]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjW<ubeh}(h]h ]h"]h$]h&]jjuh1j3hj<hhhj0<hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj<hhhj0<hM ubah}(h]j<ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0<hM hj<hhubj4)}(hhh]jM)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj<hhubah}(h]h ]h"]h$]h&]uh1j3hj<hhhj0<hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj=jHj=jIjJjKuh1hhhhjhNhNubj)}(hX^**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Unsafe to use in noinstr code; use raw_atomic_long_add_negative_relaxed() there. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hj;=h]hlong i}(hj==hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj5=ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(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 hj2=ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjt=h]hatomic_long_t *v}(hjv=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjr=ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hjn=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&]uh1jhjn=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hj2=ubeh}(h]h ]h"]h$]h&]uh1jhj=ubjM)}(h**Description**h]j)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh to (}(hj=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh + }(hj=hhhNhNubj)}(h**i**h]hi}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh) with relaxed ordering.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj=ubjM)}(hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_relaxed() there.h]hPUnsafe to use in noinstr code; use raw_atomic_long_add_negative_relaxed() there.}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubjM)}(h **Return**h]j)}(hj>h]hReturn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj5>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1>ubh if the resulting value of }(hj1>hhhNhNubj)}(h**v**h]hv}(hjG>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1>ubh is negative, }(hj1>hhhNhNubj)}(h **false**h]hfalse}(hjY>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1>ubh otherwise.}(hj1>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)atomic_long_fetch_add_unless (C function)c.atomic_long_fetch_add_unlesshNtauh1hhjhhhNhNubh)}(hhh](h)}(hDlong atomic_long_fetch_add_unless (atomic_long_t *v, long a, long u)h]h)}(hClong atomic_long_fetch_add_unless(atomic_long_t *v, long a, long u)h](j)}(hlongh]hlong}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>hhhj>hMubh)}(hatomic_long_fetch_add_unlessh]j)}(hatomic_long_fetch_add_unlessh]hatomic_long_fetch_add_unless}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj>hhhj>hMubj4)}(h"(atomic_long_t *v, long a, long u)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j)}jsj>sbc.atomic_long_fetch_add_unlessasbuh1hhj>ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hjh]hv}(hj ?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hlong ah](j)}(hlongh]hlong}(hj%?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!?ubjQ)}(h h]h }(hj3?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!?ubj)}(hjնh]ha}(hjA?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hlong uh](j)}(hlongh]hlong}(hjY?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU?ubjQ)}(h h]h }(hjg?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjU?ubj)}(hj\h]hu}(hju?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubeh}(h]h ]h"]h$]h&]jjuh1j3hj>hhhj>hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj>hhhj>hMubah}(h]j>ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj>hMhj>hhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?hhubah}(h]h ]h"]h$]h&]uh1j3hj>hhhj>hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj?jHj?jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long a`` long value to add ``long u`` long value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_fetch_add_unless() there. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj?ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj?h]hatomic_long_t *v}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj?ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj?ubj)}(h``long a`` long value to add h](j)}(h ``long a``h]jS)}(hj@h]hlong a}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhj@ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj1@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 u`` long value to compare with h](j)}(h ``long u``h]jS)}(hjQ@h]hlong u}(hjS@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjO@ubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjK@ubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjf@hMhjg@ubah}(h]h ]h"]h$]h&]uh1jhjK@ubeh}(h]h ]h"]h$]h&]uh1jhjf@hMhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubjM)}(h**Description**h]j)}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM!hj?ubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj@hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh != }(hj@hhhNhNubj)}(h**u**h]hu}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh), atomically updates }(hj@hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh to (}(hj@hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh + }(hj@hhhNhNubj)}(h**a**h]ha}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh!) with full ordering. Otherwise, }(hj@hhhNhNubj)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh2 is not modified and relaxed ordering is provided.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM hj?ubjM)}(hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_unless() there.h]hLUnsafe to use in noinstr code; use raw_atomic_long_fetch_add_unless() there.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM#hj?ubjM)}(h **Return**h]j)}(hj.Ah]hReturn}(hj0AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Aubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM%hj?ubjM)}(hThe original value of **v**.h](hThe original value of }(hjDAhhhNhNubj)}(h**v**h]hv}(hjLAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDAubh.}(hjDAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM&hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#atomic_long_add_unless (C function)c.atomic_long_add_unlesshNtauh1hhjhhhNhNubh)}(hhh](h)}(h>bool atomic_long_add_unless (atomic_long_t *v, long a, long u)h]h)}(h=bool atomic_long_add_unless(atomic_long_t *v, long a, long u)h](j)}(hjh]hbool}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1ubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAhhhjAhM1ubh)}(hatomic_long_add_unlessh]j)}(hatomic_long_add_unlessh]hatomic_long_add_unless}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]jjuh1hhjAhhhjAhM1ubj4)}(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}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjAmodnameN classnameNjwjz)}j}]j)}jsjAsbc.atomic_long_add_unlessasbuh1hhjAubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hjh]hv}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAubj:)}(hlong ah](j)}(hlongh]hlong}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjQ)}(h h]h }(hj%BhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjնh]ha}(hj3BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAubj:)}(hlong uh](j)}(hlongh]hlong}(hjKBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGBubjQ)}(h h]h }(hjYBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGBubj)}(hj\h]hu}(hjgBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjAubeh}(h]h ]h"]h$]h&]jjuh1j3hjAhhhjAhM1ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj}AhhhjAhM1ubah}(h]jxAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjAhM1hjzAhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM1hjBhhubah}(h]h ]h"]h$]h&]uh1j3hjzAhhhjAhM1ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjBjHjBjIjJjKuh1hhhhjhNhNubj)}(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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM5hjBubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjBh]hatomic_long_t *v}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM2hjBubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhM2hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM2hjBubj)}(h``long a`` long value to add h](j)}(h ``long a``h]jS)}(hj Ch]hlong a}(hj ChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM3hjCubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj#ChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChM3hj Cubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM3hjBubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]jS)}(hjCCh]hlong u}(hjEChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjACubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM4hj=Cubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hj\ChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXChM4hjYCubah}(h]h ]h"]h$]h&]uh1jhj=Cubeh}(h]h ]h"]h$]h&]uh1jhjXChM4hjBubeh}(h]h ]h"]h$]h&]uh1jhjBubjM)}(h**Description**h]j)}(hj~Ch]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|Cubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM6hjBubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) 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**u**h]hu}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh), atomically 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**a**h]ha}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh!) with full ordering. Otherwise, }(hjChhhNhNubj)}(h**v**h]hv}(hjChhhNhNubah}(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:96: ./include/linux/atomic/atomic-instrumented.hhM5hjBubjM)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM8hjBubjM)}(h **Return**h]j)}(hj Dh]hReturn}(hj"DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM:hjBubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hj:DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Dubh if }(hj6DhhhNhNubj)}(h**v**h]hv}(hjLDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Dubh was updated, }(hj6DhhhNhNubj)}(h **false**h]hfalse}(hj^DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Dubh otherwise.}(hj6DhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM;hjBubeh}(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhjDhMFubh)}(hatomic_long_inc_not_zeroh]j)}(hatomic_long_inc_not_zeroh]hatomic_long_inc_not_zero}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhhjDhMFubj4)}(h(atomic_long_t *v)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.atomic_long_inc_not_zeroasbuh1hhjDubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]hv}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDubah}(h]h ]h"]h$]h&]jjuh1j3hjDhhhjDhMFubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjDhhhjDhMFubah}(h]jDah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjDhMFhjDhhubj4)}(hhh]jM)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hj:EhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMFhj7Ehhubah}(h]h ]h"]h$]h&]uh1j3hjDhhhjDhMFubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjREjHjREjIjJjKuh1hhhhjhNhNubj)}(hXl**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** If (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_inc_not_zero() there. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hj\Eh]h Parameters}(hj^EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZEubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMJhjVEubj)}(hhh]j)}(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&]uh1jRhjyEubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMGhjuEubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMGhjEubah}(h]h ]h"]h$]h&]uh1jhjuEubeh}(h]h ]h"]h$]h&]uh1jhjEhMGhjrEubah}(h]h ]h"]h$]h&]uh1jhjVEubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMIhjVEubjM)}(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}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh != 0), atomically 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% + 1) with full ordering. Otherwise, }(hjEhhhNhNubj)}(h**v**h]hv}(hj FhhhNhNubah}(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:96: ./include/linux/atomic/atomic-instrumented.hhMHhjVEubjM)}(hHUnsafe to use in noinstr code; use raw_atomic_long_inc_not_zero() there.h]hHUnsafe to use in noinstr code; use raw_atomic_long_inc_not_zero() there.}(hj#FhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMKhjVEubjM)}(h **Return**h]j)}(hj4Fh]hReturn}(hj6FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Fubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMMhjVEubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjNFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJFubh if }(hjJFhhhNhNubj)}(h**v**h]hv}(hj`FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJFubh was updated, }(hjJFhhhNhNubj)}(h **false**h]hfalse}(hjrFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJFubh otherwise.}(hjJFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMNhjVEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,atomic_long_inc_unless_negative (C function)!c.atomic_long_inc_unless_negativehNtauh1hhjhhhNhNubh)}(hhh](h)}(h7bool atomic_long_inc_unless_negative (atomic_long_t *v)h]h)}(h6bool atomic_long_inc_unless_negative(atomic_long_t *v)h](j)}(hjh]hbool}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFhhhjFhMYubh)}(hatomic_long_inc_unless_negativeh]j)}(hatomic_long_inc_unless_negativeh]hatomic_long_inc_unless_negative}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1hhjFhhhjFhMYubj4)}(h(atomic_long_t *v)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)}jsjFsb!c.atomic_long_inc_unless_negativeasbuh1hhjFubjQ)}(h h]h }(hj GhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hjh]hv}(hj%GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjFubah}(h]h ]h"]h$]h&]jjuh1j3hjFhhhjFhMYubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhjFhMYubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjFhMYhjFhhubj4)}(hhh]jM)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjNGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMYhjKGhhubah}(h]h ]h"]h$]h&]uh1j3hjFhhhjFhMYubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjfGjHjfGjIjJjKuh1hhhhjhNhNubj)}(hXs**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** If (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Unsafe to use in noinstr code; use raw_atomic_long_inc_unless_negative() there. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjpGh]h Parameters}(hjrGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnGubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM]hjjGubj)}(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&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMZhjGubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhMZhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMZhjGubah}(h]h ]h"]h$]h&]uh1jhjjGubjM)}(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:96: ./include/linux/atomic/atomic-instrumented.hhM\hjjGubjM)}(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}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh >= 0), atomically updates }(hjGhhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh to (}(hjGhhhNhNubj)}(h**v**h]hv}(hj HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh% + 1) with full ordering. Otherwise, }(hjGhhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh2 is not modified and relaxed ordering is provided.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM[hjjGubjM)}(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.}(hj7HhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM^hjjGubjM)}(h **Return**h]j)}(hjHHh]hReturn}(hjJHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFHubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhM`hjjGubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjbHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Hubh if }(hj^HhhhNhNubj)}(h**v**h]hv}(hjtHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Hubh was updated, }(hj^HhhhNhNubj)}(h **false**h]hfalse}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Hubh otherwise.}(hj^HhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMahjjGubeh}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHhhhjHhMlubh)}(hatomic_long_dec_unless_positiveh]j)}(hatomic_long_dec_unless_positiveh]hatomic_long_dec_unless_positive}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1hhjHhhhjHhMlubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjImodnameN classnameNjwjz)}j}]j)}jsjHsb!c.atomic_long_dec_unless_positiveasbuh1hhjHubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj)}(hjh]h*}(hj,IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]hv}(hj9IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjHubah}(h]h ]h"]h$]h&]jjuh1j3hjHhhhjHhMlubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjHhhhjHhMlubah}(h]jHah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjHhMlhjHhhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjbIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMlhj_Ihhubah}(h]h ]h"]h$]h&]uh1j3hjHhhhjHhMlubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjzIjHjzIjIjJjKuh1hhhhjhNhNubj)}(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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMphj~Iubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjIh]hatomic_long_t *v}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMmhjIubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhMmhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMmhjIubah}(h]h ]h"]h$]h&]uh1jhj~IubjM)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMohj~IubjM)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjIhhhNhNubj)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh <= 0), atomically updates }(hjIhhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh to (}(hjIhhhNhNubj)}(h**v**h]hv}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh% - 1) with full ordering. Otherwise, }(hjIhhhNhNubj)}(h**v**h]hv}(hj2JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh2 is not modified and relaxed ordering is provided.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMnhj~IubjM)}(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.}(hjKJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMqhj~IubjM)}(h **Return**h]j)}(hj\Jh]hReturn}(hj^JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZJubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMshj~IubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjvJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrJubh if }(hjrJhhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrJubh was updated, }(hjrJhhhNhNubj)}(h **false**h]hfalse}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrJubh otherwise.}(hjrJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMthj~Iubeh}(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}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhjJhMubh)}(hatomic_long_dec_if_positiveh]j)}(hatomic_long_dec_if_positiveh]hatomic_long_dec_if_positive}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhjJhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjKmodnameN classnameNjwjz)}j}]j)}jsjJsbc.atomic_long_dec_if_positiveasbuh1hhj KubjQ)}(h h]h }(hj3KhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Kubj)}(hjh]h*}(hjAKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Kubj)}(hjh]hv}(hjNKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Kubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjKubah}(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 decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjwKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjtKhhubah}(h]h ]h"]h$]h&]uh1j3hjJhhhjJhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjKjHjKjIjJjKuh1hhhhjhNhNubj)}(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)}(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:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjKh]hatomic_long_t *v}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubjM)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubjM)}(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 LhhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Lubh > 0), atomically updates }(hj LhhhNhNubj)}(h**v**h]hv}(hj#LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Lubh to (}(hj LhhhNhNubj)}(h**v**h]hv}(hj5LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Lubh% - 1) with full ordering. Otherwise, }(hj LhhhNhNubj)}(h**v**h]hv}(hjGLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Lubh2 is not modified and relaxed ordering is provided.}(hj LhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubjM)}(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.}(hj`LhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubjM)}(h **Return**h]j)}(hjqLh]hReturn}(hjsLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoLubah}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjLhhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh - 1), regardless of whether }(hjLhhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh was updated.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhl/var/lib/git/docbuild/linux/Documentation/driver-api/basics:96: ./include/linux/atomic/atomic-instrumented.hhMhjKubeh}(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}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLhhhjLhMubh)}(hraw_atomic_readh]j)}(hraw_atomic_readh]hraw_atomic_read}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhjLhhhjLhMubj4)}(h(const atomic_t *v)h]j:)}(hconst atomic_t *vh](j?)}(hjP*h]hconst}(hjMhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjMubjQ)}(h h]h }(hj$MhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubh)}(hhh]j)}(hatomic_th]hatomic_t}(hj5MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Mubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7MmodnameN classnameNjwjz)}j}]j)}jsjLsbc.raw_atomic_readasbuh1hhjMubjQ)}(h h]h }(hjUMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMubj)}(hjh]h*}(hjcMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hjh]hv}(hjpMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubah}(h]h ]h"]h$]h&]jjuh1j3hjLhhhjLhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjLhhhjLhMubah}(h]jLah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjLhMhjLhhubj4)}(hhh]jM)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMhhubah}(h]h ]h"]h$]h&]uh1j3hjLhhhjLhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjMjHjMjIjJjKuh1hhhhjhNhNubj)}(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)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubj)}(hhh]j)}(h*``const atomic_t *v`` pointer to atomic_t h](j)}(h``const atomic_t *v``h]jS)}(hjMh]hconst atomic_t *v}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjMubjM)}(h**Description**h]j)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hj+NhhhNhNubj)}(h**v**h]hv}(hj3NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Nubh with relaxed ordering.}(hj+NhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubjM)}(hhjNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubh)}(hhh]j)}(hatomic_th]hatomic_t}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Oubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjOmodnameN classnameNjwjz)}j}]j)}jsjNsbc.raw_atomic_read_acquireasbuh1hhjNubjQ)}(h h]h }(hj/OhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hj=OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hv}(hjJOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubah}(h]h ]h"]h$]h&]jjuh1j3hjNhhhjNhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjNhhhjNhMubah}(h]jNah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjNhMhjNhhubj4)}(hhh]jM)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjsOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjpOhhubah}(h]h ]h"]h$]h&]uh1j3hjNhhhjNhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjOjHjOjIjJjKuh1hhhhjhNhNubj)}(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)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubj)}(hhh]j)}(h*``const atomic_t *v`` pointer to atomic_t h](j)}(h``const atomic_t *v``h]jS)}(hjOh]hconst atomic_t *v}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubjM)}(h**Description**h]j)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjPhhhNhNubj)}(h**v**h]hv}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh with acquire ordering.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubjM)}(hDSafe to use in noinstr code; prefer atomic_read_acquire() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_read_acquire() elsewhere.}(hj&PhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubjM)}(h **Return**h]j)}(hj7Ph]hReturn}(hj9PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Pubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjMPhhhNhNubj)}(h**v**h]hv}(hjUPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMPubh.}(hjMPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPhhhjPhMubh)}(hraw_atomic_seth]j)}(hraw_atomic_seth]hraw_atomic_set}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1hhjPhhhjPhMubj4)}(h(atomic_t *v, int i)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjPmodnameN classnameNjwjz)}j}]j)}jsjPsbc.raw_atomic_setasbuh1hhjPubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hjh]hv}(hj QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubj:)}(hint ih](j)}(hinth]hint}(hj!QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjQ)}(h h]h }(hj/QhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]hi}(hj=QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubeh}(h]h ]h"]h$]h&]jjuh1j3hjPhhhjPhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjPhhhjPhMubah}(h]jPah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPhMhjPhhubj4)}(hhh]jM)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjfQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjcQhhubah}(h]h ]h"]h$]h&]uh1j3hjPhhhjPhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj~QjHj~QjIjJjKuh1hhhhjhNhNubj)}(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)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjQh]h atomic_t *v}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjQubj)}(h``int i`` int value to assign h](j)}(h ``int i``h]jS)}(hjQh]hint i}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjQubeh}(h]h ]h"]h$]h&]uh1jhjQubjM)}(h**Description**h]j)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubjM)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hj1RhhhNhNubj)}(h**v**h]hv}(hj9RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Rubh to }(hj1RhhhNhNubj)}(h**i**h]hi}(hjKRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Rubh with relaxed ordering.}(hj1RhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubjM)}(h;Safe to use in noinstr code; prefer atomic_set() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_set() elsewhere.}(hjdRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubjM)}(h **Return**h]j)}(hjuRh]hReturn}(hjwRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsRubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubjM)}(hNothing.h]hNothing.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#raw_atomic_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}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRhhhjRhMubh)}(hraw_atomic_set_releaseh]j)}(hraw_atomic_set_releaseh]hraw_atomic_set_release}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]jjuh1hhjRhhhjRhMubj4)}(h(atomic_t *v, int i)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjRmodnameN classnameNjwjz)}j}]j)}jsjRsbc.raw_atomic_set_releaseasbuh1hhjRubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubj)}(hjh]h*}(hj(ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(hjh]hv}(hj5ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjRubj:)}(hint ih](j)}(hinth]hint}(hjMShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjISubjQ)}(h h]h }(hj[ShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjISubj)}(hjh]hi}(hjiShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjISubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjRubeh}(h]h ]h"]h$]h&]jjuh1j3hjRhhhjRhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjRhhhjRhMubah}(h]jRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjRhMhjRhhubj4)}(hhh]jM)}(h atomic set with release orderingh]h atomic set with release ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjShhubah}(h]h ]h"]h$]h&]uh1j3hjRhhhjRhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjSjHjSjIjJjKuh1hhhhjhNhNubj)}(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)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjSubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjSh]h atomic_t *v}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjSubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjSubj)}(h``int i`` int value to assign h](j)}(h ``int i``h]jS)}(hj Th]hint i}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj Tubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjTubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hj%ThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj!ThMhj"Tubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhj!ThMhjSubeh}(h]h ]h"]h$]h&]uh1jhjSubjM)}(h**Description**h]j)}(hjGTh]h Description}(hjIThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjETubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjSubjM)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hj]ThhhNhNubj)}(h**v**h]hv}(hjeThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Tubh to }(hj]ThhhNhNubj)}(h**i**h]hi}(hjwThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Tubh with release ordering.}(hj]ThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjSubjM)}(hCSafe to use in noinstr code; prefer atomic_set_release() elsewhere.h]hCSafe to use in noinstr code; prefer atomic_set_release() elsewhere.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjSubjM)}(h **Return**h]j)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjSubjM)}(hNothing.h]hNothing.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjSubeh}(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}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjThhhjThMubh)}(hraw_atomic_addh]j)}(hraw_atomic_addh]hraw_atomic_add}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ](jjeh"]h$]h&]jjuh1hhjThhhjThMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj#UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjQ)}(h h]h }(hj1UhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hjh]hi}(hj?UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjZUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj\UmodnameN classnameNjwjz)}j}]j)}jsj Usbc.raw_atomic_addasbuh1hhjSUubjQ)}(h h]h }(hjzUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSUubj)}(hjh]hv}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubeh}(h]h ]h"]h$]h&]jjuh1j3hjThhhjThMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjThhhjThMubah}(h]jTah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjThMhjThhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUhhubah}(h]h ]h"]h$]h&]uh1j3hjThhhjThMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjUjHjUjIjJjKuh1hhhhjhNhNubj)}(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)}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjUh]hint i}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjUubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj8Vh]h atomic_t *v}(hj:VhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6Vubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj2Vubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjQVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjMVhMhjNVubah}(h]h ]h"]h$]h&]uh1jhj2Vubeh}(h]h ]h"]h$]h&]uh1jhjMVhMhjUubeh}(h]h ]h"]h$]h&]uh1jhjUubjM)}(h**Description**h]j)}(hjsVh]h Description}(hjuVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqVubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjVhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh to (}(hjVhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh + }(hjVhhhNhNubj)}(h**i**h]hi}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh) with relaxed ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUubjM)}(h;Safe to use in noinstr code; prefer atomic_add() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_add() elsewhere.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUubjM)}(h **Return**h]j)}(hjVh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUubjM)}(hNothing.h]hNothing.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUubeh}(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$WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Whhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&ubjQ)}(h h]h }(hj3WhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Whhhj2WhM&ubh)}(hraw_atomic_add_returnh]j)}(hraw_atomic_add_returnh]hraw_atomic_add_return}(hjEWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAWubah}(h]h ](jjeh"]h$]h&]jjuh1hhj Whhhj2WhM&ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjaWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]WubjQ)}(h h]h }(hjoWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]Wubj)}(hjh]hi}(hj}WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]Wubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYWubj:)}(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.raw_atomic_add_returnasbuh1hhjWubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]hv}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYWubeh}(h]h ]h"]h$]h&]jjuh1j3hj Whhhj2WhM&ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjWhhhj2WhM&ubah}(h]jWah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2WhM&hjWhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&hjWhhubah}(h]h ]h"]h$]h&]uh1j3hjWhhhj2WhM&ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjXjHjXjIjJjKuh1hhhhjhNhNubj)}(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)}(hjXh]h Parameters}(hj XhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjXubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hj=Xh]hint i}(hj?XhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;Xubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hj7Xubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjVXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRXhM'hjSXubah}(h]h ]h"]h$]h&]uh1jhj7Xubeh}(h]h ]h"]h$]h&]uh1jhjRXhM'hj4Xubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjvXh]h atomic_t *v}(hjxXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtXubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjpXubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhM(hjXubah}(h]h ]h"]h$]h&]uh1jhjpXubeh}(h]h ]h"]h$]h&]uh1jhjXhM(hj4Xubeh}(h]h ]h"]h$]h&]uh1jhjXubjM)}(h**Description**h]j)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjXubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjXhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh to (}(hjXhhhNhNubj)}(h**v**h]hv}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh + }(hjXhhhNhNubj)}(h**i**h]hi}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh) with full ordering.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hjXubjM)}(hBSafe to use in noinstr code; prefer atomic_add_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_add_return() elsewhere.}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjXubjM)}(h **Return**h]j)}(hjYh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hjXubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj3YhhhNhNubj)}(h**v**h]hv}(hj;YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Yubh.}(hj3YhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM.hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_add_return_acquire (C function)c.raw_atomic_add_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6int raw_atomic_add_return_acquire (int i, atomic_t *v)h]h)}(h5int raw_atomic_add_return_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjtYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpYhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpYhhhjYhMAubh)}(hraw_atomic_add_return_acquireh]j)}(hraw_atomic_add_return_acquireh]hraw_atomic_add_return_acquire}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhjpYhhhjYhMAubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]hi}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYmodnameN classnameNjwjz)}j}]j)}jsjYsbc.raw_atomic_add_return_acquireasbuh1hhjYubjQ)}(h h]h }(hjZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]hv}(hj#ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjYubeh}(h]h ]h"]h$]h&]jjuh1j3hjpYhhhjYhMAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjlYhhhjYhMAubah}(h]jgYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjYhMAhjiYhhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjLZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjIZhhubah}(h]h ]h"]h$]h&]uh1j3hjiYhhhjYhMAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjdZjHjdZjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_add_return_acquire() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjnZh]h Parameters}(hjpZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlZubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhjhZubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjZh]hint i}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjZubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZhMBhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMBhjZubj)}(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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMChjZubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjZhMChjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMChjZubeh}(h]h ]h"]h$]h&]uh1jhjhZubjM)}(h**Description**h]j)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMEhjhZubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj[hhhNhNubj)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh to (}(hj[hhhNhNubj)}(h**v**h]hv}(hj1[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh + }(hj[hhhNhNubj)}(h**i**h]hi}(hjC[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh) with acquire ordering.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhjhZubjM)}(hJSafe to use in noinstr code; prefer atomic_add_return_acquire() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_add_return_acquire() elsewhere.}(hj\[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMFhjhZubjM)}(h **Return**h]j)}(hjm[h]hReturn}(hjo[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk[ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMHhjhZubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj[hhhNhNubj)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMIhjhZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_add_return_release (C function)c.raw_atomic_add_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6int raw_atomic_add_return_release (int i, atomic_t *v)h]h)}(h5int raw_atomic_add_return_release(int i, atomic_t *v)h](j)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhj[hM\ubh)}(hraw_atomic_add_return_releaseh]j)}(hraw_atomic_add_return_releaseh]hraw_atomic_add_return_release}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[hhhj[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}(hj8\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:\modnameN classnameNjwjz)}j}]j)}jsj[sbc.raw_atomic_add_return_releaseasbuh1hhj1\ubjQ)}(h h]h }(hjX\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1\ubj)}(hjh]h*}(hjf\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1\ubj)}(hjh]hv}(hjs\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubeh}(h]h ]h"]h$]h&]jjuh1j3hj[hhhj[hM\ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[hhhj[hM\ubah}(h]j[ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj[hM\hj[hhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hj\hhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhj[hM\ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj\jHj\jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``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)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM`hj\ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hj\h]hint i}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM]hj\ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hM]hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hM]hj\ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj]h]h atomic_t *v}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hj]ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj/]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+]hM^hj,]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj+]hM^hj\ubeh}(h]h ]h"]h$]h&]uh1jhj\ubjM)}(h**Description**h]j)}(hjQ]h]h Description}(hjS]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO]ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM`hj\ubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjg]hhhNhNubj)}(h**v**h]hv}(hjo]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg]ubh to (}(hjg]hhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg]ubh + }(hjg]hhhNhNubj)}(h**i**h]hi}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg]ubh) with release ordering.}(hjg]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hj\ubjM)}(hJSafe to use in noinstr code; prefer atomic_add_return_release() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_add_return_release() elsewhere.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMahj\ubjM)}(h **Return**h]j)}(hj]h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMchj\ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj]hhhNhNubj)}(h**v**h]hv}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhj\ubeh}(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}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvubjQ)}(h h]h }(hj#^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^hhhj"^hMvubh)}(hraw_atomic_add_return_relaxedh]j)}(hraw_atomic_add_return_relaxedh]hraw_atomic_add_return_relaxed}(hj5^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj^hhhj"^hMvubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjQ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM^ubjQ)}(h h]h }(hj_^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjM^ubj)}(hjh]hi}(hjm^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjI^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)}jsj7^sbc.raw_atomic_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)}(hjh]hv}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjI^ubeh}(h]h ]h"]h$]h&]jjuh1j3hj^hhhj"^hMvubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj ^hhhj"^hMvubah}(h]j^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj"^hMvhj ^hhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvhj^hhubah}(h]h ]h"]h$]h&]uh1j3hj ^hhhj"^hMvubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj_jHj_jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_add_return_relaxed() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj _ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMzhj_ubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hj-_h]hint i}(hj/_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+_ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMwhj'_ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjF_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjB_hMwhjC_ubah}(h]h ]h"]h$]h&]uh1jhj'_ubeh}(h]h ]h"]h$]h&]uh1jhjB_hMwhj$_ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjf_h]h atomic_t *v}(hjh_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjd_ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMxhj`_ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{_hMxhj|_ubah}(h]h ]h"]h$]h&]uh1jhj`_ubeh}(h]h ]h"]h$]h&]uh1jhj{_hMxhj$_ubeh}(h]h ]h"]h$]h&]uh1jhj_ubjM)}(h**Description**h]j)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMzhj_ubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj_hhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh to (}(hj_hhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh + }(hj_hhhNhNubj)}(h**i**h]hi}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh) with relaxed ordering.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMyhj_ubjM)}(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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{hj_ubjM)}(h **Return**h]j)}(hj `h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj `ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM}hj_ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj#`hhhNhNubj)}(h**v**h]hv}(hj+`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#`ubh.}(hj#`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_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}(hjd`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj``hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjs`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj``hhhjr`hMubh)}(hraw_atomic_fetch_addh]j)}(hraw_atomic_fetch_addh]hraw_atomic_fetch_add}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj``hhhjr`hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]hi}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj`modnameN classnameNjwjz)}j}]j)}jsj`sbc.raw_atomic_fetch_addasbuh1hhj`ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hjh]hv}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubeh}(h]h ]h"]h$]h&]jjuh1j3hj``hhhjr`hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj\`hhhjr`hMubah}(h]jW`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjr`hMhjY`hhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhjvqubjM)}(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.}(hjjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hjvqubjM)}(h **Return**h]j)}(hj{rh]hReturn}(hj}rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyrubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjvqubjM)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMChjvqubeh}(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}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrhhhjrhMUubh)}(hraw_atomic_sub_return_relaxedh]j)}(hraw_atomic_sub_return_relaxedh]hraw_atomic_sub_return_relaxed}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1hhjrhhhjrhMUubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj subjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj subj)}(hjh]hi}(hj+shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj subeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjFshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCsubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjHsmodnameN classnameNjwjz)}j}]j)}jsjrsbc.raw_atomic_sub_return_relaxedasbuh1hhj?subjQ)}(h h]h }(hjfshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?subj)}(hjh]h*}(hjtshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?subj)}(hjh]hv}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?subeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjsubeh}(h]h ]h"]h$]h&]jjuh1j3hjrhhhjrhMUubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjrhhhjrhMUubah}(h]jrah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjrhMUhjrhhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUhjshhubah}(h]h ]h"]h$]h&]uh1j3hjrhhhjrhMUubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjsjHjsjIjJjKuh1hhhhjhNhNubj)}(hX"**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with 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)}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjsubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjsh]hint i}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMVhjsubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthMVhjtubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjthMVhjsubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj$th]h atomic_t *v}(hj&thhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"tubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhjtubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj=thhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9thMWhj:tubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhj9thMWhjsubeh}(h]h ]h"]h$]h&]uh1jhjsubjM)}(h**Description**h]j)}(hj_th]h Description}(hjathhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]tubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjsubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjuthhhNhNubj)}(h**v**h]hv}(hj}thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjutubh to (}(hjuthhhNhNubj)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjutubh - }(hjuthhhNhNubj)}(h**i**h]hi}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjutubh) with relaxed ordering.}(hjuthhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhjsubjM)}(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.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZhjsubjM)}(h **Return**h]j)}(hjth]hReturn}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hjsubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjthhhNhNubj)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM]hjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_atomic_fetch_sub (C function)c.raw_atomic_fetch_subhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-int raw_atomic_fetch_sub (int i, atomic_t *v)h]h)}(h,int raw_atomic_fetch_sub(int i, atomic_t *v)h](j)}(hinth]hint}(hj"uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlubjQ)}(h h]h }(hj1uhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuhhhj0uhMlubh)}(hraw_atomic_fetch_subh]j)}(hraw_atomic_fetch_subh]hraw_atomic_fetch_sub}(hjCuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?uubah}(h]h ](jjeh"]h$]h&]jjuh1hhjuhhhj0uhMlubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj_uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[uubjQ)}(h h]h }(hjmuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[uubj)}(hjh]hi}(hj{uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[uubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWuubj:)}(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)}jsjEusbc.raw_atomic_fetch_subasbuh1hhjuubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hjh]hv}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWuubeh}(h]h ]h"]h$]h&]jjuh1j3hjuhhhj0uhMlubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjuhhhj0uhMlubah}(h]juah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0uhMlhjuhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhjuhhubah}(h]h ]h"]h$]h&]uh1j3hjuhhhj0uhMlubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjvjHjvjIjJjKuh1hhhhjhNhNubj)}(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)}(hjvh]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMphjvubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj;vh]hint i}(hj=vhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9vubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhj5vubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjTvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPvhMmhjQvubah}(h]h ]h"]h$]h&]uh1jhj5vubeh}(h]h ]h"]h$]h&]uh1jhjPvhMmhj2vubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjtvh]h atomic_t *v}(hjvvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrvubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhjnvubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhMnhjvubah}(h]h ]h"]h$]h&]uh1jhjnvubeh}(h]h ]h"]h$]h&]uh1jhjvhMnhj2vubeh}(h]h ]h"]h$]h&]uh1jhjvubjM)}(h**Description**h]j)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMphjvubjM)}(h?Atomically updates **v** to (**v** - **i**) 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 - }(hjvhhhNhNubj)}(h**i**h]hi}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh) with full ordering.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohjvubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_sub() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_sub() elsewhere.}(hj whhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqhjvubjM)}(h **Return**h]j)}(hjwh]hReturn}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMshjvubjM)}(hThe original value of **v**.h](hThe original value of }(hj1whhhNhNubj)}(h**v**h]hv}(hj9whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1wubh.}(hj1whhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMthjvubeh}(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}(hjrwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnwhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnwhhhjwhMubh)}(hraw_atomic_fetch_sub_acquireh]j)}(hraw_atomic_fetch_sub_acquireh]hraw_atomic_fetch_sub_acquire}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]jjuh1hhjnwhhhjwhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]hi}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwmodnameN classnameNjwjz)}j}]j)}jsjwsbc.raw_atomic_fetch_sub_acquireasbuh1hhjwubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]hv}(hj!xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubeh}(h]h ]h"]h$]h&]jjuh1j3hjnwhhhjwhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjjwhhhjwhMubah}(h]jewah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhMhjgwhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjJxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGxhhubah}(h]h ]h"]h$]h&]uh1j3hjgwhhhjwhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbxjHjbxjIjJjKuh1hhhhjhNhNubj)}(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)}(hjlxh]h Parameters}(hjnxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjxubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfxubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjxh]hint i}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjxubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjxh]h atomic_t *v}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjxubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjxubeh}(h]h ]h"]h$]h&]uh1jhjfxubjM)}(h**Description**h]j)}(hjxh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfxubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjyhhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh to (}(hjyhhhNhNubj)}(h**v**h]hv}(hj/yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh - }(hjyhhhNhNubj)}(h**i**h]hi}(hjAyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh) with acquire ordering.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfxubjM)}(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.}(hjZyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfxubjM)}(h **Return**h]j)}(hjkyh]hReturn}(hjmyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiyubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfxubjM)}(hThe original value of **v**.h](hThe original value of }(hjyhhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfxubeh}(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}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyhhhjyhMubh)}(hraw_atomic_fetch_sub_releaseh]j)}(hraw_atomic_fetch_sub_releaseh]hraw_atomic_fetch_sub_release}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ](jjeh"]h$]h&]jjuh1hhjyhhhjyhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjQ)}(h h]h }(hj zhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubj)}(hjh]hi}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj6zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3zubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8zmodnameN classnameNjwjz)}j}]j)}jsjysbc.raw_atomic_fetch_sub_releaseasbuh1hhj/zubjQ)}(h h]h }(hjVzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/zubj)}(hjh]h*}(hjdzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/zubj)}(hjh]hv}(hjqzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/zubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjyubeh}(h]h ]h"]h$]h&]jjuh1j3hjyhhhjyhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjyhhhjyhMubah}(h]jyah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjyhMhjyhhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzhhubah}(h]h ]h"]h$]h&]uh1j3hjyhhhjyhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjzjHjzjIjJjKuh1hhhhjhNhNubj)}(hX"**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with 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)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hjzh]hint i}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjzubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj{h]h atomic_t *v}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj-{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj){hMhj*{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj){hMhjzubeh}(h]h ]h"]h$]h&]uh1jhjzubjM)}(h**Description**h]j)}(hjO{h]h Description}(hjQ{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM{ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hje{hhhNhNubj)}(h**v**h]hv}(hjm{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje{ubh to (}(hje{hhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje{ubh - }(hje{hhhNhNubj)}(h**i**h]hi}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje{ubh) with release ordering.}(hje{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_sub_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_sub_release() elsewhere.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzubjM)}(h **Return**h]j)}(hj{h]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzubjM)}(hThe original value of **v**.h](hThe original value of }(hj{hhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzubeh}(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}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj!|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|hhhj |hMubh)}(hraw_atomic_fetch_sub_relaxedh]j)}(hraw_atomic_fetch_sub_relaxedh]hraw_atomic_fetch_sub_relaxed}(hj3|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}(hjO|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK|ubjQ)}(h h]h }(hj]|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjK|ubj)}(hjh]hi}(hjk|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjG|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)}jsj5|sbc.raw_atomic_fetch_sub_relaxedasbuh1hhj|ubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hjh]hv}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjG|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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj|hhubah}(h]h ]h"]h$]h&]uh1j3hj|hhhj |hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj}jHj}jIjJjKuh1hhhhjhNhNubj)}(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)}(hj }h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj }ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj+}h]hint i}(hj-}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)}ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj%}ubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(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)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjd}h]h atomic_t *v}(hjf}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjb}ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^}ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj}}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjy}hMhjz}ubah}(h]h ]h"]h$]h&]uh1jhj^}ubeh}(h]h ]h"]h$]h&]uh1jhjy}hMhj"}ubeh}(h]h ]h"]h$]h&]uh1jhj}ubjM)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj}hhhNhNubj)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh to (}(hj}hhhNhNubj)}(h**v**h]hv}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh - }(hj}hhhNhNubj)}(h**i**h]hi}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh) with relaxed ordering.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_sub_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_sub_relaxed() elsewhere.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubjM)}(h **Return**h]j)}(hj ~h]hReturn}(hj ~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ~ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubjM)}(hThe original value of **v**.h](hThe original value of }(hj!~hhhNhNubj)}(h**v**h]hv}(hj)~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!~ubh.}(hj!~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](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}(hjb~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^~hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjq~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^~hhhjp~hMubh)}(hraw_atomic_inch]j)}(hraw_atomic_inch]hraw_atomic_inc}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj^~hhhjp~hMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj~modnameN classnameNjwjz)}j}]j)}jsj~sbc.raw_atomic_incasbuh1hhj~ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~ubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hjh]hv}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubah}(h]h ]h"]h$]h&]jjuh1j3hj^~hhhjp~hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjZ~hhhjp~hMubah}(h]jU~ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjp~hMhjW~hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjW~hhhjp~hMubeh}(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)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjGh]h atomic_t *v}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjAubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubjM)}(h>Atomically updates **v** to (**v** + 1) with 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubjM)}(h;Safe to use in noinstr code; prefer atomic_inc() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_inc() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"raw_atomic_inc_return (C function)c.raw_atomic_inc_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h'int raw_atomic_inc_return (atomic_t *v)h]h)}(h&int raw_atomic_inc_return(atomic_t *v)h](j)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj/hMubh)}(hraw_atomic_inc_returnh]j)}(hraw_atomic_inc_returnh]hraw_atomic_inc_return}(hjBhhhNhNubah}(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}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]j)}jsjDsbc.raw_atomic_inc_returnasbuh1hhjZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj/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 full orderingh]h#atomic increment with full ordering}(hjŀhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj€hhubah}(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 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjWhhhNhNubj)}(h**v**h]hv}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh to (}(hjWhhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh + 1) with full ordering.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBSafe to use in noinstr code; prefer atomic_inc_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_inc_return() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_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&]jjuh1hhjhhhjhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_inc_return_acquireasbuh1hhj+ubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]hv}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjׂh]h atomic_t *v}(hjقhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjՂubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjтubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjтubeh}(h]h ]h"]h$]h&]uh1jhjhMhj΂ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h>Atomically updates **v** to (**v** + 1) 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 + 1) with acquire ordering.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjlh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_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}(hjÃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj҃hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjуhMubh)}(hraw_atomic_inc_return_releaseh]j)}(hraw_atomic_inc_return_releaseh]hraw_atomic_inc_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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_inc_return_releaseasbuh1hhjubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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 release orderingh]h&atomic increment with release ordering}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjуhMubeh}(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_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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hJSafe to use in noinstr code; prefer atomic_inc_return_release() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_inc_return_release() elsewhere.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj=h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjShhhNhNubj)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM4ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM4ubh)}(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&]jjuh1hhjhhhjhM4ubj4)}(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_inc_return_relaxedasbuh1hhjͅubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjͅubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͅubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͅubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjɅubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM4ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM4ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM4hjhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM4hj5hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM4ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjPjHjPjIjJjKuh1hhhhjhNhNubj)}(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)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8hjTubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjyh]h atomic_t *v}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjwubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5hjsubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjpubah}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7hjTubjM)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʆubh + 1) with relaxed ordering.}(hjʆhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM6hjTubjM)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8hjTubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:hjTubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj$hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjTubeh}(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}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjahhhjshMJubh)}(hraw_atomic_fetch_inch]j)}(hraw_atomic_fetch_inch]hraw_atomic_fetch_inc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjahhhjshMJubj4)}(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_incasbuh1hhjubjQ)}(h h]h }(hjŇhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjӇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjahhhjshMJubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]hhhjshMJubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjshMJhjZhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJhjhhubah}(h]h ]h"]h$]h&]uh1j3hjZhhhjshMJubeh}(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_fetch_inc() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhj%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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMKhjDubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMKhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMKhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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.}(hjΈhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhj%ubjM)}(h **Return**h]j)}(hj߈h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj݈ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMPhj%ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2hhhjDhMdubh)}(hraw_atomic_fetch_inc_acquireh]j)}(hraw_atomic_fetch_inc_acquireh]hraw_atomic_fetch_inc_acquire}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1hhj2hhhjDhMdubj4)}(h (atomic_t *v)h]j:)}(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)}jsjYsbc.raw_atomic_fetch_inc_acquireasbuh1hhjoubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjkubah}(h]h ]h"]h$]h&]jjuh1j3hj2hhhjDhMdubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj.hhhjDhMdubah}(h]j)ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjDhMdhj+hhubj4)}(hhh]jM)}(h&atomic increment with acquire orderingh]h&atomic increment with acquire ordering}(hjډhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhj׉hhubah}(h]h ]h"]h$]h&]uh1j3hj+hhhjDhMdubeh}(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_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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMehjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMehj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMehjubah}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghjubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjlhhhNhNubj)}(h**v**h]hv}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh to (}(hjlhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh + 1) with acquire ordering.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjubjM)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMjhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjƊhhhNhNubj)}(h**v**h]hv}(hjΊhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƊubh.}(hjƊhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhjubeh}(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&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM~ubh)}(hraw_atomic_fetch_inc_releaseh]j)}(hraw_atomic_fetch_inc_releaseh]hraw_atomic_fetch_inc_release}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM~ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjImodnameN classnameNjwjz)}j}]j)}jsj*sbc.raw_atomic_fetch_inc_releaseasbuh1hhj@ubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM~ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjËjHjËjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjNjubjM)}(h**Description**h]j)}(hj'h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNjubjM)}(h>Atomically updates **v** to (**v** + 1) with release 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 release ordering.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNjubjM)}(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.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNjubeh}(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}(hj،hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԌhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjԌhhhjhMubh)}(hraw_atomic_fetch_inc_relaxedh]j)}(hraw_atomic_fetch_inc_relaxedh]hraw_atomic_fetch_inc_relaxed}(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_fetch_inc_relaxedasbuh1hhjubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj 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 relaxed orderingh]h&atomic increment with relaxed ordering}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h>Atomically updates **v** to (**v** + 1) with 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_inc_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_inc_relaxed() elsewhere.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjRh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_dech]j)}(hraw_atomic_dech]hraw_atomic_dec}(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_decasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjJhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjejHjejIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_dec() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(h>Atomically updates **v** to (**v** - 1) with 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubjM)}(hNothing.h]hNothing.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjiubeh}(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}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhjvhMubh)}(hraw_atomic_dec_returnh]j)}(hraw_atomic_dec_returnh]hraw_atomic_dec_return}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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)}jsjsbc.raw_atomic_dec_returnasbuh1hhjubjQ)}(h h]h }(hjȐhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj֐hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]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 decrement with full orderingh]h#atomic decrement with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hj]hhhjvhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj$jHj$jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Safe to use in noinstr code; prefer atomic_dec_return() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjMh]h atomic_t *v}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjGubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubjM)}(hBSafe to use in noinstr code; prefer atomic_dec_return() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_dec_return() elsewhere.}(hjёhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubeh}(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}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5hhhjGhMubh)}(hraw_atomic_dec_return_acquireh]j)}(hraw_atomic_dec_return_acquireh]hraw_atomic_dec_return_acquire}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](jjeh"]h$]h&]jjuh1hhj5hhhjGhMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj{modnameN classnameNjwjz)}j}]j)}jsj\sbc.raw_atomic_dec_return_acquireasbuh1hhjrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubah}(h]h ]h"]h$]h&]jjuh1j3hj5hhhjGhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1hhhjGhMubah}(h]j,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjGhMhj.hhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjݒhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjڒhhubah}(h]h ]h"]h$]h&]uh1j3hj.hhhjGhMubeh}(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_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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjohhhNhNubj)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh to (}(hjohhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh - 1) with acquire ordering.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjɓhhhNhNubj)}(h**v**h]hv}(hjѓhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɓubh.}(hjɓhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_dec_return_release (C function)c.raw_atomic_dec_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h/int raw_atomic_dec_return_release (atomic_t *v)h]h)}(h.int raw_atomic_dec_return_release(atomic_t *v)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_dec_return_releaseh]j)}(hraw_atomic_dec_return_releaseh]hraw_atomic_dec_return_release}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h (atomic_t *v)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.raw_atomic_dec_return_releaseasbuh1hhjCubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjƔjHjƔjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Safe to use in noinstr code; prefer atomic_dec_return_release() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjДh]h Parameters}(hjҔhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjΔubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjʔubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjʔubjM)}(h**Description**h]j)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjʔubjM)}(h>Atomically updates **v** to (**v** - 1) with release 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 release ordering.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjʔubjM)}(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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjʔubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjʔubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjʔubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*raw_atomic_dec_return_relaxed (C function)c.raw_atomic_dec_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/int raw_atomic_dec_return_relaxed (atomic_t *v)h]h)}(h.int raw_atomic_dec_return_relaxed(atomic_t *v)h](j)}(hinth]hint}(hjەhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjוhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjוhhhjhMubh)}(hraw_atomic_dec_return_relaxedh]j)}(hraw_atomic_dec_return_relaxedh]hraw_atomic_dec_return_relaxed}(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_dec_return_relaxedasbuh1hhjubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjVhhhNhNubah}(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'hjӕhhhjhMubah}(h]jΕah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjЕhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj|hhubah}(h]h ]h"]h$]h&]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 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hj–hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjٖhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjՖhMhj֖ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjՖ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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hJSafe to use in noinstr code; prefer atomic_dec_return_relaxed() elsewhere.h]hJSafe to use in noinstr code; prefer atomic_dec_return_relaxed() elsewhere.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjUh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjkhhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_atomic_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&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM$ubh)}(hraw_atomic_fetch_dech]j)}(hraw_atomic_fetch_dech]hraw_atomic_fetch_dec}(hj͗hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɗubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM$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)}jsjϗsbc.raw_atomic_fetch_decasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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 full orderingh]h#atomic decrement with full ordering}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjMhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM$ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhjhNhNubj)}(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)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjlubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM%hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjlubjM)}(h**Description**h]j)}(hj̘h]h Description}(hjΘhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʘubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjlubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&hjlubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_dec() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_dec() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjlubjM)}(h **Return**h]j)}(hj&h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjlubjM)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_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}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyhhhjhM>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&]jjuh1hhjyhhhjhM>ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_dec_acquireasbuh1hhjubjQ)}(h h]h }(hjݙhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]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 decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjhhubah}(h]h ]h"]h$]h&]uh1j3hjrhhhjhM>ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj9jHj9jIjJjKuh1hhhhjhNhNubj)}(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)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhj=ubj)}(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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hj\ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjwhM?hjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhM?hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhj=ubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj͚hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hj=ubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_dec_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_dec_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhj=ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhj=ubjM)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXubjQ)}(h h]h }(hj]hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhj\hMXubh)}(hraw_atomic_fetch_dec_releaseh]j)}(hraw_atomic_fetch_dec_releaseh]hraw_atomic_fetch_dec_release}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhj\hMXubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjqsbc.raw_atomic_fetch_dec_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjɛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjJhhhj\hMXubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjFhhhj\hMXubah}(h]jAah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj\hMXhjChhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhjhhubah}(h]h ]h"]h$]h&]uh1j3hjChhhj\hMXubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_dec_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj3h]h atomic_t *v}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhj-ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhMYhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMYhj*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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[hjubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZhjubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_dec_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_dec_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hjubjM)}(h **Return**h]j)}(hjȜh]hReturn}(hjʜhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƜubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjޜhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjޜubh.}(hjޜhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_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&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj-hMqubh)}(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&]jjuh1hhjhhhj-hMqubj4)}(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_fetch_dec_relaxedasbuh1hhjXubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjTubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj-hMqubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj-hMqubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj-hMqhjhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjÝhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMqhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj-hMqubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj۝jHj۝jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_dec_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMrhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjߝubjM)}(h**Description**h]j)}(hj?h]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMthjߝubjM)}(h>Atomically updates **v** to (**v** - 1) 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}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh - 1) with relaxed ordering.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMuhjߝubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_andh]j)}(hraw_atomic_andh]hraw_atomic_and}(hjhhhNhNubah}(h]h ]jah"]h$]h&]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 }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hjh]hi}(hjIhhhNhNubah}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjfmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_andasbuh1hhj]ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjȟhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjşhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_and() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj h]hint i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hj"hhhNhNubah}(h]h ]h"]h$]h&]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)}(hjBh]h atomic_t *v}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj@ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj<ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h;Safe to use in noinstr code; prefer atomic_and() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_and() elsewhere.}(hjؠhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_atomic_fetch_and (C function)c.raw_atomic_fetch_andhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-int raw_atomic_fetch_and (int i, atomic_t *v)h]h)}(h,int raw_atomic_fetch_and(int i, atomic_t *v)h](j)}(hinth]hint}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*hhhj<hMubh)}(hraw_atomic_fetch_andh]j)}(hraw_atomic_fetch_andh]hraw_atomic_fetch_and}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1hhj*hhhj<hMubj4)}(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_andasbuh1hhjubjQ)}(h h]h }(hj¡hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjСhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjݡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjcubeh}(h]h ]h"]h$]h&]jjuh1j3hj*hhhj<hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj&hhhj<hMubah}(h]j!ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj<hMhj#hhubj4)}(hhh]jM)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj<hMubeh}(h]h ](jAfunctioneh"]h$]h&]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)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjGh]hint i}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjAubj)}(hhh]jM)}(h int valueh]h int value}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(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&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjzubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhj>ubeh}(h]h ]h"]h$]h&]uh1jhj"ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubjM)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hjѢhhhNhNubj)}(h**v**h]hv}(hj٢hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjѢubh to (}(hjѢhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjѢubh & }(hjѢhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjѢubh) with full ordering.}(hjѢhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_and() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_and() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubjM)}(h **Return**h]j)}(hj'h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubjM)}(hThe original value of **v**.h](hThe original value of }(hj=hhhNhNubj)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_and_acquire (C function)c.raw_atomic_fetch_and_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_and_acquire (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_and_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzhhhjhMubh)}(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&]jjuh1hhjzhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjɣhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjףhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_and_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjzhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjvhhhjhMubah}(h]jqah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjshhubj4)}(hhh]jM)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjShhubah}(h]h ]h"]h$]h&]uh1j3hjshhhjhMubeh}(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 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)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjФh]h atomic_t *v}(hjҤhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjΤubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjʤubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjʤubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjrubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubjM)}(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}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh) with acquire ordering.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubjM)}(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.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubjM)}(h **Return**h]j)}(hjwh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_and_release (C function)c.raw_atomic_fetch_and_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_and_release (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_and_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjΥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʥhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjݥhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjʥhhhjܥhMubh)}(hraw_atomic_fetch_and_releaseh]j)}(hraw_atomic_fetch_and_releaseh]hraw_atomic_fetch_and_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjʥhhhjܥhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_and_releaseasbuh1hhj;ubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(hjh]hv}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjʥhhhjܥhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjƥhhhjܥhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjܥhMhjåhhubj4)}(hhh]jM)}(h(atomic bitwise AND with release orderingh]h(atomic bitwise AND with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjåhhhjܥhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_and_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjȦh]h Parameters}(hjʦhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƦubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj¦ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjަ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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjަubeh}(h]h ]h"]h$]h&]uh1jhj¦ubjM)}(h**Description**h]j)}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj¦ubjM)}(hBAtomically updates **v** to (**v** & **i**) with release ordering.h](hAtomically updates }(hjqhhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh to (}(hjqhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh & }(hjqhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh) with release ordering.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj¦ubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_and_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_and_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj¦ubjM)}(h **Return**h]j)}(hjǧh]hReturn}(hjɧhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjŧubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj¦ubjM)}(hThe original value of **v**.h](hThe original value of }(hjݧhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݧubh.}(hjݧhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj¦ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_and_relaxed (C function)c.raw_atomic_fetch_and_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_and_relaxed (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_and_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj,hMubh)}(hraw_atomic_fetch_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&]jjuh1hhjhhhj,hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]hi}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubj:)}(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)}jsjAsbc.raw_atomic_fetch_and_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjͨhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj,hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj,hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj,hMhjhhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj,hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_and_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj7h]hint i}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj1ubj)}(hhh]jM)}(h int valueh]h int value}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhj.ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjph]h atomic_t *v}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj.ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjɩhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj۩hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_and_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_and_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj-hhhNhNubj)}(h**v**h]hv}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_andnot (C function)c.raw_atomic_andnothNtauh1hhjhhhNhNubh)}(hhh](h)}(h+void raw_atomic_andnot (int i, atomic_t *v)h]h)}(h*void raw_atomic_andnot(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj}hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjhhhj|hMubh)}(hraw_atomic_andnoth]j)}(hraw_atomic_andnoth]hraw_atomic_andnot}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjjhhhj|hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjǪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߪubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_andnotasbuh1hhj۪ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj۪ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۪ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj۪ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]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 bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjChhubah}(h]h ]h"]h$]h&]uh1j3hjchhhj|hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj^jHj^jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_andnot() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hj«hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj٫hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjիhMhj֫ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjիhMhj~ubeh}(h]h ]h"]h$]h&]uh1jhjbubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubjM)}(h>Safe to use in noinstr code; prefer atomic_andnot() elsewhere.h]h>Safe to use in noinstr code; prefer atomic_andnot() elsewhere.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubjM)}(h **Return**h]j)}(hjgh]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubjM)}(hNothing.h]hNothing.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_fetch_andnot (C function)c.raw_atomic_fetch_andnothNtauh1hhjhhhNhNubh)}(hhh](h)}(h0int raw_atomic_fetch_andnot (int i, atomic_t *v)h]h)}(h/int raw_atomic_fetch_andnot(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_fetch_andnoth]j)}(hraw_atomic_fetch_andnoth]hraw_atomic_fetch_andnot}(hjͬhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɬubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj"modnameN classnameNjwjz)}j}]j)}jsjϬsbc.raw_atomic_fetch_andnotasbuh1hhjubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with full ordering. Safe to use in noinstr code; prefer atomic_fetch_andnot() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjŭh]hint i}(hjǭhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjíubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hjޭhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjڭhMhjۭubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjڭhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjOhhhNhNubj)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh to (}(hjOhhhNhNubj)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh & }(hjOhhhNhNubj)}(h**~i**h]h~i}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh) with full ordering.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hDSafe to use in noinstr code; prefer atomic_fetch_andnot() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_fetch_andnot() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjîhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_fetch_andnot_acquire (C function)!c.raw_atomic_fetch_andnot_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h8int raw_atomic_fetch_andnot_acquire (int i, atomic_t *v)h]h)}(h7int raw_atomic_fetch_andnot_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hM/ubh)}(hraw_atomic_fetch_andnot_acquireh]j)}(hraw_atomic_fetch_andnot_acquireh]hraw_atomic_fetch_andnot_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hM/ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]hi}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjrmodnameN classnameNjwjz)}j}]j)}jsjsb!c.raw_atomic_fetch_andnot_acquireasbuh1hhjiubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hM/ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hM/ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hM/hjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with acquire orderingh]h,atomic bitwise AND NOT with acquire ordering}(hjԯhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/hjѯhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hM/ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_fetch_andnot_acquire() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3hjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0hjubj)}(hhh]jM)}(h int valueh]h int value}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*hM0hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hM0hj ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjNh]h atomic_t *v}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM1hjHubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchM1hjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchM1hj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3hjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hj˰hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2hjubjM)}(hLSafe to use in noinstr code; prefer atomic_fetch_andnot_acquire() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_fetch_andnot_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM4hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM6hjubjM)}(hThe original value of **v**.h](hThe original value of }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_fetch_andnot_release (C function)!c.raw_atomic_fetch_andnot_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h8int raw_atomic_fetch_andnot_release (int i, atomic_t *v)h]h)}(h7int raw_atomic_fetch_andnot_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHhhhjZhMJubh)}(hraw_atomic_fetch_andnot_releaseh]j)}(hraw_atomic_fetch_andnot_releaseh]hraw_atomic_fetch_andnot_release}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1hhjHhhhjZhMJubj4)}(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)}jsjosb!c.raw_atomic_fetch_andnot_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjHhhhjZhMJubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjDhhhjZhMJubah}(h]j?ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjZhMJhjAhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJhj!hhubah}(h]h ]h"]h$]h&]uh1j3hjAhhhjZhMJubeh}(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)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhj@ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjeh]hint i}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMKhj_ubj)}(hhh]jM)}(h int valueh]h int value}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjzhMKhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMKhj\ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMLhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhj\ubeh}(h]h ]h"]h$]h&]uh1jhj@ubjM)}(h**Description**h]j)}(hjٲh]h Description}(hj۲hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjײubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhj@ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**~i**h]h~i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOhj@ubjM)}(h **Return**h]j)}(hjEh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhj@ubjM)}(hThe original value of **v**.h](hThe original value of }(hj[hhhNhNubj)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMdubh)}(hraw_atomic_fetch_andnot_relaxedh]j)}(hraw_atomic_fetch_andnot_relaxedh]hraw_atomic_fetch_andnot_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMdubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjٳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjճubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjճubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjճubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjѳubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb!c.raw_atomic_fetch_andnot_relaxedasbuh1hhj ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjѳubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMdubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMdubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMdhjhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhjqhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMdubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_andnot_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMehjubj)}(hhh]jM)}(h int valueh]h int value}(hjδhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjʴhMehj˴ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjʴhMehjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhhjubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(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]h~i}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh) with relaxed ordering.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghjubjM)}(hLSafe to use in noinstr code; prefer atomic_fetch_andnot_relaxed() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_fetch_andnot_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMihjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_or (C function)c.raw_atomic_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h'void raw_atomic_or (int i, atomic_t *v)h]h)}(h&void raw_atomic_or(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM{ubh)}(h raw_atomic_orh]j)}(h raw_atomic_orh]h raw_atomic_or}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM{ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hjh]hi}(hjEhhhNhNubah}(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 reftargetjbmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_orasbuh1hhjYubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(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]jߵah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM{hjhhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjĶhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM{ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjܶjHjܶjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_or() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM|hjubj)}(hhh]jM)}(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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM}hj8ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjShM}hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShM}hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjyh]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh | }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM~hjubjM)}(h:Safe to use in noinstr code; prefer atomic_or() elsewhere.h]h:Safe to use in noinstr code; prefer atomic_or() elsewhere.}(hjԷhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_fetch_or (C function)c.raw_atomic_fetch_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h,int raw_atomic_fetch_or (int i, atomic_t *v)h]h)}(h+int raw_atomic_fetch_or(int i, atomic_t *v)h](j)}(hinth]hint}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&hhhj8hMubh)}(hraw_atomic_fetch_orh]j)}(hraw_atomic_fetch_orh]hraw_atomic_fetch_or}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](jjeh"]h$]h&]jjuh1hhj&hhhj8hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(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)}jsjMsbc.raw_atomic_fetch_orasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj̸hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjٸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj_ubeh}(h]h ]h"]h$]h&]jjuh1j3hj&hhhj8hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj"hhhj8hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj8hMhjhhubj4)}(hhh]jM)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj8hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with full ordering. Safe to use in noinstr code; prefer atomic_fetch_or() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjCh]hint i}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj=ubj)}(hhh]jM)}(h int valueh]h int value}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhj: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&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjvubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhj:ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hj͹hhhNhNubj)}(h**v**h]hv}(hjչhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͹ubh to (}(hj͹hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͹ubh | }(hj͹hhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͹ubh) with full ordering.}(hj͹hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj#h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj9hhhNhNubj)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(raw_atomic_fetch_or_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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvhhhjhMubh)}(hraw_atomic_fetch_or_acquireh]j)}(hraw_atomic_fetch_or_acquireh]hraw_atomic_fetch_or_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjvhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjźhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjӺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_or_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjvhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjrhhhjhMubah}(h]jmah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjohhubj4)}(hhh]jM)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjOhhubah}(h]h ]h"]h$]h&]uh1j3hjohhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjjHjjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with 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)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj̻h]h atomic_t *v}(hjλhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjʻubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjƻubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjƻubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjnubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubjM)}(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}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh | }(hjhhhNhNubj)}(h**i**h]hi}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubjM)}(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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubjM)}(h **Return**h]j)}(hjsh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(raw_atomic_fetch_or_release (C function)c.raw_atomic_fetch_or_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h4int raw_atomic_fetch_or_release (int i, atomic_t *v)h]h)}(h3int raw_atomic_fetch_or_release(int i, atomic_t *v)h](j)}(hinth]hint}(hjʼhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƼhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjټhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjƼhhhjؼhMubh)}(hraw_atomic_fetch_or_releaseh]j)}(hraw_atomic_fetch_or_releaseh]hraw_atomic_fetch_or_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjƼhhhjؼhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(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_releaseasbuh1hhj7ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hjh]hv}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjƼhhhjؼhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj¼hhhjؼhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjؼhMhjhhubj4)}(hhh]jM)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjؼhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with release ordering. Safe to use in noinstr code; prefer atomic_fetch_or_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjĽh]h Parameters}(hjƽhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj½ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjݽubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjݽubeh}(h]h ]h"]h$]h&]uh1jhjhMhjڽubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjڽ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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hjmhhhNhNubj)}(h**v**h]hv}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh to (}(hjmhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh | }(hjmhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh) with release ordering.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hHSafe to use in noinstr code; prefer atomic_fetch_or_release() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_fetch_or_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjþh]hReturn}(hjžhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjپhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjپubh.}(hjپhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(raw_atomic_fetch_or_relaxed (C function)c.raw_atomic_fetch_or_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h4int raw_atomic_fetch_or_relaxed (int i, atomic_t *v)h]h)}(h3int raw_atomic_fetch_or_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj(hMubh)}(hraw_atomic_fetch_or_relaxedh]j)}(hraw_atomic_fetch_or_relaxedh]hraw_atomic_fetch_or_relaxed}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj(hMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]hi}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj=sbc.raw_atomic_fetch_or_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjɿhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj(hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj(hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj(hMhjhhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj(hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_or_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hj3h]hint i}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj-ubj)}(hhh]jM)}(h int valueh]h int value}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj*ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjlh]h atomic_t *v}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjfubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh | }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hHSafe to use in noinstr code; prefer atomic_fetch_or_relaxed() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_fetch_or_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj)hhhNhNubj)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_xor (C function)c.raw_atomic_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h(void raw_atomic_xor (int i, atomic_t *v)h]h)}(h'void raw_atomic_xor(int i, atomic_t *v)h](j)}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjyhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfhhhjxhMubh)}(hraw_atomic_xorh]j)}(hraw_atomic_xorh]hraw_atomic_xor}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjfhhhjxhMubj4)}(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_xorasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjfhhhjxhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjbhhhjxhMubah}(h]j]ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjxhMhj_hhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj?hhubah}(h]h ]h"]h$]h&]uh1j3hj_hhhjxhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjZjHjZjIjJjKuh1hhhhjhNhNubj)}(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)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jhjhMhjzubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^ubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(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}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^ubjM)}(h;Safe to use in noinstr code; prefer atomic_xor() elsewhere.h]h;Safe to use in noinstr code; prefer atomic_xor() elsewhere.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^ubjM)}(h **Return**h]j)}(hjch]hReturn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^ubjM)}(hNothing.h]hNothing.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!raw_atomic_fetch_xor (C function)c.raw_atomic_fetch_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-int raw_atomic_fetch_xor (int i, atomic_t *v)h]h)}(h,int raw_atomic_fetch_xor(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_fetch_xorh]j)}(hraw_atomic_fetch_xorh]hraw_atomic_fetch_xor}(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*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjWhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj}hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with full ordering. Safe to use in noinstr code; prefer atomic_fetch_xor() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h int valueh]h int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h?Atomically updates **v** to (**v** ^ **i**) with full 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 full ordering.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hASafe to use in noinstr code; prefer atomic_fetch_xor() elsewhere.h]hASafe to use in noinstr code; prefer atomic_fetch_xor() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_xor_acquire (C function)c.raw_atomic_fetch_xor_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_xor_acquire (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_xor_acquire(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(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}(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_xor_acquireasbuh1hhjeubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjeubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubeh}(h]h ]h"]h$]h&]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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_fetch_xor_acquire() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj)}(hhh]jM)}(h int valueh]h int value}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj&hM hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM hjubj)}(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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjDubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hM!hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ^ }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_xor_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_xor_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM&hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_xor_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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:ubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhjVhM:ubh)}(hraw_atomic_fetch_xor_releaseh]j)}(hraw_atomic_fetch_xor_releaseh]hraw_atomic_fetch_xor_release}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhhjVhM:ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj}ubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjksbc.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)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj}ubeh}(h]h ]h"]h$]h&]jjuh1j3hjDhhhjVhM:ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj@hhhjVhM:ubah}(h]j;ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjVhM:hj=hhubj4)}(hhh]jM)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:hjhhubah}(h]h ]h"]h$]h&]uh1j3hj=hhhjVhM:ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj8jHj8jIjJjKuh1hhhhjhNhNubj)}(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)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hj<ubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjah]hint i}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hj[ubj)}(hhh]jM)}(h int valueh]h int value}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjvhM;hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhM;hjXubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM<hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjXubeh}(h]h ]h"]h$]h&]uh1jhj<ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hj<ubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh ^ }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hj<ubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_xor_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_xor_release() elsewhere.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hj<ubjM)}(h **Return**h]j)}(hjAh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhj<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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_fetch_xor_relaxed (C function)c.raw_atomic_fetch_xor_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h5int raw_atomic_fetch_xor_relaxed (int i, atomic_t *v)h]h)}(h4int raw_atomic_fetch_xor_relaxed(int i, atomic_t *v)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMTubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMTubh)}(hraw_atomic_fetch_xor_relaxedh]j)}(hraw_atomic_fetch_xor_relaxedh]hraw_atomic_fetch_xor_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMTubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_fetch_xor_relaxedasbuh1hhjubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMTubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMTubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMThjhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMThjmhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMTubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``int i`` int value ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_fetch_xor_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhjubj)}(hhh](j)}(h``int i`` int value h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUhjubj)}(hhh]jM)}(h int valueh]h int value}(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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMVhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMVhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMXhjubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hj;hhhNhNubj)}(h**v**h]hv}(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}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh) with relaxed ordering.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhjubjM)}(hISafe to use in noinstr code; prefer atomic_fetch_xor_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic_fetch_xor_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMYhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_xchg (C function)c.raw_atomic_xchghNtauh1hhjhhhNhNubh)}(hhh](h)}(h*int raw_atomic_xchg (atomic_t *v, int new)h]h)}(h)int raw_atomic_xchg(atomic_t *v, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMkubh)}(hraw_atomic_xchgh]j)}(hraw_atomic_xchgh]hraw_atomic_xchg}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMkubj4)}(h(atomic_t *v, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj*modnameN classnameNjwjz)}j}]j)}jsj sbc.raw_atomic_xchgasbuh1hhj!ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hjh]hv}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMlhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMlhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hj;h]hint new}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhj5ubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhMmhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMmhjubeh}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMohjubjM)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_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 reftargetj modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint oldh](j)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjVubj)}(holdh]hold}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(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 acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(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&``int old`` int value to compare with h](j)}(h ``int old``h]jS)}(hjOh]hint old}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjIubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhj ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with acquire ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hGSafe to use in noinstr code; prefer atomic_cmpxchg_acquire() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_cmpxchg_acquire() elsewhere.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjSh]hReturn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjihhhNhNubj)}(h**v**h]hv}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_cmpxchg_release (C function)c.raw_atomic_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h>int raw_atomic_cmpxchg_release (atomic_t *v, int old, int new)h]h)}(h=int raw_atomic_cmpxchg_release(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic_cmpxchg_releaseh]j)}(hraw_atomic_cmpxchg_releaseh]hraw_atomic_cmpxchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(atomic_t *v, int old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_cmpxchg_releaseasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint oldh](j)}(hinth]hint}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(holdh]hold}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int old`` int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_cmpxchg_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]jS)}(hj2h]hint old}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj,ubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjkh]hint new}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjeubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with release ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hGSafe to use in noinstr code; prefer atomic_cmpxchg_release() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_cmpxchg_release() elsewhere.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj6h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_cmpxchg_relaxed (C function)c.raw_atomic_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h>int raw_atomic_cmpxchg_relaxed (atomic_t *v, int old, int new)h]h)}(h=int raw_atomic_cmpxchg_relaxed(atomic_t *v, int old, int new)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM(ubh)}(hraw_atomic_cmpxchg_relaxedh]j)}(hraw_atomic_cmpxchg_relaxedh]hraw_atomic_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM(ubj4)}(h(atomic_t *v, int old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_cmpxchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(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 }(hj.hhhNhNubah}(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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hnewh]hnew}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM(ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM(ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM(hjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM(ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int old`` int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_cmpxchg_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM,hjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubj)}(h&``int old`` int value to compare with h](j)}(h ``int old``h]jS)}(hjh]hint old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(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 ``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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjHubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchM+hjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchM+hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM,hjubjM)}(hGSafe to use in noinstr code; prefer atomic_cmpxchg_relaxed() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_cmpxchg_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM1hjubjM)}(hThe original value of **v**.h](hThe original value of }(hj/hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]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)}(hj^h]hint new}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj\ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjXubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjshMfhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMfhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMkhjubjM)}(h **Return**h]j)}(hjMh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMmhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh if the exchange occurred, }(hjchhhNhNubj)}(h **false**h]hfalse}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh otherwise.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMnhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic_try_cmpxchg_release (C function) c.raw_atomic_try_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hDbool raw_atomic_try_cmpxchg_release (atomic_t *v, int *old, int new)h]h)}(hCbool raw_atomic_try_cmpxchg_release(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_try_cmpxchg_releaseh]j)}(hraw_atomic_try_cmpxchg_releaseh]hraw_atomic_try_cmpxchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h (atomic_t *v, int *old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.raw_atomic_try_cmpxchg_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint *oldh](j)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(holdh]hold}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint newh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_try_cmpxchg_release() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj h]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hjFh]hint *old}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj@ubj)}(hhh]jM)}(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[hMhjubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with release ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_release() elsewhere.h]hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_release() elsewhere.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjnh]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic_try_cmpxchg_relaxed (C function) c.raw_atomic_try_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDbool raw_atomic_try_cmpxchg_relaxed (atomic_t *v, int *old, int new)h]h)}(hCbool raw_atomic_try_cmpxchg_relaxed(atomic_t *v, int *old, int new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_try_cmpxchg_relaxedh]j)}(hraw_atomic_try_cmpxchg_relaxedh]hraw_atomic_try_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h (atomic_t *v, int *old, int new)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.raw_atomic_try_cmpxchg_relaxedasbuh1hhj ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint *oldh](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(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&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int *old`` pointer to int value to compare with ``int new`` int value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_try_cmpxchg_relaxed() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj.h]h atomic_t *v}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj(ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhj%ubj)}(h2``int *old`` pointer to int value to compare with h](j)}(h ``int *old``h]jS)}(hjgh]hint *old}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjaubj)}(hhh]jM)}(h$pointer to int value to compare withh]h$pointer to int value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj%ubj)}(h ``int new`` int value to assign h](j)}(h ``int new``h]jS)}(hjh]hint new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hint value to assignh]hint value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj%ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with relaxed ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubjM)}(hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic_try_cmpxchg_relaxed() elsewhere.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_sub_and_test (C function)c.raw_atomic_sub_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1bool raw_atomic_sub_and_test (int i, atomic_t *v)h]h)}(h0bool raw_atomic_sub_and_test(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_sub_and_testh]j)}(hraw_atomic_sub_and_testh]hraw_atomic_sub_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjQ)}(h h]h }(hj>hhhNhNubah}(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:)}(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)}jsjsbc.raw_atomic_sub_and_testasbuh1hhj`ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h3atomic subtract and test if zero with full orderingh]h3atomic subtract and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXD**Parameters** ``int i`` int value to subtract ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Safe to use in noinstr code; prefer atomic_sub_and_test() elsewhere. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h ``int i`` int value to subtract h](j)}(h ``int i``h]jS)}(hj h]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hint value to subtracth]hint value to subtract}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjEh]h atomic_t *v}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj?ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(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&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hDSafe to use in noinstr code; prefer atomic_sub_and_test() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_sub_and_test() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is zero, }(hjhhhNhNubj)}(h **false**h]hfalse}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_dec_and_test (C function)c.raw_atomic_dec_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h*bool raw_atomic_dec_and_test (atomic_t *v)h]h)}(h)bool raw_atomic_dec_and_test(atomic_t *v)h](j)}(hjh]hbool}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_hhhjphMubh)}(hraw_atomic_dec_and_testh]j)}(hraw_atomic_dec_and_testh]hraw_atomic_dec_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj_hhhjphMubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_dec_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj_hhhjphMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[hhhjphMubah}(h]jVah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjphMhjXhhubj4)}(hhh]jM)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjXhhhjphMubeh}(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)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjGh]h atomic_t *v}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjAubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubjM)}(hDSafe to use in noinstr code; prefer atomic_dec_and_test() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_dec_and_test() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_inc_and_test (C function)c.raw_atomic_inc_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h*bool raw_atomic_inc_and_test (atomic_t *v)h]h)}(h)bool raw_atomic_inc_and_test(atomic_t *v)h](j)}(hjh]hbool}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOhhhj`hMubh)}(hraw_atomic_inc_and_testh]j)}(hraw_atomic_inc_and_testh]hraw_atomic_inc_and_test}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOhhhj`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)}jsjusbc.raw_atomic_inc_and_testasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjOhhhj`hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhj`hMubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj`hMhjHhhubj4)}(hhh]jM)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjHhhhj`hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Safe to use in noinstr code; prefer atomic_inc_and_test() elsewhere. **Return** **true** if the resulting value of **v** is zero, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj7h]h atomic_t *v}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj1ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhj.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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hDSafe to use in noinstr code; prefer atomic_inc_and_test() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_inc_and_test() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is zero, }(hjhhhNhNubj)}(h **false**h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_add_negative (C function)c.raw_atomic_add_negativehNtauh1hhjhhhNhNubh)}(hhh](h)}(h1bool raw_atomic_add_negative (int i, atomic_t *v)h]h)}(h0bool raw_atomic_add_negative(int i, atomic_t *v)h](j)}(hjh]hbool}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?hhhjPhM ubh)}(hraw_atomic_add_negativeh]j)}(hraw_atomic_add_negativeh]hraw_atomic_add_negative}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj?hhhjPhM 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&]noemphjjuh1j9hjwubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjesbc.raw_atomic_add_negativeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubeh}(h]h ]h"]h$]h&]jjuh1j3hj?hhhjPhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj;hhhjPhM ubah}(h]j6ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPhM hj8hhubj4)}(hhh]jM)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj8hhhjPhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj2jHj2jIjJjKuh1hhhhjhNhNubj)}(hXC**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic_add_negative() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj6ubj)}(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&]uh1jRhjYubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjUubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjphM hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphM hjRubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj6ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj6ubjM)}(hDSafe to use in noinstr code; prefer atomic_add_negative() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_add_negative() elsewhere.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj6ubjM)}(h **Return**h]j)}(hj;h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj6ubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh if the resulting value of }(hjQhhhNhNubj)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh is negative, }(hjQhhhNhNubj)}(h **false**h]hfalse}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh otherwise.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_add_negative_acquire (C function)!c.raw_atomic_add_negative_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9bool raw_atomic_add_negative_acquire (int i, atomic_t *v)h]h)}(h8bool raw_atomic_add_negative_acquire(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic_add_negative_acquireh]j)}(hraw_atomic_add_negative_acquireh]hraw_atomic_add_negative_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj'modnameN classnameNjwjz)}j}]j)}jsjsb!c.raw_atomic_add_negative_acquireasbuh1hhjubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h5atomic add and test if negative with acquire orderingh]h5atomic add and test if negative with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXN**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_add_negative_acquire() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjThhhNhNubj)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh to (}(hjThhhNhNubj)}(h**v**h]hv}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh + }(hjThhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh) with acquire ordering.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hLSafe to use in noinstr code; prefer atomic_add_negative_acquire() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_add_negative_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM! hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM# hjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is negative, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_add_negative_release (C function)!c.raw_atomic_add_negative_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9bool raw_atomic_add_negative_release (int i, atomic_t *v)h]h)}(h8bool raw_atomic_add_negative_release(int i, atomic_t *v)h](j)}(hjh]hbool}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7 ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj.hM7 ubh)}(hraw_atomic_add_negative_releaseh]j)}(hraw_atomic_add_negative_releaseh]hraw_atomic_add_negative_release}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj.hM7 ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYubj)}(hjh]hi}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjCsb!c.raw_atomic_add_negative_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj.hM7 ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj.hM7 ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj.hM7 hjhhubj4)}(hhh]jM)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7 hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj.hM7 ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXN**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic_add_negative_release() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hj9h]hint i}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 hj3ubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhM8 hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhM8 hj0ubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjrh]h atomic_t *v}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hjlubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM9 hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhM9 hj0ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM: hjubjM)}(hLSafe to use in noinstr code; prefer atomic_add_negative_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_add_negative_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM> hjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh if the resulting value of }(hj/hhhNhNubj)}(h**v**h]hv}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh is negative, }(hj/hhhNhNubj)}(h **false**h]hfalse}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh otherwise.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM? hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNube(h)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic_add_negative_relaxed (C function)!c.raw_atomic_add_negative_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9bool raw_atomic_add_negative_relaxed (int i, atomic_t *v)h]h)}(h8bool raw_atomic_add_negative_relaxed(int i, atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMQ ubh)}(hraw_atomic_add_negative_relaxedh]j)}(hraw_atomic_add_negative_relaxedh]hraw_atomic_add_negative_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMQ ubj4)}(h(int i, atomic_t *v)h](j:)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb!c.raw_atomic_add_negative_relaxedasbuh1hhjubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMQ ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMQ ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMQ hjhhubj4)}(hhh]jM)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ hjdhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMQ ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXN**Parameters** ``int i`` int value to add ``atomic_t *v`` pointer to atomic_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_add_negative_relaxed() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hjubj)}(hhh](j)}(h``int i`` int value to add h](j)}(h ``int i``h]jS)}(hjh]hint i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMR hjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMR hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMR hjubj)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMS hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMS hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj2hhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh to (}(hj2hhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh + }(hj2hhhNhNubj)}(h**i**h]hi}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh) with relaxed ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMT hjubjM)}(hLSafe to use in noinstr code; prefer atomic_add_negative_relaxed() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_add_negative_relaxed() elsewhere.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMV hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMX hjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is negative, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMY hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(raw_atomic_fetch_add_unless (C function)c.raw_atomic_fetch_add_unlesshNtauh1hhjhhhNhNubh)}(hhh](h)}(h;int raw_atomic_fetch_add_unless (atomic_t *v, int a, int u)h]h)}(h:int raw_atomic_fetch_add_unless(atomic_t *v, int a, int u)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMh ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj 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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj 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 reftargetjAmodnameN classnameNjwjz)}j}]j)}jsj"sbc.raw_atomic_fetch_add_unlessasbuh1hhj8ubjQ)}(h h]h }(hj_hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hjh]hv}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubj:)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjնh]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubj:)}(hint uh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hj\h]hu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hMh ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hMh ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hMh hjhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMh hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMl hj'ubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjLh]h atomic_t *v}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMi hjFubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahMi hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMi hjCubj)}(h``int a`` int value to add h](j)}(h ``int a``h]jS)}(hjh]hint a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMj hjubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMj hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMj hjCubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]jS)}(hjh]hint u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMk hjubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMk hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMk hjCubeh}(h]h ]h"]h$]h&]uh1jhj'ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMm hj'ubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh != }(hjhhhNhNubj)}(h**u**h]hu}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(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}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMl hj'ubjM)}(hHSafe to use in noinstr code; prefer atomic_fetch_add_unless() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_fetch_add_unless() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMo hj'ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMq hj'ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"raw_atomic_add_unless (C function)c.raw_atomic_add_unlesshNtauh1hhjhhhNhNubh)}(hhh](h)}(h6bool raw_atomic_add_unless (atomic_t *v, int a, int u)h]h)}(h5bool raw_atomic_add_unless(atomic_t *v, int a, int u)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic_add_unlessh]j)}(hraw_atomic_add_unlessh]hraw_atomic_add_unless}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(atomic_t *v, int a, int u)h](j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj3modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_add_unlessasbuh1hhj*ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjh]hv}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubj:)}(hint ah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjնh]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubj:)}(hint uh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hj\h]hu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_t *v`` pointer to atomic_t ``int a`` int value to add ``int u`` int value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_add_unless() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj>h]h atomic_t *v}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj8ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjShM hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShM hj5ubj)}(h``int a`` int value to add h](j)}(h ``int a``h]jS)}(hjwh]hint a}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjuubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjqubj)}(hhh]jM)}(hint value to addh]hint value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhM hj5ubj)}(h$``int u`` int value to compare with h](j)}(h ``int u``h]jS)}(hjh]hint u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hint value to compare withh]hint value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh != }(hjhhhNhNubj)}(h**u**h]hu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**a**h]ha}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh!) with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hBSafe to use in noinstr code; prefer atomic_add_unless() elsewhere.h]hBSafe to use in noinstr code; prefer atomic_add_unless() elsewhere.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic_inc_not_zero (C function)c.raw_atomic_inc_not_zerohNtauh1hhjhhhNhNubh)}(hhh](h)}(h*bool raw_atomic_inc_not_zero (atomic_t *v)h]h)}(h)bool raw_atomic_inc_not_zero(atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic_inc_not_zeroh]j)}(hraw_atomic_inc_not_zeroh]hraw_atomic_inc_not_zero}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jsj&sbc.raw_atomic_inc_not_zeroasbuh1hhj<ubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hjh]hv}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h/atomic increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX^**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_inc_not_zero() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj#h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj9hhhNhNubj)}(h**v**h]hv}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh != 0), atomically updates }(hj9hhhNhNubj)}(h**v**h]hv}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh to (}(hj9hhhNhNubj)}(h**v**h]hv}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh% + 1) with full ordering. Otherwise, }(hj9hhhNhNubj)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh2 is not modified and relaxed ordering is provided.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hDSafe to use in noinstr code; prefer atomic_inc_not_zero() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_inc_not_zero() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic_inc_unless_negative (C function) c.raw_atomic_inc_unless_negativehNtauh1hhjhhhNhNubh)}(hhh](h)}(h1bool raw_atomic_inc_unless_negative (atomic_t *v)h]h)}(h0bool raw_atomic_inc_unless_negative(atomic_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj%hM ubh)}(hraw_atomic_inc_unless_negativeh]j)}(hraw_atomic_inc_unless_negativeh]hraw_atomic_inc_unless_negative}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYmodnameN classnameNjwjz)}j}]j)}jsj:sb c.raw_atomic_inc_unless_negativeasbuh1hhjPubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubah}(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)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj%hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXe**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_inc_unless_negative() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hjh]h atomic_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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 (}(hjMhhhNhNubj)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh >= 0), atomically updates }(hjMhhhNhNubj)}(h**v**h]hv}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh to (}(hjMhhhNhNubj)}(h**v**h]hv}(hjyhhhNhNubah}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hKSafe to use in noinstr code; prefer atomic_inc_unless_negative() elsewhere.h]hKSafe to use in noinstr code; prefer atomic_inc_unless_negative() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic_dec_unless_positive (C function) c.raw_atomic_dec_unless_positivehNtauh1hhjhhhNhNubh)}(hhh](h)}(h1bool raw_atomic_dec_unless_positive (atomic_t *v)h]h)}(h0bool raw_atomic_dec_unless_positive(atomic_t *v)h](j)}(hjh]hbool}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(hhhj9hM ubh)}(hraw_atomic_dec_unless_positiveh]j)}(hraw_atomic_dec_unless_positiveh]hraw_atomic_dec_unless_positive}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1hhj(hhhj9hM ubj4)}(h (atomic_t *v)h]j:)}(h atomic_t *vh](h)}(hhh]j)}(hatomic_th]hatomic_t}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmmodnameN classnameNjwjz)}j}]j)}jsjNsb c.raw_atomic_dec_unless_positiveasbuh1hhjdubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubah}(h]h ]h"]h$]h&]jjuh1j3hj(hhhj9hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj$hhhj9hM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj9hM hj!hhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj!hhhj9hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXe**Parameters** ``atomic_t *v`` pointer to atomic_t **Description** If (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_dec_unless_positive() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj h]h atomic_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj% hM hj& ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj% hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjK h]h Description}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hja hhhNhNubj)}(h**v**h]hv}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja ubh <= 0), atomically updates }(hja hhhNhNubj)}(h**v**h]hv}(hj{ 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 full ordering. Otherwise, }(hja hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja ubh2 is not modified and relaxed ordering is provided.}(hja hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hKSafe to use in noinstr code; prefer atomic_dec_unless_positive() elsewhere.h]hKSafe to use in noinstr code; prefer atomic_dec_unless_positive() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh otherwise.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM 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< hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjO hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj< hhhjN hM ubh)}(hraw_atomic_dec_if_positiveh]j)}(hraw_atomic_dec_if_positiveh]hraw_atomic_dec_if_positive}(hja hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj] ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj< hhhjN 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)}jsjc sbc.raw_atomic_dec_if_positiveasbuh1hhjy 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)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hju ubah}(h]h ]h"]h$]h&]jjuh1j3hj< hhhjN hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8 hhhjN hM ubah}(h]j3 ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjN hM hj5 hhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj hhubah}(h]h ]h"]h$]h&]uh1j3hj5 hhhjN hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(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)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj)}(hhh]j)}(h$``atomic_t *v`` pointer to atomic_t h](j)}(h``atomic_t *v``h]jS)}(hj% h]h atomic_t *v}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj# ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubj)}(hhh]jM)}(hpointer to atomic_th]hpointer to atomic_t}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj: hM hj; ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj: hM hj ubah}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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 (}(hjv hhhNhNubj)}(h**v**h]hv}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv ubh > 0), atomically updates }(hjv hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv ubh to (}(hjv hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv ubh% - 1) with full ordering. Otherwise, }(hjv hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv ubh2 is not modified and relaxed ordering is provided.}(hjv hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubjM)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh - 1), regardless of whether }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh was updated.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](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}(hjJ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjL modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_readsbc.raw_atomic64_readasbuh1hhjC hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjl hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjC hhhjk hM ubh)}(hraw_atomic64_readh]j)}(hjh h]hraw_atomic64_read}(hj~ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjC hhhjk hM ubj4)}(h(const atomic64_t *v)h]j:)}(hconst atomic64_t *vh](j?)}(hjP*h]hconst}(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 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.raw_atomic64_readasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]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 load with relaxed orderingh]h!atomic load with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj hhubah}(h]h ]h"]h$]h&]uh1j3hj< hhhjk hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1 jHj1 jIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhj9 ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5 ubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]jS)}(hjZ h]hconst atomic64_t *v}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjX ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjT 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&]uh1jhjT ubeh}(h]h ]h"]h$]h&]uh1jhjo hM hjQ ubah}(h]h ]h"]h$]h&]uh1jhj5 ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5 ubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh with relaxed ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5 ubjM)}(h>Safe to use in noinstr code; prefer atomic64_read() elsewhere.h]h>Safe to use in noinstr code; prefer atomic64_read() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5 ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5 ubjM)}(hThe 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5 ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_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}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_read_acquiresbc.raw_atomic64_read_acquireasbuh1hhj0hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhjXhM ubh)}(hraw_atomic64_read_acquireh]j)}(hjUh]hraw_atomic64_read_acquire}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhjXhM ubj4)}(h(const atomic64_t *v)h]j:)}(hconst atomic64_t *vh](j?)}(hjP*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}]jSc.raw_atomic64_read_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj~ubah}(h]h ]h"]h$]h&]jjuh1j3hj0hhhjXhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,hhhjXhM ubah}(h]j'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjXhM hj)hhubj4)}(hhh]jM)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hj)hhhjXhM 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)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj"ubj)}(hhh]j)}(h.``const atomic64_t *v`` pointer to atomic64_t h](j)}(h``const atomic64_t *v``h]jS)}(hjGh]hconst atomic64_t *v}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjAubj)}(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&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hM hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj"ubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj"ubjM)}(hFSafe to use in noinstr code; prefer atomic64_read_acquire() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_read_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj"ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM! hj"ubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM" hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic64_set (C function)c.raw_atomic64_sethNtauh1hhjhhhNhNubh)}(hhh](h)}(h,void raw_atomic64_set (atomic64_t *v, s64 i)h]h)}(h+void raw_atomic64_set(atomic64_t *v, s64 i)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj/hM8 ubh)}(hraw_atomic64_seth]j)}(hraw_atomic64_seth]hraw_atomic64_set}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj/hM8 ubj4)}(h(atomic64_t *v, s64 i)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcmodnameN classnameNjwjz)}j}]j)}jsjDsbc.raw_atomic64_setasbuh1hhjZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubj:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j}c.raw_atomic64_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&]noemphjjuh1j9hjVubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj/hM8 ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj/hM8 ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/hM8 hjhhubj4)}(hhh]jM)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 hj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj/hM8 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)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hj(ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjMh]h atomic64_t *v}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hjGubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhM9 hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhM9 hjDubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM: hjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM: hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM: hjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hj(ubjM)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hj(ubjM)}(h=Safe to use in noinstr code; prefer atomic64_set() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_set() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM= hj(ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM? hj(ubjM)}(hNothing.h]hNothing.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@ hj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%raw_atomic64_set_release (C function)c.raw_atomic64_set_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h4void raw_atomic64_set_release (atomic64_t *v, s64 i)h]h)}(h3void raw_atomic64_set_release(atomic64_t *v, s64 i)h](j)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI ubjQ)}(h h]h }(hjohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\hhhjnhMI ubh)}(hraw_atomic64_set_releaseh]j)}(hraw_atomic64_set_releaseh]hraw_atomic64_set_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj\hhhjnhMI ubj4)}(h(atomic64_t *v, s64 i)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_set_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_set_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj\hhhjnhMI ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjXhhhjnhMI ubah}(h]jSah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjnhMI hjUhhubj4)}(hhh]jM)}(h atomic set with release orderingh]h atomic set with release ordering}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI hjHhhubah}(h]h ]h"]h$]h&]uh1j3hjUhhhjnhMI ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjcjHjcjIjJjKuh1hhhhjhNhNubj)}(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)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMM hjgubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMJ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMJ hjubj)}(h``s64 i`` s64 value to assign h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMK hjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMK hjubeh}(h]h ]h"]h$]h&]uh1jhjgubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMM hjgubjM)}(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}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhML hjgubjM)}(hESafe to use in noinstr code; prefer atomic64_set_release() elsewhere.h]hESafe to use in noinstr code; prefer atomic64_set_release() elsewhere.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMN hjgubjM)}(h **Return**h]j)}(hjZh]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMP hjgubjM)}(hNothing.h]hNothing.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic64_add (C function)c.raw_atomic64_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h,void raw_atomic64_add (s64 i, atomic64_t *v)h]h)}(h+void raw_atomic64_add(s64 i, atomic64_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMc ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMc ubh)}(hraw_atomic64_addh]j)}(hraw_atomic64_addh]hraw_atomic64_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMc ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_addasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj*modnameN classnameNjwjz)}j}]jc.raw_atomic64_addasbuh1hhj!ubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hjh]hv}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMc ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMc ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMc hjhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMc hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMc ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_add() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMg hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMd hjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMd hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMd hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMe hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMe hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMe hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj?h]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMg hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(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 + }(hjUhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh) with relaxed ordering.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMf hjubjM)}(h=Safe to use in noinstr code; prefer atomic64_add() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_add() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMh hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMj hjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMk hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic64_add_return (C function)c.raw_atomic64_add_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h2s64 raw_atomic64_add_return (s64 i, atomic64_t *v)h]h)}(h1s64 raw_atomic64_add_return(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_add_returnsbc.raw_atomic64_add_returnasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMt ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMt ubh)}(hraw_atomic64_add_returnh]j)}(hjh]hraw_atomic64_add_return}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMt ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGmodnameN classnameNjwjz)}j}]jc.raw_atomic64_add_returnasbuh1hhj>ubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]hi}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_add_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMt ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMt ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMt hjhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMt hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMt ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic64_add_return() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMx hj ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hj/h]hs64 i}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMu hj)ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMu hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMu hj&ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjhh]h atomic64_t *v}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hjbubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hMv hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMv hj&ubeh}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMx hj ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with full ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMw hj ubjM)}(hDSafe to use in noinstr code; prefer atomic64_add_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_add_return() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMy hj ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{ hj ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj%hhhNhNubj)}(h**v**h]hv}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM| hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_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}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjkmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_add_return_acquiresb!c.raw_atomic64_add_return_acquireasbuh1hhjbhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbhhhjhM ubh)}(hraw_atomic64_add_return_acquireh]j)}(hjh]hraw_atomic64_add_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjbhhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j!c.raw_atomic64_add_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j!c.raw_atomic64_add_return_acquireasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjbhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^hhhjhM ubah}(h]jYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hj[hhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjahhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj|jHj|jIjJjKuh1hhhhjhNhNubj)}(hX#**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic64_add_return_acquire() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hj/hhhNhNubj)}(h**v**h]hv}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh to (}(hj/hhhNhNubj)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh + }(hj/hhhNhNubj)}(h**i**h]hi}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh) with acquire ordering.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hLSafe to use in noinstr code; prefer atomic64_add_return_acquire() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_add_return_acquire() elsewhere.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_add_return_release (C function)!c.raw_atomic64_add_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h:s64 raw_atomic64_add_return_release (s64 i, atomic64_t *v)h]h)}(h9s64 raw_atomic64_add_return_release(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_add_return_releasesb!c.raw_atomic64_add_return_releaseasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic64_add_return_releaseh]j)}(hjh]hraw_atomic64_add_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj3modnameN classnameNjwjz)}j}]j!c.raw_atomic64_add_return_releaseasbuh1hhj*ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj)}(hjh]hi}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]j!c.raw_atomic64_add_return_releaseasbuh1hhjqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj&ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX#**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic64_add_return_release() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hM hj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hM hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjTh]h atomic64_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjihM hjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hLSafe to use in noinstr code; prefer atomic64_add_return_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_add_return_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_add_return_relaxed (C function)!c.raw_atomic64_add_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h:s64 raw_atomic64_add_return_relaxed (s64 i, atomic64_t *v)h]h)}(h9s64 raw_atomic64_add_return_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_add_return_relaxedsb!c.raw_atomic64_add_return_relaxedasbuh1hhjNhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNhhhjvhM ubh)}(hraw_atomic64_add_return_relaxedh]j)}(hjsh]hraw_atomic64_add_return_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjNhhhjvhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jq!c.raw_atomic64_add_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jq!c.raw_atomic64_add_return_relaxedasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjNhhhjvhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjJhhhjvhM ubah}(h]jEah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjvhM hjGhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjMhhubah}(h]h ]h"]h$]h&]uh1j3hjGhhhjvhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhjhNhNubj)}(hX#**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_add_return_relaxed() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjlubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlubjM)}(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}(hj5 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlubjM)}(hLSafe to use in noinstr code; prefer atomic64_add_return_relaxed() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_add_return_relaxed() elsewhere.}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlubjM)}(h **Return**h]j)}(hjq h]hReturn}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlubeh}(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 hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hM ubh)}(hraw_atomic64_fetch_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}(hjI!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}(hjd!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjf!modnameN classnameNjwjz)}j}]j c.raw_atomic64_fetch_addasbuh1hhj]!ubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]!ubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]!ubj)}(hjh]hv}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj!ubeh}(h]h ]h"]h$]h&]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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj!hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj!jHj!jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj!ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hj"h]hs64 i}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj"ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(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}(hjB"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>"ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:"ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjY"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjU"hM hjV"ubah}(h]h ]h"]h$]h&]uh1jhj:"ubeh}(h]h ]h"]h$]h&]uh1jhjU"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&]uh1jhjy"ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj!ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj"hhhNhNubj)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh to (}(hj"hhhNhNubj)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh + }(hj"hhhNhNubj)}(h**i**h]hi}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh) with full ordering.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj!ubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_add() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_add() elsewhere.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj!ubjM)}(h **Return**h]j)}(hj"h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj!ubjM)}(hThe original value of **v**.h](hThe original value of }(hj"hhhNhNubj)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_add_acquire (C function) c.raw_atomic64_fetch_add_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_add_acquire (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_add_acquire(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjA#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjC#modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_add_acquiresb c.raw_atomic64_fetch_add_acquireasbuh1hhj:#hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjc#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:#hhhjb#hM ubh)}(hraw_atomic64_fetch_add_acquireh]j)}(hj_#h]hraw_atomic64_fetch_add_acquire}(hju#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj:#hhhjb#hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j]# c.raw_atomic64_fetch_add_acquireasbuh1hhj#ubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]hi}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j]# c.raw_atomic64_fetch_add_acquireasbuh1hhj#ubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hjh]hv}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubeh}(h]h ]h"]h$]h&]jjuh1j3hj:#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 add with acquire orderingh]h atomic add with acquire ordering}(hj<$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj9$hhubah}(h]h ]h"]h$]h&]uh1j3hj3#hhhjb#hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjT$jHjT$jIjJjKuh1hhhhjhNhNubj)}(hX#**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic64_fetch_add_acquire() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj^$h]h Parameters}(hj`$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\$ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjX$ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hj}$h]hs64 i}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{$ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjw$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&]uh1jhjw$ubeh}(h]h ]h"]h$]h&]uh1jhj$hM hjt$ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj$h]h atomic64_t *v}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj$ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$hM hj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hM hjt$ubeh}(h]h ]h"]h$]h&]uh1jhjX$ubjM)}(h**Description**h]j)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjX$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}(hj3%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh) with acquire ordering.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjX$ubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_add_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_add_acquire() elsewhere.}(hjL%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjX$ubjM)}(h **Return**h]j)}(hj]%h]hReturn}(hj_%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[%ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjX$ubjM)}(hThe original value of **v**.h](hThe original value of }(hjs%hhhNhNubj)}(h**v**h]hv}(hj{%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs%ubh.}(hjs%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjX$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_add_release (C function) c.raw_atomic64_fetch_add_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_add_release (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_add_release(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_add_releasesb c.raw_atomic64_fetch_add_releaseasbuh1hhj%hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj%hM ubh)}(hraw_atomic64_fetch_add_releaseh]j)}(hj%h]hraw_atomic64_fetch_add_release}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%hhhj%hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj &hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj &modnameN classnameNjwjz)}j}]j% c.raw_atomic64_fetch_add_releaseasbuh1hhj&ubjQ)}(h h]h }(hj'&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]hi}(hj5&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}(hjP&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjR&modnameN classnameNjwjz)}j}]j% c.raw_atomic64_fetch_add_releaseasbuh1hhjI&ubjQ)}(h h]h }(hjn&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjI&ubj)}(hjh]h*}(hj|&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI&ubj)}(hjh]hv}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubeh}(h]h ]h"]h$]h&]jjuh1j3hj%hhhj%hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj%hhhj%hM ubah}(h]j%ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj%hM hj%hhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj&hhubah}(h]h ]h"]h$]h&]uh1j3hj%hhhj%hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj&jHj&jIjJjKuh1hhhhjhNhNubj)}(hX#**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic64_fetch_add_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj&ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hj&h]hs64 i}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj&ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj&ubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj&'ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjE'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjA'hM hjB'ubah}(h]h ]h"]h$]h&]uh1jhj&'ubeh}(h]h ]h"]h$]h&]uh1jhjA'hM hj&ubeh}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj&ubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj&ubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_add_release() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_add_release() elsewhere.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj&ubjM)}(h **Return**h]j)}(hj'h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj&ubjM)}(hThe original value of **v**.h](hThe original value of }(hj'hhhNhNubj)}(h**v**h]hv}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_add_relaxed (C function) c.raw_atomic64_fetch_add_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_add_relaxed (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_add_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj-(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj/(modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_add_relaxedsb c.raw_atomic64_fetch_add_relaxedasbuh1hhj&(hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+ ubjQ)}(h h]h }(hjO(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&(hhhjN(hM+ ubh)}(hraw_atomic64_fetch_add_relaxedh]j)}(hjK(h]hraw_atomic64_fetch_add_relaxed}(hja(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj](ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj&(hhhjN(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}]jI( c.raw_atomic64_fetch_add_relaxedasbuh1hhjx(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjx(ubj)}(hjh]hi}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjt(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}]jI( c.raw_atomic64_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)}(hjh]hv}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjt(ubeh}(h]h ]h"]h$]h&]jjuh1j3hj&(hhhjN(hM+ ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj"(hhhjN(hM+ ubah}(h]j(ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjN(hM+ hj(hhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj()hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+ hj%)hhubah}(h]h ]h"]h$]h&]uh1j3hj(hhhjN(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 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)}(hjJ)h]h Parameters}(hjL)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH)ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ hjD)ubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hji)h]hs64 i}(hjk)hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjg)ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM, hjc)ubj)}(hhh]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&]uh1jhjc)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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM- hj)ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj)hM- hj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hM- hj`)ubeh}(h]h ]h"]h$]h&]uh1jhjD)ubjM)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ hjD)ubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj)hhhNhNubj)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh to (}(hj)hhhNhNubj)}(h**v**h]hv}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh + }(hj)hhhNhNubj)}(h**i**h]hi}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh) with relaxed ordering.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM. hjD)ubjM)}(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.}(hj8*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0 hjD)ubjM)}(h **Return**h]j)}(hjI*h]hReturn}(hjK*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG*ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM2 hjD)ubjM)}(hThe original value of **v**.h](hThe original value of }(hj_*hhhNhNubj)}(h**v**h]hv}(hjg*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_*ubh.}(hj_*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM3 hjD)ubeh}(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}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMB ubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*hhhj*hMB ubh)}(hraw_atomic64_subh]j)}(hraw_atomic64_subh]hraw_atomic64_sub}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj*hhhj*hMB 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_subasbuh1hhj*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_subasbuh1hhj"+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)}(hjh]hv}(hjb+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj*ubeh}(h]h ]h"]h$]h&]jjuh1j3hj*hhhj*hMB ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj*hhhj*hMB ubah}(h]j*ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj*hMB hj*hhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMB hj+hhubah}(h]h ]h"]h$]h&]uh1j3hj*hhhj*hMB 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 relaxed ordering. Safe to use in noinstr code; prefer atomic64_sub() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMF 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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMC hj+ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+hMC hj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMC hj+ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj,h]h atomic64_t *v}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMD hj+ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj,hMD hj,ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj,hMD hj+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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMF hj+ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjV,hhhNhNubj)}(h**v**h]hv}(hj^,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV,ubh to (}(hjV,hhhNhNubj)}(h**v**h]hv}(hjp,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV,ubh - }(hjV,hhhNhNubj)}(h**i**h]hi}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV,ubh) with relaxed ordering.}(hjV,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhME hj+ubjM)}(h=Safe to use in noinstr code; prefer atomic64_sub() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_sub() elsewhere.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMG hj+ubjM)}(h **Return**h]j)}(hj,h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI hj+ubjM)}(hNothing.h]hNothing.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hj+ubeh}(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}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_sub_returnsbc.raw_atomic64_sub_returnasbuh1hhj,hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS ubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,hhhj-hMS ubh)}(hraw_atomic64_sub_returnh]j)}(hj-h]hraw_atomic64_sub_return}(hj(-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$-ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj,hhhj-hMS ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjF-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjH-modnameN classnameNjwjz)}j}]j-c.raw_atomic64_sub_returnasbuh1hhj?-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}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-modnameN classnameNjwjz)}j}]j-c.raw_atomic64_sub_returnasbuh1hhj-ubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hjh]hv}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;-ubeh}(h]h ]h"]h$]h&]jjuh1j3hj,hhhj-hMS ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,hhhj-hMS ubah}(h]j,ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj-hMS hj,hhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hj-hhubah}(h]h ]h"]h$]h&]uh1j3hj,hhhj-hMS 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMW hj .ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hj0.h]hs64 i}(hj2.hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj..ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMT hj*.ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjI.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjE.hMT hjF.ubah}(h]h ]h"]h$]h&]uh1jhj*.ubeh}(h]h ]h"]h$]h&]uh1jhjE.hMT 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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hjc.ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~.hMU hj.ubah}(h]h ]h"]h$]h&]uh1jhjc.ubeh}(h]h ]h"]h$]h&]uh1jhj~.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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMW hj .ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj.hhhNhNubj)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh to (}(hj.hhhNhNubj)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh - }(hj.hhhNhNubj)}(h**i**h]hi}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh) with full ordering.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZ hj .ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj&/hhhNhNubj)}(h**v**h]hv}(hj./hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&/ubh.}(hj&/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[ hj .ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_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}(hjj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjl/modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_sub_return_acquiresb!c.raw_atomic64_sub_return_acquireasbuh1hhjc/hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMn ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjc/hhhj/hMn ubh)}(hraw_atomic64_sub_return_acquireh]j)}(hj/h]hraw_atomic64_sub_return_acquire}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjc/hhhj/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}]j/!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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0modnameN classnameNjwjz)}j}]j/!c.raw_atomic64_sub_return_acquireasbuh1hhj/ubjQ)}(h h]h }(hj!0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjh]h*}(hj/0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]hv}(hj<0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubeh}(h]h ]h"]h$]h&]jjuh1j3hjc/hhhj/hMn ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj_/hhhj/hMn ubah}(h]jZ/ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/hMn hj\/hhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hje0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMn hjb0hhubah}(h]h ]h"]h$]h&]uh1j3hj\/hhhj/hMn ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj}0jHj}0jIjJjKuh1hhhhjhNhNubj)}(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)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hj0ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hj0h]hs64 i}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMo hj0ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMo hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMo hj0ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj0h]h atomic64_t *v}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMp hj0ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMp hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMp hj0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubjM)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMr hj0ubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hj01hhhNhNubj)}(h**v**h]hv}(hj81hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj01ubh to (}(hj01hhhNhNubj)}(h**v**h]hv}(hjJ1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj01ubh - }(hj01hhhNhNubj)}(h**i**h]hi}(hj\1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj01ubh) with acquire ordering.}(hj01hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMq hj0ubjM)}(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.}(hju1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMs hj0ubjM)}(h **Return**h]j)}(hj1h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMu hj0ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj1hhhNhNubj)}(h**v**h]hv}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMv hj0ubeh}(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}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj1modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_sub_return_releasesb!c.raw_atomic64_sub_return_releaseasbuh1hhj1hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1hhhj2hM ubh)}(hraw_atomic64_sub_return_releaseh]j)}(hj1h]hraw_atomic64_sub_return_release}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj1hhhj2hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj22hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj42modnameN classnameNjwjz)}j}]j1!c.raw_atomic64_sub_return_releaseasbuh1hhj+2ubjQ)}(h h]h }(hjP2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+2ubj)}(hjh]hi}(hj^2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'2ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjy2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj{2modnameN classnameNjwjz)}j}]j1!c.raw_atomic64_sub_return_releaseasbuh1hhjr2ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjr2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr2ubj)}(hjh]hv}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'2ubeh}(h]h ]h"]h$]h&]jjuh1j3hj1hhhj2hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj1hhhj2hM ubah}(h]j1ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hM hj1hhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2hhubah}(h]h ]h"]h$]h&]uh1j3hj1hhhj2hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj2jHj2jIjJjKuh1hhhhjhNhNubj)}(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)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hj3h]hs64 i}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj3ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj53hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj13hM hj23ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj13hM hj3ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjU3h]h atomic64_t *v}(hjW3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjS3ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjO3ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjn3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjj3hM hjk3ubah}(h]h ]h"]h$]h&]uh1jhjO3ubeh}(h]h ]h"]h$]h&]uh1jhjj3hM hj3ubeh}(h]h ]h"]h$]h&]uh1jhj2ubjM)}(h**Description**h]j)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2ubjM)}(hBAtomically updates **v** to (**v** - **i**) with release 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 - }(hj3hhhNhNubj)}(h**i**h]hi}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh) with release ordering.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2ubjM)}(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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2ubjM)}(h **Return**h]j)}(hj3h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj2ubeh}(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}(hjV4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjX4modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_sub_return_relaxedsb!c.raw_atomic64_sub_return_relaxedasbuh1hhjO4hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjx4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjO4hhhjw4hM ubh)}(hraw_atomic64_sub_return_relaxedh]j)}(hjt4h]hraw_atomic64_sub_return_relaxed}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjO4hhhjw4hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]jr4!c.raw_atomic64_sub_return_relaxedasbuh1hhj4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]hi}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubj:)}(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}]jr4!c.raw_atomic64_sub_return_relaxedasbuh1hhj4ubjQ)}(h h]h }(hj 5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hjh]hv}(hj(5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubeh}(h]h ]h"]h$]h&]jjuh1j3hjO4hhhjw4hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjK4hhhjw4hM ubah}(h]jF4ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjw4hM hjH4hhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjQ5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjN5hhubah}(h]h ]h"]h$]h&]uh1j3hjH4hhhjw4hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGji5jHji5jIjJjKuh1hhhhjhNhNubj)}(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)}(hjs5h]h Parameters}(hju5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq5ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjm5ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hj5h]hs64 i}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hM hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM hj5ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj5h]h atomic64_t *v}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj5ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5hM hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM hj5ubeh}(h]h ]h"]h$]h&]uh1jhjm5ubjM)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjm5ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj6hhhNhNubj)}(h**v**h]hv}(hj$6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh to (}(hj6hhhNhNubj)}(h**v**h]hv}(hj66hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh - }(hj6hhhNhNubj)}(h**i**h]hi}(hjH6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh) with relaxed ordering.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjm5ubjM)}(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.}(hja6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjm5ubjM)}(h **Return**h]j)}(hjr6h]hReturn}(hjt6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp6ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjm5ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj6hhhNhNubj)}(h**v**h]hv}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjm5ubeh}(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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj6modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_subsbc.raw_atomic64_fetch_subasbuh1hhj6hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6hhhj6hM ubh)}(hraw_atomic64_fetch_subh]j)}(hj6h]hraw_atomic64_fetch_sub}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj6hhhj6hM 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 reftargetj 7modnameN classnameNjwjz)}j}]j6c.raw_atomic64_fetch_subasbuh1hhj7ubjQ)}(h h]h }(hj<7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj)}(hjh]hi}(hjJ7hhhNhNubah}(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}(hje7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb7ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjg7modnameN classnameNjwjz)}j}]j6c.raw_atomic64_fetch_subasbuh1hhj^7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^7ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^7ubj)}(hjh]hv}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^7ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7ubeh}(h]h ]h"]h$]h&]jjuh1j3hj6hhhj6hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj6hhhj6hM ubah}(h]j6ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj6hM hj6hhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7hhubah}(h]h ]h"]h$]h&]uh1j3hj6hhhj6hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj7jHj7jIjJjKuh1hhhhjhNhNubj)}(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)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hj8h]hs64 i}(hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj8ubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hj!8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hM hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM hj7ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjA8h]h atomic64_t *v}(hjC8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?8ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj;8ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjZ8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjV8hM hjW8ubah}(h]h ]h"]h$]h&]uh1jhj;8ubeh}(h]h ]h"]h$]h&]uh1jhjV8hM hj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubjM)}(h**Description**h]j)}(hj|8h]h Description}(hj~8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz8ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj8hhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh to (}(hj8hhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh - }(hj8hhhNhNubj)}(h**i**h]hi}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh) with full ordering.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_sub() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_sub() elsewhere.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubjM)}(h **Return**h]j)}(hj8h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubjM)}(hThe original value of **v**.h](hThe original value of }(hj8hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_sub_acquire (C function) c.raw_atomic64_fetch_sub_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_sub_acquire (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_sub_acquire(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjB9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjD9modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_sub_acquiresb c.raw_atomic64_fetch_sub_acquireasbuh1hhj;9hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjd9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;9hhhjc9hM ubh)}(hraw_atomic64_fetch_sub_acquireh]j)}(hj`9h]hraw_atomic64_fetch_sub_acquire}(hjv9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr9ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj;9hhhjc9hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j^9 c.raw_atomic64_fetch_sub_acquireasbuh1hhj9ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]hi}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj9modnameN classnameNjwjz)}j}]j^9 c.raw_atomic64_fetch_sub_acquireasbuh1hhj9ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hjh]hv}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubeh}(h]h ]h"]h$]h&]jjuh1j3hj;9hhhjc9hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj79hhhjc9hM ubah}(h]j29ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjc9hM hj49hhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hj=:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj::hhubah}(h]h ]h"]h$]h&]uh1j3hj49hhhjc9hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjU:jHjU: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_fetch_sub_acquire() elsewhere. **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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjY:ubj)}(hhh](j)}(h ``s64 i`` s64 value to 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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjx: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&]uh1jhjx:ubeh}(h]h ]h"]h$]h&]uh1jhj:hM hju:ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj:h]h atomic64_t *v}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj:ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hM hj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hM 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjY: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}(hj4;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh) with acquire ordering.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjY:ubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_sub_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_sub_acquire() elsewhere.}(hjM;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjY:ubjM)}(h **Return**h]j)}(hj^;h]hReturn}(hj`;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\;ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjY:ubjM)}(hThe original value of **v**.h](hThe original value of }(hjt;hhhNhNubj)}(h**v**h]hv}(hj|;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt;ubh.}(hjt;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjY:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_sub_release (C function) c.raw_atomic64_fetch_sub_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_sub_release (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_sub_release(s64 i, atomic64_t *v)h](h)}(hhh]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_sub_releasesb c.raw_atomic64_fetch_sub_releaseasbuh1hhj;hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;hhhj;hM ubh)}(hraw_atomic64_fetch_sub_releaseh]j)}(hj;h]hraw_atomic64_fetch_sub_release}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj;hhhj;hM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj <hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj <modnameN classnameNjwjz)}j}]j; c.raw_atomic64_fetch_sub_releaseasbuh1hhj<ubjQ)}(h h]h }(hj(<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj)}(hjh]hi}(hj6<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}(hjQ<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjS<modnameN classnameNjwjz)}j}]j; c.raw_atomic64_fetch_sub_releaseasbuh1hhjJ<ubjQ)}(h h]h }(hjo<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJ<ubj)}(hjh]h*}(hj}<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ<ubj)}(hjh]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ<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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj<hhubah}(h]h ]h"]h$]h&]uh1j3hj;hhhj;hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj<jHj<jIjJjKuh1hhhhjhNhNubj)}(hX(**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Safe to use in noinstr code; prefer atomic64_fetch_sub_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj<ubj)}(hhh](j)}(h ``s64 i`` s64 value to 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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj<ubj)}(hhh]jM)}(hs64 value to 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&]uh1jRhj+=ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj'=ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjF=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjB=hM hjC=ubah}(h]h ]h"]h$]h&]uh1jhj'=ubeh}(h]h ]h"]h$]h&]uh1jhjB=hM hj<ubeh}(h]h ]h"]h$]h&]uh1jhj<ubjM)}(h**Description**h]j)}(hjh=h]h Description}(hjj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf=ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj<ubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj<ubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_sub_release() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_sub_release() elsewhere.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj<ubjM)}(h **Return**h]j)}(hj=h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj<ubjM)}(hThe original value of **v**.h](hThe original value of }(hj=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_sub_relaxed (C function) c.raw_atomic64_fetch_sub_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_sub_relaxed (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_sub_relaxed(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj.>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0>modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_sub_relaxedsb c.raw_atomic64_fetch_sub_relaxedasbuh1hhj'>hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjP>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'>hhhjO>hM ubh)}(hraw_atomic64_fetch_sub_relaxedh]j)}(hjL>h]hraw_atomic64_fetch_sub_relaxed}(hjb>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^>ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj'>hhhjO>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}]jJ> c.raw_atomic64_fetch_sub_relaxedasbuh1hhjy>ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjy>ubj)}(hjh]hi}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hju>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}]jJ> c.raw_atomic64_fetch_sub_relaxedasbuh1hhj>ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hjh]hv}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hju>ubeh}(h]h ]h"]h$]h&]jjuh1j3hj'>hhhjO>hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#>hhhjO>hM ubah}(h]j>ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjO>hM hj >hhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hj)?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj&?hhubah}(h]h ]h"]h$]h&]uh1j3hj >hhhjO>hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjA?jHjA?jIjJjKuh1hhhhjhNhNubj)}(hX(**Parameters** ``s64 i`` s64 value to subtract ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_fetch_sub_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjK?h]h Parameters}(hjM?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI?ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjE?ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjj?h]hs64 i}(hjl?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjh?ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjd?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&]uh1jhjd?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM hja?ubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj?h]h atomic64_t *v}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj?ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM hja?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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjE?ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hj?hhhNhNubj)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh to (}(hj?hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh - }(hj?hhhNhNubj)}(h**i**h]hi}(hj @hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh) with relaxed ordering.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjE?ubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_sub_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_sub_relaxed() elsewhere.}(hj9@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjE?ubjM)}(h **Return**h]j)}(hjJ@h]hReturn}(hjL@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH@ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjE?ubjM)}(hThe original value of **v**.h](hThe original value of }(hj`@hhhNhNubj)}(h**v**h]hv}(hjh@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`@ubh.}(hj`@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjE?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic64_inc (C function)c.raw_atomic64_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(h%void raw_atomic64_inc (atomic64_t *v)h]h)}(h$void raw_atomic64_inc(atomic64_t *v)h](j)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM! ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@hhhj@hM! ubh)}(hraw_atomic64_inch]j)}(hraw_atomic64_inch]hraw_atomic64_inc}(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.raw_atomic64_incasbuh1hhj@ubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]hv}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubah}(h]h ]h"]h$]h&]jjuh1j3hj@hhhj@hM! ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj@hhhj@hM! ubah}(h]j@ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj@hM! hj@hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjEAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM! hjBAhhubah}(h]h ]h"]h$]h&]uh1j3hj@hhhj@hM! ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]AjHj]AjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_inc() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjgAh]h Parameters}(hjiAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeAubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM% hjaAubj)}(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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM" hjAubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhM" hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM" hj}Aubah}(h]h ]h"]h$]h&]uh1jhjaAubjM)}(h**Description**h]j)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$ hjaAubjM)}(h>Atomically updates **v** to (**v** + 1) 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 + 1) with relaxed ordering.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM# hjaAubjM)}(h=Safe to use in noinstr code; prefer atomic64_inc() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_inc() elsewhere.}(hj BhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM% hjaAubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM' hjaAubjM)}(hNothing.h]hNothing.}(hj1BhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM( hjaAubeh}(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}(hjcBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Bubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjeBmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_inc_returnsbc.raw_atomic64_inc_returnasbuh1hhj\Bhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5 ubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\BhhhjBhM5 ubh)}(hraw_atomic64_inc_returnh]j)}(hjBh]hraw_atomic64_inc_return}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhj\BhhhjBhM5 ubj4)}(h(atomic64_t *v)h]j:)}(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}]jBc.raw_atomic64_inc_returnasbuh1hhjBubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hjh]hv}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjBubah}(h]h ]h"]h$]h&]jjuh1j3hj\BhhhjBhM5 ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjXBhhhjBhM5 ubah}(h]jSBah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBhM5 hjUBhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM5 hjChhubah}(h]h ]h"]h$]h&]uh1j3hjUBhhhjBhM5 ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj/CjHj/CjIjJjKuh1hhhhjhNhNubj)}(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)}(hj9Ch]h Parameters}(hj;ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Cubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hj3Cubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjXCh]h atomic64_t *v}(hjZChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVCubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM6 hjRCubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjqChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmChM6 hjnCubah}(h]h ]h"]h$]h&]uh1jhjRCubeh}(h]h ]h"]h$]h&]uh1jhjmChM6 hjOCubah}(h]h ]h"]h$]h&]uh1jhj3CubjM)}(h**Description**h]j)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8 hj3CubjM)}(h;Atomically updates **v** to (**v** + 1) 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 + 1) with full ordering.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM7 hj3CubjM)}(hDSafe to use in noinstr code; prefer atomic64_inc_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_inc_return() elsewhere.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM9 hj3CubjM)}(h **Return**h]j)}(hjCh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM; hj3CubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjDhhhNhNubj)}(h**v**h]hv}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM< hj3Cubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_inc_return_acquire (C function)!c.raw_atomic64_inc_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h3s64 raw_atomic64_inc_return_acquire (atomic64_t *v)h]h)}(h2s64 raw_atomic64_inc_return_acquire(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hjGDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjIDmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_inc_return_acquiresb!c.raw_atomic64_inc_return_acquireasbuh1hhj@Dhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMO ubjQ)}(h h]h }(hjiDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@DhhhjhDhMO ubh)}(hraw_atomic64_inc_return_acquireh]j)}(hjeDh]hraw_atomic64_inc_return_acquire}(hj{DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwDubah}(h]h ](jjeh"]h$]h&]jjuh1hhj@DhhhjhDhMO 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&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDmodnameN classnameNjwjz)}j}]jcD!c.raw_atomic64_inc_return_acquireasbuh1hhjDubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]hv}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjDubah}(h]h ]h"]h$]h&]jjuh1j3hj@DhhhjhDhMO ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:Eubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMP hj6Eubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjUEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQEhMP hjREubah}(h]h ]h"]h$]h&]uh1jhj6Eubeh}(h]h ]h"]h$]h&]uh1jhjQEhMP hj3Eubah}(h]h ]h"]h$]h&]uh1jhjEubjM)}(h**Description**h]j)}(hjwEh]h Description}(hjyEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuEubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMR hjEubjM)}(h>Atomically updates **v** to (**v** + 1) 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 + 1) with acquire ordering.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQ hjEubjM)}(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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMS hjEubjM)}(h **Return**h]j)}(hjEh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMU hjEubjM)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMV hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_inc_return_release (C function)!c.raw_atomic64_inc_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h3s64 raw_atomic64_inc_return_release (atomic64_t *v)h]h)}(h2s64 raw_atomic64_inc_return_release(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj+FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Fubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-FmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_inc_return_releasesb!c.raw_atomic64_inc_return_releaseasbuh1hhj$Fhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMi ubjQ)}(h h]h }(hjMFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$FhhhjLFhMi ubh)}(hraw_atomic64_inc_return_releaseh]j)}(hjIFh]hraw_atomic64_inc_return_release}(hj_FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[Fubah}(h]h ](jjeh"]h$]h&]jjuh1hhj$FhhhjLFhMi 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&]uh1jhjzFubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]jGF!c.raw_atomic64_inc_return_releaseasbuh1hhjvFubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvFubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvFubj)}(hjh]hv}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjrFubah}(h]h ]h"]h$]h&]jjuh1j3hj$FhhhjLFhMi ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj FhhhjLFhMi ubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjLFhMi hjFhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMi hjFhhubah}(h]h ]h"]h$]h&]uh1j3hjFhhhjLFhMi ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjFjHjFjIjJjKuh1hhhhjhNhNubj)}(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)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMm hjFubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj Gh]h atomic64_t *v}(hj"GhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMj hjGubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj9GhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj5GhMj hj6Gubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhj5GhMj hjGubah}(h]h ]h"]h$]h&]uh1jhjFubjM)}(h**Description**h]j)}(hj[Gh]h Description}(hj]GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYGubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMl hjFubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjqGhhhNhNubj)}(h**v**h]hv}(hjyGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqGubh to (}(hjqGhhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqGubh + 1) with release ordering.}(hjqGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMk hjFubjM)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMm hjFubjM)}(h **Return**h]j)}(hjGh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMo hjFubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjGhhhNhNubj)}(h**v**h]hv}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMp hjFubeh}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Hubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjHmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_inc_return_relaxedsb!c.raw_atomic64_inc_return_relaxedasbuh1hhjHhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj1HhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHhhhj0HhM ubh)}(hraw_atomic64_inc_return_relaxedh]j)}(hj-Hh]hraw_atomic64_inc_return_relaxed}(hjCHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Hubah}(h]h ](jjeh"]h$]h&]jjuh1hhjHhhhj0HhM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjaHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Hubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjcHmodnameN classnameNjwjz)}j}]j+H!c.raw_atomic64_inc_return_relaxedasbuh1hhjZHubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZHubj)}(hjh]hv}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZHubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVHubah}(h]h ]h"]h$]h&]jjuh1j3hjHhhhj0HhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjHhhhj0HhM ubah}(h]jGah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0HhM hjHhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjHhhubah}(h]h ]h"]h$]h&]uh1j3hjHhhhj0HhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjHjHjHjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic64_inc_return_relaxed() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjHubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjIh]h atomic64_t *v}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjIubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjHubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjIhM hjHubah}(h]h ]h"]h$]h&]uh1jhjHubjM)}(h**Description**h]j)}(hj?Ih]h Description}(hjAIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Iubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjHubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjUIhhhNhNubj)}(h**v**h]hv}(hj]IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUIubh to (}(hjUIhhhNhNubj)}(h**v**h]hv}(hjoIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUIubh + 1) with relaxed ordering.}(hjUIhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjHubjM)}(hLSafe to use in noinstr code; prefer atomic64_inc_return_relaxed() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_inc_return_relaxed() elsewhere.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjHubjM)}(h **Return**h]j)}(hjIh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjHubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjIhhhNhNubj)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjHubeh}(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}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjImodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_incsbc.raw_atomic64_fetch_incasbuh1hhjIhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIhhhjJhM ubh)}(hraw_atomic64_fetch_inch]j)}(hjJh]hraw_atomic64_fetch_inc}(hj'JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Jubah}(h]h ](jjeh"]h$]h&]jjuh1hhjIhhhjJhM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjEJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBJubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGJmodnameN classnameNjwjz)}j}]jJc.raw_atomic64_fetch_incasbuh1hhj>JubjQ)}(h h]h }(hjcJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>Jubj)}(hjh]h*}(hjqJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Jubj)}(hjh]hv}(hj~JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Jubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:Jubah}(h]h ]h"]h$]h&]jjuh1j3hjIhhhjJhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjIhhhjJhM ubah}(h]jIah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjJhM hjIhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjJhhubah}(h]h ]h"]h$]h&]uh1j3hjIhhhjJhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjJjHjJjIjJjKuh1hhhhjhNhNubj)}(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)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjJubj)}(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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjJubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjKhhhNhNubah}(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&]uh1jhjJubjM)}(h**Description**h]j)}(hj#Kh]h Description}(hj%KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Kubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjJubjM)}(h;Atomically updates **v** to (**v** + 1) with full 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 + 1) with full ordering.}(hj9KhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjJubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_inc() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_inc() elsewhere.}(hjlKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjJubjM)}(h **Return**h]j)}(hj}Kh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Kubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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_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}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjKmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_inc_acquiresb c.raw_atomic64_fetch_inc_acquireasbuh1hhjKhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKhhhjKhM ubh)}(hraw_atomic64_fetch_inc_acquireh]j)}(hjKh]hraw_atomic64_fetch_inc_acquire}(hj LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhjKhhhjKhM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj)LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&Lubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj+LmodnameN classnameNjwjz)}j}]jK c.raw_atomic64_fetch_inc_acquireasbuh1hhj"LubjQ)}(h h]h }(hjGLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"Lubj)}(hjh]h*}(hjULhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Lubj)}(hjh]hv}(hjbLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Lubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLubah}(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 increment with acquire orderingh]h&atomic increment with acquire ordering}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLhhubah}(h]h ]h"]h$]h&]uh1j3hjKhhhjKhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjLjHjLjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``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)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjLh]h atomic64_t *v}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLhM hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM hjLubah}(h]h ]h"]h$]h&]uh1jhjLubjM)}(h**Description**h]j)}(hjMh]h Description}(hj MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjMhhhNhNubj)}(h**v**h]hv}(hj%MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh to (}(hjMhhhNhNubj)}(h**v**h]hv}(hj7MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh + 1) with acquire ordering.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubjM)}(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.}(hjPMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubjM)}(h **Return**h]j)}(hjaMh]hReturn}(hjcMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_Mubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubjM)}(hThe original value of **v**.h](hThe original value of }(hjwMhhhNhNubj)}(h**v**h]hv}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwMubh.}(hjwMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_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}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjMmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_inc_releasesb c.raw_atomic64_fetch_inc_releaseasbuh1hhjMhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMhhhjMhM ubh)}(hraw_atomic64_fetch_inc_releaseh]j)}(hjMh]hraw_atomic64_fetch_inc_release}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](jjeh"]h$]h&]jjuh1hhjMhhhjMhM ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Nubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNmodnameN classnameNjwjz)}j}]jM c.raw_atomic64_fetch_inc_releaseasbuh1hhjNubjQ)}(h h]h }(hj+NhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hj9NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hv}(hjFNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubah}(h]h ]h"]h$]h&]jjuh1j3hjMhhhjMhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjMhhhjMhM ubah}(h]jMah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjMhM hjMhhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjoNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlNhhubah}(h]h ]h"]h$]h&]uh1j3hjMhhhjMhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjNjHjNjIjJjKuh1hhhhjhNhNubj)}(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)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjNh]h atomic64_t *v}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhM hjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhM hjNubah}(h]h ]h"]h$]h&]uh1jhjNubjM)}(h**Description**h]j)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjOhhhNhNubj)}(h**v**h]hv}(hj OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh to (}(hjOhhhNhNubj)}(h**v**h]hv}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh + 1) with release ordering.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubjM)}(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.}(hj4OhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubjM)}(h **Return**h]j)}(hjEOh]hReturn}(hjGOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCOubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubjM)}(hThe original value of **v**.h](hThe original value of }(hj[OhhhNhNubj)}(h**v**h]hv}(hjcOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Oubh.}(hj[OhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_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}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjOmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_inc_relaxedsb c.raw_atomic64_fetch_inc_relaxedasbuh1hhjOhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOhhhjOhM ubh)}(hraw_atomic64_fetch_inc_relaxedh]j)}(hjOh]hraw_atomic64_fetch_inc_relaxed}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOhhhjOhM 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}]jO c.raw_atomic64_fetch_inc_relaxedasbuh1hhjOubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hjh]hv}(hj*PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjOubah}(h]h ]h"]h$]h&]jjuh1j3hjOhhhjOhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjOhhhjOhM ubah}(h]jOah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjOhM hjOhhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjSPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPPhhubah}(h]h ]h"]h$]h&]uh1j3hjOhhhjOhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjkPjHjkPjIjJjKuh1hhhhjhNhNubj)}(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)}(hjuPh]h Parameters}(hjwPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsPubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjoPubj)}(hhh]j)}(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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjPubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhM hjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhM hjPubah}(h]h ]h"]h$]h&]uh1jhjoPubjM)}(h**Description**h]j)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjoPubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjPhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh to (}(hjPhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh + 1) with relaxed ordering.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjoPubjM)}(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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjoPubjM)}(h **Return**h]j)}(hj)Qh]hReturn}(hj+QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Qubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjoPubjM)}(hThe original value of **v**.h](hThe original value of }(hj?QhhhNhNubj)}(h**v**h]hv}(hjGQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Qubh.}(hj?QhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjoPubeh}(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}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|Qhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|QhhhjQhM ubh)}(hraw_atomic64_dec9h]j)}(hraw_atomic64_dech]hraw_atomic64_dec}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ](jjeh"]h$]h&]jjuh1hhj|QhhhjQhM 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&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjQmodnameN classnameNjwjz)}j}]j)}jsjQsbc.raw_atomic64_decasbuh1hhjQubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hjh]hv}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjQubah}(h]h ]h"]h$]h&]jjuh1j3hj|QhhhjQhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjxQhhhjQhM ubah}(h]jsQah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjQhM hjuQhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj$RhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj!Rhhubah}(h]h ]h"]h$]h&]uh1j3hjuQhhhjQhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjAtomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjRhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh to (}(hjRhhhNhNubj)}(h**v**h]hv}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh - 1) with relaxed ordering.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj@RubjM)}(h=Safe to use in noinstr code; prefer atomic64_dec() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_dec() elsewhere.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj@RubjM)}(h **Return**h]j)}(hjRh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj@RubjM)}(hNothing.h]hNothing.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj@Rubeh}(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}(hjBShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Subah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjDSmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_dec_returnsbc.raw_atomic64_dec_returnasbuh1hhj;Shhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjdShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ShhhjcShM ubh)}(hraw_atomic64_dec_returnh]j)}(hj`Sh]hraw_atomic64_dec_return}(hjvShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrSubah}(h]h ](jjeh"]h$]h&]jjuh1hhj;ShhhjcShM ubj4)}(h(atomic64_t *v)h]j:)}(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}]j^Sc.raw_atomic64_dec_returnasbuh1hhjSubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjSubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hjh]hv}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubah}(h]h ]h"]h$]h&]jjuh1j3hj;ShhhjcShM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj7ShhhjcShM ubah}(h]j2Sah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjcShM hj4Shhubj4)}(hhh]jM)}(h#atomic decrement with full orderingh]h#atomic decrement with full ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjShhubah}(h]h ]h"]h$]h&]uh1j3hj4ShhhjcShM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjTjHjTjIjJjKuh1hhhhjhNhNubj)}(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)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjTubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj7Th]h atomic64_t *v}(hj9ThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5Tubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj1Tubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjPThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLThM hjMTubah}(h]h ]h"]h$]h&]uh1jhj1Tubeh}(h]h ]h"]h$]h&]uh1jhjLThM hj.Tubah}(h]h ]h"]h$]h&]uh1jhjTubjM)}(h**Description**h]j)}(hjrTh]h Description}(hjtThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpTubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjTubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh to (}(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh - 1) with full ordering.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjTubjM)}(hDSafe to use in noinstr code; prefer atomic64_dec_return() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_dec_return() elsewhere.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjTubjM)}(h **Return**h]j)}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjTubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjTubeh}(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&UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Uubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj(UmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_dec_return_acquiresb!c.raw_atomic64_dec_return_acquireasbuh1hhjUhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM) ubjQ)}(h h]h }(hjHUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUhhhjGUhM) ubh)}(hraw_atomic64_dec_return_acquireh]j)}(hjDUh]hraw_atomic64_dec_return_acquire}(hjZUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVUubah}(h]h ](jjeh"]h$]h&]jjuh1hhjUhhhjGUhM) ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjxUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzUmodnameN classnameNjwjz)}j}]jBU!c.raw_atomic64_dec_return_acquireasbuh1hhjqUubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqUubj)}(hjh]hv}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjmUubah}(h]h ]h"]h$]h&]jjuh1j3hjUhhhjGUhM) ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjUhhhjGUhM) ubah}(h]jUah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjGUhM) hjUhhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM) hjUhhubah}(h]h ]h"]h$]h&]uh1j3hjUhhhjGUhM) ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjUjHjUjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** - 1) with acquire ordering. Safe to use in noinstr code; prefer atomic64_dec_return_acquire() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM- hjUubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjVh]h atomic64_t *v}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM* hjVubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj4VhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0VhM* hj1Vubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhj0VhM* hjVubah}(h]h ]h"]h$]h&]uh1jhjUubjM)}(h**Description**h]j)}(hjVVh]h Description}(hjXVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTVubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM, hjUubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjlVhhhNhNubj)}(h**v**h]hv}(hjtVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlVubh to (}(hjlVhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlVubh - 1) with acquire ordering.}(hjlVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+ hjUubjM)}(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.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM- hjUubjM)}(h **Return**h]j)}(hjVh]hReturn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM/ 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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM0 hjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,raw_atomic64_dec_return_release (C function)!c.raw_atomic64_dec_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h3s64 raw_atomic64_dec_return_release (atomic64_t *v)h]h)}(h2s64 raw_atomic64_dec_return_release(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj WmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_dec_return_releasesb!c.raw_atomic64_dec_return_releaseasbuh1hhjWhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMC ubjQ)}(h h]h }(hj,WhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWhhhj+WhMC ubh)}(hraw_atomic64_dec_return_releaseh]j)}(hj(Wh]hraw_atomic64_dec_return_release}(hj>WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Wubah}(h]h ](jjeh"]h$]h&]jjuh1hhjWhhhj+WhMC 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&]uh1jhjYWubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj^WmodnameN classnameNjwjz)}j}]j&W!c.raw_atomic64_dec_return_releaseasbuh1hhjUWubjQ)}(h h]h }(hjzWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUWubj)}(hjh]hv}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjQWubah}(h]h ]h"]h$]h&]jjuh1j3hjWhhhj+WhMC ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjVhhhj+WhMC ubah}(h]jVah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj+WhMC hjVhhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMC hjWhhubah}(h]h ]h"]h$]h&]uh1j3hjVhhhj+WhMC ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjWjHjWjIjJjKuh1hhhhjhNhNubj)}(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)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMG hjWubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjWh]h atomic64_t *v}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjWubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMD hjWubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMD hjXubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjXhMD hjWubah}(h]h ]h"]h$]h&]uh1jhjWubjM)}(h**Description**h]j)}(hj:Xh]h Description}(hjAtomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjPXhhhNhNubj)}(h**v**h]hv}(hjXXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPXubh to (}(hjPXhhhNhNubj)}(h**v**h]hv}(hjjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPXubh - 1) with release ordering.}(hjPXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhME hjWubjM)}(hLSafe to use in noinstr code; prefer atomic64_dec_return_release() elsewhere.h]hLSafe to use in noinstr code; prefer atomic64_dec_return_release() elsewhere.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMG hjWubjM)}(h **Return**h]j)}(hjXh]hReturn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMI hjWubjM)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMJ hjWubeh}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_dec_return_relaxedsb!c.raw_atomic64_dec_return_relaxedasbuh1hhjXhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\ ubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjXhhhjYhM\ ubh)}(hraw_atomic64_dec_return_relaxedh]j)}(hj Yh]hraw_atomic64_dec_return_relaxed}(hj"YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhjXhhhjYhM\ ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj@YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=Yubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBYmodnameN classnameNjwjz)}j}]j Y!c.raw_atomic64_dec_return_relaxedasbuh1hhj9YubjQ)}(h h]h }(hj^YhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9Yubj)}(hjh]h*}(hjlYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Yubj)}(hjh]hv}(hjyYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Yubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5Yubah}(h]h ]h"]h$]h&]jjuh1j3hjXhhhjYhM\ ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjXhhhjYhM\ ubah}(h]jXah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjYhM\ hjXhhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\ hjYhhubah}(h]h ]h"]h$]h&]uh1j3hjXhhhjYhM\ ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjYjHjYjIjJjKuh1hhhhjhNhNubj)}(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)}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM` 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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./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)}(hjZh]h Description}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_ hjYubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj4ZhhhNhNubj)}(h**v**h]hv}(hjAtomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hj]hhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh to (}(hj]hhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh - 1) with acquire ordering.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]ubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_dec_acquire() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_dec_acquire() elsewhere.}(hj/^hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]ubjM)}(h **Return**h]j)}(hj@^h]hReturn}(hjB^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>^ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]ubjM)}(hThe original value of **v**.h](hThe original value of }(hjV^hhhNhNubj)}(h**v**h]hv}(hj^^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV^ubh.}(hjV^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_dec_release (C function) c.raw_atomic64_fetch_dec_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h2s64 raw_atomic64_fetch_dec_release (atomic64_t *v)h]h)}(h1s64 raw_atomic64_fetch_dec_release(atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj^modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_dec_releasesb c.raw_atomic64_fetch_dec_releaseasbuh1hhj^hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^hhhj^hM ubh)}(hraw_atomic64_fetch_dec_releaseh]j)}(hj^h]hraw_atomic64_fetch_dec_release}(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_dec_releaseasbuh1hhj^ubjQ)}(h h]h }(hj _hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj^ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hjh]hv}(hj%_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubah}(h]h ]h"]h$]h&]jjuh1j3hj^hhhj^hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^hhhj^hM ubah}(h]j^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj^hM hj^hhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjN_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjK_hhubah}(h]h ]h"]h$]h&]uh1j3hj^hhhj^hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjf_jHjf_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_dec_release() elsewhere. **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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjj_ubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj_h]h atomic64_t *v}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj_ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM hj_ubah}(h]h ]h"]h$]h&]uh1jhjj_ubjM)}(h**Description**h]j)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjj_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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjj_ubjM)}(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.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjj_ubjM)}(h **Return**h]j)}(hj$`h]hReturn}(hj&`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"`ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjj_ubjM)}(hThe original value of **v**.h](hThe original value of }(hj:`hhhNhNubj)}(h**v**h]hv}(hjB`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:`ubh.}(hj:`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjj_ubeh}(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}(hj~`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{`ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj`modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_dec_relaxedsb c.raw_atomic64_fetch_dec_relaxedasbuh1hhjw`hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw`hhhj`hM ubh)}(hraw_atomic64_fetch_dec_relaxedh]j)}(hj`h]hraw_atomic64_fetch_dec_relaxed}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjw`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_dec_relaxedasbuh1hhj`ubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hjh]hv}(hj ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj`ubah}(h]h ]h"]h$]h&]jjuh1j3hjw`hhhj`hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjs`hhhj`hM ubah}(h]jn`ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj`hM hjp`hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj2ahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj/ahhubah}(h]h ]h"]h$]h&]uh1j3hjp`hhhj`hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjJajHjJajIjJjKuh1hhhhjhNhNubj)}(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)}(hjTah]h Parameters}(hjVahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRaubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNaubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjsah]h atomic64_t *v}(hjuahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqaubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjmaubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahM hjaubah}(h]h ]h"]h$]h&]uh1jhjmaubeh}(h]h ]h"]h$]h&]uh1jhjahM hjjaubah}(h]h ]h"]h$]h&]uh1jhjNaubjM)}(h**Description**h]j)}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNaubjM)}(h>Atomically updates **v** to (**v** - 1) 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 - 1) with relaxed ordering.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNaubjM)}(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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNaubjM)}(h **Return**h]j)}(hjbh]hReturn}(hj bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNaubjM)}(hThe original value of **v**.h](hThe original value of }(hjbhhhNhNubj)}(h**v**h]hv}(hj&bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjNaubeh}(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}(hj_bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[bhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjnbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[bhhhjmbhM ubh)}(hraw_atomic64_andh]j)}(hraw_atomic64_andh]hraw_atomic64_and}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|bubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[bhhhjmbhM ubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjbmodnameN classnameNjwjz)}j}]j)}jsjbsbc.raw_atomic64_andasbuh1hhjbubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubj)}(hjh]hi}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubj:)}(h 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}]jbc.raw_atomic64_andasbuh1hhjbubjQ)}(h h]h }(hjchhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hjh]hv}(hj!chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjbubeh}(h]h ]h"]h$]h&]jjuh1j3hj[bhhhjmbhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjWbhhhjmbhM ubah}(h]jRbah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjmbhM hjTbhhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjJchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjGchhubah}(h]h ]h"]h$]h&]uh1j3hjTbhhhjmbhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbcjHjbcjIjJjKuh1hhhhjhNhNubj)}(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)}(hjlch]h Parameters}(hjnchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjcubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfcubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjch]hs64 i}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjcubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchM hjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchM hjcubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjch]h atomic64_t *v}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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 hjcubeh}(h]h ]h"]h$]h&]uh1jhjfcubjM)}(h**Description**h]j)}(hjch]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfcubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hjdhhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh to (}(hjdhhhNhNubj)}(h**v**h]hv}(hj/dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh & }(hjdhhhNhNubj)}(h**i**h]hi}(hjAdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh) with relaxed ordering.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfcubjM)}(h=Safe to use in noinstr code; prefer atomic64_and() elsewhere.h]h=Safe to use in noinstr code; prefer atomic64_and() elsewhere.}(hjZdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfcubjM)}(h **Return**h]j)}(hjkdh]hReturn}(hjmdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjidubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfcubjM)}(hNothing.h]hNothing.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjfcubeh}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_andsbc.raw_atomic64_fetch_andasbuh1hhjdhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhjdhM ubh)}(hraw_atomic64_fetch_andh]j)}(hjdh]hraw_atomic64_fetch_and}(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}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjemodnameN classnameNjwjz)}j}]jdc.raw_atomic64_fetch_andasbuh1hhjdubjQ)}(h h]h }(hj#ehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hjh]hi}(hj1ehhhNhNubah}(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}(hjLehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIeubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjNemodnameN classnameNjwjz)}j}]jdc.raw_atomic64_fetch_andasbuh1hhjEeubjQ)}(h h]h }(hjjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEeubj)}(hjh]h*}(hjxehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEeubj)}(hjh]hv}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEeubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjdubeh}(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)}(h%atomic bitwise AND with full orderingh]h%atomic bitwise AND with full ordering}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjehhubah}(h]h ]h"]h$]h&]uh1j3hjdhhhjdhM 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 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)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjeubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjfhM hjfubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjfhM hjeubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj(fh]h atomic64_t *v}(hj*fhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj&fubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj"fubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjAfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj=fhM hj>fubah}(h]h ]h"]h$]h&]uh1jhj"fubeh}(h]h ]h"]h$]h&]uh1jhj=fhM hjeubeh}(h]h ]h"]h$]h&]uh1jhjeubjM)}(h**Description**h]j)}(hjcfh]h Description}(hjefhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjafubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjeubjM)}(h?Atomically updates **v** to (**v** & **i**) with full ordering.h](hAtomically updates }(hjyfhhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyfubh to (}(hjyfhhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyfubh & }(hjyfhhhNhNubj)}(h**i**h]hi}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyfubh) with full ordering.}(hjyfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjeubjM)}(hCSafe to use in noinstr code; prefer atomic64_fetch_and() elsewhere.h]hCSafe to use in noinstr code; prefer atomic64_fetch_and() elsewhere.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjeubjM)}(h **Return**h]j)}(hjfh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+raw_atomic64_fetch_and_acquire (C function) c.raw_atomic64_fetch_and_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9s64 raw_atomic64_fetch_and_acquire (s64 i, atomic64_t *v)h]h)}(h8s64 raw_atomic64_fetch_and_acquire(s64 i, atomic64_t *v)h](h)}(hhh]j)}(hs64h]hs64}(hj)ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&gubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj+gmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_and_acquiresb c.raw_atomic64_fetch_and_acquireasbuh1hhj"ghhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjKghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ghhhjJghMubh)}(hraw_atomic64_fetch_and_acquireh]j)}(hjGgh]hraw_atomic64_fetch_and_acquire}(hj]ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYgubah}(h]h ](jjeh"]h$]h&]jjuh1hhj"ghhhjJghMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj{ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxgubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj}gmodnameN classnameNjwjz)}j}]jEg c.raw_atomic64_fetch_and_acquireasbuh1hhjtgubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjtgubj)}(hjh]hi}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpgubj:)}(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}]jEg c.raw_atomic64_fetch_and_acquireasbuh1hhjgubjQ)}(h h]h }(hjghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]hv}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjpgubeh}(h]h ]h"]h$]h&]jjuh1j3hj"ghhhjJghMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjghhhjJghMubah}(h]jgah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjJghMhjghhubj4)}(hhh]jM)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj$hhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj!hhhubah}(h]h ]h"]h$]h&]uh1j3hjghhhjJghMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhj,mubeh}(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}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMMubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnhhhjnhMMubh)}(hraw_atomic64_andnoth]j)}(hraw_atomic64_andnoth]hraw_atomic64_andnot}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]jjuh1hhjnhhhjnhMMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjnmodnameN classnameNjwjz)}j}]j)}jsjnsbc.raw_atomic64_andnotasbuh1hhjnubjQ)}(h h]h }(hjnhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnubj)}(hjh]hi}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubj:)}(h 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}]jnc.raw_atomic64_andnotasbuh1hhj oubjQ)}(h h]h }(hj/ohhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj oubj)}(hjh]h*}(hj=ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj oubj)}(hjh]hv}(hjJohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj oubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjnubeh}(h]h ]h"]h$]h&]jjuh1j3hjnhhhjnhMMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjnhhhjnhMMubah}(h]j{nah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjnhMMhj}nhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hjsohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMMhjpohhubah}(h]h ]h"]h$]h&]uh1j3hj}nhhhjnhMMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjojHjojIjJjKuh1hhhhjhNhNubj)}(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)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjoubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjoh]hs64 i}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMNhjoubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohMNhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMNhjoubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjoh]h atomic64_t *v}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOhjoubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjphMOhjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjphMOhjoubeh}(h]h ]h"]h$]h&]uh1jhjoubjM)}(h**Description**h]j)}(hj(ph]h Description}(hj*phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&pubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjoubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj>phhhNhNubj)}(h**v**h]hv}(hjFphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>pubh to (}(hj>phhhNhNubj)}(h**v**h]hv}(hjXphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>pubh & }(hj>phhhNhNubj)}(h**~i**h]h~i}(hjjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>pubh) with relaxed ordering.}(hj>phhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMPhjoubjM)}(h@Safe to use in noinstr code; prefer atomic64_andnot() elsewhere.h]h@Safe to use in noinstr code; prefer atomic64_andnot() elsewhere.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMRhjoubjM)}(h **Return**h]j)}(hjph]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMThjoubjM)}(hNothing.h]hNothing.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMUhjoubeh}(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}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_andnotsbc.raw_atomic64_fetch_andnotasbuh1hhjphhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMbubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjphhhjphMbubh)}(hraw_atomic64_fetch_andnoth]j)}(hjph]hraw_atomic64_fetch_andnot}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj qubah}(h]h ](jjeh"]h$]h&]jjuh1hhjphhhjphMbubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hj.qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+qubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj0qmodnameN classnameNjwjz)}j}]jpc.raw_atomic64_fetch_andnotasbuh1hhj'qubjQ)}(h h]h }(hjLqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'qubj)}(hjh]hi}(hjZqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'qubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#qubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjuqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrqubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjwqmodnameN classnameNjwjz)}j}]jpc.raw_atomic64_fetch_andnotasbuh1hhjnqubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjnqubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnqubj)}(hjh]hv}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnqubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#qubeh}(h]h ]h"]h$]h&]jjuh1j3hjphhhjphMbubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjphhhjphMbubah}(h]jpah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjphMbhjphhubj4)}(hhh]jM)}(h)atomic bitwise AND NOT with full orderingh]h)atomic bitwise AND NOT with full ordering}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMbhjqhhubah}(h]h ]h"]h$]h&]uh1j3hjphhhjphMbubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjqjHjqjIjJjKuh1hhhhjhNhNubj)}(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)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjqubj)}(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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMchjrubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hj1rhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-rhMchj.rubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhj-rhMchjrubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjQrh]h atomic64_t *v}(hjSrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjOrubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhjKrubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjfrhMdhjgrubah}(h]h ]h"]h$]h&]uh1jhjKrubeh}(h]h ]h"]h$]h&]uh1jhjfrhMdhjrubeh}(h]h ]h"]h$]h&]uh1jhjqubjM)}(h**Description**h]j)}(hjrh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMfhjqubjM)}(h@Atomically updates **v** to (**v** & **~i**) with full ordering.h](hAtomically updates }(hjrhhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh to (}(hjrhhhNhNubj)}(h**v**h]hv}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh & }(hjrhhhNhNubj)}(h**~i**h]h~i}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh) with full ordering.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMehjqubjM)}(hFSafe to use in noinstr code; prefer atomic64_fetch_andnot() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_fetch_andnot() elsewhere.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMghjqubjM)}(h **Return**h]j)}(hjrh]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMihjqubjM)}(hThe original value of **v**.h](hThe original value of }(hjshhhNhNubj)}(h**v**h]hv}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMjhjqubeh}(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)}(hxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;xubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj@xmodnameN classnameNjwjz)}j}]j)}js!raw_atomic64_fetch_andnot_relaxedsb#c.raw_atomic64_fetch_andnot_relaxedasbuh1hhj7xhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj`xhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7xhhhj_xhMubh)}(h!raw_atomic64_fetch_andnot_relaxedh]j)}(hj\xh]h!raw_atomic64_fetch_andnot_relaxed}(hjrxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnxubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7xhhhj_xhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjxmodnameN classnameNjwjz)}j}]jZx#c.raw_atomic64_fetch_andnot_relaxedasbuh1hhjxubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hjh]hi}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjxubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjxmodnameN classnameNjwjz)}j}]jZx#c.raw_atomic64_fetch_andnot_relaxedasbuh1hhjxubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hjh]hv}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjxubeh}(h]h ]h"]h$]h&]jjuh1j3hj7xhhhj_xhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj3xhhhj_xhMubah}(h]j.xah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj_xhMhj0xhhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj9yhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj6yhhubah}(h]h ]h"]h$]h&]uh1j3hj0xhhhj_xhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjQyjHjQyjIjJjKuh1hhhhjhNhNubj)}(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_andnot_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj[yh]h Parameters}(hj]yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYyubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUyubj)}(hhh](j)}(h``s64 i`` s64 value h](j)}(h ``s64 i``h]jS)}(hjzyh]hs64 i}(hj|yhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxyubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjtyubj)}(hhh]jM)}(h s64 valueh]h s64 value}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjtyubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjqyubj)}(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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjyubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjqyubeh}(h]h ]h"]h$]h&]uh1jhjUyubjM)}(h**Description**h]j)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUyubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed 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 & }(hjzhhhNhNubj)}(h**~i**h]h~i}(hj0zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh) with relaxed ordering.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUyubjM)}(hNSafe to use in noinstr code; prefer atomic64_fetch_andnot_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic64_fetch_andnot_relaxed() elsewhere.}(hjIzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUyubjM)}(h **Return**h]j)}(hjZzh]hReturn}(hj\zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXzubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUyubjM)}(hThe original value of **v**.h](hThe original value of }(hjpzhhhNhNubj)}(h**v**h]hv}(hjxzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpzubh.}(hjpzhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjUyubeh}(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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzhhhjzhMubh)}(hraw_atomic64_orh]j)}(hraw_atomic64_orh]hraw_atomic64_or}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]jjuh1hhjzhhhjzhMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]j)}jsjzsbc.raw_atomic64_orasbuh1hhjzubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjzubj)}(hjh]hi}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj:{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7{ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<{modnameN classnameNjwjz)}j}]j {c.raw_atomic64_orasbuh1hhj3{ubjQ)}(h h]h }(hjX{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3{ubj)}(hjh]h*}(hjf{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3{ubj)}(hjh]hv}(hjs{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzubeh}(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 bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{hhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjzhMubeh}(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. Safe to use in noinstr code; prefer atomic64_or() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubj)}(hhh](j)}(h``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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubj)}(hhh]jM)}(h s64 valueh]h s64 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(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj|h]h atomic64_t *v}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj|ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj/|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+|hMhj,|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj+|hMhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{ubjM)}(h**Description**h]j)}(hjQ|h]h Description}(hjS|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO|ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hjg|hhhNhNubj)}(h**v**h]hv}(hjo|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg|ubh to (}(hjg|hhhNhNubj)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg|ubh | }(hjg|hhhNhNubj)}(h**i**h]hi}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg|ubh) with relaxed ordering.}(hjg|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj{ubjM)}(hubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjVhhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh to (}(hjVhhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh ^ }(hjVhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh) with relaxed ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hKSafe to use in noinstr code; prefer atomic64_fetch_xor_relaxed() elsewhere.h]hKSafe to use in noinstr code; prefer atomic64_fetch_xor_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj’hhhNhNubj)}(h**v**h]hv}(hjʒhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj’ubh.}(hj’hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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_xchgasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj'hMubh)}(hraw_atomic64_xchgh]j)}(hj$h]hraw_atomic64_xchg}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j"c.raw_atomic64_xchgasbuh1hhjQubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubj:)}(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_xchgasbuh1hhjubjQ)}(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&]noemphjjuh1j9hjMubeh}(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 full orderingh]h"atomic exchange with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj'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&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjCh]h atomic64_t *v}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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)}(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&]uh1jRhjzubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjvubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMhj:ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hj͔hhhNhNubj)}(h**v**h]hv}(hjՔhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͔ubh to }(hj͔hhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͔ubh with full ordering.}(hj͔hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj'hhhNhNubj)}(h**v**h]hv}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_xchg_acquiresbc.raw_atomic64_xchg_acquireasbuh1hhjdhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhjhMubh)}(hraw_atomic64_xchg_acquireh]j)}(hjh]hraw_atomic64_xchg_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjdhhhjhMubj4)}(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}]jc.raw_atomic64_xchg_acquireasbuh1hhjubjQ)}(h h]h }(hjەhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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_xchg_acquireasbuh1hhj ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hnewh]hnew}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjdhhhjhMubeh}(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 exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjdhhubah}(h]h ]h"]h$]h&]uh1j3hj]hhhjhMubeh}(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 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(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)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjߖubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjۖubj)}(hhh]jM)}(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&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hj2hhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh to }(hj2hhhNhNubj)}(h**new**h]hnew}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh with acquire ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hFSafe to use in noinstr code; prefer atomic64_xchg_acquire() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_acquire() elsewhere.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjvh]hReturn}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_xchg_release (C function)c.raw_atomic64_xchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6s64 raw_atomic64_xchg_release (atomic64_t *v, s64 new)h]h)}(h5s64 raw_atomic64_xchg_release(atomic64_t *v, s64 new)h](h)}(hhh]j)}(hs64h]hs64}(hjЗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͗ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjҗmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_xchg_releasesbc.raw_atomic64_xchg_releaseasbuh1hhjɗhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjɗhhhjhMubh)}(hraw_atomic64_xchg_releaseh]j)}(hjh]hraw_atomic64_xchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjɗhhhjhMubj4)}(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&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj$modnameN classnameNjwjz)}j}]jc.raw_atomic64_xchg_releaseasbuh1hhjubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjxmodnameN classnameNjwjz)}j}]jc.raw_atomic64_xchg_releaseasbuh1hhjoubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjɗhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjŗhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj—hhubj4)}(hhh]jM)}(h%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hj̘hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjɘhhubah}(h]h ]h"]h$]h&]uh1j3hj—hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 new`` s64 value to assign **Description** Atomically updates **v** to **new** with release ordering. Safe to use in noinstr code; prefer atomic64_xchg_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj h]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjFh]hs64 new}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj@ubj)}(hhh]jM)}(hs64 value to 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)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hFSafe to use in noinstr code; prefer atomic64_xchg_release() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_release() elsewhere.}(hjʙhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjۙh]hReturn}(hjݙhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٙubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_xchg_relaxed (C function)c.raw_atomic64_xchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h6s64 raw_atomic64_xchg_relaxed (atomic64_t *v, s64 new)h]h)}(h5s64 raw_atomic64_xchg_relaxed(atomic64_t *v, s64 new)h](h)}(hhh]j)}(hs64h]hs64}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_xchg_relaxedsbc.raw_atomic64_xchg_relaxedasbuh1hhj.hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.hhhjVhM ubh)}(hraw_atomic64_xchg_relaxedh]j)}(hjSh]hraw_atomic64_xchg_relaxed}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1hhj.hhhjVhM ubj4)}(h(atomic64_t *v, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jQc.raw_atomic64_xchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjۚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjؚubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjݚmodnameN classnameNjwjz)}j}]jQc.raw_atomic64_xchg_relaxedasbuh1hhjԚ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&]jjuh1j3hj.hhhjVhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj*hhhjVhM ubah}(h]j%ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjVhM hj'hhubj4)}(hhh]jM)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj.hhubah}(h]h ]h"]h$]h&]uh1j3hj'hhhjVhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjIjHjIjIjJjKuh1hhhhjhNhNubj)}(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)}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjMubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjrh]h atomic64_t *v}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjlubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhM hjiubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjěhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjiubeh}(h]h ]h"]h$]h&]uh1jhjMubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjMubjM)}(h:Atomically updates **v** to **new** with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjMubjM)}(hFSafe to use in noinstr code; prefer atomic64_xchg_relaxed() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_xchg_relaxed() elsewhere.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubjM)}(h **Return**h]j)}(hj@h]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubjM)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjMubeh}(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&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_cmpxchgsbc.raw_atomic64_cmpxchgasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(hraw_atomic64_cmpxchgh]j)}(hjh]hraw_atomic64_cmpxchg}(hjΜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʜubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchgasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBmodnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchgasbuh1hhj9ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(holdh]hold}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchgasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM hjhhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjޝhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hj۝hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 old`` s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_cmpxchg() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjXh]hs64 old}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM"hjRubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhM"hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM"hjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj̞h]h Description}(hjΞhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʞubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM%hjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjubjM)}(hASafe to use in noinstr code; prefer atomic64_cmpxchg() elsewhere.h]hASafe to use in noinstr code; prefer atomic64_cmpxchg() elsewhere.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjubjM)}(h **Return**h]j)}(hj\h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hjubjM)}(hThe original value of **v**.h](hThe original value of }(hjrhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic64_cmpxchg_acquire (C function)c.raw_atomic64_cmpxchg_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hBs64 raw_atomic64_cmpxchg_acquire (atomic64_t *v, s64 old, s64 new)h]h)}(hAs64 raw_atomic64_cmpxchg_acquire(atomic64_t *v, s64 old, s64 new)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_cmpxchg_acquiresbc.raw_atomic64_cmpxchg_acquireasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=ubjQ)}(h h]h }(hj؟hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjןhM=ubh)}(hraw_atomic64_cmpxchg_acquireh]j)}(hjԟh]hraw_atomic64_cmpxchg_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjןhM=ubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]jҟc.raw_atomic64_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjAhhhNhNubah}(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&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj^modnameN classnameNjwjz)}j}]jҟc.raw_atomic64_cmpxchg_acquireasbuh1hhjUubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jҟc.raw_atomic64_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjРhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjןhM=ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjןhM=ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjןhM=hjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjןhM=ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 old`` s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_cmpxchg_acquire() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hj5ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhM>hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM>hj2ubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjth]hs64 old}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjnubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhM?hj2ubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjơhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj¡hM@hjáubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj¡hM@hj2ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with acquire ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjubjM)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_acquire() elsewhere.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMDhjubjM)}(h **Return**h]j)}(hjxh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMFhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMGhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic64_cmpxchg_release (C function)c.raw_atomic64_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hBs64 raw_atomic64_cmpxchg_release (atomic64_t *v, s64 old, s64 new)h]h)}(hAs64 raw_atomic64_cmpxchg_release(atomic64_t *v, s64 old, s64 new)h](h)}(hhh]j)}(hs64h]hs64}(hjҢhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϢubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjԢmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_cmpxchg_releasesbc.raw_atomic64_cmpxchg_releaseasbuh1hhjˢhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjˢhhhjhMZubh)}(hraw_atomic64_cmpxchg_releaseh]j)}(hjh]hraw_atomic64_cmpxchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjˢhhhjhMZubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj&modnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchg_releaseasbuh1hhjubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjzmodnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchg_releaseasbuh1hhjqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjqubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(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 reftargetj£modnameN classnameNjwjz)}j}]jc.raw_atomic64_cmpxchg_releaseasbuh1hhjubjQ)}(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&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjˢhhhjhMZubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjǢhhhjhMZubah}(h]j¢ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMZhjĢhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMZhjhhubah}(h]h ]h"]h$]h&]uh1j3hjĢhhhjhMZubeh}(h]h ](jAfunctioneh"]h$]h&]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 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)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hj2ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjWh]h atomic64_t *v}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM[hjQubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlhM[hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhM[hjNubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjh]hs64 old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM\hjubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjNubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjɤh]hs64 new}(hjˤhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjǤubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM]hjäubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjޤhM]hjߤubah}(h]h ]h"]h$]h&]uh1jhjäubeh}(h]h ]h"]h$]h&]uh1jhjޤhM]hjNubeh}(h]h ]h"]h$]h&]uh1jhj2ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM_hj2ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with release ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM^hj2ubjM)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMahj2ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMchj2ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMdhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic64_cmpxchg_relaxed (C function)c.raw_atomic64_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hBs64 raw_atomic64_cmpxchg_relaxed (atomic64_t *v, s64 old, s64 new)h]h)}(hAs64 raw_atomic64_cmpxchg_relaxed(atomic64_t *v, s64 old, s64 new)h](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_cmpxchg_relaxedsbc.raw_atomic64_cmpxchg_relaxedasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMvubh)}(hraw_atomic64_cmpxchg_relaxedh]j)}(hj h]hraw_atomic64_cmpxchg_relaxed}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMvubj4)}(h!(atomic64_t *v, s64 old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjBmodnameN classnameNjwjz)}j}]j c.raw_atomic64_cmpxchg_relaxedasbuh1hhj9ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hjh]hv}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubj:)}(hs64 oldh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.raw_atomic64_cmpxchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj5ubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjܦhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj٦ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjަmodnameN classnameNjwjz)}j}]j c.raw_atomic64_cmpxchg_relaxedasbuh1hhjզ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&]noemphjjuh1j9hj5ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMvubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMvubah}(h]jޥah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMvhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMvhj/hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMvubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjJjHjJjIjJjKuh1hhhhjhNhNubj)}(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)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMzhjNubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjsh]h atomic64_t *v}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMwhjmubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjjubj)}(h&``s64 old`` s64 value to compare with h](j)}(h ``s64 old``h]jS)}(hjh]hs64 old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMxhjubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjŧhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMxhj§ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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&]uh1jhjhMyhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubjM)}(h**Description**h]j)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM{hjNubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj6hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh == }(hj6hhhNhNubj)}(h**old**h]hold}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh), atomically updates }(hj6hhhNhNubj)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh to }(hj6hhhNhNubj)}(h**new**h]hnew}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh# with relaxed ordering. Otherwise, }(hj6hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh2 is not modified and relaxed ordering is provided.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMzhjNubjM)}(hISafe to use in noinstr code; prefer atomic64_cmpxchg_relaxed() elsewhere.h]hISafe to use in noinstr code; prefer atomic64_cmpxchg_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM}hjNubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubjM)}(hThe original value of **v**.h](hThe original value of }(hjƨhhhNhNubj)}(h**v**h]hv}(hjΨhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƨubh.}(hjƨhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjNubeh}(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&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic64_try_cmpxchgh]j)}(hraw_atomic64_try_cmpxchgh]hraw_atomic64_try_cmpxchg}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h"(atomic64_t *v, s64 *old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjHmodnameN classnameNjwjz)}j}]j)}jsj)sbc.raw_atomic64_try_cmpxchgasbuh1hhj?ubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;ubj:)}(hs64 *oldh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jbc.raw_atomic64_try_cmpxchgasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjȩhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(holdh]hold}(hjթhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;ubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jbc.raw_atomic64_try_cmpxchgasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj;ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjDhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(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 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)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjcubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]jS)}(hjh]hs64 *old}(hjêhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjڪhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj֪hMhjתubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj֪hMhjubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjh]hs64 new}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjcubjM)}(h**Description**h]j)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjcubjM)}(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 (}(hjKhhhNhNubj)}(h**v**h]hv}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh == }(hjKhhhNhNubj)}(h**old**h]hold}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh), atomically updates }(hjKhhhNhNubj)}(h**v**h]hv}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh to }(hjKhhhNhNubj)}(h**new**h]hnew}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh with full ordering. Otherwise, }(hjKhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh is not modified, }(hjKhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh$ is updated to the current value of }(hjKhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh#, and relaxed ordering is provided.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjcubjM)}(hESafe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere.h]hESafe to use in noinstr code; prefer atomic64_try_cmpxchg() elsewhere.}(hjثhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjcubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjcubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjcubeh}(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}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJhhhj[hMubh)}(h raw_atomic64_try_cmpxchg_acquireh]j)}(h raw_atomic64_try_cmpxchg_acquireh]h raw_atomic64_try_cmpxchg_acquire}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjJhhhj[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)}jsjpsb"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjȬhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 *oldh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhjܬubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjܬubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܬubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܬubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:modnameN classnameNjwjz)}j}]j"c.raw_atomic64_try_cmpxchg_acquireasbuh1hhj1ubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hnewh]hnew}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(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)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjChhhj[hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_try_cmpxchg_acquire() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjϭh]h atomic64_t *v}(hjѭhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjͭubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjɭubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjɭubeh}(h]h ]h"]h$]h&]uh1jhjhMhjƭubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]jS)}(hjh]hs64 *old}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjƭubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjAh]hs64 new}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj;ubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjƭubeh}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), atomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**new**h]hnew}(hjЮhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# with acquire ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not modified, }(hjhhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ is updated to the current value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#, and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_acquire() elsewhere.h]hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh if the exchange occurred, }(hjFhhhNhNubj)}(h **false**h]hfalse}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh otherwise.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic64_try_cmpxchg_release (C function)"c.raw_atomic64_try_cmpxchg_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hHbool raw_atomic64_try_cmpxchg_release (atomic64_t *v, s64 *old, s64 new)h]h)}(hGbool raw_atomic64_try_cmpxchg_release(atomic64_t *v, s64 *old, s64 new)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h raw_atomic64_try_cmpxchg_releaseh]j)}(h raw_atomic64_try_cmpxchg_releaseh]h raw_atomic64_try_cmpxchg_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h"(atomic64_t *v, s64 *old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjԯhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѯubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj֯modnameN classnameNjwjz)}j}]j)}jsjsb"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhjͯubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjͯubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͯubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͯubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjɯubj:)}(hs64 *oldh](h)}(hhh]j)}(hs64h]hs64}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,modnameN classnameNjwjz)}j}]j"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhj#ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(holdh]hold}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjɯubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j"c.raw_atomic64_try_cmpxchg_releaseasbuh1hhjxubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjɯubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hjհhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjҰhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 *old`` pointer to s64 value to compare with ``s64 new`` s64 value to assign **Description** If (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_try_cmpxchg_release() elsewhere. **Return** **true** if the exchange occurred, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(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``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]jS)}(hjOh]hs64 *old}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjIubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhj 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&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjñh]h Description}(hjűhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** == **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}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٱubh#, and relaxed ordering is provided.}(hjٱhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_release() elsewhere.h]hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_release() elsewhere.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjwh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the exchange occurred, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic64_try_cmpxchg_relaxed (C function)"c.raw_atomic64_try_cmpxchg_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hHbool raw_atomic64_try_cmpxchg_relaxed (atomic64_t *v, s64 *old, s64 new)h]h)}(hGbool raw_atomic64_try_cmpxchg_relaxed(atomic64_t *v, s64 *old, s64 new)h](j)}(hjh]hbool}(hjܲhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjزhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjزhhhjhMubh)}(h raw_atomic64_try_cmpxchg_relaxedh]j)}(h raw_atomic64_try_cmpxchg_relaxedh]h raw_atomic64_try_cmpxchg_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjزhhhjhMubj4)}(h"(atomic64_t *v, s64 *old, s64 new)h](j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 *oldh](h)}(hhh]j)}(hs64h]hs64}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjsmodnameN classnameNjwjz)}j}]j7"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(holdh]hold}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 newh](h)}(hhh]j)}(hs64h]hs64}(hjƳhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjóubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjȳmodnameN classnameNjwjz)}j}]j7"c.raw_atomic64_try_cmpxchg_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnewh]hnew}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjزhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjԲhhhjhMubah}(h]jϲah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjѲhhubj4)}(hhh]jM)}(h1atomic compare and exchange with relaxed orderingh]h1atomic compare and exchange with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjѲhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj4jHj4jIjJjKuh1hhhhjhNhNubj)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj]h]h atomic64_t *v}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjWubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubj)}(h2``s64 *old`` pointer to s64 value to compare with h](j)}(h ``s64 *old``h]jS)}(hjh]hs64 *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(h$pointer to s64 value to compare withh]h$pointer to s64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(h ``s64 new`` s64 value to assign h](j)}(h ``s64 new``h]jS)}(hjϴh]hs64 new}(hjѴhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjʹubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjɴubj)}(hhh]jM)}(hs64 value to assignh]hs64 value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjɴubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with relaxed ordering. Otherwise, **v** is not modified, **old** is updated to the current value of **v**, and relaxed ordering is provided.h](hIf (}(hj hhhNhNubj)}(h**v**h]hv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh == }(hj hhhNhNubj)}(h**old**h]hold}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh), atomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to }(hj hhhNhNubj)}(h**new**h]hnew}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh# with relaxed ordering. Otherwise, }(hj hhhNhNubj)}(h**v**h]hv}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh is not modified, }(hj hhhNhNubj)}(h**old**h]hold}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh$ is updated to the current value of }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh#, and relaxed ordering is provided.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubjM)}(hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_relaxed() elsewhere.h]hMSafe to use in noinstr code; prefer atomic64_try_cmpxchg_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubjM)}(h7**true** if the exchange occurred, **false** otherwise.h](j)}(h**true**h]htrue}(hjصhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԵubh if the exchange occurred, }(hjԵhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԵubh otherwise.}(hjԵhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj8ubeh}(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&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj0hMubh)}(hraw_atomic64_sub_and_testh]j)}(hraw_atomic64_sub_and_testh]hraw_atomic64_sub_and_test}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj0hMubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjdmodnameN classnameNjwjz)}j}]j)}jsjEsbc.raw_atomic64_sub_and_testasbuh1hhj[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j~c.raw_atomic64_sub_and_testasbuh1hhjubjQ)}(h h]h }(hjɶhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj׶hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubeh}(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)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj0hMubeh}(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)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj)ubj)}(hhh](j)}(h ``s64 i`` s64 value to subtract h](j)}(h ``s64 i``h]jS)}(hjNh]hs64 i}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjHubj)}(hhh]jM)}(hs64 value to subtracth]hs64 value to subtract}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjEubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjEubeh}(h]h ]h"]h$]h&]uh1jhj)ubjM)}(h**Description**h]j)}(hj·h]h Description}(hjķhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj)ubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hjطhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjطubh to (}(hjطhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjطubh - }(hjطhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjطubh) with full ordering.}(hjطhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj)ubjM)}(hFSafe to use in noinstr code; prefer atomic64_sub_and_test() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_sub_and_test() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj)ubjM)}(h **Return**h]j)}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj)ubjM)}(hF**true** if the resulting value of **v** is zero, **false** otherwise.h](j)}(h**true**h]htrue}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh if the resulting value of }(hjDhhhNhNubj)}(h**v**h]hv}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh is zero, }(hjDhhhNhNubj)}(h **false**h]hfalse}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh otherwise.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_dec_and_test (C function)c.raw_atomic64_dec_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.bool raw_atomic64_dec_and_test (atomic64_t *v)h]h)}(h-bool raw_atomic64_dec_and_test(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM'ubh)}(hraw_atomic64_dec_and_testh]j)}(hraw_atomic64_dec_and_testh]hraw_atomic64_dec_and_test}(hjŸhhhNhNubah}(h]h ]jah"]h$]h&]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)}jsjǸsbc.raw_atomic64_dec_and_testasbuh1hhjݸubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjݸubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݸubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݸubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjٸubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM'ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM'ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM'hjhhubj4)}(hhh]jM)}(h4atomic decrement and test if zero with full orderingh]h4atomic decrement and test if zero with full ordering}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM'hjEhhubah}(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. 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)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjdubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM(hjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjdubjM)}(h**Description**h]j)}(hjĹh]h Description}(hjƹhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj¹ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM*hjdubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjڹhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڹubh to (}(hjڹhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڹubh - 1) with full ordering.}(hjڹhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM)hjdubjM)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM+hjdubjM)}(h **Return**h]j)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM-hjdubjM)}(hF**true** if the resulting value of **v** is zero, **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 zero, }(hj4hhhNhNubj)}(h **false**h]hfalse}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh otherwise.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM.hjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_inc_and_test (C function)c.raw_atomic64_inc_and_testhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.bool raw_atomic64_inc_and_test (atomic64_t *v)h]h)}(h-bool raw_atomic64_inc_and_test(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM;ubh)}(hraw_atomic64_inc_and_testh]j)}(hraw_atomic64_inc_and_testh]hraw_atomic64_inc_and_test}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM;ubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjԺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѺubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjֺmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_inc_and_testasbuh1hhjͺubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjͺubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͺubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͺubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjɺubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM;ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM;ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM;hjhhubj4)}(hhh]jM)}(h4atomic increment and test if zero with full orderingh]h4atomic increment and test if zero with full ordering}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hj5hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM;ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjPjHjPjIjJjKuh1hhhhjhNhNubj)}(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)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjTubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjyh]h atomic64_t *v}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjwubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM<hjsubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjpubah}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM>hjTubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(hjʻhhhNhNubj)}(h**v**h]hv}(hjһhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʻubh to (}(hjʻhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʻubh + 1) with full ordering.}(hjʻhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hjTubjM)}(hFSafe to use in noinstr code; prefer atomic64_inc_and_test() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_inc_and_test() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjTubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMAhjTubjM)}(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}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh otherwise.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMBhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_add_negative (C function)c.raw_atomic64_add_negativehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5bool raw_atomic64_add_negative (s64 i, atomic64_t *v)h]h)}(h4bool raw_atomic64_add_negative(s64 i, atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMOubh)}(hraw_atomic64_add_negativeh]j)}(hraw_atomic64_add_negativeh]hraw_atomic64_add_negative}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMOubj4)}(h(s64 i, atomic64_t *v)h](j:)}(hs64 ih](h)}(hhh]j)}(hs64h]hs64}(hjļhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjƼmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_add_negativeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_add_negativeasbuh1hhjubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMOubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj}hhhjhMOubah}(h]jxah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMOhjzhhubj4)}(hhh]jM)}(h2atomic add and test if negative with full orderingh]h2atomic add and test if negative with full ordering}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMOhjlhhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjhMOubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXI**Parameters** ``s64 i`` s64 value to add ``atomic64_t *v`` pointer to atomic64_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic64_add_negative() elsewhere. **Return** **true** if the resulting value of **v** is negative, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMShjubj)}(hhh](j)}(h``s64 i`` s64 value to add h](j)}(h ``s64 i``h]jS)}(hjh]hs64 i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMPhjubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjɽhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjŽhMPhjƽubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjŽhMPhjubj)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMQhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj$h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMShjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj:hhhNhNubj)}(h**v**h]hv}(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 full ordering.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMRhjubjM)}(hFSafe to use in noinstr code; prefer atomic64_add_negative() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_add_negative() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMThjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMVhjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is negative, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjξhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMWhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic64_add_negative_acquire (C function)#c.raw_atomic64_add_negative_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=bool raw_atomic64_add_negative_acquire (s64 i, atomic64_t *v)h]h)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh is negative, }(hj(hhhNhNubj)}(h **false**h]hfalse}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh otherwise.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMrhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic64_add_negative_release (C function)#c.raw_atomic64_add_negative_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=bool raw_atomic64_add_negative_release (s64 i, atomic64_t *v)h]h)}(hhhhNhNubj)}(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 release ordering.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hNSafe to use in noinstr code; prefer atomic64_add_negative_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic64_add_negative_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the resulting value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is negative, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsraw_atomic64_fetch_add_unlesssbc.raw_atomic64_fetch_add_unlessasbuh1hhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic64_fetch_add_unlessh]j)}(hjh]hraw_atomic64_fetch_add_unless}(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}]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)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 ah](h)}(hhh]j)}(hs64h]hs64}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]jc.raw_atomic64_fetch_add_unlessasbuh1hhj/ubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjնh]ha}(hjbhhhNhNubah}(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&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_fetch_add_unlessasbuh1hhjvubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjvubj)}(hj\h]hu}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic64_t *v`` pointer to atomic64_t ``s64 a`` s64 value to add ``s64 u`` s64 value to compare with **Description** If (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_fetch_add_unless() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubj)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]jS)}(hjLh]hs64 a}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjFubj)}(hhh]jM)}(hs64 value to addh]hs64 value to add}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhj ubj)}(h$``s64 u`` s64 value to compare with h](j)}(h ``s64 u``h]jS)}(hjh]hs64 u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** != **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}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjbh]hReturn}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjxhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$raw_atomic64_add_unless (C function)c.raw_atomic64_add_unlesshNtauh1hhjhhhNhNubh)}(hhh](h)}(h:bool raw_atomic64_add_unless (atomic64_t *v, s64 a, s64 u)h]h)}(h9bool raw_atomic64_add_unless(atomic64_t *v, s64 a, s64 u)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(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)}(hjh]hv}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 ah](h)}(hhh]j)}(hs64h]hs64}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjPmodnameN classnameNjwjz)}j}]jc.raw_atomic64_add_unlessasbuh1hhjGubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubj)}(hjնh]ha}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hs64 uh](h)}(hhh]j)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.raw_atomic64_add_unlessasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hj\h]hu}(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)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]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)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh](j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj+h]h atomic64_t *v}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj%ubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj"ubj)}(h``s64 a`` s64 value to add h](j)}(h ``s64 a``h]jS)}(hjdh]hs64 a}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhj^ubj)}(hhh]jM)}(hs64 value to addh]hs64 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$``s64 u`` s64 value to compare with h](j)}(h ``s64 u``h]jS)}(hjh]hs64 u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hs64 value to compare withh]hs64 value to compare with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj"ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** != **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}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh!) with full ordering. Otherwise, }(hjhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 is not modified and relaxed ordering is provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hDSafe to use in noinstr code; prefer atomic64_add_unless() elsewhere.h]hDSafe to use in noinstr code; prefer atomic64_add_unless() elsewhere.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic64_inc_not_zero (C function)c.raw_atomic64_inc_not_zerohNtauh1hhjhhhNhNubh)}(hhh](h)}(h.bool raw_atomic64_inc_not_zero (atomic64_t *v)h]h)}(h-bool raw_atomic64_inc_not_zero(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic64_inc_not_zeroh]j)}(hraw_atomic64_inc_not_zeroh]hraw_atomic64_inc_not_zero}(hjhhhNhNubah}(h]h ]jah"]h$]h&]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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic64_inc_not_zeroasbuh1hhj)ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hjh]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 increment unless zero with full orderingh]h/atomic increment unless zero with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXd**Parameters** ``atomic64_t *v`` pointer to atomic64_t **Description** If (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic64_inc_not_zero() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** != 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj&hhhNhNubj)}(h**v**h]hv}(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}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh% + 1) with full ordering. Otherwise, }(hj&hhhNhNubj)}(h**v**h]hv}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh2 is not modified and relaxed ordering is provided.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hFSafe to use in noinstr code; prefer atomic64_inc_not_zero() elsewhere.h]hFSafe to use in noinstr code; prefer atomic64_inc_not_zero() elsewhere.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic64_inc_unless_negative (C function)"c.raw_atomic64_inc_unless_negativehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5bool raw_atomic64_inc_unless_negative (atomic64_t *v)h]h)}(h4bool raw_atomic64_inc_unless_negative(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h raw_atomic64_inc_unless_negativeh]j)}(h raw_atomic64_inc_unless_negativeh]h raw_atomic64_inc_unless_negative}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic64_t *v)h]j:)}(h atomic64_t *vh](h)}(hhh]j)}(h atomic64_th]h atomic64_t}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]j)}jsj'sb"c.raw_atomic64_inc_unless_negativeasbuh1hhj=ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** >= 0), atomically updates **v** to (**v** + 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj:hhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh >= 0), atomically updates }(hj:hhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh to (}(hj:hhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh% + 1) with full ordering. Otherwise, }(hj:hhhNhNubj)}(h**v**h]hv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh2 is not modified and relaxed ordering is provided.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hMSafe to use in noinstr code; prefer atomic64_inc_unless_negative() elsewhere.h]hMSafe to use in noinstr code; prefer atomic64_inc_unless_negative() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic64_dec_unless_positive (C function)"c.raw_atomic64_dec_unless_positivehNtauh1hhjhhhNhNubh)}(hhh](h)}(h5bool raw_atomic64_dec_unless_positive (atomic64_t *v)h]h)}(h4bool raw_atomic64_dec_unless_positive(atomic64_t *v)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj&hMubh)}(h raw_atomic64_dec_unless_positiveh]j)}(h raw_atomic64_dec_unless_positiveh]h raw_atomic64_dec_unless_positive}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j)}jsj;sb"c.raw_atomic64_dec_unless_positiveasbuh1hhjQubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjMubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj&hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj&hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj&hMhjhhubj4)}(hhh]jM)}(h3atomic decrement unless positive with full orderingh]h3atomic decrement unless positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj&hMubeh}(h]h ](jAfunctioneh"]h$]h&]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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM hjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hjh]h atomic64_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubj)}(hhh]jM)}(hpointer to atomic64_th]hpointer to atomic64_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hIf (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjNhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh <= 0), atomically updates }(hjNhhhNhNubj)}(h**v**h]hv}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh to (}(hjNhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh% - 1) with full ordering. Otherwise, }(hjNhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh2 is not modified and relaxed ordering is provided.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhMhjubjM)}(hMSafe to use in noinstr code; prefer atomic64_dec_unless_positive() elsewhere.h]hMSafe to use in noinstr code; prefer atomic64_dec_unless_positive() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM!hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM#hjubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated, }(hjhhhNhNubj)}(h **false**h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]j)}jsraw_atomic64_dec_if_positivesbc.raw_atomic64_dec_if_positiveasbuh1hhj)hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8ubjQ)}(h h]h }(hjRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)hhhjQhM8ubh)}(hraw_atomic64_dec_if_positiveh]j)}(hjNh]hraw_atomic64_dec_if_positive}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhjQhM8ubj4)}(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}]jLc.raw_atomic64_dec_if_positiveasbuh1hhj{ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjwubah}(h]h ]h"]h$]h&]jjuh1j3hj)hhhjQhM8ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj%hhhjQhM8ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjQhM8hj"hhubj4)}(hhh]jM)}(h/atomic decrement if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM8hjhhubah}(h]h ]h"]h$]h&]uh1j3hj"hhhjQhM8ubeh}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM<hjubj)}(hhh]j)}(h(``atomic64_t *v`` pointer to atomic64_t h](j)}(h``atomic64_t *v``h]jS)}(hj%h]h atomic64_t *v}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj#ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.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)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM;hjubjM)}(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}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh > 0), atomically updates }(hjvhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh to (}(hjvhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh% - 1) with full ordering. Otherwise, }(hjvhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh2 is not modified and relaxed ordering is provided.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM:hjubjM)}(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&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM=hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM?hjubjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1), regardless of whether }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh was updated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhm/var/lib/git/docbuild/linux/Documentation/driver-api/basics:99: ./include/linux/atomic/atomic-arch-fallback.hhM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](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}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjChhhjUhKubh)}(hraw_atomic_long_readh]j)}(hraw_atomic_long_readh]hraw_atomic_long_read}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1hhjChhhjUhKubj4)}(h(const atomic_long_t *v)h]j:)}(hconst atomic_long_t *vh](j?)}(hjP*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)}jsjjsbc.raw_atomic_long_readasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubah}(h]h ]h"]h$]h&]jjuh1j3hjChhhjUhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj?hhhjUhKubah}(h]j:ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjUhKhj<hhubj4)}(hhh]jM)}(h!atomic load with relaxed orderingh]h!atomic load with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj<hhhjUhKubeh}(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)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj"ubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]jS)}(hjGh]hconst atomic_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:102: ./include/linux/atomic/atomic-long.hhKhjAubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hKhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj"ubjM)}(h:Atomically loads the value of **v** with relaxed ordering.h](hAtomically loads the value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj"ubjM)}(hASafe to use in noinstr code; prefer atomic_long_read() elsewhere.h]hASafe to use in noinstr code; prefer atomic_long_read() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj"ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj"ubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_long_read_acquire (C function)c.raw_atomic_long_read_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_read_acquire (const atomic_long_t *v)h]h)}(h9long raw_atomic_long_read_acquire(const atomic_long_t *v)h](j)}(hlongh]hlong}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK-ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj/hK-ubh)}(hraw_atomic_long_read_acquireh]j)}(hraw_atomic_long_read_acquireh]hraw_atomic_long_read_acquire}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj/hK-ubj4)}(h(const atomic_long_t *v)h]j:)}(hconst atomic_long_t *vh](j?)}(hjP*h]hconst}(hj^hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjZubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubh)}(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)}jsjDsbc.raw_atomic_long_read_acquireasbuh1hhjZubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj/hK-ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj/hK-ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/hK-hjhhubj4)}(hhh]jM)}(h!atomic load with acquire orderingh]h!atomic load with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK-hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj/hK-ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``const atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically loads the value of **v** with acquire ordering. Safe to use in noinstr code; prefer atomic_long_read_acquire() elsewhere. **Return** The value loaded from **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK1hjubj)}(hhh]j)}(h4``const atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``const atomic_long_t *v``h]jS)}(hj!h]hconst atomic_long_t *v}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK.hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hK.hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hK.hjubah}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK0hjubjM)}(h:Atomically loads the value of **v** with acquire ordering.h](hAtomically loads the value of }(hjrhhhNhNubj)}(h**v**h]hv}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh with acquire ordering.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK/hjubjM)}(hISafe to use in noinstr code; prefer atomic_long_read_acquire() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_read_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK1hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK3hjubjM)}(hThe value loaded from **v**.h](hThe value loaded from }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK4hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_set (C function)c.raw_atomic_long_sethNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void raw_atomic_long_set (atomic_long_t *v, long i)h]h)}(h2void raw_atomic_long_set(atomic_long_t *v, long i)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKAubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hKAubh)}(hraw_atomic_long_seth]j)}(hraw_atomic_long_seth]hraw_atomic_long_set}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hKAubj4)}(h(atomic_long_t *v, long i)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=modnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_setasbuh1hhj4ubjQ)}(h h]h }(hj[hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hjh]hv}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubj:)}(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&]noemphjjuh1j9hj0ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj hKAubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj hKAubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hKAhjhhubj4)}(hhh]jM)}(h atomic set with relaxed orderingh]h atomic set with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKAhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hKAubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long i`` long value to assign **Description** Atomically sets **v** to **i** with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_set() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKEhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKBhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj)hKBhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hKBhj ubj)}(h ``long i`` long value to assign h](j)}(h ``long i``h]jS)}(hjMh]hlong i}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjKubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKChjGubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhKChjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhKChj ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKEhjubjM)}(h5Atomically sets **v** to **i** with relaxed ordering.h](hAtomically sets }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKDhjubjM)}(h@Safe to use in noinstr code; prefer atomic_long_set() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_set() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKFhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKHhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKIhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(raw_atomic_long_set_release (C function)c.raw_atomic_long_set_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h;void raw_atomic_long_set_release (atomic_long_t *v, long i)h]h)}(h:void raw_atomic_long_set_release(atomic_long_t *v, long i)h](j)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKVubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#hhhj5hKVubh)}(hraw_atomic_long_set_releaseh]j)}(hraw_atomic_long_set_releaseh]hraw_atomic_long_set_release}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1hhj#hhhj5hKVubj4)}(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)}jsjJsbc.raw_atomic_long_set_releaseasbuh1hhj`ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj\ubj:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj\ubeh}(h]h ]h"]h$]h&]jjuh1j3hj#hhhj5hKVubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj5hKVubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj5hKVhjhhubj4)}(hhh]jM)}(h atomic set with release orderingh]h atomic set with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKVhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj5hKVubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long i`` long value to assign **Description** Atomically sets **v** to **i** with release ordering. Safe to use in noinstr code; prefer atomic_long_set_release() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKZhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj@h]hatomic_long_t *v}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKWhj:ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhKWhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhKWhj7ubj)}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKXhjsubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKXhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhKXhj7ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKZhjubjM)}(h5Atomically sets **v** to **i** with release ordering.h](hAtomically sets }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKYhjubjM)}(hHSafe to use in noinstr code; prefer atomic_long_set_release() elsewhere.h]hHSafe to use in noinstr code; prefer atomic_long_set_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK[hjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK]hjubjM)}(hNothing.h]hNothing.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhK^hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_add (C function)c.raw_atomic_long_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void raw_atomic_long_add (long i, atomic_long_t *v)h]h)}(h2void raw_atomic_long_add(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKkubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOhhhjahKkubh)}(hraw_atomic_long_addh]j)}(hraw_atomic_long_addh]hraw_atomic_long_add}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOhhhjahKkubj4)}(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)}jsjvsbc.raw_atomic_long_addasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjOhhhjahKkubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhjahKkubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjahKkhjHhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKkhj(hhubah}(h]h ]h"]h$]h&]uh1j3hjHhhhjahKkubeh}(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 relaxed ordering. Safe to use in noinstr code; prefer atomic_long_add() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKohjGubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjlh]hlong i}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKlhjfubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKlhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhKlhjcubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKmhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKmhjcubeh}(h]h ]h"]h$]h&]uh1jhjGubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKohjGubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKnhjGubjM)}(h@Safe to use in noinstr code; prefer atomic_long_add() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_add() elsewhere.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKphjGubjM)}(h **Return**h]j)}(hjLh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKrhjGubjM)}(hNothing.h]hNothing.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKshjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_long_add_return (C function)c.raw_atomic_long_add_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_add_return (long i, atomic_long_t *v)h]h)}(h9long raw_atomic_long_add_return(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hraw_atomic_long_add_returnh]j)}(hraw_atomic_long_add_returnh]hraw_atomic_long_add_return}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_add_returnasbuh1hhjubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]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}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjfhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX#**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_add_return() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hj4hhhNhNubj)}(h**v**h]hv}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh to (}(hj4hhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh + }(hj4hhhNhNubj)}(h**i**h]hi}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh) with full ordering.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hGSafe to use in noinstr code; prefer atomic_long_add_return() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_long_add_return() elsewhere.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_add_return_acquire (C function)$c.raw_atomic_long_add_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_add_return_acquire (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_add_return_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(h"raw_atomic_long_add_return_acquireh]j)}(h"raw_atomic_long_add_return_acquireh]h"raw_atomic_long_add_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_add_return_acquireasbuh1hhjNubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(h atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX.**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_add_return_acquire() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj3h]hatomic_long_t *v}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj-ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhKhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hOSafe to use in noinstr code; prefer atomic_long_add_return_acquire() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_add_return_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_add_return_release (C function)$c.raw_atomic_long_add_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_add_return_release (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_add_return_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-hhhj?hKubh)}(h"raw_atomic_long_add_return_releaseh]j)}(h"raw_atomic_long_add_return_releaseh]h"raw_atomic_long_add_return_release}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1hhj-hhhj?hKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjTsb$c.raw_atomic_long_add_return_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjfubeh}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj&hhhj?hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj!jHj!jIjJjKuh1hhhhjhNhNubj)}(hX.**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_add_return_release() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj%ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjJh]hlong i}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjDubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hKhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hKhjAubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj}ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjAubeh}(h]h ]h"]h$]h&]uh1jhj%ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj%ubjM)}(hBAtomically updates **v** to (**v** + **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj%ubjM)}(hOSafe to use in noinstr code; prefer atomic_long_add_return_release() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_add_return_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj%ubjM)}(h **Return**h]j)}(hj*h]hReturn}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj%ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj@hhhNhNubj)}(h**v**h]hv}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_add_return_relaxed (C function)$c.raw_atomic_long_add_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_add_return_relaxed (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_add_return_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj}hhhjhKubh)}(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&]jjuh1hhj}hhhjhKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_add_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj0hhhNhNubah}(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'hjyhhhjhKubah}(h]jtah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjvhhubj4)}(hhh]jM)}(h atomic add with relaxed orderingh]h atomic add with relaxed ordering}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjVhhubah}(h]h ]h"]h$]h&]uh1j3hjvhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjqjHjqjIjJjKuh1hhhhjhNhNubj)}(hX.**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_add_return_relaxed() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjuubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjuubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjuubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hj$hhhNhNubj)}(h**v**h]hv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh to (}(hj$hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh + }(hj$hhhNhNubj)}(h**i**h]hi}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh) with relaxed ordering.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjuubjM)}(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.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjuubjM)}(h **Return**h]j)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjuubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic_long_fetch_add (C function)c.raw_atomic_long_fetch_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_add (long i, atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_add(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hraw_atomic_long_fetch_addh]j)}(hraw_atomic_long_fetch_addh]hraw_atomic_long_fetch_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]hi}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_fetch_addasbuh1hhj>ubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]jM)}(hatomic add with full orderingh]hatomic add with full ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX#**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_add() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj#h]hatomic_long_t *v}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj!ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj<hhhNhNubah}(h]h ]h"]h$]h&]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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjthhhNhNubj)}(h**v**h]hv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh to (}(hjthhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh + }(hjthhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh) with full ordering.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_add() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_add() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_add_acquire (C function)#c.raw_atomic_long_fetch_add_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_add_acquire (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_add_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj/hKubh)}(h!raw_atomic_long_fetch_add_acquireh]j)}(h!raw_atomic_long_fetch_add_acquireh]h!raw_atomic_long_fetch_add_acquire}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj/hKubj4)}(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)}jsjDsb#c.raw_atomic_long_fetch_add_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjVubeh}(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 atomic add with acquire orderingh]h atomic add with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj/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 acquire ordering. Safe to use in noinstr code; prefer atomic_long_fetch_add_acquire() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hj:h]hlong i}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhj4ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhKhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhKhj1ubj)}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjmubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhKhj1ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_add_acquire() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_add_acquire() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubjM)}(hThe original value of **v**.h](hThe original value of }(hj0hhhNhNubj)}(h**v**h]hv}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.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}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmhhhjhKubh)}(h!raw_atomic_long_fetch_add_releaseh]j)}(h!raw_atomic_long_fetch_add_releaseh]h!raw_atomic_long_fetch_add_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjmhhhjhKubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_add_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjmhhhjhKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjihhhjhKubah}(h]jdah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjfhhubj4)}(hhh]jM)}(h atomic add with release orderingh]h atomic add with release ordering}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjFhhubah}(h]h ]h"]h$]h&]uh1j3hjfhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjajHjajIjJjKuh1hhhhjhNhNubj)}(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)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjeubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhKhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjeubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjeubjM)}(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}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjeubjM)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjeubjM)}(h **Return**h]j)}(hjjh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_add_relaxed (C function)#c.raw_atomic_long_fetch_add_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_add_relaxed (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_add_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h!raw_atomic_long_fetch_add_relaxedh]j)}(h!raw_atomic_long_fetch_add_relaxedh]h!raw_atomic_long_fetch_add_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj7modnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_add_relaxedasbuh1hhj.ubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hjh]hv}(hjphhhNhNubah}(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 add with relaxed orderingh]h atomic add with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX.**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_add_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjdhhhNhNubj)}(h**v**h]hv}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh to (}(hjdhhhNhNubj)}(h**v**h]hv}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh + }(hjdhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh) with relaxed ordering.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_add_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_add_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_sub (C function)c.raw_atomic_long_subhNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void raw_atomic_long_sub (long i, atomic_long_t *v)h]h)}(h2void raw_atomic_long_sub(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhM(ubh)}(hraw_atomic_long_subh]j)}(hraw_atomic_long_subh]hraw_atomic_long_sub}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhM(ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjQ)}(h h]h }(hj\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hjh]hi}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjFubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj4sbc.raw_atomic_long_subasbuh1hhj~ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjFubeh}(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)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hjhhubah}(h]h ]h"]h$]h&]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)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hj*h]hlong i}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM)hj$ubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hM)hj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hM)hj!ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjch]hatomic_long_t *v}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjaubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM*hj]ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxhM*hjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhM*hj!ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hjubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM+hjubjM)}(h@Safe to use in noinstr code; prefer atomic_long_sub() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_sub() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM-hjubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM/hjubjM)}(hNothing.h]hNothing.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM0hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_long_sub_return (C function)c.raw_atomic_long_sub_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_sub_return (long i, atomic_long_t *v)h]h)}(h9long raw_atomic_long_sub_return(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKhhhj]hM=ubh)}(hraw_atomic_long_sub_returnh]j)}(hraw_atomic_long_sub_returnh]hraw_atomic_long_sub_return}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1hhjKhhhj]hM=ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjrsbc.raw_atomic_long_sub_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjKhhhj]hM=ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjGhhhj]hM=ubah}(h]jBah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj]hM=hjDhhubj4)}(hhh]jM)}(h"atomic subtract with full orderingh]h"atomic subtract with full ordering}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=hj$hhubah}(h]h ]h"]h$]h&]uh1j3hjDhhhj]hM=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)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMAhjCubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjhh]hlong i}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjfubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM>hjbubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hM>hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(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)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM?hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hj_ubeh}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMAhjCubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM@hjCubjM)}(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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMBhjCubjM)}(h **Return**h]j)}(hjHh]hReturn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMDhjCubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_sub_return_acquire (C function)$c.raw_atomic_long_sub_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_sub_return_acquire (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_sub_return_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMRubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMRubh)}(h"raw_atomic_long_sub_return_acquireh]j)}(h"raw_atomic_long_sub_return_acquireh]h"raw_atomic_long_sub_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMRubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_sub_return_acquireasbuh1hhj ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMRubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMRubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMRhjhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMRhjthhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMRubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX3**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_sub_return_acquire() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMVhjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMShjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMThjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMVhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjBhhhNhNubj)}(h**v**h]hv}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh to (}(hjBhhhNhNubj)}(h**v**h]hv}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh - }(hjBhhhNhNubj)}(h**i**h]hi}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh) with acquire ordering.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMUhjubjM)}(hOSafe to use in noinstr code; prefer atomic_long_sub_return_acquire() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_sub_return_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMWhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMYhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMZhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_sub_return_release (C function)$c.raw_atomic_long_sub_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_sub_return_release (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_sub_return_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMgubh)}(h"raw_atomic_long_sub_return_releaseh]j)}(h"raw_atomic_long_sub_return_releaseh]h"raw_atomic_long_sub_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMgubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj)}(hjh]hi}(hjHhhhNhNubah}(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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjemodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_sub_return_releaseasbuh1hhj\ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj$ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMgubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMgubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMghjhhubj4)}(hhh]jM)}(h%atomic subtract with release orderingh]h%atomic subtract with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMghjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMgubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX3**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_sub_return_release() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMkhjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhhjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hj!hhhNhNubah}(h]h ]h"]h$]h&]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)}(hjAh]hatomic_long_t *v}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMihj;ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMihjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMihjubeh}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMkhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMjhjubjM)}(hOSafe to use in noinstr code; prefer atomic_long_sub_return_release() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_sub_return_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMnhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_sub_return_relaxed (C function)$c.raw_atomic_long_sub_return_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hBlong raw_atomic_long_sub_return_relaxed (long i, atomic_long_t *v)h]h)}(hAlong raw_atomic_long_sub_return_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM|ubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;hhhjMhM|ubh)}(h"raw_atomic_long_sub_return_relaxedh]j)}(h"raw_atomic_long_sub_return_relaxedh]h"raw_atomic_long_sub_return_relaxed}(hj`hhhNhNubah}(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}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubj:)}(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)}jsjbsb$c.raw_atomic_long_sub_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjtubeh}(h]h ]h"]h$]h&]jjuh1j3hj;hhhjMhM|ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj7hhhjMhM|ubah}(h]j2ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjMhM|hj4hhubj4)}(hhh]jM)}(h%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM|hjhhubah}(h]h ]h"]h$]h&]uh1j3hj4hhhjMhM|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)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjXh]hlong i}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}hjRubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjmhM}hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM}hjOubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM~hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubjM)}(hBAtomically updates **v** to (**v** - **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubjM)}(hOSafe to use in noinstr code; prefer atomic_long_sub_return_relaxed() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_sub_return_relaxed() elsewhere.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubjM)}(h **Return**h]j)}(hj8h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjNhhhNhNubj)}(h**v**h]hv}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic_long_fetch_sub (C function)c.raw_atomic_long_fetch_subhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_sub (long i, atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_sub(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_long_fetch_subh]j)}(hraw_atomic_long_fetch_subh]hraw_atomic_long_fetch_sub}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_fetch_subasbuh1hhjubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]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}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjdhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX(**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_sub() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h?Atomically updates **v** to (**v** - **i**) with full ordering.h](hAtomically updates }(hj2hhhNhNubj)}(h**v**h]hv}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh to (}(hj2hhhNhNubj)}(h**v**h]hv}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh - }(hj2hhhNhNubj)}(h**i**h]hi}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh) with full ordering.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_sub() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_sub() elsewhere.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_sub_acquire (C function)#c.raw_atomic_long_fetch_sub_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_sub_acquire (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_sub_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h!raw_atomic_long_fetch_sub_acquireh]j)}(h!raw_atomic_long_fetch_sub_acquireh]h!raw_atomic_long_fetch_sub_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hj8hhhNhNubah}(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}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_sub_acquireasbuh1hhjLubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h%atomic subtract with acquire orderingh]h%atomic subtract with acquire ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX3**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_fetch_sub_acquire() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj1h]hatomic_long_t *v}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj+ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(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:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hBAtomically updates **v** to (**v** - **i**) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_sub_acquire() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_sub_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_sub_release (C function)#c.raw_atomic_long_fetch_sub_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_sub_release (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_sub_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+hhhj=hMubh)}(h!raw_atomic_long_fetch_sub_releaseh]j)}(h!raw_atomic_long_fetch_sub_releaseh]h!raw_atomic_long_fetch_sub_release}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+hhhj=hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(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:)}(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)}jsjRsb#c.raw_atomic_long_fetch_sub_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjdubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj$hhhj=hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX3**Parameters** ``long i`` long value to subtract ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_sub_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjHh]hlong i}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjBubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(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:102: ./include/linux/atomic/atomic-long.hhMhj{ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj?ubeh}(h]h ]h"]h$]h&]uh1jhj#ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubjM)}(hBAtomically updates **v** to (**v** - **i**) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_sub_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_sub_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubjM)}(h **Return**h]j)}(hj(h]hReturn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubjM)}(hThe original value of **v**.h](hThe original value of }(hj>hhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_sub_relaxed (C function)#c.raw_atomic_long_fetch_sub_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_sub_relaxed (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_sub_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj{hhhjhMubh)}(h!raw_atomic_long_fetch_sub_relaxedh]j)}(h!raw_atomic_long_fetch_sub_relaxedh]h!raw_atomic_long_fetch_sub_relaxed}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj{hhhjhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]hi}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_sub_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(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%atomic subtract with relaxed orderingh]h%atomic subtract with relaxed ordering}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjThhubah}(h]h ]h"]h$]h&]uh1j3hjthhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjojHjojIjJjKuh1hhhhjhNhNubj)}(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)}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjsubj)}(hhh](j)}(h"``long i`` long value to subtract h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hlong value to subtracth]hlong value to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjsubjM)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjsubjM)}(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}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh) with relaxed ordering.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjsubjM)}(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.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjsubjM)}(h **Return**h]j)}(hjxh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjsubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_inc (C function)c.raw_atomic_long_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(h+void raw_atomic_long_inc (atomic_long_t *v)h]h)}(h*void raw_atomic_long_inc(atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_long_inch]j)}(hraw_atomic_long_inch]hraw_atomic_long_inc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_incasbuh1hhjubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjphhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_inc() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h@Safe to use in noinstr code; prefer atomic_long_inc() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_inc() elsewhere.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjIh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hNothing.h]hNothing.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_long_inc_return (C function)c.raw_atomic_long_inc_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h2long raw_atomic_long_inc_return (atomic_long_t *v)h]h)}(h1long raw_atomic_long_inc_return(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_long_inc_returnh]j)}(hraw_atomic_long_inc_returnh]hraw_atomic_long_inc_return}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_inc_returnasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h#atomic increment with full orderingh]h#atomic increment with full ordering}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj/ hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjJ jHjJ 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_inc_return() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjT h]h Parameters}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjN ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjs h]hatomic_long_t *v}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjq ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.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 hMhjj ubah}(h]h ]h"]h$]h&]uh1jhjN ubjM)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjN 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:102: ./include/linux/atomic/atomic-long.hhMhjN ubjM)}(hGSafe to use in noinstr code; prefer atomic_long_inc_return() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_long_inc_return() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjN ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjN 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:102: ./include/linux/atomic/atomic-long.hhMhjN ubeh}(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}(hj_ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM ubjQ)}(h h]h }(hjn hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ hhhjm hM ubh)}(h"raw_atomic_long_inc_return_acquireh]j)}(h"raw_atomic_long_inc_return_acquireh]h"raw_atomic_long_inc_return_acquire}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj| ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[ hhhjm hM ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj modnameN classnameNjwjz)}j}]j)}jsj sb$c.raw_atomic_long_inc_return_acquireasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubah}(h]h ]h"]h$]h&]jjuh1j3hj[ hhhjm hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjW hhhjm hM ubah}(h]jR ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjm hM hjT 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:102: ./include/linux/atomic/atomic-long.hhM hj hhubah}(h]h ]h"]h$]h&]uh1j3hjT hhhjm hM ubeh}(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_inc_return_acquire() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hj% h]h Parameters}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjD h]hatomic_long_t *v}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjB ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj> ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj] hhhNhNubah}(h]h ]h"]h$]h&]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**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj} ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh + 1) with acquire ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(hOSafe to use in noinstr code; prefer atomic_long_inc_return_acquire() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_inc_return_acquire() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_inc_return_release (C function)$c.raw_atomic_long_inc_return_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_inc_return_release (atomic_long_t *v)h]h)}(h9long raw_atomic_long_inc_return_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hj0 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj, hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM!ubjQ)}(h h]h }(hj? hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj, hhhj> hM!ubh)}(h"raw_atomic_long_inc_return_releaseh]j)}(h"raw_atomic_long_inc_return_releaseh]h"raw_atomic_long_inc_return_release}(hjQ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj, hhhj> hM!ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjp hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjr modnameN classnameNjwjz)}j}]j)}jsjS sb$c.raw_atomic_long_inc_return_releaseasbuh1hhji ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhji ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hje ubah}(h]h ]h"]h$]h&]jjuh1j3hj, hhhj> hM!ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj( hhhj> hM!ubah}(h]j# ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj> hM!hj% hhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM!hj hhubah}(h]h ]h"]h$]h&]uh1j3hj% hhhj> hM!ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``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)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%hj ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj h]hatomic_long_t *v}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM"hj ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj* hM"hj+ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj* hM"hj ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hjP h]h Description}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM$hj ubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjf hhhNhNubj)}(h**v**h]hv}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf ubh to (}(hjf hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf ubh + 1) with release ordering.}(hjf hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hj ubjM)}(hOSafe to use in noinstr code; prefer atomic_long_inc_return_release() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_inc_return_release() elsewhere.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%hj ubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM'hj ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj hhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hj ubeh}(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&]uh1jhj hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhM5ubh)}(h"raw_atomic_long_inc_return_relaxedh]j)}(h"raw_atomic_long_inc_return_relaxedh]h"raw_atomic_long_inc_return_relaxed}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhjhM5ubj4)}(h(atomic_long_t *v)h]j:)}(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)}jsj$sb$c.raw_atomic_long_inc_return_relaxedasbuh1hhj:ubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hjh]hv}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj6ubah}(h]h ]h"]h$]h&]jjuh1j3hj hhhjhM5ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj hhhjhM5ubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM5hj hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5hjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhjhM5ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_inc_return_relaxed() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM6hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj7hhhNhNubj)}(h**v**h]hv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh to (}(hj7hhhNhNubj)}(h**v**h]hv}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh + 1) with relaxed ordering.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM7hjubjM)}(hOSafe to use in noinstr code; prefer atomic_long_inc_return_relaxed() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_inc_return_relaxed() elsewhere.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hjubjM)}(h **Return**h]j)}(hj{h]hReturn}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM;hjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic_long_fetch_inc (C function)c.raw_atomic_long_fetch_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(h1long raw_atomic_long_fetch_inc (atomic_long_t *v)h]h)}(h0long raw_atomic_long_fetch_inc(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMIubh)}(hraw_atomic_long_fetch_inch]j)}(hraw_atomic_long_fetch_inch]hraw_atomic_long_fetch_inc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMIubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_fetch_incasbuh1hhj ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hv}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]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}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhjshhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMIubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_inc() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMLhjubjM)}(h;Atomically updates **v** to (**v** + 1) with full ordering.h](hAtomically updates }(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMKhjubjM)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_inc() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_inc() elsewhere.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjubjM)}(h **Return**h]j)}(hjLh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhjubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_inc_acquire (C function)#c.raw_atomic_long_fetch_inc_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_inc_acquire (atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_inc_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM]ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM]ubh)}(h!raw_atomic_long_fetch_inc_acquireh]j)}(h!raw_atomic_long_fetch_inc_acquireh]h!raw_atomic_long_fetch_inc_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM]ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_inc_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(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 acquire orderingh]h&atomic increment with acquire ordering}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM]hjDhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM]ubeh}(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_inc_acquire() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahjcubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^hjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjcubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hjcubjM)}(h>Atomically updates **v** to (**v** + 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM_hjcubjM)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahjcubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchjcubjM)}(hThe original value of **v**.h](hThe original value of }(hj3hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMdhjcubeh}(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}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMqubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjphhhjhMqubh)}(h!raw_atomic_long_fetch_inc_releaseh]j)}(h!raw_atomic_long_fetch_inc_releaseh]h!raw_atomic_long_fetch_inc_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjphhhjhMqubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb#c.raw_atomic_long_fetch_inc_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjphhhjhMqubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjlhhhjhMqubah}(h]jgah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMqhjihhubj4)}(hhh]jM)}(h&atomic increment with release orderingh]h&atomic increment with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMqhjhhubah}(h]h ]h"]h$]h&]uh1j3hjihhhjhMqubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj0jHj0jIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMuhj4ubj)}(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:102: ./include/linux/atomic/atomic-long.hhMrhjSubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjnhMrhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMrhjPubah}(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:102: ./include/linux/atomic/atomic-long.hhMthj4ubjM)}(h>Atomically updates **v** to (**v** + 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMshj4ubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMuhj4ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhj4ubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhj4ubeh}(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}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAhhhjShMubh)}(h!raw_atomic_long_fetch_inc_relaxedh]j)}(h!raw_atomic_long_fetch_inc_relaxedh]h!raw_atomic_long_fetch_inc_relaxed}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1hhjAhhhjShMubj4)}(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_fetch_inc_relaxedasbuh1hhj~ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjzubah}(h]h ]h"]h$]h&]jjuh1j3hjAhhhjShMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj=hhhjShMubah}(h]j8ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjShMhj:hhubj4)}(hhh]jM)}(h&atomic increment with relaxed orderingh]h&atomic increment with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj:hhhjShMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_inc_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj*h]hatomic_long_t *v}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj$ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(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:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h>Atomically updates **v** to (**v** + 1) with relaxed ordering.h](hAtomically updates }(hj{hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh to (}(hj{hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh + 1) with relaxed ordering.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_inc_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_dec (C function)c.raw_atomic_long_dechNtauh1hhjhhhNhNubh)}(hhh](h)}(h+void raw_atomic_long_dec (atomic_long_t *v)h]h)}(h*void raw_atomic_long_dec(atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj$hMubh)}(hraw_atomic_long_dech]j)}(hraw_atomic_long_dech]hraw_atomic_long_dec}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjXmodnameN classnameNjwjz)}j}]j)}jsj9sbc.raw_atomic_long_decasbuh1hhjOubjQ)}(h h]h }(hjvhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjKubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj$hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj$hMubah}(h]j ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj$hMhj hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj$hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_dec() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(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:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hjLhhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh to (}(hjLhhhNhNubj)}(h**v**h]hv}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh - 1) with relaxed ordering.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h@Safe to use in noinstr code; prefer atomic_long_dec() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_dec() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hNothing.h]hNothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'raw_atomic_long_dec_return (C function)c.raw_atomic_long_dec_returnhNtauh1hhjhhhNhNubh)}(hhh](h)}(h2long raw_atomic_long_dec_return (atomic_long_t *v)h]h)}(h1long raw_atomic_long_dec_return(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hraw_atomic_long_dec_returnh]j)}(hraw_atomic_long_dec_returnh]hraw_atomic_long_dec_return}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.raw_atomic_long_dec_returnasbuh1hhjubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjvhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with full ordering. Safe to use in noinstr code; prefer atomic_long_dec_return() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hj hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to (}(hj hhhNhNubj)}(h**v**h]hv}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh - 1) with full ordering.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hGSafe to use in noinstr code; prefer atomic_long_dec_return() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_long_dec_return() elsewhere.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjOh]hReturn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjehhhNhNubj)}(h**v**h]hv}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/raw_atomic_long_dec_return_acquire (C function)$c.raw_atomic_long_dec_return_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h:long raw_atomic_long_dec_return_acquire (atomic_long_t *v)h]h)}(h9long raw_atomic_long_dec_return_acquire(atomic_long_t *v)h](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h"raw_atomic_long_dec_return_acquireh]j)}(h"raw_atomic_long_dec_return_acquireh]h"raw_atomic_long_dec_return_acquire}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_dec_return_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjGhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbjHjbjIjJjKuh1hhhhjhNhNubj)}(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)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjfubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjfubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjfubjM)}(hOSafe to use in noinstr code; prefer atomic_long_dec_return_acquire() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_dec_return_acquire() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjfubjM)}(h **Return**h]j)}(hj h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjfubjM)}(hThe updated value of **v**.h](hThe updated value of }(hj6hhhNhNubj)}(h**v**h]hv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjfubeh}(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}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjshhhjhMubh)}(h"raw_atomic_long_dec_return_releaseh]j)}(h"raw_atomic_long_dec_return_releaseh]h"raw_atomic_long_dec_return_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjshhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb$c.raw_atomic_long_dec_return_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjshhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjohhhjhMubah}(h]jjah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjlhhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjlhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhjhNhNubj)}(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:102: ./include/linux/atomic/atomic-long.hhMhj7ubj)}(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&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjSubah}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj7ubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - 1) with release ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj7ubjM)}(hOSafe to use in noinstr code; prefer atomic_long_dec_return_release() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_dec_return_release() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj7ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj7ubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj7ubeh}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDhhhjVhMubh)}(h"raw_atomic_long_dec_return_relaxedh]j)}(h"raw_atomic_long_dec_return_relaxedh]h"raw_atomic_long_dec_return_relaxed}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhhjVhMubj4)}(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)}jsjksb$c.raw_atomic_long_dec_return_relaxedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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 decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj=hhhjVhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_dec_return_relaxed() elsewhere. **Return** The updated value of **v**.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj-h]hatomic_long_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj'ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj~hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh to (}(hj~hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh - 1) with relaxed ordering.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hOSafe to use in noinstr code; prefer atomic_long_dec_return_relaxed() elsewhere.h]hOSafe to use in noinstr code; prefer atomic_long_dec_return_relaxed() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe updated value of **v**.h](hThe updated value of }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(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:102: ./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&]uh1jhj6 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}(hjY hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj[ modnameN classnameNjwjz)}j}]j)}jsj< sbc.raw_atomic_long_fetch_decasbuh1hhjR ubjQ)}(h h]h }(hjy hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjR ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubj)}(hjh]hv}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjN 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:102: ./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:102: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj h]hatomic_long_t *v}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubjM)}(h**Description**h]j)}(hj9!h]h Description}(hj;!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7!ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(h;Atomically updates **v** to (**v** - 1) with full ordering.h](hAtomically updates }(hjO!hhhNhNubj)}(h**v**h]hv}(hjW!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO!ubh to (}(hjO!hhhNhNubj)}(h**v**h]hv}(hji!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO!ubh - 1) with full ordering.}(hjO!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./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.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(h **Return**h]j)}(hj!h]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubjM)}(hThe original value of **v**.h](hThe original value of }(hj!hhhNhNubj)}(h**v**h]hv}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_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:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj!hMubh)}(h!raw_atomic_long_fetch_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 }(hjJ"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#"ubj)}(hjh]h*}(hjX"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#"ubj)}(hjh]hv}(hje"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubah}(h]h ]h"]h$]h&]jjuh1j3hj!hhhj!hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj!hhhj!hMubah}(h]j!ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj!hMhj!hhubj4)}(hhh]jM)}(h&atomic decrement with acquire orderingh]h&atomic decrement with acquire ordering}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj"hhubah}(h]h ]h"]h$]h&]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:102: ./include/linux/atomic/atomic-long.hhMhj"ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj"h]hatomic_long_t *v}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj"ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubjM)}(h**Description**h]j)}(hj #h]h Description}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj"ubjM)}(h>Atomically updates **v** to (**v** - 1) with acquire ordering.h](hAtomically updates }(hj #hhhNhNubj)}(h**v**h]hv}(hj(#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj #ubh to (}(hj #hhhNhNubj)}(h**v**h]hv}(hj:#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj #ubh - 1) with acquire ordering.}(hj #hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj"ubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_acquire() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_acquire() elsewhere.}(hjS#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj"ubjM)}(h **Return**h]j)}(hjd#h]hReturn}(hjf#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb#ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj"ubjM)}(hThe original value of **v**.h](hThe original value of }(hjz#hhhNhNubj)}(h**v**h]hv}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz#ubh.}(hjz#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_dec_release (C function)#c.raw_atomic_long_fetch_dec_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_dec_release (atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_dec_release(atomic_long_t *v)h](j)}(hlongh]hlong}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%ubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#hhhj#hM%ubh)}(h!raw_atomic_long_fetch_dec_releaseh]j)}(h!raw_atomic_long_fetch_dec_releaseh]h!raw_atomic_long_fetch_dec_release}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj#hhhj#hM%ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj#modnameN classnameNjwjz)}j}]j)}jsj#sb#c.raw_atomic_long_fetch_dec_releaseasbuh1hhj#ubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubj)}(hjh]h*}(hj)$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hjh]hv}(hj6$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj#ubah}(h]h ]h"]h$]h&]jjuh1j3hj#hhhj#hM%ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#hhhj#hM%ubah}(h]j#ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj#hM%hj#hhubj4)}(hhh]jM)}(h&atomic decrement with release orderingh]h&atomic decrement with release ordering}(hj_$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM%hj\$hhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj#hM%ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjw$jHjw$jIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_dec_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM)hj{$ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj$h]hatomic_long_t *v}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM&hj$ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$hM&hj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hM&hj$ubah}(h]h ]h"]h$]h&]uh1jhj{$ubjM)}(h**Description**h]j)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM(hj{$ubjM)}(h>Atomically updates **v** to (**v** - 1) with release ordering.h](hAtomically updates }(hj$hhhNhNubj)}(h**v**h]hv}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh to (}(hj$hhhNhNubj)}(h**v**h]hv}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh - 1) with release ordering.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM'hj{$ubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_release() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_release() elsewhere.}(hj$%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM)hj{$ubjM)}(h **Return**h]j)}(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:102: ./include/linux/atomic/atomic-long.hhM+hj{$ubjM)}(hThe original value of **v**.h](hThe original value of }(hjK%hhhNhNubj)}(h**v**h]hv}(hjS%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK%ubh.}(hjK%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM,hj{$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_dec_relaxed (C function)#c.raw_atomic_long_fetch_dec_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_dec_relaxed (atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_dec_relaxed(atomic_long_t *v)h](j)}(hlongh]hlong}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%hhhj%hM9ubh)}(h!raw_atomic_long_fetch_dec_relaxedh]j)}(h!raw_atomic_long_fetch_dec_relaxedh]h!raw_atomic_long_fetch_dec_relaxed}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj%hhhj%hM9ubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj%modnameN classnameNjwjz)}j}]j)}jsj%sb#c.raw_atomic_long_fetch_dec_relaxedasbuh1hhj%ubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hjh]hv}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj%ubah}(h]h ]h"]h$]h&]jjuh1j3hj%hhhj%hM9ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj%hhhj%hM9ubah}(h]j%ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj%hM9hj%hhubj4)}(hhh]jM)}(h&atomic decrement with relaxed orderingh]h&atomic decrement with relaxed ordering}(hj0&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hj-&hhubah}(h]h ]h"]h$]h&]uh1j3hj%hhhj%hM9ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjH&jHjH&jIjJjKuh1hhhhjhNhNubj)}(hX **Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** - 1) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_dec_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjR&h]h Parameters}(hjT&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP&ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=hjL&ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjq&h]hatomic_long_t *v}(hjs&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjo&ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM:hjk&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&]uh1jhjk&ubeh}(h]h ]h"]h$]h&]uh1jhj&hM:hjh&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:102: ./include/linux/atomic/atomic-long.hhM<hjL&ubjM)}(h>Atomically updates **v** to (**v** - 1) with relaxed ordering.h](hAtomically updates }(hj&hhhNhNubj)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh to (}(hj&hhhNhNubj)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh - 1) with relaxed ordering.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM;hjL&ubjM)}(hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_relaxed() elsewhere.h]hNSafe to use in noinstr code; prefer atomic_long_fetch_dec_relaxed() elsewhere.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM=hjL&ubjM)}(h **Return**h]j)}(hj'h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM?hjL&ubjM)}(hThe original value of **v**.h](hThe original value of }(hj'hhhNhNubj)}(h**v**h]hv}(hj$'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM@hjL&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_and (C function)c.raw_atomic_long_andhNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void raw_atomic_long_and (long i, atomic_long_t *v)h]h)}(h2void raw_atomic_long_and(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hj]'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY'hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMubjQ)}(h h]h }(hjl'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY'hhhjk'hMMubh)}(hraw_atomic_long_andh]j)}(hraw_atomic_long_andh]hraw_atomic_long_and}(hj~'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz'ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjY'hhhjk'hMMubj4)}(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_andasbuh1hhj'ubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hjh]hv}(hj (hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj'ubeh}(h]h ]h"]h$]h&]jjuh1j3hjY'hhhjk'hMMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjU'hhhjk'hMMubah}(h]jP'ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjk'hMMhjR'hhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hj5(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhj2(hhubah}(h]h ]h"]h$]h&]uh1j3hjR'hhhjk'hMMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjM(jHjM(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_and() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjW(h]h Parameters}(hjY(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU(ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhjQ(ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjv(h]hlong i}(hjx(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjt(ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMNhjp(ubj)}(hhh]jM)}(h long valueh]h long value}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(hMNhj(ubah}(h]h ]h"]h$]h&]uh1jhjp(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMNhjm(ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj(h]hatomic_long_t *v}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhj(ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj(hMOhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMOhjm(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhjQ(ubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj)hhhNhNubj)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh to (}(hj)hhhNhNubj)}(h**v**h]hv}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh & }(hj)hhhNhNubj)}(h**i**h]hi}(hj,)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh) with relaxed ordering.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMPhjQ(ubjM)}(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.}(hjE)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMRhjQ(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:102: ./include/linux/atomic/atomic-long.hhMThjQ(ubjM)}(hNothing.h]hNothing.}(hjl)hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMUhjQ(ubeh}(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}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)hhhj)hMbubh)}(hraw_atomic_long_fetch_andh]j)}(hraw_atomic_long_fetch_andh]hraw_atomic_long_fetch_and}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj)hhhj)hMbubj4)}(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_andasbuh1hhj*ubjQ)}(h h]h }(hj/*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj)}(hjh]h*}(hj=*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjh]hv}(hjJ*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*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 with full orderingh]h%atomic bitwise AND with full ordering}(hjs*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhjp*hhubah}(h]h ]h"]h$]h&]uh1j3hj)hhhj)hMbubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj*jHj*jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_and() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj*ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj*h]hlong i}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchj*ubj)}(hhh]jM)}(h long valueh]h long value}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj*hMchj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMchj*ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj*h]hatomic_long_t *v}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMdhj*ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj+hMdhj+ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj+hMdhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*ubjM)}(h**Description**h]j)}(hj(+h]h Description}(hj*+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&+ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj*ubjM)}(h?Atomically updates **v** to (**v** & **i**) with full 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 full ordering.}(hj>+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMehj*ubjM)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_and() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_and() elsewhere.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMghj*ubjM)}(h **Return**h]j)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMihj*ubjM)}(hThe original value of **v**.h](hThe original value of }(hj+hhhNhNubj)}(h**v**h]hv}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMjhj*ubeh}(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}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+hhhj+hMwubh)}(h!raw_atomic_long_fetch_and_acquireh]j)}(h!raw_atomic_long_fetch_and_acquireh]h!raw_atomic_long_fetch_and_acquire}(hj ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+hhhj+hMwubj4)}(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_and_acquireasbuh1hhjX,ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjX,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX,ubj)}(hjh]hv}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ,ubeh}(h]h ]h"]h$]h&]jjuh1j3hj+hhhj+hMwubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj+hhhj+hMwubah}(h]j+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj+hMwhj+hhubj4)}(hhh]jM)}(h(atomic bitwise AND with acquire orderingh]h(atomic bitwise AND with acquire ordering}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhj,hhubah}(h]h ]h"]h$]h&]uh1j3hj+hhhj+hMwubeh}(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_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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hj,ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj-h]hlong i}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhj,ubj)}(hhh]jM)}(h long valueh]h long value}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj-hMxhj-ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj-hMxhj,ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj=-h]hatomic_long_t *v}(hj?-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;-ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMyhj7-ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjV-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjR-hMyhjS-ubah}(h]h ]h"]h$]h&]uh1jhj7-ubeh}(h]h ]h"]h$]h&]uh1jhjR-hMyhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubjM)}(h**Description**h]j)}(hjx-h]h Description}(hjz-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv-ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMzhj,ubjM)}(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:102: ./include/linux/atomic/atomic-long.hhM|hj,ubjM)}(h **Return**h]j)}(hj-h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM~hj,ubjM)}(hThe original value of **v**.h](hThe original value of }(hj-hhhNhNubj)}(h**v**h]hv}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_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&]uh1jhj7.hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjJ.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7.hhhjI.hMubh)}(h!raw_atomic_long_fetch_and_releaseh]j)}(h!raw_atomic_long_fetch_and_releaseh]h!raw_atomic_long_fetch_and_release}(hj\.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX.ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7.hhhjI.hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjx.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt.ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjt.ubj)}(hjh]hi}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt.ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjp.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_releaseasbuh1hhj.ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hjh]hv}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]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)}(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:102: ./include/linux/atomic/atomic-long.hhMhj/hhubah}(h]h ]h"]h$]h&]uh1j3hj0.hhhjI.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)}(hj5/h]h Parameters}(hj7/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3/ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj//ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjT/h]hlong i}(hjV/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjR/ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjN/ubj)}(hhh]jM)}(h long valueh]h long value}(hjm/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhji/hMhjj/ubah}(h]h ]h"]h$]h&]uh1jhjN/ubeh}(h]h ]h"]h$]h&]uh1jhji/hMhjK/ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj/h]hatomic_long_t *v}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj/ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjK/ubeh}(h]h ]h"]h$]h&]uh1jhj//ubjM)}(h**Description**h]j)}(hj/h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj//ubjM)}(hBAtomically updates **v** to (**v** & **i**) with 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 0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh) with release ordering.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj//ubjM)}(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#0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj//ubjM)}(h **Return**h]j)}(hj40h]hReturn}(hj60hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj20ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj//ubjM)}(hThe original value of **v**.h](hThe original value of }(hjJ0hhhNhNubj)}(h**v**h]hv}(hjR0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ0ubh.}(hjJ0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj//ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0hhhj0hMubh)}(h!raw_atomic_long_fetch_and_relaxedh]j)}(h!raw_atomic_long_fetch_and_relaxedh]h!raw_atomic_long_fetch_and_relaxed}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0hhhj0hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]hi}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubj:)}(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 reftargetj1modnameN classnameNjwjz)}j}]j)}jsj0sb#c.raw_atomic_long_fetch_and_relaxedasbuh1hhj0ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj)}(hjh]h*}(hj-1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]hv}(hj:1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj0ubeh}(h]h ]h"]h$]h&]jjuh1j3hj0hhhj0hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj0hhhj0hMubah}(h]j~0ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj0hMhj0hhubj4)}(hhh]jM)}(h(atomic bitwise AND with relaxed orderingh]h(atomic bitwise AND with relaxed ordering}(hjc1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj`1hhubah}(h]h ]h"]h$]h&]uh1j3hj0hhhj0hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj{1jHj{1jIjJjKuh1hhhhjhNhNubj)}(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)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj1h]hlong i}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubj)}(hhh]jM)}(h long valueh]h long value}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj1ubj)}(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:102: ./include/linux/atomic/atomic-long.hhMhj1ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubjM)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubjM)}(hBAtomically updates **v** to (**v** & **i**) with relaxed ordering.h](hAtomically updates }(hj.2hhhNhNubj)}(h**v**h]hv}(hj62hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.2ubh to (}(hj.2hhhNhNubj)}(h**v**h]hv}(hjH2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.2ubh & }(hj.2hhhNhNubj)}(h**i**h]hi}(hjZ2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.2ubh) with relaxed ordering.}(hj.2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubjM)}(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.}(hjs2hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubjM)}(h **Return**h]j)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubjM)}(hThe original value of **v**.h](hThe original value of }(hj2hhhNhNubj)}(h**v**h]hv}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#raw_atomic_long_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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2hhhj2hMubh)}(hraw_atomic_long_andnoth]j)}(hraw_atomic_long_andnoth]hraw_atomic_long_andnot}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj2hhhj2hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjQ)}(h h]h }(hj&3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]hi}(hj43hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjO3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjQ3modnameN classnameNjwjz)}j}]j)}jsj2sbc.raw_atomic_long_andnotasbuh1hhjH3ubjQ)}(h h]h }(hjo3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjH3ubj)}(hjh]h*}(hj}3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH3ubj)}(hjh]hv}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj3ubeh}(h]h ]h"]h$]h&]jjuh1j3hj2hhhj2hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj2hhhj2hMubah}(h]j2ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj2hMhj2hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1j3hj2hhhj2hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj3jHj3jIjJjKuh1hhhhjhNhNubj)}(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)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj3h]hlong i}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubj)}(hhh]jM)}(h long valueh]h long value}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 4hMhj 4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj 4hMhj3ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj-4h]hatomic_long_t *v}(hj/4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+4ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj'4ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjF4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjB4hMhjC4ubah}(h]h ]h"]h$]h&]uh1jhj'4ubeh}(h]h ]h"]h$]h&]uh1jhjB4hMhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubjM)}(h**Description**h]j)}(hjh4h]h Description}(hjj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf4ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj~4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~4ubh to (}(hj~4hhhNhNubj)}(h**v**h]hv}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~4ubh & }(hj~4hhhNhNubj)}(h**~i**h]h~i}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~4ubh) with relaxed ordering.}(hj~4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubjM)}(hCSafe to use in noinstr code; prefer atomic_long_andnot() elsewhere.h]hCSafe to use in noinstr code; prefer atomic_long_andnot() elsewhere.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubjM)}(h **Return**h]j)}(hj4h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubjM)}(hNothing.h]hNothing.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj3ubeh}(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)}(h8hhubah}(h]h ]h"]h$]h&]uh1j3hj^7hhhjw7hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjY8jHjY8jIjJjKuh1hhhhjhNhNubj)}(hX+**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with acquire ordering. Safe to use in noinstr code; prefer atomic_long_fetch_andnot_acquire() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjc8h]h Parameters}(hje8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja8ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj]8ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj8h]hlong i}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj|8ubj)}(hhh]jM)}(h long valueh]h long value}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj|8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjy8ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj8h]hatomic_long_t *v}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj8ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjy8ubeh}(h]h ]h"]h$]h&]uh1jhj]8ubjM)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj]8ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with acquire ordering.h](hAtomically updates }(hj 9hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 9ubh to (}(hj 9hhhNhNubj)}(h**v**h]hv}(hj&9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 9ubh & }(hj 9hhhNhNubj)}(h**~i**h]h~i}(hj89hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 9ubh) with acquire ordering.}(hj 9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj]8ubjM)}(hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_acquire() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_acquire() elsewhere.}(hjQ9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj]8ubjM)}(h **Return**h]j)}(hjb9h]hReturn}(hjd9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`9ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj]8ubjM)}(hThe original value of **v**.h](hThe original value of }(hjx9hhhNhNubj)}(h**v**h]hv}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx9ubh.}(hjx9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj]8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h1raw_atomic_long_fetch_andnot_release (C function)&c.raw_atomic_long_fetch_andnot_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(hDlong raw_atomic_long_fetch_andnot_release (long i, atomic_long_t *v)h]h)}(hClong raw_atomic_long_fetch_andnot_release(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9hhhj9hMubh)}(h$raw_atomic_long_fetch_andnot_releaseh]j)}(h$raw_atomic_long_fetch_andnot_releaseh]h$raw_atomic_long_fetch_andnot_release}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj9hhhj9hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj)}(hjh]hi}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubj:)}(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)}jsj9sb&c.raw_atomic_long_fetch_andnot_releaseasbuh1hhj&:ubjQ)}(h h]h }(hjM:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&:ubj)}(hjh]h*}(hj[:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&:ubj)}(hjh]hv}(hjh:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj9ubeh}(h]h ]h"]h$]h&]jjuh1j3hj9hhhj9hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9hhhj9hMubah}(h]j9ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj9hMhj9hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with release orderingh]h,atomic bitwise AND NOT with release ordering}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1j3hj9hhhj9hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj:jHj:jIjJjKuh1hhhhjhNhNubj)}(hX+**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_fetch_andnot_release() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj:h]hlong i}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj:ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubj)}(hhh]jM)}(h long valueh]h long value}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhj:ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj ;h]hatomic_long_t *v}(hj ;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ;ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj;ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj$;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj ;hMhj!;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj ;hMhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:ubjM)}(h**Description**h]j)}(hjF;h]h Description}(hjH;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD;ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with release ordering.h](hAtomically updates }(hj\;hhhNhNubj)}(h**v**h]hv}(hjd;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\;ubh to (}(hj\;hhhNhNubj)}(h**v**h]hv}(hjv;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\;ubh & }(hj\;hhhNhNubj)}(h**~i**h]h~i}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\;ubh) with release ordering.}(hj\;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubjM)}(hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_release() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_release() elsewhere.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubjM)}(h **Return**h]j)}(hj;h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubjM)}(hThe original value of **v**.h](hThe original value of }(hj;hhhNhNubj)}(h**v**h]hv}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h1raw_atomic_long_fetch_andnot_relaxed (C function)&c.raw_atomic_long_fetch_andnot_relaxedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDlong raw_atomic_long_fetch_andnot_relaxed (long i, atomic_long_t *v)h]h)}(hClong raw_atomic_long_fetch_andnot_relaxed(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj <hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<hhhj<hM ubh)}(h$raw_atomic_long_fetch_andnot_relaxedh]j)}(h$raw_atomic_long_fetch_andnot_relaxedh]h$raw_atomic_long_fetch_andnot_relaxed}(hj*<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&<ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj<hhhj<hM ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjF<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB<ubjQ)}(h h]h }(hjT<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjB<ubj)}(hjh]hi}(hjb<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj><ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj}<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz<ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj<modnameN classnameNjwjz)}j}]j)}jsj,<sb&c.raw_atomic_long_fetch_andnot_relaxedasbuh1hhjv<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjv<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv<ubj)}(hjh]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj><ubeh}(h]h ]h"]h$]h&]jjuh1j3hj<hhhj<hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj<hhhj<hM ubah}(h]j;ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj<hM hj;hhubj4)}(hhh]jM)}(h,atomic bitwise AND NOT with relaxed orderingh]h,atomic bitwise AND NOT with relaxed ordering}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj<hhubah}(h]h ]h"]h$]h&]uh1j3hj;hhhj<hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj<jHj<jIjJjKuh1hhhhjhNhNubj)}(hX+**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** & **~i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_fetch_andnot_relaxed() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj<ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj"=h]hlong i}(hj$=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj =ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj=ubj)}(hhh]jM)}(h long valueh]h long value}(hj;=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7=hM hj8=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj7=hM hj=ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj[=h]hatomic_long_t *v}(hj]=hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjY=ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjU=ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(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 hj=ubeh}(h]h ]h"]h$]h&]uh1jhj<ubjM)}(h**Description**h]j)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj<ubjM)}(hCAtomically updates **v** to (**v** & **~i**) with relaxed ordering.h](hAtomically updates }(hj=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh to (}(hj=hhhNhNubj)}(h**v**h]hv}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh & }(hj=hhhNhNubj)}(h**~i**h]h~i}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh) with relaxed ordering.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hj<ubjM)}(hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_relaxed() elsewhere.h]hQSafe to use in noinstr code; prefer atomic_long_fetch_andnot_relaxed() elsewhere.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj<ubjM)}(h **Return**h]j)}(hj>h]hReturn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj<ubjM)}(hThe original value of **v**.h](hThe original value of }(hj>hhhNhNubj)}(h**v**h]hv}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hraw_atomic_long_or (C function)c.raw_atomic_long_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h2void raw_atomic_long_or (long i, atomic_long_t *v)h]h)}(h1void raw_atomic_long_or(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjY>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU>hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjh>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjU>hhhjg>hMubh)}(hraw_atomic_long_orh]j)}(hraw_atomic_long_orh]hraw_atomic_long_or}(hjz>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv>ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjU>hhhjg>hMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]hi}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j)}jsj|>sbc.raw_atomic_long_orasbuh1hhj>ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hjh]hv}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubeh}(h]h ]h"]h$]h&]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 bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj1?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj.?hhubah}(h]h ]h"]h$]h&]uh1j3hjN>hhhjg>hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjI?jHjI?jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** | **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_or() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjS?h]h Parameters}(hjU?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ?ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hjM?ubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjr?h]hlong i}(hjt?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjp?ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjl?ubj)}(hhh]jM)}(h long valueh]h long value}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hM hj?ubah}(h]h ]h"]h$]h&]uh1jhjl?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM hji?ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj?h]hatomic_long_t *v}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM!hj?ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hM!hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM!hji?ubeh}(h]h ]h"]h$]h&]uh1jhjM?ubjM)}(h**Description**h]j)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hjM?ubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj?hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh to (}(hj?hhhNhNubj)}(h**v**h]hv}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh | }(hj?hhhNhNubj)}(h**i**h]hi}(hj(@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh) with relaxed ordering.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM"hjM?ubjM)}(h?Safe to use in noinstr code; prefer atomic_long_or() elsewhere.h]h?Safe to use in noinstr code; prefer atomic_long_or() elsewhere.}(hjA@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM$hjM?ubjM)}(h **Return**h]j)}(hjR@h]hReturn}(hjT@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP@ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM&hjM?ubjM)}(hNothing.h]hNothing.}(hjh@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM'hjM?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%raw_atomic_long_fetch_or (C function)c.raw_atomic_long_fetch_orhNtauh1hhjhhhNhNubh)}(hhh](h)}(h8long raw_atomic_long_fetch_or (long i, atomic_long_t *v)h]h)}(h7long raw_atomic_long_fetch_or(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@hhhj@hM4ubh)}(hraw_atomic_long_fetch_orh]j)}(hraw_atomic_long_fetch_orh]hraw_atomic_long_fetch_or}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj@hhhj@hM4ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]hi}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj AmodnameN classnameNjwjz)}j}]j)}jsj@sbc.raw_atomic_long_fetch_orasbuh1hhjAubjQ)}(h h]h }(hj+AhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj)}(hjh]h*}(hj9AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hjh]hv}(hjFAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubeh}(h]h ]h"]h$]h&]jjuh1j3hj@hhhj@hM4ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj@hhhj@hM4ubah}(h]j@ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj@hM4hj@hhubj4)}(hhh]jM)}(h$atomic bitwise OR with full orderingh]h$atomic bitwise OR with full ordering}(hjoAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hjlAhhubah}(h]h ]h"]h$]h&]uh1j3hj@hhhj@hM4ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjAjHjAjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** | **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_or() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hjAubj)}(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:102: ./include/linux/atomic/atomic-long.hhM5hjAubj)}(hhh]jM)}(h long valueh]h long value}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhM5hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM5hjAubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjAh]hatomic_long_t *v}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM6hjAubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjAhM6hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM6hjAubeh}(h]h ]h"]h$]h&]uh1jhjAubjM)}(h**Description**h]j)}(hj$Bh]h Description}(hj&BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Bubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hjAubjM)}(h?Atomically updates **v** to (**v** | **i**) with full ordering.h](hAtomically updates }(hj:BhhhNhNubj)}(h**v**h]hv}(hjBBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Bubh to (}(hj:BhhhNhNubj)}(h**v**h]hv}(hjTBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Bubh | }(hj:BhhhNhNubj)}(h**i**h]hi}(hjfBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Bubh) with full ordering.}(hj:BhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM7hjAubjM)}(hESafe to use in noinstr code; prefer atomic_long_fetch_or() elsewhere.h]hESafe to use in noinstr code; prefer atomic_long_fetch_or() elsewhere.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM9hjAubjM)}(h **Return**h]j)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM;hjAubjM)}(hThe original value of **v**.h](hThe original value of }(hjBhhhNhNubj)}(h**v**h]hv}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM<hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-raw_atomic_long_fetch_or_acquire (C function)"c.raw_atomic_long_fetch_or_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(h@long raw_atomic_long_fetch_or_acquire (long i, atomic_long_t *v)h]h)}(h?long raw_atomic_long_fetch_or_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBhhhjBhMIubh)}(h raw_atomic_long_fetch_or_acquireh]j)}(h raw_atomic_long_fetch_or_acquireh]h raw_atomic_long_fetch_or_acquire}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1hhjBhhhjBhMIubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj$ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj CubjQ)}(h h]h }(hj2ChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Cubj)}(hjh]hi}(hj@ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Cubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjCubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hj[ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj]CmodnameN classnameNjwjz)}j}]j)}jsj Csb"c.raw_atomic_long_fetch_or_acquireasbuh1hhjTCubjQ)}(h h]h }(hj{ChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTCubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTCubj)}(hjh]hv}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjCubeh}(h]h ]h"]h$]h&]jjuh1j3hjBhhhjBhMIubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjBhhhjBhMIubah}(h]jBah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBhMIhjBhhubj4)}(hhh]jM)}(h'atomic bitwise OR with acquire orderingh]h'atomic bitwise OR with acquire ordering}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhjChhubah}(h]h ]h"]h$]h&]uh1j3hjBhhhjBhMIubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjCjHjCjIjJjKuh1hhhhjhNhNubj)}(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)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjCubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjDh]hlong i}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjCubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJhjCubj)}(hhh]jM)}(h long valueh]h long value}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMJhjDubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjDhMJhjCubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj9Dh]hatomic_long_t *v}(hj;DhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7Dubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMKhj3Dubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjRDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNDhMKhjODubah}(h]h ]h"]h$]h&]uh1jhj3Dubeh}(h]h ]h"]h$]h&]uh1jhjNDhMKhjCubeh}(h]h ]h"]h$]h&]uh1jhjCubjM)}(h**Description**h]j)}(hjtDh]h Description}(hjvDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrDubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMMhjCubjM)}(hBAtomically updates **v** to (**v** | **i**) with acquire ordering.h](hAtomically updates }(hjDhhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh to (}(hjDhhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh | }(hjDhhhNhNubj)}(h**i**h]hi}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh) with acquire ordering.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMLhjCubjM)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMNhjCubjM)}(h **Return**h]j)}(hjDh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMPhjCubjM)}(hThe original value of **v**.h](hThe original value of }(hjDhhhNhNubj)}(h**v**h]hv}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMQhjCubeh}(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}(hj7EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Ehhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^ubjQ)}(h h]h }(hjFEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3EhhhjEEhM^ubh)}(h raw_atomic_long_fetch_or_releaseh]j)}(h raw_atomic_long_fetch_or_releaseh]h raw_atomic_long_fetch_or_release}(hjXEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTEubah}(h]h ](jjeh"]h$]h&]jjuh1hhj3EhhhjEEhM^ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjtEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpEubj)}(hjh]hi}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlEubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jsjZEsb"c.raw_atomic_long_fetch_or_releaseasbuh1hhjEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hjh]hv}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjlEubeh}(h]h ]h"]h$]h&]jjuh1j3hj3EhhhjEEhM^ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj/EhhhjEEhM^ubah}(h]j*Eah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjEEhM^hj,Ehhubj4)}(hhh]jM)}(h'atomic bitwise OR with release orderingh]h'atomic bitwise OR with release ordering}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^hj Fhhubah}(h]h ]h"]h$]h&]uh1j3hj,EhhhjEEhM^ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj'FjHj'FjIjJjKuh1hhhhjhNhNubj)}(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)}(hj1Fh]h Parameters}(hj3FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Fubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhj+Fubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjPFh]hlong i}(hjRFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNFubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM_hjJFubj)}(hhh]jM)}(h long valueh]h long value}(hjiFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjeFhM_hjfFubah}(h]h ]h"]h$]h&]uh1jhjJFubeh}(h]h ]h"]h$]h&]uh1jhjeFhM_hjGFubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjFh]hatomic_long_t *v}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjFubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hjFubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhM`hjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhM`hjGFubeh}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMbhj+FubjM)}(hBAtomically updates **v** to (**v** | **i**) with release ordering.h](hAtomically updates }(hjFhhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh to (}(hjFhhhNhNubj)}(h**v**h]hv}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh | }(hjFhhhNhNubj)}(h**i**h]hi}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh) with release ordering.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahj+FubjM)}(hMSafe to use in noinstr code; prefer atomic_long_fetch_or_release() elsewhere.h]hMSafe to use in noinstr code; prefer atomic_long_fetch_or_release() elsewhere.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchj+FubjM)}(h **Return**h]j)}(hj0Gh]hReturn}(hj2GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.Gubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMehj+FubjM)}(hThe original value of **v**.h](hThe original value of }(hjFGhhhNhNubj)}(h**v**h]hv}(hjNGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFGubh.}(hjFGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj+Fubeh}(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}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMsubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGhhhjGhMsubh)}(h raw_atomic_long_fetch_or_relaxedh]j)}(h raw_atomic_long_fetch_or_relaxedh]h raw_atomic_long_fetch_or_relaxed}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](jjeh"]h$]h&]jjuh1hhjGhhhjGhMsubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubj)}(hjh]hi}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjGubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjGmodnameN classnameNjwjz)}j}]j)}jsjGsb"c.raw_atomic_long_fetch_or_relaxedasbuh1hhjGubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubj)}(hjh]h*}(hj)HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hjh]hv}(hj6HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjGubeh}(h]h ]h"]h$]h&]jjuh1j3hjGhhhjGhMsubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjGhhhjGhMsubah}(h]jzGah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjGhMshj|Ghhubj4)}(hhh]jM)}(h'atomic bitwise OR with relaxed orderingh]h'atomic bitwise OR with relaxed ordering}(hj_HhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMshj\Hhhubah}(h]h ]h"]h$]h&]uh1j3hj|GhhhjGhMsubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjwHjHjwHjIjJjKuh1hhhhjhNhNubj)}(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)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhj{Hubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjHh]hlong i}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMthjHubj)}(hhh]jM)}(h long valueh]h long value}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhMthjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMthjHubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjHh]hatomic_long_t *v}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjHubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMuhjHubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhMuhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMuhjHubeh}(h]h ]h"]h$]h&]uh1jhj{HubjM)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhj{HubjM)}(hBAtomically updates **v** to (**v** | **i**) with relaxed ordering.h](hAtomically updates }(hj*IhhhNhNubj)}(h**v**h]hv}(hj2IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Iubh to (}(hj*IhhhNhNubj)}(h**v**h]hv}(hjDIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Iubh | }(hj*IhhhNhNubj)}(h**i**h]hi}(hjVIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Iubh) with relaxed ordering.}(hj*IhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMvhj{HubjM)}(hMSafe to use in noinstr code; prefer atomic_long_fetch_or_relaxed() elsewhere.h]hMSafe to use in noinstr code; prefer atomic_long_fetch_or_relaxed() elsewhere.}(hjoIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhj{HubjM)}(h **Return**h]j)}(hjIh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~Iubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMzhj{HubjM)}(hThe original value of **v**.h](hThe original value of }(hjIhhhNhNubj)}(h**v**h]hv}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM{hj{Hubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h raw_atomic_long_xor (C function)c.raw_atomic_long_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void raw_atomic_long_xor (long i, atomic_long_t *v)h]h)}(h2void raw_atomic_long_xor(long i, atomic_long_t *v)h](j)}(hvoidh]hvoid}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIhhhjIhMubh)}(hraw_atomic_long_xorh]j)}(hraw_atomic_long_xorh]hraw_atomic_long_xor}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](jjeh"]h$]h&]jjuh1hhjIhhhjIhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjQ)}(h h]h }(hj"JhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hjh]hi}(hj0JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj Jubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjKJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHJubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjMJmodnameN classnameNjwjz)}j}]j)}jsjIsbc.raw_atomic_long_xorasbuh1hhjDJubjQ)}(h h]h }(hjkJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDJubj)}(hjh]h*}(hjyJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDJubj)}(hjh]hv}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDJubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj Jubeh}(h]h ]h"]h$]h&]jjuh1j3hjIhhhjIhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjIhhhjIhMubah}(h]jIah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjIhMhjIhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJhhubah}(h]h ]h"]h$]h&]uh1j3hjIhhhjIhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjJjHjJjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** ^ **i**) with relaxed ordering. Safe to use in noinstr code; prefer atomic_long_xor() elsewhere. **Return** Nothing.h](jM)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjJh]hlong i}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubj)}(hhh]jM)}(h long valueh]h long value}(hj KhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjJubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj)Kh]hatomic_long_t *v}(hj+KhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj'Kubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj#Kubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjBKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj>KhMhj?Kubah}(h]h ]h"]h$]h&]uh1jhj#Kubeh}(h]h ]h"]h$]h&]uh1jhj>KhMhjJubeh}(h]h ]h"]h$]h&]uh1jhjJubjM)}(h**Description**h]j)}(hjdKh]h Description}(hjfKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbKubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjzKhhhNhNubj)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzKubh to (}(hjzKhhhNhNubj)}(h**v**h]hv}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzKubh ^ }(hjzKhhhNhNubj)}(h**i**h]hi}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzKubh) with relaxed ordering.}(hjzKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubjM)}(h@Safe to use in noinstr code; prefer atomic_long_xor() elsewhere.h]h@Safe to use in noinstr code; prefer atomic_long_xor() elsewhere.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubjM)}(h **Return**h]j)}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubjM)}(hNothing.h]hNothing.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&raw_atomic_long_fetch_xor (C function)c.raw_atomic_long_fetch_xorhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9long raw_atomic_long_fetch_xor (long i, atomic_long_t *v)h]h)}(h8long raw_atomic_long_fetch_xor(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj$LhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLhhhj#LhMubh)}(hraw_atomic_long_fetch_xorh]j)}(hraw_atomic_long_fetch_xorh]hraw_atomic_long_fetch_xor}(hj6LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Lubah}(h]h ](jjeh"]h$]h&]jjuh1hhjLhhhj#LhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjRLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNLubjQ)}(h h]h }(hj`LhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNLubj)}(hjh]hi}(hjnLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJLubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjLmodnameN classnameNjwjz)}j}]j)}jsj8Lsbc.raw_atomic_long_fetch_xorasbuh1hhjLubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hjh]hv}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjJLubeh}(h]h ]h"]h$]h&]jjuh1j3hjLhhhj#LhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj Lhhhj#LhMubah}(h]jLah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj#LhMhj Lhhubj4)}(hhh]jM)}(h%atomic bitwise XOR with full orderingh]h%atomic bitwise XOR with full ordering}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjLhhubah}(h]h ]h"]h$]h&]uh1j3hj Lhhhj#LhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjMjHjMjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``long i`` long value ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** ^ **i**) with full ordering. Safe to use in noinstr code; prefer atomic_long_fetch_xor() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Mubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj Mubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj.Mh]hlong i}(hj0MhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,Mubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj(Mubj)}(hhh]jM)}(h long valueh]h long value}(hjGMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjCMhMhjDMubah}(h]h ]h"]h$]h&]uh1jhj(Mubeh}(h]h ]h"]h$]h&]uh1jhjCMhMhj%Mubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjgMh]hatomic_long_t *v}(hjiMhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeMubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjaMubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|MhMhj}Mubah}(h]h ]h"]h$]h&]uh1jhjaMubeh}(h]h ]h"]h$]h&]uh1jhj|MhMhj%Mubeh}(h]h ]h"]h$]h&]uh1jhj MubjM)}(h**Description**h]j)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj MubjM)}(h?Atomically updates **v** to (**v** ^ **i**) 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 ^ }(hjMhhhNhNubj)}(h**i**h]hi}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh) with full ordering.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj MubjM)}(hFSafe to use in noinstr code; prefer atomic_long_fetch_xor() elsewhere.h]hFSafe to use in noinstr code; prefer atomic_long_fetch_xor() elsewhere.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj MubjM)}(h **Return**h]j)}(hjNh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Nubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj MubjM)}(hThe original value of **v**.h](hThe original value of }(hj$NhhhNhNubj)}(h**v**h]hv}(hj,NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Nubh.}(hj$NhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj Mubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_fetch_xor_acquire (C function)#c.raw_atomic_long_fetch_xor_acquirehNtauh1hhjhhhNhNubh)}(hhh](h)}(hAlong raw_atomic_long_fetch_xor_acquire (long i, atomic_long_t *v)h]h)}(h@long raw_atomic_long_fetch_xor_acquire(long i, atomic_long_t *v)h](j)}(hlongh]hlong}(hjeNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaNhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjtNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaNhhhjsNhMubh)}(h!raw_atomic_long_fetch_xor_acquireh]j)}(h!raw_atomic_long_fetch_xor_acquireh]h!raw_atomic_long_fetch_xor_acquire}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1hhjaNhhhjsNhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]hi}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubj:)}(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)}jsjNsb#c.raw_atomic_long_fetch_xor_acquireasbuh1hhjNubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hv}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubeh}(h]h ]h"]h$]h&]jjuh1j3hjaNhhhjsNhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj]NhhhjsNhMubah}(h]jXNah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjsNhMhjZNhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with acquire orderingh]h(atomic bitwise XOR with acquire ordering}(hj=OhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj:Ohhubah}(h]h ]h"]h$]h&]uh1j3hjZNhhhjsNhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjUOjHjUOjIjJjKuh1hhhhjhNhNubj)}(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)}(hj_Oh]h Parameters}(hjaOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Oubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjYOubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hj~Oh]hlong i}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|Oubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjxOubj)}(hhh]jM)}(h long valueh]h long value}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjxOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjuOubj)}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjOubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjuOubeh}(h]h ]h"]h$]h&]uh1jhjYOubjM)}(h**Description**h]j)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjYOubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with acquire ordering.h](hAtomically updates }(hjPhhhNhNubj)}(h**v**h]hv}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh to (}(hjPhhhNhNubj)}(h**v**h]hv}(hj"PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh ^ }(hjPhhhNhNubj)}(h**i**h]hi}(hj4PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh) with acquire ordering.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjYOubjM)}(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.}(hjMPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjYOubjM)}(h **Return**h]j)}(hj^Ph]hReturn}(hj`PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Pubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjYOubjM)}(hThe original value of **v**.h](hThe original value of }(hjtPhhhNhNubj)}(h**v**h]hv}(hj|PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtPubh.}(hjtPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjYOubeh}(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPhhhjPhMubh)}(h!raw_atomic_long_fetch_xor_releaseh]j)}(h!raw_atomic_long_fetch_xor_releaseh]h!raw_atomic_long_fetch_xor_release}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]jjuh1hhjPhhhjPhMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPubj)}(hjh]hi}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubj:)}(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)}jsjPsb#c.raw_atomic_long_fetch_xor_releaseasbuh1hhj"QubjQ)}(h h]h }(hjIQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"Qubj)}(hjh]h*}(hjWQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Qubj)}(hjh]hv}(hjdQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Qubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjPubeh}(h]h ]h"]h$]h&]jjuh1j3hjPhhhjPhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjPhhhjPhMubah}(h]jPah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjPhMhjPhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with release orderingh]h(atomic bitwise XOR with release ordering}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1j3hjPhhhjPhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjQjHjQjIjJjKuh1hhhhjhNhNubj)}(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)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjQh]hlong i}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQubj)}(hhh]jM)}(h long valueh]h long value}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjQubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjRh]hatomic_long_t *v}(hj RhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjRubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjRubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj RhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjQubeh}(h]h ]h"]h$]h&]uh1jhjQubjM)}(h**Description**h]j)}(hjBRh]h Description}(hjDRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Rubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with release ordering.h](hAtomically updates }(hjXRhhhNhNubj)}(h**v**h]hv}(hj`RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXRubh to (}(hjXRhhhNhNubj)}(h**v**h]hv}(hjrRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXRubh ^ }(hjXRhhhNhNubj)}(h**i**h]hi}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXRubh) with release ordering.}(hjXRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQubjM)}(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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQubjM)}(h **Return**h]j)}(hjRh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.raw_atomic_long_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}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjShhhjShMubh)}(h!raw_atomic_long_fetch_xor_relaxedh]j)}(h!raw_atomic_long_fetch_xor_relaxedh]h!raw_atomic_long_fetch_xor_relaxed}(hj&ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Subah}(h]h ](jjeh"]h$]h&]jjuh1hhjShhhjShMubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hjBShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>SubjQ)}(h h]h }(hjPShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>Subj)}(hjh]hi}(hj^ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Subeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:Subj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjyShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvSubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj{SmodnameN classnameNjwjz)}j}]j)}jsj(Ssb#c.raw_atomic_long_fetch_xor_relaxedasbuh1hhjrSubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrSubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrSubj)}(hjh]hv}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrSubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:Subeh}(h]h ]h"]h$]h&]jjuh1j3hjShhhjShMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjRhhhjShMubah}(h]jRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjShMhjRhhubj4)}(hhh]jM)}(h(atomic bitwise XOR with relaxed orderingh]h(atomic bitwise XOR with relaxed ordering}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjShhubah}(h]h ]h"]h$]h&]uh1j3hjRhhhjShMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjSjHjSjIjJjKuh1hhhhjhNhNubj)}(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)}(hjSh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjSubj)}(hhh](j)}(h``long i`` long value h](j)}(h ``long i``h]jS)}(hjTh]hlong i}(hj ThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjTubj)}(hhh]jM)}(h long valueh]h long value}(hj7ThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3ThMhj4Tubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhj3ThMhjTubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjWTh]hatomic_long_t *v}(hjYThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUTubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjQTubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjpThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjlThMhjmTubah}(h]h ]h"]h$]h&]uh1jhjQTubeh}(h]h ]h"]h$]h&]uh1jhjlThMhjTubeh}(h]h ]h"]h$]h&]uh1jhjSubjM)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjSubjM)}(hBAtomically updates **v** to (**v** ^ **i**) with relaxed ordering.h](hAtomically updates }(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh to (}(hjThhhNhNubj)}(h**v**h]hv}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh ^ }(hjThhhNhNubj)}(h**i**h]hi}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh) with relaxed ordering.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjSubjM)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjSubjM)}(h **Return**h]j)}(hjTh]hReturn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjSubjM)}(hThe original value of **v**.h](hThe original value of }(hjUhhhNhNubj)}(h**v**h]hv}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjSubeh}(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}(hjUUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQUhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjdUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQUhhhjcUhMubh)}(hraw_atomic_long_xchgh]j)}(hraw_atomic_long_xchgh]hraw_atomic_long_xchg}(hjvUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrUubah}(h]h ](jjeh"]h$]h&]jjuh1hhjQUhhhjcUhMubj4)}(h(atomic_long_t *v, long new)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)}jsjxUsbc.raw_atomic_long_xchgasbuh1hhjUubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hjh]hv}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubj:)}(hlong newh](j)}(hlongh]hlong}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hnewh]hnew}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubeh}(h]h ]h"]h$]h&]jjuh1j3hjQUhhhjcUhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjMUhhhjcUhMubah}(h]jHUah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjcUhMhjJUhhubj4)}(hhh]jM)}(h"atomic exchange with full orderingh]h"atomic exchange with full ordering}(hj.VhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj+Vhhubah}(h]h ]h"]h$]h&]uh1j3hjJUhhhjcUhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjFVjHjFVjIjJjKuh1hhhhjhNhNubj)}(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)}(hjPVh]h Parameters}(hjRVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNVubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJVubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjoVh]hatomic_long_t *v}(hjqVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjmVubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjiVubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjiVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjfVubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjVh]hlong new}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjVubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjVubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjfVubeh}(h]h ]h"]h$]h&]uh1jhjJVubjM)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJVubjM)}(h7Atomically updates **v** to **new** with full ordering.h](hAtomically updates }(hjVhhhNhNubj)}(h**v**h]hv}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh to }(hjVhhhNhNubj)}(h**new**h]hnew}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh with full ordering.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJVubjM)}(hASafe to use in noinstr code; prefer atomic_long_xchg() elsewhere.h]hASafe to use in noinstr code; prefer atomic_long_xchg() elsewhere.}(hj,WhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJVubjM)}(h **Return**h]j)}(hj=Wh]hReturn}(hj?WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;Wubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJVubjM)}(hThe original value of **v**.h](hThe original value of }(hjSWhhhNhNubj)}(h**v**h]hv}(hj[WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSWubh.}(hjSWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjJVubeh}(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}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWhhhjWhMubh)}(hraw_atomic_long_xchg_acquireh]j)}(hraw_atomic_long_xchg_acquireh]hraw_atomic_long_xchg_acquire}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1hhjWhhhjWhMubj4)}(h(atomic_long_t *v, 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&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsjWsbc.raw_atomic_long_xchg_acquireasbuh1hhjWubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]hv}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubj:)}(hlong newh](j)}(hlongh]hlong}(hj'XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#XubjQ)}(h h]h }(hj5XhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#Xubj)}(hnewh]hnew}(hjCXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Xubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjWubeh}(h]h ]h"]h$]h&]jjuh1j3hjWhhhjWhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjWhhhjWhMubah}(h]jWah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjWhMhjWhhubj4)}(hhh]jM)}(h%atomic exchange with acquire orderingh]h%atomic exchange with acquire ordering}(hjmXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjjXhhubah}(h]h ]h"]h$]h&]uh1j3hjWhhhjWhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjXjHjXjIjJjKuh1hhhhjhNhNubj)}(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)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjXubj)}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjXubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjXh]hlong new}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjXubeh}(h]h ]h"]h$]h&]uh1jhjXubjM)}(h**Description**h]j)}(hj"Yh]h Description}(hj$YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Yubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjXubjM)}(h:Atomically updates **v** to **new** with acquire ordering.h](hAtomically updates }(hj8YhhhNhNubj)}(h**v**h]hv}(hj@YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8Yubh to }(hj8YhhhNhNubj)}(h**new**h]hnew}(hjRYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8Yubh with acquire ordering.}(hj8YhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjXubjM)}(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.}(hjkYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjXubjM)}(h **Return**h]j)}(hj|Yh]hReturn}(hj~YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzYubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjXubjM)}(hThe original value of **v**.h](hThe original value of }(hjYhhhNhNubj)}(h**v**h]hv}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubh.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubeh}(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}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYhhhjYhMubh)}(hraw_atomic_long_xchg_releaseh]j)}(hraw_atomic_long_xchg_releaseh]hraw_atomic_long_xchg_release}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1hhjYhhhjYhMubj4)}(h(atomic_long_t *v, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjZmodnameN classnameNjwjz)}j}]j)}jsjYsbc.raw_atomic_long_xchg_releaseasbuh1hhj ZubjQ)}(h h]h }(hj3ZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Zubj)}(hjh]h*}(hjAZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Zubj)}(hjh]hv}(hjNZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Zubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjZubj:)}(hlong newh](j)}(hlongh]hlong}(hjfZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbZubjQ)}(h h]h }(hjtZhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbZubj)}(hnewh]hnew}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbZubeh}(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%atomic exchange with release orderingh]h%atomic exchange with release ordering}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjZhhubah}(h]h ]h"]h$]h&]uh1j3hjYhhhjYhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjZjHjZjIjJjKuh1hhhhjhNhNubj)}(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)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjZubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjZh]hatomic_long_t *v}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjZubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjZubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjZubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj&[h]hlong new}(hj([hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$[ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj [ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj?[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;[hMhj<[ubah}(h]h ]h"]h$]h&]uh1jhj [ubeh}(h]h ]h"]h$]h&]uh1jhj;[hMhjZubeh}(h]h ]h"]h$]h&]uh1jhjZubjM)}(h**Description**h]j)}(hja[h]h Description}(hjc[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_[ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjZubjM)}(h:Atomically updates **v** to **new** with release ordering.h](hAtomically updates }(hjw[hhhNhNubj)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw[ubh to }(hjw[hhhNhNubj)}(h**new**h]hnew}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw[ubh with release ordering.}(hjw[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjZubjM)}(hISafe to use in noinstr code; prefer atomic_long_xchg_release() elsewhere.h]hISafe to use in noinstr code; prefer atomic_long_xchg_release() elsewhere.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM hjZubjM)}(h **Return**h]j)}(hj[h]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM"hjZubjM)}(hThe original value of **v**.h](hThe original value of }(hj[hhhNhNubj)}(h**v**h]hv}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM#hjZubeh}(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}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM0ubjQ)}(h h]h }(hj!\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\hhhj \hM0ubh)}(hraw_atomic_long_xchg_relaxedh]j)}(hraw_atomic_long_xchg_relaxedh]hraw_atomic_long_xchg_relaxed}(hj3\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/\ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj\hhhj \hM0ubj4)}(h(atomic_long_t *v, long new)h](j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjR\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO\ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjT\modnameN classnameNjwjz)}j}]j)}jsj5\sbc.raw_atomic_long_xchg_relaxedasbuh1hhjK\ubjQ)}(h h]h }(hjr\hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjK\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK\ubj)}(hjh]hv}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjG\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&]noemphjjuh1j9hjG\ubeh}(h]h ]h"]h$]h&]jjuh1j3hj\hhhj \hM0ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj \hhhj \hM0ubah}(h]j\ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj \hM0hj\hhubj4)}(hhh]jM)}(h%atomic exchange with relaxed orderingh]h%atomic exchange with relaxed ordering}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM0hj\hhubah}(h]h ]h"]h$]h&]uh1j3hj\hhhj \hM0ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj]jHj]jIjJjKuh1hhhhjhNhNubj)}(hX&**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t ``long new`` long value to assign **Description** Atomically updates **v** to **new** with 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)}(hj ]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ]ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hj]ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj,]h]hatomic_long_t *v}(hj.]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj*]ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM1hj&]ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjE]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjA]hM1hjB]ubah}(h]h ]h"]h$]h&]uh1jhj&]ubeh}(h]h ]h"]h$]h&]uh1jhjA]hM1hj#]ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hje]h]hlong new}(hjg]hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjc]ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM2hj_]ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj~]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjz]hM2hj{]ubah}(h]h ]h"]h$]h&]uh1jhj_]ubeh}(h]h ]h"]h$]h&]uh1jhjz]hM2hj#]ubeh}(h]h ]h"]h$]h&]uh1jhj]ubjM)}(h**Description**h]j)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM4hj]ubjM)}(h:Atomically updates **v** to **new** 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**new**h]hnew}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh with relaxed ordering.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM3hj]ubjM)}(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.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM5hj]ubjM)}(h **Return**h]j)}(hj]h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM7hj]ubjM)}(hThe original value of **v**.h](hThe original value of }(hj^hhhNhNubj)}(h**v**h]hv}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM8hj]ubeh}(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}(hjQ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM^hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEubjQ)}(h h]h }(hj`^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjM^hhhj_^hMEubh)}(hraw_atomic_long_cmpxchgh]j)}(hraw_atomic_long_cmpxchgh]hraw_atomic_long_cmpxchg}(hjr^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn^ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjM^hhhj_^hMEubj4)}(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)}jsjt^sbc.raw_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)}(hjh]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}(hj5_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj^ubeh}(h]h ]h"]h$]h&]jjuh1j3hjM^hhhj_^hMEubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjI^hhhj_^hMEubah}(h]jD^ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj_^hMEhjF^hhubj4)}(hhh]jM)}(h.atomic compare and exchange with full orderingh]h.atomic compare and exchange with full ordering}(hj__hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEhj\_hhubah}(h]h ]h"]h$]h&]uh1j3hjF^hhhj_^hMEubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjw_jHjw_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. Safe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere. **Return** The original value of **v**.h](jM)}(h**Parameters**h]j)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhj{_ubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj_h]hatomic_long_t *v}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMFhj_ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMFhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMFhj_ubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hj_h]hlong old}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj_ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMGhj_ubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj_hMGhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMGhj_ubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hj`h]hlong new}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj`ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMHhj `ubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hj+`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'`hMHhj(`ubah}(h]h ]h"]h$]h&]uh1jhj `ubeh}(h]h ]h"]h$]h&]uh1jhj'`hMHhj_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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMJhj{_ubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjc`hhhNhNubj)}(h**v**h]hv}(hjk`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc`ubh == }(hjc`hhhNhNubj)}(h**old**h]hold}(hj}`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc`ubh), atomically updates }(hjc`hhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc`ubh to }(hjc`hhhNhNubj)}(h**new**h]hnew}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc`ubh with full ordering. Otherwise, }(hjc`hhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc`ubh2 is not modified and relaxed ordering is provided.}(hjc`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMIhj{_ubjM)}(hDSafe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere.h]hDSafe to use in noinstr code; prefer atomic_long_cmpxchg() elsewhere.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMLhj{_ubjM)}(h **Return**h]j)}(hj`h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMNhj{_ubjM)}(hThe original value of **v**.h](hThe original value of }(hj`hhhNhNubj)}(h**v**h]hv}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMOhj{_ubeh}(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}(hj4ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ahhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM\ubjQ)}(h h]h }(hjCahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ahhhjBahM\ubh)}(hraw_atomic_long_cmpxchg_acquireh]j)}(hraw_atomic_long_cmpxchg_acquireh]hraw_atomic_long_cmpxchg_acquire}(hjUahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQaubah}(h]h ](jjeh"]h$]h&]jjuh1hhj0ahhhjBahM\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}(hjtahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjvamodnameN classnameNjwjz)}j}]j)}jsjWasb!c.raw_atomic_long_cmpxchg_acquireasbuh1hhjmaubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmaubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmaubj)}(hjh]hv}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmaubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiaubj:)}(hlong oldh](j)}(hlongh]hlong}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjQ)}(h h]h }(hjahhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(holdh]hold}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiaubj:)}(hlong newh](j)}(hlongh]hlong}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjQ)}(h h]h }(hj bhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaubj)}(hnewh]hnew}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjiaubeh}(h]h ]h"]h$]h&]jjuh1j3hj0ahhhjBahM\ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj,ahhhjBahM\ubah}(h]j'aah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjBahM\hj)ahhubj4)}(hhh]jM)}(h1atomic compare and exchange with acquire orderingh]h1atomic compare and exchange with acquire ordering}(hjBbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM\hj?bhhubah}(h]h ]h"]h$]h&]uh1j3hj)ahhhjBahM\ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjZbjHjZbjIjJjKuh1hhhhjhNhNubj)}(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)}(hjdbh]h Parameters}(hjfbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbbubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hj^bubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjbh]hatomic_long_t *v}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM]hj}bubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhM]hjbubah}(h]h ]h"]h$]h&]uh1jhj}bubeh}(h]h ]h"]h$]h&]uh1jhjbhM]hjzbubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hjbh]hlong old}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM^hjbubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjbhM^hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM^hjzbubj)}(h"``long new`` long value to assign h](j)}(h ``long new``h]jS)}(hjbh]hlong new}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM_hjbubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj chM_hj cubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj chM_hjzbubeh}(h]h ]h"]h$]h&]uh1jhj^bubjM)}(h**Description**h]j)}(hj0ch]h Description}(hj2chhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.cubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMahj^bubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with acquire ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hjFchhhNhNubj)}(h**v**h]hv}(hjNchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFcubh == }(hjFchhhNhNubj)}(h**old**h]hold}(hj`chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFcubh), atomically updates }(hjFchhhNhNubj)}(h**v**h]hv}(hjrchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFcubh to }(hjFchhhNhNubj)}(h**new**h]hnew}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFcubh# with acquire ordering. Otherwise, }(hjFchhhNhNubj)}(h**v**h]hv}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFcubh2 is not modified and relaxed ordering is provided.}(hjFchhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM`hj^bubjM)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMchj^bubjM)}(h **Return**h]j)}(hjch]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMehj^bubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMfhj^bubeh}(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}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMsubjQ)}(h h]h }(hj&dhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdhhhj%dhMsubh)}(hraw_atomic_long_cmpxchg_releaseh]j)}(hraw_atomic_long_cmpxchg_releaseh]hraw_atomic_long_cmpxchg_release}(hj8dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4dubah}(h]h ](jjeh"]h$]h&]jjuh1hhjdhhhj%dhMsubj4)}(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}(hjWdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTdubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjYdmodnameN classnameNjwjz)}j}]j)}jsj:dsb!c.raw_atomic_long_cmpxchg_releaseasbuh1hhjPdubjQ)}(h h]h }(hjwdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPdubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPdubj)}(hjh]hv}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLdubj:)}(hlong oldh](j)}(hlongh]hlong}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(holdh]hold}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLdubj:)}(hlong newh](j)}(hlongh]hlong}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjdubj)}(hnewh]hnew}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjLdubeh}(h]h ]h"]h$]h&]jjuh1j3hjdhhhj%dhMsubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjdhhhj%dhMsubah}(h]j dah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj%dhMshj dhhubj4)}(hhh]jM)}(h1atomic compare and exchange with release orderingh]h1atomic compare and exchange with release ordering}(hj%ehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMshj"ehhubah}(h]h ]h"]h$]h&]uh1j3hj dhhhj%dhMsubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj=ejHj=ejIjJjKuh1hhhhjhNhNubj)}(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)}(hjGeh]h Parameters}(hjIehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEeubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhjAeubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjfeh]hatomic_long_t *v}(hjhehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjdeubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMthj`eubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj{ehMthj|eubah}(h]h ]h"]h$]h&]uh1jhj`eubeh}(h]h ]h"]h$]h&]uh1jhj{ehMthj]eubj)}(h(``long old`` long value to compare with h](j)}(h ``long old``h]jS)}(hjeh]hlong old}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMuhjeubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehMuhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMuhj]eubj)}(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:102: ./include/linux/atomic/atomic-long.hhMvhjeubj)}(hhh]jM)}(hlong value to assignh]hlong value to assign}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehMvhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMvhj]eubeh}(h]h ]h"]h$]h&]uh1jhjAeubjM)}(h**Description**h]j)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMxhjAeubjM)}(hIf (**v** == **old**), atomically updates **v** to **new** with release ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj)fhhhNhNubj)}(h**v**h]hv}(hj1fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)fubh == }(hj)fhhhNhNubj)}(h**old**h]hold}(hjCfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)fubh), atomically updates }(hj)fhhhNhNubj)}(h**v**h]hv}(hjUfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)fubh to }(hj)fhhhNhNubj)}(h**new**h]hnew}(hjgfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)fubh# with release ordering. Otherwise, }(hj)fhhhNhNubj)}(h**v**h]hv}(hjyfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)fubh2 is not modified and relaxed ordering is provided.}(hj)fhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMwhjAeubjM)}(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.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMzhjAeubjM)}(h **Return**h]j)}(hjfh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM|hjAeubjM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}hjAeubeh}(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}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj ghhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfhhhjghMubh)}(hraw_atomic_long_cmpxchg_relaxedh]j)}(hraw_atomic_long_cmpxchg_relaxedh]hraw_atomic_long_cmpxchg_relaxed}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]jjuh1hhjfhhhjghMubj4)}(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:ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7gubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|hhhj|hM>ubh)}(hraw_atomic_long_add_negativeh]j)}(hraw_atomic_long_add_negativeh]hraw_atomic_long_add_negative}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj|hhhj|hM>ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubjQ)}(h h]h }(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_add_negativeasbuh1hhj}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)}(hjh]hv}(hj^}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj|ubeh}(h]h ]h"]h$]h&]jjuh1j3hj|hhhj|hM>ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj|hhhj|hM>ubah}(h]j|ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj|hM>hj|hhubj4)}(hhh]jM)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM>hj}hhubah}(h]h ]h"]h$]h&]uh1j3hj|hhhj|hM>ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj}jHj}jIjJjKuh1hhhhjhNhNubj)}(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)}(hj}h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMBhj}ubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hj}h]hlong i}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM?hj}ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hM?hj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hM?hj}ubj)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hj~h]hatomic_long_t *v}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM@hj}ubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj~hM@hj~ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj~hM@hj}ubeh}(h]h ]h"]h$]h&]uh1jhj}ubjM)}(h**Description**h]j)}(hj<~h]h Description}(hj>~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:~ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMBhj}ubjM)}(h?Atomically updates **v** to (**v** + **i**) with full ordering.h](hAtomically updates }(hjR~hhhNhNubj)}(h**v**h]hv}(hjZ~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR~ubh to (}(hjR~hhhNhNubj)}(h**v**h]hv}(hjl~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR~ubh + }(hjR~hhhNhNubj)}(h**i**h]hi}(hj~~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR~ubh) with full ordering.}(hjR~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMAhj}ubjM)}(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:102: ./include/linux/atomic/atomic-long.hhMChj}ubjM)}(h **Return**h]j)}(hj~h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMEhj}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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMFhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](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:102: ./include/linux/atomic/atomic-long.hhMSubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj,hMSubh)}(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&]jjuh1hhjhhhj,hMSubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubjQ)}(h h]h }(hjihhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubj)}(hjh]hi}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubj:)}(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)}jsjAsb&c.raw_atomic_long_add_negative_acquireasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjSubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhj,hMSubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj,hMSubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj,hMShjhhubj4)}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMShjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj,hMSubeh}(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:102: ./include/linux/atomic/atomic-long.hhMWhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hj7h]hlong i}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMThj1ubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLhMThjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMThj.ubj)}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMUhjjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhj.ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMWhjubjM)}(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}(hjۀhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with acquire ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.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:102: ./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:102: ./include/linux/atomic/atomic-long.hhMZhjubjM)}(hJ**true** if the resulting value of **v** is negative, **false** otherwise.h](j)}(h**true**h]htrue}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh if the resulting value of }(hj-hhhNhNubj)}(h**v**h]hv}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh is negative, }(hj-hhhNhNubj)}(h **false**h]hfalse}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh otherwise.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMhubh)}(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&]jjuh1hhjhhhjhMhubj4)}(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.raw_atomic_long_add_negative_releaseasbuh1hhjubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMhubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMhubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhhjhhubj4)}(hhh]jM)}(h5atomic add and test if negative with release orderingh]h5atomic add and test if negative with release ordering}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhhjbhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMhubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj}jHj}jIjJjKuh1hhhhjhNhNubj)}(hX_**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with release ordering. Safe to use in noinstr code; prefer atomic_long_add_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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj݂ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMjhjقubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMjhjubah}(h]h ]h"]h$]h&]uh1jhjقubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMlhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with release 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 release ordering.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMkhjubjM)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMmhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMohjubjM)}(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:102: ./include/linux/atomic/atomic-long.hhMphjubeh}(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&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hM}ubh)}(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&]jjuh1hhjhhhj hM}ubj4)}(h(long i, atomic_long_t *v)h](j:)}(hlong ih](j)}(hlongh]hlong}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hjh]hi}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1ubj:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjrmodnameN classnameNjwjz)}j}]j)}jsjsb&c.raw_atomic_long_add_negative_relaxedasbuh1hhjiubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj1ubeh}(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)}(h5atomic add and test if negative with relaxed orderingh]h5atomic add and test if negative with relaxed ordering}(hjԄhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhM}hjфhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hM}ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX_**Parameters** ``long i`` long value to add ``atomic_long_t *v`` pointer to atomic_long_t **Description** Atomically updates **v** to (**v** + **i**) with 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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h``long i`` long value to add h](j)}(h ``long i``h]jS)}(hjh]hlong i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.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~hj ubj)}(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:102: ./include/linux/atomic/atomic-long.hhMhjHubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(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&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hBAtomically updates **v** to (**v** + **i**) with relaxed ordering.h](hAtomically updates }(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to (}(hjhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h**i**h]hi}(hj˅hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) with relaxed ordering.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hJ**true** if the resulting value of **v** is negative, **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 negative, }(hj hhhNhNubj)}(h **false**h]hfalse}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh otherwise.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(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}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hj{hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhhjzhMubh)}(h raw_atomic_long_fetch_add_unlessh]j)}(h raw_atomic_long_fetch_add_unlessh]h raw_atomic_long_fetch_add_unless}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhhjzhMubj4)}(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)}jsjsb"c.raw_atomic_long_fetch_add_unlessasbuh1hhjubjQ)}(h h]h }(hj̆hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjچhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong ah](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjնh]ha}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong uh](j)}(hlongh]hlong}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hj\h]hu}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhhjzhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjdhhhjzhMubah}(h]j_ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjzhMhjahhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjuhhubah}(h]h ]h"]h$]h&]uh1j3hjahhhjzhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hj҇hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj·hMhjχubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj·hMhjubj)}(h``long a`` long value to add h](j)}(h ``long a``h]jS)}(hjh]hlong a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hlong value to addh]hlong value to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``long u`` long value to compare with h](j)}(h ``long u``h]jS)}(hj+h]hlong u}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%ubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hIf (**v** != **u**), atomically updates **v** to (**v** + **a**) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided.h](hIf (}(hj|hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh != }(hj|hhhNhNubj)}(h**u**h]hu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh), atomically updates }(hj|hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh to (}(hj|hhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh + }(hj|hhhNhNubj)}(h**a**h]ha}(hj̈hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh!) with full ordering. Otherwise, }(hj|hhhNhNubj)}(h**v**h]hv}(hjވhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh2 is not modified and relaxed ordering is provided.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hThe original value of **v**.h](hThe original value of }(hjhhhNhNubj)}(h**v**h]hv}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(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}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjmhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[hhhjlhMubh)}(hraw_atomic_long_add_unlessh]j)}(hraw_atomic_long_add_unlessh]hraw_atomic_long_add_unless}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj[hhhjlhMubj4)}(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)}jsjsbc.raw_atomic_long_add_unlessasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj̉hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(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)}(hjնh]ha}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hlong uh](j)}(hlongh]hlong}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubj)}(hj\h]hu}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hj[hhhjlhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjWhhhjlhMubah}(h]jRah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjlhMhjThhubj4)}(hhh]jM)}(h*atomic add unless value with full orderingh]h*atomic add unless value with full ordering}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjghhubah}(h]h ]h"]h$]h&]uh1j3hjThhhjlhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh](j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjĊhhhNhNubah}(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)}(hjh]hlong a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjފubj)}(hhh]jM)}(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:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hlong value to compare withh]hlong value to compare with}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.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 (}(hjnhhhNhNubj)}(h**v**h]hv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh != }(hjnhhhNhNubj)}(h**u**h]hu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh), atomically updates }(hjnhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh to (}(hjnhhhNhNubj)}(h**v**h]hv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh + }(hjnhhhNhNubj)}(h**a**h]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh!) with full ordering. Otherwise, }(hjnhhhNhNubj)}(h**v**h]hv}(hjЋhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh2 is not modified and relaxed ordering is provided.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(hGSafe to use in noinstr code; prefer atomic_long_add_unless() elsewhere.h]hGSafe to use in noinstr code; prefer atomic_long_add_unless() elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubjM)}(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}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)raw_atomic_long_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}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmhhhj~hMubh)}(hraw_atomic_long_inc_not_zeroh]j)}(hraw_atomic_long_inc_not_zeroh]hraw_atomic_long_inc_not_zero}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(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)}jsjsbc.raw_atomic_long_inc_not_zeroasbuh1hhjubjQ)}(h h]h }(hjЌhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjތhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]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 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:102: ./include/linux/atomic/atomic-long.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjfhhhj~hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj,jHj,jIjJjKuh1hhhhjhNhNubj)}(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)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj0ubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjUh]hatomic_long_t *v}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjOubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj0ubjM)}(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}(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:102: ./include/linux/atomic/atomic-long.hhMhj0ubjM)}(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:102: ./include/linux/atomic/atomic-long.hhMhj0ubjM)}(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:102: ./include/linux/atomic/atomic-long.hhMhj0ubjM)}(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}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh otherwise.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj0ubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h#raw_atomic_long_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&]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)}jsjsb%c.raw_atomic_long_inc_unless_negativeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj}hhhjhMubah}(h]jxah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjzhhubj4)}(hhh]jM)}(h3atomic increment unless negative with full orderingh]h3atomic increment unless negative with full ordering}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhj%hhubah}(h]h ]h"]h$]h&]uh1j3hjzhhhjhMubeh}(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)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjDubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjih]hatomic_long_t *v}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjcubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(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&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjDubjM)}(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}(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:102: ./include/linux/atomic/atomic-long.hhMhjDubjM)}(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:102: ./include/linux/atomic/atomic-long.hhMhjDubjM)}(h **Return**h]j)}(hj"h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjDubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh if }(hj8hhhNhNubj)}(h**v**h]hv}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh was updated, }(hj8hhhNhNubj)}(h **false**h]hfalse}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh otherwise.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjDubeh}(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&]uh1jhjhhhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h#raw_atomic_long_dec_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&]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_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)}(hjh]hv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѐubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj͐ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h3atomic 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:102: ./include/linux/atomic/atomic-long.hhMhj9hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjTjHjTjIjJjKuh1hhhhjhNhNubj)}(hXt**Parameters** ``atomic_long_t *v`` pointer to atomic_long_t **Description** If (**v** <= 0), atomically updates **v** to (**v** - 1) with full ordering. Otherwise, **v** is not modified and relaxed ordering is provided. Safe to use in noinstr code; prefer atomic_long_dec_unless_positive() elsewhere. **Return** **true** if **v** was updated, **false** otherwise.h](jM)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubj)}(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&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjwubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhjtubah}(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:102: ./include/linux/atomic/atomic-long.hhMhjXubjM)}(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}(hj hhhNhNubah}(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:102: ./include/linux/atomic/atomic-long.hhMhjXubjM)}(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:102: ./include/linux/atomic/atomic-long.hhMhjXubjM)}(h **Return**h]j)}(hj6h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubjM)}(h3**true** if **v** was updated, **false** otherwise.h](j)}(h**true**h]htrue}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh if }(hjLhhhNhNubj)}(h**v**h]hv}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh was updated, }(hjLhhhNhNubj)}(h **false**h]hfalse}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh otherwise.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjXubeh}(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:102: ./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}(hjΒhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʒubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(atomic_long_t *v)h]j:)}(hatomic_long_t *vh](h)}(hhh]j)}(h atomic_long_th]h atomic_long_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjВsb!c.raw_atomic_long_dec_if_positiveasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hv}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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 if positive with full orderingh]h/atomic decrement if positive with full ordering}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjNhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjijHjijIjJjKuh1hhhhjhNhNubj)}(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)}(hjsh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjmubj)}(hhh]j)}(h.``atomic_long_t *v`` pointer to atomic_long_t h](j)}(h``atomic_long_t *v``h]jS)}(hjh]hatomic_long_t *v}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjubj)}(hhh]jM)}(hpointer to atomic_long_th]hpointer to atomic_long_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubjM)}(h**Description**h]j)}(hj͓h]h Description}(hjϓhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj˓ubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjmubjM)}(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:102: ./include/linux/atomic/atomic-long.hhMhjmubjM)}(hLSafe to use in noinstr code; prefer atomic_long_dec_if_positive() elsewhere.h]hLSafe to use in noinstr code; prefer atomic_long_dec_if_positive() elsewhere.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjmubjM)}(h **Return**h]j)}(hjKh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjmubjM)}(hFThe old value of (**v** - 1), regardless of whether **v** was updated.h](hThe old value of (}(hjahhhNhNubj)}(h**v**h]hv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh - 1), regardless of whether }(hjahhhNhNubj)}(h**v**h]hv}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh was updated.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhe/var/lib/git/docbuild/linux/Documentation/driver-api/basics:102: ./include/linux/atomic/atomic-long.hhMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]atomicsah ]h"]atomicsah$]h&]uh1hhhhhhhhK^ubh)}(hhh](h)}(hKernel objects manipulationh]hKernel objects manipulation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKjubh)}(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}(hj͔hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɔhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKubjQ)}(h h]h }(hjܔhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjɔhhhj۔hKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɔhhhj۔hKubh)}(hkobject_get_pathh]j)}(hkobject_get_pathh]hkobject_get_path}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjɔhhhj۔hKubj4)}(h,(const struct kobject *kobj, gfp_t gfp_mask)h](j:)}(hconst struct kobject *kobjh](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hj2hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjRmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_get_pathasbuh1hhjubjQ)}(h h]h }(hjphhhNhNubah}(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:)}(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}]jlc.kobject_get_pathasbuh1hhjubjQ)}(h h]h }(hjŕhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hgfp_maskh]hgfp_mask}(hjӕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjɔhhhj۔hKubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjŔhhhj۔hKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj۔hKhj”hhubj4)}(hhh]jM)}(h2Allocate memory and fill in the path for **kobj**.h](h)Allocate memory and fill in the path for }(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:108: ./lib/kobject.chKhjhhubah}(h]h ]h"]h$]h&]uh1j3hj”hhhj۔hKubeh}(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)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj+ubj)}(hhh](j)}(hQ``const struct kobject *kobj`` kobject in question, with which to build the path h](j)}(h``const struct kobject *kobj``h]jS)}(hjPh]hconst struct kobject *kobj}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjJubj)}(hhh]jM)}(h1kobject in question, with which to build the pathh]h1kobject in question, with which to build the path}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjehKhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehKhjGubj)}(hA``gfp_t gfp_mask`` the allocation type used to allocate the path h](j)}(h``gfp_t gfp_mask``h]jS)}(hjh]hgfp_t gfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubj)}(hhh]jM)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjGubeh}(h]h ]h"]h$]h&]uh1jhj+ubjM)}(h **Return**h]j)}(hjĖh]hReturn}(hjƖhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj–ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj+ubjM)}(h:The newly allocated memory, caller must free with kfree().h]h:The newly allocated memory, caller must free with kfree().}(hjږhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhj+ubeh}(h]h ] kernelindentah"]h$]h&]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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./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}(hj*hhhNhNubah}(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}(hjFhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjBubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubh)}(hhh]j)}(hkobjecth]hkobject}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjfmodnameN classnameNjwjz)}j}]j)}jsj,sbc.kobject_set_nameasbuh1hhjBubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(hconst char *fmth](j?)}(hjP*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)}(hfmth]hfmt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj>ubj:)}(h...h]j)}(hjh]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:108: ./lib/kobject.chM,hj;hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM,ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjVjHjV5jIjJjKuh1hhhhjhNhNubj)}(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)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM0hjZubj)}(hhh](j)}(h;``struct kobject *kobj`` struct kobject to set the name of h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj}ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM-hjyubj)}(hhh]jM)}(h!struct kobject to set the name ofh]h!struct kobject to set the name of}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjvubj)}(h9``const char *fmt`` format string used to build the name h](j)}(h``const char *fmt``h]jS)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM.hjubj)}(hhh]jM)}(h$format string used to build the nameh]h$format string used to build the name}(hjјhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj͘hM.hjΘubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj͘hM.hjvubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjvubeh}(h]h ]h"]h$]h&]uh1jhjZubjM)}(h**Description**h]j)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjZubjM)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM/hjZubeh}(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}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMBubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjmhhhjhMBubh)}(h kobject_inith]j)}(h kobject_inith]h kobject_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjmhhhjhMBubj4)}(h5(struct kobject *kobj, const struct kobj_type *ktype)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hj̙hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjəubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjΙmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_initasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst struct kobj_type *ktypeh](j?)}(hjP*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_initasbuh1hhjubjQ)}(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&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjmhhhjhMBubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjihhhjhMBubah}(h]jdah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMBhjfhhubj4)}(hhh]jM)}(hInitialize a kobject structure.h]hInitialize a kobject structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMBhjhhubah}(h]h ]h"]h$]h&]uh1j3hjfhhhjhMBubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjԚjHjԚjIjJjKuh1hhhhjhNhNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܚubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMFhjؚubj)}(hhh](j)}(h>``struct kobject *kobj`` pointer to the kobject to initialize h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMChjubj)}(hhh]jM)}(h$pointer to the kobject to initializeh]h$pointer to the kobject to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMChjubj)}(hI``const struct kobj_type *ktype`` pointer to the ktype for this kobject. h](j)}(h!``const struct kobj_type *ktype``h]jS)}(hj6h]hconst struct kobj_type *ktype}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMDhj0ubj)}(hhh]jM)}(h&pointer to the ktype for this kobject.h]h&pointer to the ktype for this kobject.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhMDhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMDhjubeh}(h]h ]h"]h$]h&]uh1jhjؚubjM)}(h**Description**h]j)}(hjqh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMFhjؚubjM)}(hkThis function will properly initialize a kobject such that it can then be passed to the kobject_add() call.h]hkThis function will properly initialize a kobject such that it can then be passed to the kobject_add() call.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMEhjؚubjM)}(hAfter this function is called, the kobject MUST be cleaned up by a call to kobject_put(), not by a call to kfree directly to ensure that all of the memory is cleaned up properly.h]hAfter this function is called, the kobject MUST be cleaned up by a call to kobject_put(), not by a call to kfree directly to ensure that all of the memory is cleaned up properly.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMHhjؚubeh}(h]h ] kernelindentah"]h$]h&]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}(hjśhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMzubjQ)}(h h]h }(hjԛhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjӛhMzubh)}(h kobject_addh]j)}(h kobject_addh]h kobject_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjӛhMzubj4)}(hD(struct kobject *kobj, struct kobject *parent, const char *fmt, ...)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj"modnameN classnameNjwjz)}j}]j)}jsjsb c.kobject_addasbuh1hhjubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct kobject *parenth](j?)}(hjBh]hstruct}(hjthhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j< c.kobject_addasbuh1hhjpubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hparenth]hparent}(hj˜hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *fmth](j?)}(hjP*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*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfmth]hfmt}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h...h]j)}(hjh]h...}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(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)}(hThe main kobject add function.h]hThe main kobject add function.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMzhjghhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjӛhMzubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct kobject *kobj`` the kobject to add ``struct kobject *parent`` pointer to the parent of the kobject. ``const char *fmt`` format to name the kobject with. ``...`` variable arguments **Description** The kobject name is set and added to the kobject hierarchy in this function. If **parent** is set, then the parent of the **kobj** will be set to it. If **parent** is NULL, then the parent of the **kobj** will be set to the kobject associated with the kset assigned to this kobject. If no kset is assigned to the kobject, then the kobject will be located in the root of the sysfs tree. Note, no "add" uevent will be created with this call, the caller should set up all of the necessary sysfs files for the object and then call kobject_uevent() with the UEVENT_ADD parameter to ensure that userspace is properly notified of this kobject's creation. If this function returns success, kobject_put() must also be called in order to properly clean up the memory associated with the object. In short, once this function is called, kobject_put() MUST be called when the use of the object is finished in order to properly free everything. **Return** If this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. Under no instance should the kobject that is passed to this function be directly freed with a call to kfree(), that can leak memory.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM~hjubj)}(hhh](j)}(h,``struct kobject *kobj`` the kobject to add h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM{hjubj)}(hhh]jM)}(hthe kobject to addh]hthe kobject to add}(hjĝhhhNhNubah}(h]h ]h"]h$]h&]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)}(hjh]hstruct kobject *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM|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&]uh1jLhjhM|hjubah}(h]h ]h"]h$]h&]uh1jhjޝubeh}(h]h ]h"]h$]h&]uh1jhjhM|hjubj)}(h5``const char *fmt`` format to name the kobject with. h](j)}(h``const char *fmt``h]jS)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM}hjubj)}(hhh]jM)}(h format to name the kobject with.h]h format to name the kobject with.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hM}hj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hM}hjubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjVh]h...}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjTubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjPubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjkhKhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjubjM)}(hLThe kobject name is set and added to the kobject hierarchy in this function.h]hLThe kobject name is set and added to the kobject hierarchy in this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM~hjubjM)}(hX5If **parent** is set, then the parent of the **kobj** will be set to it. If **parent** is NULL, then the parent of the **kobj** will be set to the kobject associated with the kset assigned to this kobject. If no kset is assigned to the kobject, then the kobject will be located in the root of the sysfs tree.h](hIf }(hjhhhNhNubj)}(h **parent**h]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is set, then the parent of the }(hjhhhNhNubj)}(h**kobj**h]hkobj}(hjОhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh will be set to it. If }(hjhhhNhNubj)}(h **parent**h]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh! is NULL, then the parent of the }(hjhhhNhNubj)}(h**kobj**h]hkobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh will be set to the kobject associated with the kset assigned to this kobject. If no kset is assigned to the kobject, then the kobject will be located in the root of the sysfs tree.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubjM)}(hXNote, no "add" uevent will be created with this call, the caller should set up all of the necessary sysfs files for the object and then call kobject_uevent() with the UEVENT_ADD parameter to ensure that userspace is properly notified of this kobject's creation.h]hX Note, no “add” uevent will be created with this call, the caller should set up all of the necessary sysfs files for the object and then call kobject_uevent() with the UEVENT_ADD parameter to ensure that userspace is properly notified of this kobject’s creation.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubji)}(hXIf this function returns success, kobject_put() must also be called in order to properly clean up the memory associated with the object. In short, once this function is called, kobject_put() MUST be called when the use of the object is finished in order to properly free everything. h](jM)}(hIf this function returns success, kobject_put() must also be called in order to properly clean up the memory associated with the object.h]hIf this function returns success, kobject_put() must also be called in order to properly clean up the memory associated with the object.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubjM)}(hIn short, once this function is called, kobject_put() MUST be called when the use of the object is finished in order to properly free everything.h]hIn short, once this function is called, kobject_put() MUST be called when the use of the object is finished in order to properly free everything.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ]h"]h$]h&]uh1jhhj.hMhjubjM)}(h **Return**h]j)}(hjFh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubjM)}(hXIf this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. Under no instance should the kobject that is passed to this function be directly freed with a call to kfree(), that can leak memory.h]hXIf this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. Under no instance should the kobject that is passed to this function be directly freed with a call to kfree(), that can leak memory.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(h]h ] kernelindentah"]h$]h&]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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkobject_init_and_addh]j)}(hkobject_init_and_addh]hkobject_init_and_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hc(struct kobject *kobj, const struct kobj_type *ktype, struct kobject *parent, const char *fmt, ...)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjȟhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjğubjQ)}(h h]h }(hj՟hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjğubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_init_and_addasbuh1hhjğubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjğubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjğubj)}(hkobjh]hkobj}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjğubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst struct kobj_type *ktypeh](j?)}(hjP*h]hconst}(hj:hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj6ubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj?)}(hjBh]hstruct}(hjUhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj6ubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubh)}(hhh]j)}(h kobj_typeh]h kobj_type}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjumodnameN classnameNjwjz)}j}]jc.kobject_init_and_addasbuh1hhj6ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hktypeh]hktype}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct kobject *parenth](j?)}(hjBh]hstruct}(hjŠhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjҠhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]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?)}(hjP*h]hconst}(hj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj1ubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hcharh]hchar}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hfmth]hfmt}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h...h]j)}(hjh]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]j~ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hCInitialize a kobject structure and add it to the kobject hierarchy.h]hCInitialize a kobject structure and add it to the kobject hierarchy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjӡjHjӡjIjJjKuh1hhhhjhNhNubj)}(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&]uh1jhjۡubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjסubj)}(hhh](j)}(h>``struct kobject *kobj`` pointer to the kobject to initialize h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(h$pointer to the kobject to initializeh]h$pointer to the kobject to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hI``const struct kobj_type *ktype`` pointer to the ktype for this kobject. h](j)}(h!``const struct kobj_type *ktype``h]jS)}(hj5h]hconst struct kobj_type *ktype}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj/ubj)}(hhh]jM)}(h&pointer to the ktype for this kobject.h]h&pointer to the ktype for this kobject.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubj)}(hB``struct kobject *parent`` pointer to the parent of this kobject. h](j)}(h``struct kobject *parent``h]jS)}(hjnh]hstruct kobject *parent}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhubj)}(hhh]jM)}(h&pointer to the parent of this kobject.h]h&pointer to the parent of this kobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``const char *fmt`` the name of the kobject. h](j)}(h``const char *fmt``h]jS)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(hthe name of the kobject.h]hthe name of the kobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjޢubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjڢubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjڢubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjסubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chKhjסubjM)}(hDThis function combines the call to kobject_init() and kobject_add().h]hDThis function combines the call to kobject_init() and kobject_add().}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjסubjM)}(hIf this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. This is the same type of error handling after a call to kobject_add() and kobject lifetime rules are the same here.h]hIf this function returns an error, kobject_put() must be called to properly clean up the memory associated with the object. This is the same type of error handling after a call to kobject_add() and kobject lifetime rules are the same here.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjסubeh}(h]h ] kernelindentah"]h$]h&]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}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjkhhhj}hMubh)}(hkobject_renameh]j)}(hkobject_renameh]hkobject_rename}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjkhhhj}hMubj4)}(h,(struct kobject *kobj, const char *new_name)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hjʣhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǣubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj̣modnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_renameasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *new_nameh](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnew_nameh]hnew_name}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjkhhhj}hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjghhhj}hMubah}(h]jbah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj}hMhjdhhubj4)}(hhh]jM)}(hChange the name of an object.h]hChange the name of an object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjdhhhj}hMubeh}(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:108: ./lib/kobject.chMhjubj)}(hhh](j)}(h-``struct kobject *kobj`` object in question. h](j)}(h``struct kobject *kobj``h]jS)}(hjͤh]hstruct kobject *kobj}(hjϤhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjˤubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjǤubj)}(hhh]jM)}(hobject in question.h]hobject in question.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjǤubeh}(h]h ]h"]h$]h&]uh1jhjhMhjĤubj)}(h+``const char *new_name`` object's new name h](j)}(h``const char *new_name``h]jS)}(hjh]hconst char *new_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(hobject'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&]uh1jhjhMhjĤubeh}(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&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubjM)}(hIt is the responsibility of the caller to provide mutual exclusion between two different calls of kobject_rename on the same kobject and to ensure that new_name is valid and won't conflict with other kobjects.h]hIt is the responsibility of the caller to provide mutual exclusion between two different calls of kobject_rename on the same kobject and to ensure that new_name is valid and won’t conflict with other kobjects.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h kobject_moveh]j)}(h kobject_moveh]h kobject_move}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h2(struct kobject *kobj, struct kobject *new_parent)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjåhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjХhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjޥubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_moveasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct kobject *new_parenth](j?)}(hjBh]hstruct}(hj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj1ubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubh)}(hhh]j)}(hkobjecth]hkobject}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]jc.kobject_moveasbuh1hhj1ubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h new_parenth]h new_parent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj~hhhjhMubah}(h]jyah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhj{hhubj4)}(hhh]jM)}(hMove object to another parent.h]hMove object to another parent.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj{hhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjΦjHjΦjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct kobject *kobj`` object in question. ``struct kobject *new_parent`` object's new parent (can be NULL)h](jM)}(h**Parameters**h]j)}(hjئh]h Parameters}(hjڦhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj֦ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjҦubj)}(hhh](j)}(h-``struct kobject *kobj`` object in question. h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(hobject in question.h]hobject in question.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h@``struct kobject *new_parent`` object's new parent (can be NULL)h](j)}(h``struct kobject *new_parent``h]jS)}(hj0h]hstruct kobject *new_parent}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj*ubj)}(hhh]jM)}(h!object's new parent (can be NULL)h]h#object’s new parent (can be NULL)}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubeh}(h]h ]h"]h$]h&]uh1jhjҦubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMeubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMeubh)}(h kobject_delh]j)}(h kobject_delh]h kobject_del}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMeubj4)}(h(struct kobject *kobj)h]j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjǧhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjçubjQ)}(h h]h }(hjԧhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjçubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.kobject_delasbuh1hhjçubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjçubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjçubj)}(hkobjh]hkobj}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjçubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMeubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMeubah}(h]j}ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMehjhhubj4)}(hhh]jM)}(hUnlink kobject from hierarchy.h]hUnlink kobject from hierarchy.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMehjGhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMeubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjbjHjbjIjJjKuh1hhhhjhNhNubj)}(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)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMihjfubj)}(hhh]j)}(h!``struct kobject *kobj`` object. h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMfhjubj)}(hhh]jM)}(hobject.h]hobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjfubjM)}(h**Description**h]j)}(hjƨh]h Description}(hjȨhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĨubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhhjfubjM)}(hdThis is the function that should be called to delete an object successfully added via kobject_add().h]hdThis is the function that should be called to delete an object successfully added via kobject_add().}(hjܨhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMghjfubeh}(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}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMyubh)}(hhh]j)}(hkobjecth]hkobject}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,modnameN classnameNjwjz)}j}]j)}js kobject_getsb c.kobject_getasbuh1hhjhhhjhMyubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMyubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMyubh)}(h kobject_geth]j)}(hjHh]h kobject_get}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMyubj4)}(h(struct kobject *kobj)h]j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jF c.kobject_getasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjϩhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hjܩhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj}ubah}(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:108: ./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)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM}hj"ubj)}(hhh]j)}(h ``struct kobject *kobj`` object.h](j)}(h``struct kobject *kobj``h]jS)}(hjGh]hstruct kobject *kobj}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjAubj)}(hhh]jM)}(hobject.h]hobject.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMzhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(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:108: ./lib/kobject.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h kobject_puth]j)}(h kobject_puth]h kobject_put}(hjªhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct kobject *kobj)h]j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(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}]j)}jsjĪsb c.kobject_putasbuh1hhjڪubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjڪubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڪubj)}(hkobjh]hkobj}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڪubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj֪ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(hDecrement refcount for object.h]hDecrement refcount for object.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj^hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjyjHjyjIjJjKuh1hhhhjhNhNubj)}(h~**Parameters** ``struct kobject *kobj`` object. **Description** Decrement the refcount, and if 0, call kobject_cleanup().h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj}ubj)}(hhh]j)}(h!``struct kobject *kobj`` object. h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(hobject.h]hobject.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubjM)}(h**Description**h]j)}(hjݫh]h Description}(hj߫hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۫ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj}ubjM)}(h9Decrement the refcount, and if 0, call kobject_cleanup().h]h9Decrement the refcount, and if 0, call kobject_cleanup().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj}ubeh}(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}(hj"hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj/hM ubh)}(hhh]j)}(hkobjecth]hkobject}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCmodnameN classnameNjwjz)}j}]j)}jskobject_create_and_addsbc.kobject_create_and_addasbuh1hhjhhhj/hM ubjQ)}(h h]h }(hjbhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj/hM ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hM ubh)}(hkobject_create_and_addh]j)}(hj_h]hkobject_create_and_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj/hM ubj4)}(h*(const char *name, struct kobject *parent)h](j:)}(hconst char *nameh](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjŬhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjӬhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hstruct kobject *parenth](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j]c.kobject_create_and_addasbuh1hhjubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hparenth]hparent}(hjPhhhNhNubah}(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?Create a struct kobject dynamically and register it with sysfs.h]h?Create a struct kobject dynamically and register it with sysfs.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjwhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj/hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``const char *name`` the name for the kobject ``struct kobject *parent`` the parent kobject of this kobject, if any. **Description** This function creates a kobject structure dynamically and registers it with sysfs. When you are finished with this structure, call kobject_put() and the structure will be dynamically freed when it is no longer being used. If the kobject was not able to be created, NULL will be returned.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjubj)}(hhh](j)}(h.``const char *name`` the name for the kobject h](j)}(h``const char *name``h]jS)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjubj)}(hhh]jM)}(hthe name for the kobjecth]hthe name for the kobject}(hjԭhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjЭhM hjѭubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjЭhM hjubj)}(hG``struct kobject *parent`` the parent kobject of this kobject, if any. h](j)}(h``struct kobject *parent``h]jS)}(hjh]hstruct kobject *parent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjubj)}(hhh]jM)}(h+the parent kobject of this kobject, if any.h]h+the parent kobject of this kobject, if any.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubjM)}(hThis function creates a kobject structure dynamically and registers it with sysfs. When you are finished with this structure, call kobject_put() and the structure will be dynamically freed when it is no longer being used.h]hThis function creates a kobject structure dynamically and registers it with sysfs. When you are finished with this structure, call kobject_put() and the structure will be dynamically freed when it is no longer being used.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chM hjubjM)}(hAIf the kobject was not able to be created, NULL will be returned.h]hAIf the kobject was not able to be created, NULL will be returned.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubeh}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMSubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMSubh)}(h kset_registerh]j)}(h kset_registerh]h kset_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMSubj4)}(h(struct kset *k)h]j:)}(hstruct kset *kh](j?)}(hjBh]hstruct}(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 reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kset_registerasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjKh]hk}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMSubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj{hhhjhMSubah}(h]jvah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMShjxhhubj4)}(hhh]jM)}(hInitialize and add a kset.h]hInitialize and add a kset.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMShj?hhubah}(h]h ]h"]h$]h&]uh1j3hjxhhhjhMSubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjZjHjZjIjJjKuh1hhhhjhNhNubj)}(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)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMWhj^ubj)}(hhh]j)}(h``struct kset *k`` kset. h](j)}(h``struct kset *k``h]jS)}(hjh]hstruct kset *k}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMThj}ubj)}(hhh]jM)}(hkset.h]hkset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMThjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMThjzubah}(h]h ]h"]h$]h&]uh1jhj^ubjM)}(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:108: ./lib/kobject.chMVhj^ubjM)}(hbOn error, the kset.kobj.name allocated by() kobj_set_name() is freed, it can not be used any more.h]hbOn error, the kset.kobj.name allocated by() kobj_set_name() is freed, it can not be used any more.}(hjԯhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMVhj^ubeh}(h]h ] kernelindentah"]h$]h&]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:108: ./lib/kobject.chMsubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMsubh)}(hkset_unregisterh]j)}(hkset_unregisterh]hkset_unregister}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMsubj4)}(h(struct kset *k)h]j:)}(hstruct kset *kh](j?)}(hjBh]hstruct}(hj@hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj<ubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubh)}(hhh]j)}(hkseth]hkset}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj`modnameN classnameNjwjz)}j}]j)}jsj&sbc.kset_unregisterasbuh1hhj<ubjQ)}(h h]h }(hj~hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hjKh]hk}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMsubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMsubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMshjhhubj4)}(hhh]jM)}(hRemove a kset.h]hRemove a kset.}(hj°hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMshjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMsubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjڰjHjڰjIjJjKuh1hhhhjhNhNubj)}(h***Parameters** ``struct kset *k`` kset.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMwhjްubj)}(hhh]j)}(h``struct kset *k`` kset.h](j)}(h``struct kset *k``h]jS)}(hjh]hstruct kset *k}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMyhjubj)}(hhh]jM)}(hkset.h]hkset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubah}(h]h ]h"]h$]h&]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}(hj]hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjYhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubjQ)}(h h]h }(hjkhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYhhhjjhMubh)}(hhh]j)}(hkobjecth]hkobject}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj~modnameN classnameNjwjz)}j}]j)}js kset_find_objsbc.kset_find_objasbuh1hhjYhhhjjhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjYhhhjjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjjhMubh)}(h kset_find_objh]j)}(hjh]h kset_find_obj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjYhhhjjhMubj4)}(h%(struct kset *kset, const char *name)h](j:)}(hstruct kset *kseth](j?)}(hjBh]hstruct}(hjױhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjӱubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjӱubh)}(hhh]j)}(hkseth]hkset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.kset_find_objasbuh1hhjӱubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjӱubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӱubj)}(hkseth]hkset}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӱubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjϱubj:)}(hconst char *nameh](j?)}(hjP*h]hconst}(hjGhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjCubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hcharh]hchar}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hjh]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjϱubeh}(h]h ]h"]h$]h&]jjuh1j3hjYhhhjjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjUhhhjjhMubah}(h]jPah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjjhMhjRhhubj4)}(hhh]jM)}(hSearch for object in kset.h]hSearch for object in kset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjRhhhjjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjͲjHjͲjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct kset *kset`` kset we're looking in. ``const char *name`` object's name. **Description** Lock kset via **kset->subsys**, and iterate over **kset->list**, looking for a matching kobject. If matching object is found take a reference and return the object.h](jM)}(h**Parameters**h]j)}(hjײh]h Parameters}(hjٲhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjղubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjѲubj)}(hhh](j)}(h-``struct kset *kset`` kset we're looking in. h](j)}(h``struct kset *kset``h]jS)}(hjh]hstruct kset *kset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(hkset we're looking in.h]hkset we’re looking in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h$``const char *name`` object's name. h](j)}(h``const char *name``h]jS)}(hj/h]hconst char *name}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj)ubj)}(hhh]jM)}(hobject's name.h]hobject’s name.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjubeh}(h]h ]h"]h$]h&]uh1jhjѲubjM)}(h**Description**h]j)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjѲubjM)}(hLock kset via **kset->subsys**, and iterate over **kset->list**, looking for a matching kobject. If matching object is found take a reference and return the object.h](hLock kset via }(hjhhhNhNubj)}(h**kset->subsys**h]h kset->subsys}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, and iterate over }(hjhhhNhNubj)}(h**kset->list**h]h kset->list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhe, looking for a matching kobject. If matching object is found take a reference and return the object.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjѲubeh}(h]h ] kernelindentah"]h$]h&]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}(hjӳhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjϳhhhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjϳhhhjhMubh)}(hhh]j)}(hkseth]hkset}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jskset_create_and_addsbc.kset_create_and_addasbuh1hhjϳhhhjhMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjϳhhhjhMubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϳhhhjhMubh)}(hkset_create_and_addh]j)}(hjh]hkset_create_and_add}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjϳhhhjhMubj4)}(hY(const char *name, const struct kset_uevent_ops *uevent_ops, struct kobject *parent_kobj)h](j:)}(hconst char *nameh](j?)}(hjP*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)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubj:)}(h(const struct kset_uevent_ops *uevent_opsh](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj?)}(hjBh]hstruct}(hjŴhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjҴhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkset_uevent_opsh]hkset_uevent_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.kset_create_and_addasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h uevent_opsh]h uevent_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubj:)}(hstruct kobject *parent_kobjh](j?)}(hjBh]hstruct}(hj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj1ubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubh)}(hhh]j)}(hkobjecth]hkobject}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]jc.kset_create_and_addasbuh1hhj1ubjQ)}(h h]h }(hjqhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h parent_kobjh]h parent_kobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubeh}(h]h ]h"]h$]h&]jjuh1j3hjϳhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj˳hhhjhMubah}(h]jƳah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjȳhhubj4)}(hhh]jM)}(h5Create a struct kset dynamically and add it to sysfs.h]h5Create a struct kset dynamically and add it to sysfs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjȳhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjεjHjεjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``const char *name`` the name for the kset ``const struct kset_uevent_ops *uevent_ops`` a struct kset_uevent_ops for the kset ``struct kobject *parent_kobj`` the parent kobject of this kset, if any. **Description** This function creates a kset structure dynamically and registers it with sysfs. When you are finished with this structure, call kset_unregister() and the structure will be dynamically freed when it is no longer being used. If the kset was not able to be created, NULL will be returned.h](jM)}(h**Parameters**h]j)}(hjصh]h Parameters}(hjڵhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjֵubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjҵubj)}(hhh](j)}(h+``const char *name`` the name for the kset h](j)}(h``const char *name``h]jS)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjubj)}(hhh]jM)}(hthe name for the kseth]hthe name for the kset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(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)}(hj0h]h(const struct kset_uevent_ops *uevent_ops}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj.ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhj*ubj)}(hhh]jM)}(h%a struct kset_uevent_ops for the kseth]h%a struct kset_uevent_ops for the kset}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubj)}(hI``struct kobject *parent_kobj`` the parent kobject of this kset, if any. h](j)}(h``struct kobject *parent_kobj``h]jS)}(hjih]hstruct kobject *parent_kobj}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjgubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjcubj)}(hhh]jM)}(h(the parent kobject of this kset, if any.h]h(the parent kobject of this kset, if any.}(hjhhhNhNubah}(h]h ]h"]h$]h&]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&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjҵubjM)}(hThis function creates a kset structure dynamically and registers it with sysfs. When you are finished with this structure, call kset_unregister() and the structure will be dynamically freed when it is no longer being used.h]hThis function creates a kset structure dynamically and registers it with sysfs. When you are finished with this structure, call kset_unregister() and the structure will be dynamically freed when it is no longer being used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjҵubjM)}(h>If the kset was not able to be created, NULL will be returned.h]h>If the kset was not able to be created, NULL will be returned.}(hjɶhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhP/var/lib/git/docbuild/linux/Documentation/driver-api/basics:108: ./lib/kobject.chMhjҵubeh}(h]h ] kernelindentah"]h$]h&]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:111: ./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}(hj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj1ubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubh)}(hhh]j)}(hkobjecth]hkobject}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjUmodnameN classnameNjwjz)}j}]j)}jsjsbc.kobject_uevent_envasbuh1hhj1ubjQ)}(h h]h }(hjshhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hkobjh]hkobj}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubj:)}(henum kobject_action actionh](j?)}(hjAh]henum}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobject_actionh]hkobject_action}(hjŷhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj·ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjǷmodnameN classnameNjwjz)}j}]joc.kobject_uevent_envasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hactionh]haction}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubj:)}(hchar *envp_ext[]h](j)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(henvp_exth]henvp_ext}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjih]h[}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjwh]h]}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj-ubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhubj4)}(hhh]jM)}(h&send an uevent with environmental datah]h&send an uevent with environmental data}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjthhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXB**Parameters** ``struct kobject *kobj`` struct kobject that the action is happening to ``enum kobject_action action`` action that is happening ``char *envp_ext[]`` pointer to environmental data **Description** Returns 0 if kobject_uevent_env() is completed with success or the corresponding error when it fails.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh](j)}(hH``struct kobject *kobj`` struct kobject that the action is happening to h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh]jM)}(h.struct kobject that the action is happening toh]h.struct kobject that the action is happening to}(hjѸhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj͸hMhjθubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj͸hMhjubj)}(h8``enum kobject_action action`` action that is happening h](j)}(h``enum kobject_action action``h]jS)}(hjh]henum kobject_action action}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh]jM)}(haction that is happeningh]haction that is happening}(hj hhhNhNubah}(h]h ]h"]h$]h&]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)}(hj*h]hchar *envp_ext[]}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj(ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhj$ubj)}(hhh]jM)}(hpointer to environmental datah]hpointer to environmental data}(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&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubjM)}(heReturns 0 if kobject_uevent_env() is completed with success or the corresponding error when it fails.h]heReturns 0 if kobject_uevent_env() is completed with success or the corresponding error when it fails.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubeh}(h]h ] kernelindentah"]h$]h&]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:111: ./lib/kobject_uevent.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkobject_ueventh]j)}(hkobject_ueventh]hkobject_uevent}(hj˹hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǹubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h2(struct kobject *kobj, enum kobject_action action)h](j:)}(hstruct kobject *kobjh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobjecth]hkobject}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsj͹sbc.kobject_ueventasbuh1hhjubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkobjh]hkobj}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj߹ubj:)}(henum kobject_action actionh](j?)}(hjAh]henum}(hjYhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjUubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubh)}(hhh]j)}(hkobject_actionh]hkobject_action}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjymodnameN classnameNjwjz)}j}]j!c.kobject_ueventasbuh1hhjUubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj)}(hactionh]haction}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(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%notify userspace by sending an ueventh]h%notify userspace by sending an uevent}(hjͺhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjʺhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]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:111: ./lib/kobject_uevent.chMhjubj)}(hhh](j)}(hH``struct kobject *kobj`` struct kobject that the action is happening to h](j)}(h``struct kobject *kobj``h]jS)}(hjh]hstruct kobject *kobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh]jM)}(h.struct kobject that the action is happening toh]h.struct kobject that the action is happening to}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubj)}(h8``enum kobject_action action`` action that is happening h](j)}(h``enum kobject_action action``h]jS)}(hjGh]henum kobject_action action}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjAubj)}(hhh]jM)}(haction that is happeningh]haction that is happening}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubjM)}(haReturns 0 if kobject_uevent() is completed with success or the corresponding error when it fails.h]haReturns 0 if kobject_uevent() is completed with success or the corresponding error when it fails.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubeh}(h]h ] kernelindentah"]h$]h&]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}(hjǻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjûhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMubjQ)}(h h]h }(hjֻhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjûhhhjջhMubh)}(hadd_uevent_varh]j)}(hadd_uevent_varh]hadd_uevent_var}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjûhhhjջhMubj4)}(h6(struct kobj_uevent_env *env, const char *format, ...)h](j:)}(hstruct kobj_uevent_env *envh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkobj_uevent_envh]hkobj_uevent_env}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj$modnameN classnameNjwjz)}j}]j)}jsjsbc.add_uevent_varasbuh1hhjubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(henvh]henv}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *formath](j?)}(hjP*h]hconst}(hjvhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjrubj)}(hcharh]hchar}(hjhhhNhNubah}(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)}(hformath]hformat}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h...h]j)}(hjh]h...}(hjӼhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϼubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjûhhhjջhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjջhMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjջhMhjhhubj4)}(hhh]jM)}(h.add key value string to the environment bufferh]h.add key value string to the environment buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjջhMubeh}(h]h ](jAfunctioneh"]h$]h&]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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubj)}(hhh](j)}(h=``struct kobj_uevent_env *env`` environment buffer structure h](j)}(h``struct kobj_uevent_env *env``h]jS)}(hj=h]hstruct kobj_uevent_env *env}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhj7ubj)}(hhh]jM)}(henvironment buffer structureh]henvironment buffer structure}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhj4ubj)}(h<``const char *format`` printf format for the key=value pair h](j)}(h``const char *format``h]jS)}(hjvh]hconst char *format}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjpubj)}(hhh]jM)}(h$printf format for the key=value pairh]h$printf format for the key=value pair}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhj4ubj)}(h``...`` variable arguments h](j)}(h``...``h]jS)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chKhjubj)}(hhh]jM)}(hvariable argumentsh]hvariable arguments}(hjȽhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjĽhKhjŽubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjĽhKhj4ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chKhjubjM)}(h^Returns 0 if environment variable was added successfully or -ENOMEM if no space was available.h]h^Returns 0 if environment variable was added successfully or -ENOMEM if no space was available.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhW/var/lib/git/docbuild/linux/Documentation/driver-api/basics:111: ./lib/kobject_uevent.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]kernel-objects-manipulationah ]h"]kernel objects manipulationah$]h&]uh1hhhhhhhhKjubh)}(hhh](h)}(hKernel utility functionsh]hKernel utility functions}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKsubh)}(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)}(hjBh]h ARRAY_SIZE}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1hhjDhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj@hhhj_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&]jFjAjGjxjHjxjIjJjKuh1hhhhjhNhNubjM)}(h``ARRAY_SIZE (arr)``h]jS)}(hj~h]hARRAY_SIZE (arr)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj|ubah}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhK 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 }(hjhhhNhNubj)}(h**arr**h]harr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhjhKhjhhubj)}(h+**Parameters** ``arr`` array to be sizedh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjþhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhK hjubj)}(hhh]j)}(h``arr`` array to be sizedh](j)}(h``arr``h]jS)}(hjh]harr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj޾ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKhjھubj)}(hhh]jM)}(harray to be sizedh]harray to be sized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhK hjubah}(h]h ]h"]h$]h&]uh1jhjھubeh}(h]h ]h"]h$]h&]uh1jhjhKhj׾ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]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)}(hj4h]h ARRAY_END}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj6hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj2hhhjQhKubah}(h]j-ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjQhKhj/hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj/hhhjQhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjjHjjjIjJjKuh1hhhhjhNhNubjM)}(h``ARRAY_END (arr)``h]jS)}(hjph]hARRAY_END (arr)}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjnubah}(h]h ]h"]h$]h&]uh1jLh]/var/lib/git/docbuild/linux/Documentation/driver-api/basics:117: ./include/linux/array_size.hhKhjhhubji)}(hubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hKhjubeh}(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&]uh1jLh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjubjM)}(hWWARNING: any const qualifier of **ptr** is lost. Do not use container_of() in new code.h](h WARNING: any const qualifier of }(hjyhhhNhNubj)}(h**ptr**h]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh0 is lost. Do not use container_of() in new code.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcontainer_of_const (C macro)c.container_of_consthNtauh1hhjhhhNhNubh)}(hhh](h)}(hcontainer_of_consth]h)}(hcontainer_of_consth]h)}(hcontainer_of_consth]j)}(hjh]hcontainer_of_const}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.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*``container_of_const (ptr, type, member)``h]jS)}(hjh]h&container_of_const (ptr, type, member)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjhhubji)}(hhcast a member of a structure out to the containing structure and preserve the const-ness of the pointer h]jM)}(hgcast a member of a structure out to the containing structure and preserve the const-ness of the pointerh]hgcast a member of a structure out to the containing structure and preserve the const-ness of the pointer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhjhKhjhhubj)}(hX **Parameters** ``ptr`` the pointer to the member ``type`` the type of the container struct this is embedded in. ``member`` the name of the member within the struct. **Description** Always prefer container_of_const() instead of container_of() in new code.h](jM)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jLh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjubj)}(hhh](j)}(h"``ptr`` the pointer to the member h](j)}(h``ptr``h]jS)}(hjDh]hptr}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjBubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhj>ubj)}(hhh]jM)}(hthe pointer to the memberh]hthe pointer to the member}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjYhKhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhKhj;ubj)}(h?``type`` the type of the container struct this is embedded in. h](j)}(h``type``h]jS)}(hj}h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhKhjwubj)}(hhh]jM)}(h5the type of the container struct this is embedded in.h]h5the type of the container struct this is embedded in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhKhj;ubj)}(h5``member`` the name of the member within the struct. h](j)}(h ``member``h]jS)}(hjh]hmember}(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/container_of.hhKhjubj)}(hhh]jM)}(h)the name of the member within the struct.h]h)the name of the member within the struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]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:120: ./include/linux/container_of.hhK!hjubjM)}(hIAlways prefer container_of_const() instead of container_of() in new code.h]hIAlways prefer container_of_const() instead of container_of() in new code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh_/var/lib/git/docbuild/linux/Documentation/driver-api/basics:120: ./include/linux/container_of.hhK hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsizeof_field (C macro)c.sizeof_fieldhNtauh1hhjhhhNhNubh)}(hhh](h)}(h sizeof_fieldh]h)}(h sizeof_fieldh]h)}(h sizeof_fieldh]j)}(hj0h]h sizeof_field}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj2hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj.hhhjMhKubah}(h]j)ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjMhKhj+hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj+hhhjMhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjfjHjfjIjJjKuh1hhhhjhNhNubjM)}(h``sizeof_field (TYPE, MEMBER)``h]jS)}(hjlh]hsizeof_field (TYPE, MEMBER)}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjhhubji)}(h+Report the size of a struct field in bytes h]jM)}(h*Report the size of a struct field in bytesh]h*Report the size of a struct field in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhjhKhjhhubj)}(hw**Parameters** ``TYPE`` The structure containing the field of interest ``MEMBER`` The field to return the size ofh](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:127: ./include/linux/stddef.hhKhjubj)}(hhh](j)}(h8``TYPE`` The structure containing the field of interest h](j)}(h``TYPE``h]jS)}(hjh]hTYPE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubj)}(hhh]jM)}(h.The structure containing the field of interesth]h.The structure containing the field of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jh+jubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h*``MEMBER`` The field to return the size ofh](j)}(h ``MEMBER``h]jS)}(hjh]hMEMBER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubj)}(hhh]jM)}(hThe field to return the size ofh]hThe field to return the size of}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hoffsetofend (C macro) c.offsetofendhNtauh1hhjhhhNhNubh)}(hhh](h)}(h offsetofendh]h)}(h offsetofendh]h)}(h offsetofendh]j)}(hjMh]h offsetofend}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ](jjeh"]h$]h&]jjuh1hhjOhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjKhhhjjhKubah}(h]jFah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjjhKhjHhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjHhhhjjhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(h``offsetofend (TYPE, MEMBER)``h]jS)}(hjh]hoffsetofend (TYPE, MEMBER)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjhhubji)}(h6Report the offset of a struct field within the struct h]jM)}(h5Report the offset of a struct field within the structh]h5Report the offset of a struct field within the struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhjhKhjhhubj)}(h{**Parameters** ``TYPE`` The type of the structure ``MEMBER`` The member within the structure to get the end offset ofh](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:127: ./include/linux/stddef.hhKhjubj)}(hhh](j)}(h#``TYPE`` The type of the structure h](j)}(h``TYPE``h]jS)}(hjh]hTYPE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubj)}(hhh]jM)}(hThe type of the structureh]hThe type of the structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hC``MEMBER`` The member within the structure to get the end offset ofh](j)}(h ``MEMBER``h]jS)}(hjh]hMEMBER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjubj)}(hhh]jM)}(h8The member within the structure to get the end offset ofh]h8The member within the structure to get the end offset of}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hstruct_group (C macro)c.struct_grouphNtauh1hhjhhhNhNubh)}(hhh](h)}(h struct_grouph]h)}(h struct_grouph]h)}(h struct_grouph]j)}(hjjh]h struct_group}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]jjuh1hhjlhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK$ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhhjhK$ubah}(h]jcah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK$hjehhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjehhhjhK$ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(h#``struct_group (NAME, MEMBERS...)``h]jS)}(hjh]hstruct_group (NAME, MEMBERS...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK&hjhhubji)}(h0Wrap a set of declarations in a mirrored struct h]jM)}(h/Wrap a set of declarations in a mirrored structh]h/Wrap a set of declarations in a mirrored struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK$hjubah}(h]h ]h"]h$]h&]uh1jhhjhK$hjhhubj)}(hX**Parameters** ``NAME`` The identifier name of the mirrored sub-struct ``MEMBERS...`` The member declarations for the mirrored structs **Description** Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members.h](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:127: ./include/linux/stddef.hhK(hjubj)}(hhh](j)}(h8``NAME`` The identifier name of the mirrored sub-struct h](j)}(h``NAME``h]jS)}(hjh]hNAME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK&hjubj)}(hhh]jM)}(h.The identifier name of the mirrored sub-structh]h.The identifier name of the mirrored sub-struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK&hjubj)}(h@``MEMBERS...`` The member declarations for the mirrored structs h](j)}(h``MEMBERS...``h]jS)}(hj3h]h MEMBERS...}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK'hj-ubj)}(hhh]jM)}(h0The member declarations for the mirrored structsh]h0The member declarations for the mirrored structs}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhK'hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhK'hjubeh}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK)hjubjM)}(hX Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members.h]hX Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hstruct_group_attr (C macro)c.struct_group_attrhNtauh1hhjhhhNhNubh)}(hhh](h)}(hstruct_group_attrh]h)}(hstruct_group_attrh]h)}(hstruct_group_attrh]j)}(hjh]hstruct_group_attr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK3ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhK3ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK3hjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhK3ubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(h/``struct_group_attr (NAME, ATTRS, MEMBERS...)``h]jS)}(hjh]h+struct_group_attr (NAME, ATTRS, MEMBERS...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK5hjhhubji)}(h1Create a struct_group() with trailing attributes h]jM)}(h0Create a struct_group() with trailing attributesh]h0Create a struct_group() with trailing attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK3hjubah}(h]h ]h"]h$]h&]uh1jhhjhK3hjhhubj)}(hX**Parameters** ``NAME`` The identifier name of the mirrored sub-struct ``ATTRS`` Any struct attributes to apply ``MEMBERS...`` The member declarations for the mirrored structs **Description** Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members. Includes structure attributes argument.h](jM)}(h**Parameters**h]j)}(hjh]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:127: ./include/linux/stddef.hhK7hjubj)}(hhh](j)}(h8``NAME`` The identifier name of the mirrored sub-struct h](j)}(h``NAME``h]jS)}(hj=h]hNAME}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj;ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK5hj7ubj)}(hhh]jM)}(h.The identifier name of the mirrored sub-structh]h.The identifier name of the mirrored sub-struct}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjRhK5hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhK5hj4ubj)}(h)``ATTRS`` Any struct attributes to apply h](j)}(h ``ATTRS``h]jS)}(hjvh]hATTRS}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK6hjpubj)}(hhh]jM)}(hAny struct attributes to applyh]hAny struct attributes to apply}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK6hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhK6hj4ubj)}(h@``MEMBERS...`` The member declarations for the mirrored structs h](j)}(h``MEMBERS...``h]jS)}(hjh]h MEMBERS...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK7hjubj)}(hhh]jM)}(h0The member declarations for the mirrored structsh]h0The member declarations for the mirrored structs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK7hj4ubeh}(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:127: ./include/linux/stddef.hhK9hjubjM)}(hX4Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members. Includes structure attributes argument.h]hX4Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members. Includes structure attributes argument.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK8hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hstruct_group_tagged (C macro)c.struct_group_taggedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hstruct_group_taggedh]h)}(hstruct_group_taggedh]h)}(hstruct_group_taggedh]j)}(hj)h]hstruct_group_tagged}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKCubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj'hhhjFhKCubah}(h]j"ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjFhKChj$hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj$hhhjFhKCubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGj_jHj_jIjJjKuh1hhhhjhNhNubjM)}(h/``struct_group_tagged (TAG, NAME, MEMBERS...)``h]jS)}(hjeh]h+struct_group_tagged (TAG, NAME, MEMBERS...)}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjcubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKEhjhhubji)}(h*Create a struct_group with a reusable tag h]jM)}(h)Create a struct_group with a reusable tagh]h)Create a struct_group with a reusable tag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKChj{ubah}(h]h ]h"]h$]h&]uh1jhhjhKChjhhubj)}(hX:**Parameters** ``TAG`` The tag name for the named sub-struct ``NAME`` The identifier name of the mirrored sub-struct ``MEMBERS...`` The member declarations for the mirrored structs **Description** Used to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members. Includes struct tag argument for the named copy, so the specified layout can be reused later.h](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:127: ./include/linux/stddef.hhKGhjubj)}(hhh](j)}(h.``TAG`` The tag name for the named sub-struct h](j)}(h``TAG``h]jS)}(hjh]hTAG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKEhjubj)}(hhh]jM)}(h%The tag name for the named sub-structh]h%The tag name for the named sub-struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKEhjubj)}(h8``NAME`` The identifier name of the mirrored sub-struct h](j)}(h``NAME``h]jS)}(hjh]hNAME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKFhjubj)}(hhh]jM)}(h.The identifier name of the mirrored sub-structh]h.The identifier name of the mirrored sub-struct}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKFhjubj)}(h@``MEMBERS...`` The member declarations for the mirrored structs h](j)}(h``MEMBERS...``h]jS)}(hj+h]h MEMBERS...}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKGhj%ubj)}(hhh]jM)}(h0The member declarations for the mirrored structsh]h0The member declarations for the mirrored structs}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hKGhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hKGhjubeh}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKIhjubjM)}(hXjUsed to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members. Includes struct tag argument for the named copy, so the specified layout can be reused later.h]hXjUsed to create an anonymous union of two structs with identical layout and size: one anonymous and one named. The former can be used normally without sub-struct naming, and the latter can be used to reason about the start, end, and size of the group of struct members. Includes struct tag argument for the named copy, so the specified layout can be reused later.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hDECLARE_FLEX_ARRAY (C macro)c.DECLARE_FLEX_ARRAYhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDECLARE_FLEX_ARRAYh]h)}(hDECLARE_FLEX_ARRAYh]h)}(hDECLARE_FLEX_ARRAYh]j)}(hjh]hDECLARE_FLEX_ARRAY}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKTubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKTubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKThjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKTubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(h#``DECLARE_FLEX_ARRAY (TYPE, NAME)``h]jS)}(hjh]hDECLARE_FLEX_ARRAY (TYPE, NAME)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKVhjhhubji)}(h+Declare a flexible array usable in a union h]jM)}(h*Declare a flexible array usable in a unionh]h*Declare a flexible array usable in a union}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKThjubah}(h]h ]h"]h$]h&]uh1jhhj hKThjhhubj)}(hX:**Parameters** ``TYPE`` The type of each flexible array element ``NAME`` The name of the flexible array member **Description** In order to have a flexible array member in a union or alone in a struct, it needs to be wrapped in an anonymous struct with at least 1 named member, but that member can be empty.h](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:127: ./include/linux/stddef.hhKXhjubj)}(hhh](j)}(h1``TYPE`` The type of each flexible array element h](j)}(h``TYPE``h]jS)}(hj5h]hTYPE}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKVhj/ubj)}(hhh]jM)}(h'The type of each flexible array elementh]h'The type of each flexible array element}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhKVhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhKVhj,ubj)}(h/``NAME`` The name of the flexible array member h](j)}(h``NAME``h]jS)}(hjnh]hNAME}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjlubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKWhjhubj)}(hhh]jM)}(h%The name of the flexible array memberh]h%The name of the flexible array member}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKWhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhKWhj,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:127: ./include/linux/stddef.hhKYhjubjM)}(hIn order to have a flexible array member in a union or alone in a struct, it needs to be wrapped in an anonymous struct with at least 1 named member, but that member can be empty.h]hIn order to have a flexible array member in a union or alone in a struct, it needs to be wrapped in an anonymous struct with at least 1 named member, but that member can be empty.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKXhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__TRAILING_OVERLAP (C macro)c.__TRAILING_OVERLAPhNtauh1hhjhhhNhNubh)}(hhh](h)}(h__TRAILING_OVERLAPh]h)}(h__TRAILING_OVERLAPh]h)}(h__TRAILING_OVERLAPh]j)}(hjh]h__TRAILING_OVERLAP}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKaubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKaubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKahjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKaubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(h8``__TRAILING_OVERLAP (TYPE, NAME, FAM, ATTRS, MEMBERS)``h]jS)}(hj$h]h4__TRAILING_OVERLAP (TYPE, NAME, FAM, ATTRS, MEMBERS)}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKchjhhubji)}(h7Overlap a flexible-array member with trailing members. h]jM)}(h6Overlap a flexible-array member with trailing members.h]h6Overlap a flexible-array member with trailing members.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKahj:ubah}(h]h ]h"]h$]h&]uh1jhhjLhKahjhhubj)}(hX**Parameters** ``TYPE`` Flexible structure type name, including "struct" keyword. ``NAME`` Name for a variable to define. ``FAM`` The flexible-array member within **TYPE** ``ATTRS`` Any struct attributes (usually empty) ``MEMBERS`` Trailing overlapping members. **Description** Creates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.h](jM)}(h**Parameters**h]j)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKehjSubj)}(hhh](j)}(hC``TYPE`` Flexible structure type name, including "struct" keyword. h](j)}(h``TYPE``h]jS)}(hjxh]hTYPE}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKghjrubj)}(hhh]jM)}(h9Flexible structure type name, including "struct" keyword.h]h=Flexible structure type name, including “struct” keyword.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKghjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhKghjoubj)}(h(``NAME`` Name for a variable to define. h](j)}(h``NAME``h]jS)}(hjh]hNAME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhhjubj)}(hhh]jM)}(hName for a variable to define.h]hName for a variable to define.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhhjoubj)}(h2``FAM`` The flexible-array member within **TYPE** h](j)}(h``FAM``h]jS)}(hjh]hFAM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKihjubj)}(hhh]jM)}(h)The flexible-array member within **TYPE**h](h!The flexible-array member within }(hjhhhNhNubj)}(h**TYPE**h]hTYPE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jLhjhKihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKihjoubj)}(h0``ATTRS`` Any struct attributes (usually empty) h](j)}(h ``ATTRS``h]jS)}(hj1h]hATTRS}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj/ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKjhj+ubj)}(hhh]jM)}(h%Any struct attributes (usually empty)h]h%Any struct attributes (usually empty)}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjFhKjhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhKjhjoubj)}(h*``MEMBERS`` Trailing overlapping members. h](j)}(h ``MEMBERS``h]jS)}(hjjh]hMEMBERS}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKkhjdubj)}(hhh]jM)}(hTrailing overlapping members.h]hTrailing overlapping members.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKkhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhKkhjoubeh}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKmhjSubjM)}(hCreates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.h]hCreates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKbhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hTRAILING_OVERLAP (C macro)c.TRAILING_OVERLAPhNtauh1hhjhhhNhNubh)}(hhh](h)}(hTRAILING_OVERLAPh]h)}(hTRAILING_OVERLAPh]h)}(hTRAILING_OVERLAPh]j)}(hjh]hTRAILING_OVERLAP}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKwubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKwubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKwhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKwubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(h/``TRAILING_OVERLAP (TYPE, NAME, FAM, MEMBERS)``h]jS)}(hj h]h+TRAILING_OVERLAP (TYPE, NAME, FAM, MEMBERS)}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKyhjhhubji)}(h7Overlap a flexible-array member with trailing members. h]jM)}(h6Overlap a flexible-array member with trailing members.h]h6Overlap a flexible-array member with trailing members.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKwhj6ubah}(h]h ]h"]h$]h&]uh1jhhjHhKwhjhhubj)}(hXu**Parameters** ``TYPE`` Flexible structure type name, including "struct" keyword. ``NAME`` Name for a variable to define. ``FAM`` The flexible-array member within **TYPE** ``MEMBERS`` Trailing overlapping members. **Description** Creates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.h](jM)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK{hjOubj)}(hhh](j)}(hC``TYPE`` Flexible structure type name, including "struct" keyword. h](j)}(h``TYPE``h]jS)}(hjth]hTYPE}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjrubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK|hjnubj)}(hhh]jM)}(h9Flexible structure type name, including "struct" keyword.h]h=Flexible structure type name, including “struct” keyword.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK|hjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhK|hjkubj)}(h(``NAME`` Name for a variable to define. h](j)}(h``NAME``h]jS)}(hjh]hNAME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK}hjubj)}(hhh]jM)}(hName for a variable to define.h]hName for a variable to define.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhK}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK}hjkubj)}(h2``FAM`` The flexible-array member within **TYPE** h](j)}(h``FAM``h]jS)}(hjh]hFAM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhK~hjubj)}(hhh]jM)}(h)The flexible-array member within **TYPE**h](h!The flexible-array member within }(hjhhhNhNubj)}(h**TYPE**h]hTYPE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jLhjhK~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK~hjkubj)}(h*``MEMBERS`` Trailing overlapping members. h](j)}(h ``MEMBERS``h]jS)}(hj-h]hMEMBERS}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj+ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhj'ubj)}(hhh]jM)}(hTrailing overlapping members.h]hTrailing overlapping members.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjBhKhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhKhjkubeh}(h]h ]h"]h$]h&]uh1jhjOubjM)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKhjOubjM)}(hCreates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.h]hCreates a union between a flexible-array member (FAM) in a struct and a set of additional members that would otherwise follow it.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:127: ./include/linux/stddef.hhKxhjOubeh}(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:130: ./include/linux/util_macros.hhK ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhK ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK hjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhK ubeh}(h]h ](jAmacroeh"]h$]h&]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:130: ./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:130: ./include/linux/util_macros.hhKhjubj)}(hhh]j)}(h%``condition`` The condition to check h](j)}(h ``condition``h]jS)}(hj7h]h condition}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj5ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK hj1ubj)}(hhh]jM)}(hThe condition to checkh]hThe condition to check}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjLhK hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhK 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&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubjM)}(h Typical use::h]h Typical use:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK hjubj)}(h#define for_each_foo_bar(x, y) \' list_for_each_entry(x, y->list, head) \' for_each_if(x->something == SOMETHING)h]h#define for_each_foo_bar(x, y) \' list_for_each_entry(x, y->list, head) \' for_each_if(x->something == SOMETHING)}hjsbah}(h]h ]h"]h$]h&]jjuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubjM)}(hMThe for_each_if() macro makes the use of for_each_foo_bar() less error prone.h]hMThe for_each_if() macro makes the use of for_each_foo_bar() less error prone.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]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:130: ./include/linux/util_macros.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(h``find_closest (x, a, as)``h]jS)}(hj h]hfind_closest (x, a, as)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.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}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj!ubah}(h]h ]h"]h$]h&]uh1jhhj3hKhjhhubj)}(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)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj:ubj)}(hhh](j)}(h``x`` The reference value. h](j)}(h``x``h]jS)}(hj_h]hx}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjYubj)}(hhh]jM)}(hThe reference value.h]hThe reference value.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjthKhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthKhjVubj)}(h]``a`` The array in which to look for the closest element. Must be sorted in ascending order. h](j)}(h``a``h]jS)}(hjh]ha}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh]jM)}(hVThe array in which to look for the closest element. Must be sorted in ascending order.h]hVThe array in which to look for the closest element. Must be sorted in ascending order.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjVubj)}(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:130: ./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&]uh1jhjhKhjVubeh}(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&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK hj:ubjM)}(h0Returns the index of the element closest to 'x'.h]h4Returns the index of the element closest to ‘x’.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj:ubjM)}(h**Note**h]j)}(hj4h]hNote}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK!hj:ubj)}(hhh]j)}(hIf using an array of negative numbers (or mixed positive numbers), then be sure that 'x' is of a signed-type to get good results.h](j)}(hBIf using an array of negative numbers (or mixed positive numbers),h]hBIf using an array of negative numbers (or mixed positive numbers),}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK!hjMubj)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK"hj`ubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhj_hK!hjJubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(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)}(hjh]hfind_closest_descending}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK8ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhK8ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK8hjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhK8ubeh}(h]h ](jAmacroeh"]h$]h&]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:130: ./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:130: ./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&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhj ubjM)}(hSimilar to find_closest() but 'a' is expected to be sorted in descending order. The iteration is done in reverse order, so that the comparison of '__fc_right' & '__fc_left' also works for unsigned numbers.h]hSimilar to find_closest() but ‘a’ is expected to be sorted in descending order. The iteration is done in reverse order, so that the comparison of ‘__fc_right’ & ‘__fc_left’ also works for unsigned numbers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK=hj ubeh}(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}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKVubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj8hKVubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj8hKVhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhj8hKVubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjQjHjQjIjJjKuh1hhhhjhNhNubjM)}(h``PTR_IF (cond, ptr)``h]jS)}(hjWh]hPTR_IF (cond, ptr)}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjUubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./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 }(hjqhhhNhNubj)}(h**ptr**h]hptr}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh if }(hjqhhhNhNubj)}(h**cond**h]hcond}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh is true, or to NULL otherwise.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKVhjmubah}(h]h ]h"]h$]h&]uh1jhhjhKVhjhhubj)}(hX]**Parameters** ``cond`` A conditional, usually in a form of IS_ENABLED(CONFIG_FOO) ``ptr`` A pointer to assign if **cond** is true. **Description** PTR_IF(IS_ENABLED(CONFIG_FOO), ptr) evaluates to **ptr** if CONFIG_FOO is set to 'y' or 'm', or to NULL otherwise. The **ptr** argument must be a pointer. The macro can be very useful to help compiler dropping dead code. For instance, consider the following:: #ifdef CONFIG_FOO_SUSPEND static int foo_suspend(struct device *dev) { ... } #endif static struct pm_ops foo_ops = { #ifdef CONFIG_FOO_SUSPEND .suspend = foo_suspend, #endif }; While this works, the foo_suspend() macro is compiled conditionally, only when CONFIG_FOO_SUSPEND is set. This is problematic, as there could be a build bug in this function, we wouldn't have a way to know unless the configuration option is set. An alternative is to declare foo_suspend() always, but mark it as __maybe_unused. This works, but the __maybe_unused attribute is required to instruct the compiler that the function may not be referenced anywhere, and is safe to remove without making a fuss about it. This makes the programmer responsible for tagging the functions that can be garbage-collected. With the macro it is possible to write the following:: static int foo_suspend(struct device *dev) { ... } static struct pm_ops foo_ops = { .suspend = PTR_IF(IS_ENABLED(CONFIG_FOO_SUSPEND), foo_suspend), }; The foo_suspend() function will now be automatically dropped by the compiler, and it does not require any specific attribute.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKZhjubj)}(hhh](j)}(hD``cond`` A conditional, usually in a form of IS_ENABLED(CONFIG_FOO) h](j)}(h``cond``h]jS)}(hjh]hcond}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKXhjubj)}(hhh]jM)}(h(A pointer to assign if **cond** is true.h](hA pointer to assign if }(hj!hhhNhNubj)}(h**cond**h]hcond}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh is true.}(hj!hhhNhNubeh}(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)}(hjUh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKZhjubjM)}(hPTR_IF(IS_ENABLED(CONFIG_FOO), ptr) evaluates to **ptr** if CONFIG_FOO is set to 'y' or 'm', or to NULL otherwise. The **ptr** argument must be a pointer.h](h1PTR_IF(IS_ENABLED(CONFIG_FOO), ptr) evaluates to }(hjkhhhNhNubj)}(h**ptr**h]hptr}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubhG if CONFIG_FOO is set to ‘y’ or ‘m’, or to NULL otherwise. The }(hjkhhhNhNubj)}(h**ptr**h]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh argument must be a pointer.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKYhjubjM)}(hAThe macro can be very useful to help compiler dropping dead code.h]hAThe macro can be very useful to help compiler dropping dead code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK\hjubjM)}(h&For instance, consider the following::h]h%For instance, consider the following:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK^hjubj)}(h#ifdef CONFIG_FOO_SUSPEND static int foo_suspend(struct device *dev) { ... } #endif static struct pm_ops foo_ops = { #ifdef CONFIG_FOO_SUSPEND .suspend = foo_suspend, #endif };h]h#ifdef CONFIG_FOO_SUSPEND static int foo_suspend(struct device *dev) { ... } #endif static struct pm_ops foo_ops = { #ifdef CONFIG_FOO_SUSPEND .suspend = foo_suspend, #endif };}hjsbah}(h]h ]h"]h$]h&]jjuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK`hjubjM)}(hWhile this works, the foo_suspend() macro is compiled conditionally, only when CONFIG_FOO_SUSPEND is set. This is problematic, as there could be a build bug in this function, we wouldn't have a way to know unless the configuration option is set.h]hWhile this works, the foo_suspend() macro is compiled conditionally, only when CONFIG_FOO_SUSPEND is set. This is problematic, as there could be a build bug in this function, we wouldn’t have a way to know unless the configuration option is set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKmhjubjM)}(hXjAn alternative is to declare foo_suspend() always, but mark it as __maybe_unused. This works, but the __maybe_unused attribute is required to instruct the compiler that the function may not be referenced anywhere, and is safe to remove without making a fuss about it. This makes the programmer responsible for tagging the functions that can be garbage-collected.h]hXjAn alternative is to declare foo_suspend() always, but mark it as __maybe_unused. This works, but the __maybe_unused attribute is required to instruct the compiler that the function may not be referenced anywhere, and is safe to remove without making a fuss about it. This makes the programmer responsible for tagging the functions that can be garbage-collected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKrhjubjM)}(h6With the macro it is possible to write the following::h]h5With the macro it is possible to write the following:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKyhjubj)}(hstatic int foo_suspend(struct device *dev) { ... } static struct pm_ops foo_ops = { .suspend = PTR_IF(IS_ENABLED(CONFIG_FOO_SUSPEND), foo_suspend), };h]hstatic int foo_suspend(struct device *dev) { ... } static struct pm_ops foo_ops = { .suspend = PTR_IF(IS_ENABLED(CONFIG_FOO_SUSPEND), foo_suspend), };}hjsbah}(h]h ]h"]h$]h&]jjuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhK{hjubjM)}(h}The foo_suspend() function will now be automatically dropped by the compiler, and it does not require any specific attribute.h]h}The foo_suspend() function will now be automatically dropped by the compiler, and it does not require any specific attribute.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]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)}(hj0h]hu64_to_user_ptr}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj2hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj.hhhjMhKubah}(h]j)ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjMhKhj+hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj+hhhjMhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjfjHjfjIjJjKuh1hhhhjhNhNubjM)}(h``u64_to_user_ptr (x)``h]jS)}(hjlh]hu64_to_user_ptr (x)}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjjubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./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 *}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhjhKhjhhubj)}(h**Parameters** ``x`` The u64 value from user space, usually via IOCTL **Description** u64_to_user_ptr() simply casts a pointer passed as u64 from user space to void __user * correctly. Using this lets us get rid of all the tiresome casts.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh]j)}(h7``x`` The u64 value from user space, usually via IOCTL h](j)}(h``x``h]jS)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubj)}(hhh]jM)}(h0The u64 value from user space, usually via IOCTLh]h0The u64 value from user space, usually via IOCTL}(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&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubjM)}(hu64_to_user_ptr() simply casts a pointer passed as u64 from user space to void __user * correctly. Using this lets us get rid of all the tiresome casts.h]hu64_to_user_ptr() simply casts a pointer passed as u64 from user space to void __user * correctly. Using this lets us get rid of all the tiresome casts.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]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)}(hj:h]h is_insidevar}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj<hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj8hhhjWhKubah}(h]j3ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjWhKhj5hhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hj5hhhjWhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjpjHjpjIjJjKuh1hhhhjhNhNubjM)}(h``is_insidevar (ptr, var)``h]jS)}(hjvh]his_insidevar (ptr, var)}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjtubah}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./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.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hKhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hKhjubeh}(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&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubjM)}(h^Evaluates to true if the address in **ptr** lies within the memory range allocated to **var**.h](h$Evaluates to true if the address in }(hjxhhhNhNubj)}(h**ptr**h]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh+ lies within the memory range allocated to }(hjxhhhNhNubj)}(h**var**h]hvar}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh^/var/lib/git/docbuild/linux/Documentation/driver-api/basics:130: ./include/linux/util_macros.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]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:133: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAmacroeh"]h$]h&]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:133: ./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:133: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhj)hKhjhhubj)}(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)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK hj0ubj)}(hhh]j)}(h!``n`` the number we're accessing h](j)}(h``n``h]jS)}(hjUh]hn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjSubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjOubj)}(hhh]jM)}(hthe number we're accessingh]hthe number we’re accessing}(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&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK hj0ubjM)}(hA basic shift-right of a 64- or 32-bit quantity. Use this to suppress the "right shift count >= width of type" warning when that quantity is 32-bits.h]hA basic shift-right of a 64- or 32-bit quantity. Use this to suppress the “right shift count >= width of type” warning when that quantity is 32-bits.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK hj0ubeh}(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:133: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAmacroeh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubjM)}(h``lower_32_bits (n)``h]jS)}(hj h]hlower_32_bits (n)}(hj hhhNhNubah}(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/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}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhj!ubah}(h]h ]h"]h$]h&]uh1jhhj3hKhjhhubj)}(h2**Parameters** ``n`` the number we're accessingh](jM)}(h**Parameters**h]j)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhj:ubj)}(hhh]j)}(h ``n`` the number we're accessingh](j)}(h``n``h]jS)}(hj_h]hn}(hjahhhNhNubah}(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/wordpart.hhKhjYubj)}(hhh]jM)}(hthe number we're accessingh]hthe number we’re accessing}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthKhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(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:133: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAmacroeh"]h$]h&]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:133: ./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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubah}(h]h ]h"]h$]h&]uh1jhhjhKhjhhubj)}(h2**Parameters** ``n`` the number we're accessingh](jM)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjubj)}(hhh]j)}(h ``n`` the number we're accessingh](j)}(h``n``h]jS)}(hjCh]hn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhj=ubj)}(hhh]jM)}(hthe number we're accessingh]hthe number we’re accessing}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhKhj:ubah}(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)}(hjh]h lower_16_bits}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhKubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAmacroeh"]h$]h&]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:133: ./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:133: ./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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK!hjubj)}(hhh]j)}(h ``n`` the number we're accessingh](j)}(h``n``h]jS)}(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:133: ./include/linux/wordpart.hhK#hj!ubj)}(hhh]jM)}(hthe number we're accessingh]hthe number we’re accessing}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhKhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hK#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)}(hj{h]h REPEAT_BYTE}(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/wordpart.hhK#ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjyhhhjhK#ubah}(h]jtah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK#hjvhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjvhhhjhK#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:133: ./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:133: ./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:133: ./include/linux/wordpart.hhK'hjubj)}(hhh]j)}(h``x`` value to repeat h](j)}(h``x``h]jS)}(hjh]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK$hjubj)}(hhh]jM)}(hvalue to repeath]hvalue to repeat}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj2hK$hj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hK$hjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**NOTE**h]j)}(hjXh]hNOTE}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK&hjubjM)}(hC**x** is not checked for > 0xff; larger values produce odd results.h](j)}(h**x**h]hx}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh> is not checked for > 0xff; larger values produce odd results.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK&hjubeh}(h]h ] kernelindentah"]h$]h&]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)}(hjh]hREPEAT_BYTE_U32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK+ubah}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhK+ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhK+hjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]uh1j3hjhhhjhK+ubeh}(h]h ](jAmacroeh"]h$]h&]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:133: ./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:133: ./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)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK/hj"ubj)}(hhh]j)}(h``x`` value to repeat h](j)}(h``x``h]jS)}(hjGh]hx}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK,hjAubj)}(hhh]jM)}(hvalue to repeath]hvalue to repeat}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hK,hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hK,hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubjM)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK.hj"ubjM)}(hC**x** is not checked for > 0xff; larger values produce odd results.h](j)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh> is not checked for > 0xff; larger values produce odd results.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLh[/var/lib/git/docbuild/linux/Documentation/driver-api/basics:133: ./include/linux/wordpart.hhK.hj"ubeh}(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:136: ./kernel/printk/printk.chKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hconsole_list_lockh]j)}(hconsole_list_lockh]hconsole_list_lock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]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)}(hLock the console listh]hLock the console list}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhj9hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjTjHjTjIjJjKuh1hhhhjhNhNubj)}(hd**Parameters** ``void`` no arguments **Description** For console list or console->flags updatesh](jM)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjXubj)}(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:136: ./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:136: ./kernel/printk/printk.chKhjXubjM)}(h*For console list or console->flags updatesh]h*For console list or console->flags updates}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjXubeh}(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:136: ./kernel/printk/printk.chM ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj hM ubh)}(hconsole_list_unlockh]j)}(hconsole_list_unlockh]hconsole_list_unlock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj hM ubj4)}(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 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)}(hUnlock the console listh]hUnlock the console list}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjahhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj|jHj|jIjJjKuh1hhhhjhNhNubj)}(h\**Parameters** ``void`` no arguments **Description** Counterpart to console_list_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:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubjM)}(h"Counterpart to console_list_lock()h]h"Counterpart to console_list_lock()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubeh}(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}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj3hMubh)}(hconsole_srcu_read_lockh]j)}(hconsole_srcu_read_lockh]hconsole_srcu_read_lock}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj3hMubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(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)}(h9Register a new reader for the SRCU-protected console listh]h9Register a new reader for the SRCU-protected console list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj3hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``void`` no arguments **Description** Use for_each_console_srcu() to iterate the console list **Context** Any context. **Return** A cookie to pass to console_srcu_read_unlock().h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubjM)}(h7Use for_each_console_srcu() to iterate the console listh]h7Use for_each_console_srcu() to iterate the console list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h **Context**h]j)}(hj/h]hContext}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h Any context.h]h Any context.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h **Return**h]j)}(hjVh]hReturn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h/A cookie to pass to console_srcu_read_unlock().h]h/A cookie to pass to console_srcu_read_unlock().}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM(ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM(ubh)}(hconsole_srcu_read_unlockh]j)}(hconsole_srcu_read_unlockh]hconsole_srcu_read_unlock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM(ubj4)}(h (int cookie)h]j:)}(h int cookieh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcookieh]hcookie}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM(ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM(ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM(hjhhubj4)}(hhh]jM)}(h=Unregister an old reader from the SRCU-protected console listh]h=Unregister an old reader from the SRCU-protected console list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM(hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM(ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj6jHj6jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``int cookie`` cookie returned from console_srcu_read_lock() **Description** Counterpart to console_srcu_read_lock()h](jM)}(h**Parameters**h]j)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM,hj:ubj)}(hhh]j)}(h=``int cookie`` cookie returned from console_srcu_read_lock() h](j)}(h``int cookie``h]jS)}(hj_h]h int cookie}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj]ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM*hjYubj)}(hhh]jM)}(h-cookie returned from console_srcu_read_lock()h]h-cookie returned from console_srcu_read_lock()}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM,hj:ubjM)}(h'Counterpart to console_srcu_read_lock()h]h'Counterpart to console_srcu_read_lock()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM+hj:ubeh}(h]h ] kernelindentah"]h$]h&]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:136: ./kernel/printk/printk.chM ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM ubh)}(h*match_devname_and_update_preferred_consoleh]j)}(h*match_devname_and_update_preferred_consoleh]h*match_devname_and_update_preferred_console}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM ubj4)}(h8(const char *devname, const char *name, const short idx)h](j:)}(hconst char *devnameh](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hcharh]hchar}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevnameh]hdevname}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *nameh](j?)}(hjP*h]hconst}(hjyhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjuubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst short idxh](j?)}(hjP*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}(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:Update a preferred console when matching devname is found.h]h:Update a preferred console when matching devname is found.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hj4hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjOjHjOjIjJjKuh1hhhhjhNhNubj)}(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)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjSubj)}(hhh](j)}(h6``const char *devname`` DEVNAME:0.0 style device name h](j)}(h``const char *devname``h]jS)}(hjxh]hconst char *devname}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjvubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjrubj)}(hhh]jM)}(hDEVNAME:0.0 style device nameh]hDEVNAME:0.0 style device name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhM hjoubj)}(hK``const char *name`` Name of the corresponding console driver, e.g. "ttyS" h](j)}(h``const char *name``h]jS)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubj)}(hhh]jM)}(h5Name of the corresponding console driver, e.g. "ttyS"h]h9Name of the corresponding console driver, e.g. “ttyS”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjoubj)}(h5``const short idx`` Console index, e.g. port number. h](j)}(h``const short idx``h]jS)}(hjh]hconst short idx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjubj)}(hhh]jM)}(h Console index, e.g. port number.h]h Console index, e.g. port number.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjoubeh}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjSubjM)}(hX The function checks whether a device with the given **devname** is preferred via the console=DEVNAME:0.0 command line option. It fills the missing console driver name and console index so that a later register_console() call could find (match) and enable this device.h](h4The function checks whether a device with the given }(hj;hhhNhNubj)}(h **devname**h]hdevname}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh is preferred via the console=DEVNAME:0.0 command line option. It fills the missing console driver name and console index so that a later register_console() call could find (match) and enable this device.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjSubjM)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjSubjM)}(h **Return**h]j)}(hjmh]hReturn}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjSubjM)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM hjSubeh}(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:136: ./kernel/printk/printk.chMA ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMA ubh)}(h console_lockh]j)}(h console_lockh]h console_lock}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMA ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMA ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMA ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMA hjhhubj4)}(hhh]jM)}(h)block the console subsystem from printingh]h)block the console subsystem from printing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMA hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMA ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj1jHj1jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``void`` no arguments **Description** Acquires a lock which guarantees that no consoles will be in or enter their write() callback. Can sleep, returns nothing.h](jM)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chME hj5ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjZh]hvoid}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjXubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjTubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjohKhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohKhjQubah}(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&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhj5ubjM)}(h]Acquires a lock which guarantees that no consoles will be in or enter their write() callback.h]h]Acquires a lock which guarantees that no consoles will be in or enter their write() callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMB hj5ubjM)}(hCan sleep, returns nothing.h]hCan sleep, returns nothing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chME hj5ubeh}(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:136: ./kernel/printk/printk.chMW ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMW ubh)}(hconsole_trylockh]j)}(hconsole_trylockh]hconsole_trylock}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMW ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(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}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMW hjMhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMW ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjhjHjhjIjJjKuh1hhhhjhNhNubj)}(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)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM[ hjlubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjlubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjlubjM)}(hcTry to acquire a lock which guarantees that no consoles will be in or enter their write() callback.h]hcTry to acquire a lock which guarantees that no consoles will be in or enter their write() callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMX hjlubjM)}(h;returns 1 on success, and 0 on failure to acquire the lock.h]h;returns 1 on success, and 0 on failure to acquire the lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chM[ hjlubeh}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMD ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj.hMD ubh)}(hconsole_unlockh]j)}(hconsole_unlockh]hconsole_unlock}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhj.hMD ubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]noemphjjuh1j9hjUubah}(h]h ]h"]h$]h&]jjuh1j3hjhhhj.hMD ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj.hMD ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj.hMD hjhhubj4)}(hhh]jM)}(h2unblock the legacy console subsystem from printingh]h2unblock the legacy console subsystem from printing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMD hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj.hMD ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``void`` no arguments **Description** Releases the console_lock which the caller holds to block printing of the legacy console subsystem. While the console_lock was held, console output may have been buffered by printk(). If this is the case, console_unlock() emits the output on legacy consoles prior to releasing the lock. console_unlock(); may be called from any context.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMH hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubjM)}(hcReleases the console_lock which the caller holds to block printing of the legacy console subsystem.h]hcReleases the console_lock which the caller holds to block printing of the legacy console subsystem.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chME hjubjM)}(hWhile the console_lock was held, console output may have been buffered by printk(). If this is the case, console_unlock() emits the output on legacy consoles prior to releasing the lock.h]hWhile the console_lock was held, console output may have been buffered by printk(). If this is the case, console_unlock() emits the output on legacy consoles prior to releasing the lock.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMH hjubjM)}(h1console_unlock(); may be called from any context.h]h1console_unlock(); may be called from any context.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chML hjubeh}(h]h ] kernelindentah"]h$]h&]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}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjbhhhjthMubh)}(hconsole_force_preferred_lockedh]j)}(hconsole_force_preferred_lockedh]hconsole_force_preferred_locked}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjbhhhjthMubj4)}(h(struct console *con)h]j:)}(hstruct console *conh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hconsoleh]hconsole}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsb c.console_force_preferred_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hconh]hcon}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hjbhhhjthMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^hhhjthMubah}(h]jYah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjthMhj[hhubj4)}(hhh]jM)}(h$force a registered console preferredh]h$force a registered console preferred}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj#hhubah}(h]h ]h"]h$]h&]uh1j3hj[hhhjthMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj>jHj>jIjJjKuh1hhhhjhNhNubj)}(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)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjBubj)}(hhh]j)}(hC``struct console *con`` The registered console to force preferred. h](j)}(h``struct console *con``h]jS)}(hjgh]hstruct console *con}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjaubj)}(hhh]jM)}(h*The registered console to force preferred.h]h*The registered console to force preferred.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjBubjM)}(h)Must be called under console_list_lock().h]h)Must be called under console_list_lock().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjBubeh}(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:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hprintk_timed_ratelimith]j)}(hprintk_timed_ratelimith]hprintk_timed_ratelimit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h<(unsigned long *caller_jiffies, unsigned int interval_msecs)h](j:)}(hunsigned long *caller_jiffiesh](j)}(hunsignedh]hunsigned}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hlongh]hlong}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjMhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcaller_jiffiesh]hcaller_jiffies}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hunsigned int interval_msecsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(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)}(hinterval_msecsh]hinterval_msecs}(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%caller-controlled printk ratelimitingh]h%caller-controlled printk ratelimiting}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]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:136: ./kernel/printk/printk.chMhjubj)}(hhh](j)}(h<``unsigned long *caller_jiffies`` pointer to caller's state h](j)}(h!``unsigned long *caller_jiffies``h]jS)}(hj$h]hunsigned long *caller_jiffies}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj"ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(hpointer to caller's stateh]hpointer to caller’s state}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(h@``unsigned int interval_msecs`` minimum interval between prints h](j)}(h``unsigned int interval_msecs``h]jS)}(hj]h]hunsigned int interval_msecs}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj[ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjWubj)}(hhh]jM)}(hminimum interval between printsh]hminimum interval between prints}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(hprintk_timed_ratelimit() returns true if more than **interval_msecs** milliseconds have elapsed since the last time printk_timed_ratelimit() returned true.h](h3printk_timed_ratelimit() returns true if more than }(hjhhhNhNubj)}(h**interval_msecs**h]hinterval_msecs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhV milliseconds have elapsed since the last time printk_timed_ratelimit() returned true.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]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:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkmsg_dump_registerh]j)}(hkmsg_dump_registerh]hkmsg_dump_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct kmsg_dumper *dumper)h]j:)}(hstruct kmsg_dumper *dumperh](j?)}(hjBh]hstruct}(hj,hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj(ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubh)}(hhh]j)}(h kmsg_dumperh]h kmsg_dumper}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjLmodnameN classnameNjwjz)}j}]j)}jsjsbc.kmsg_dump_registerasbuh1hhj(ubjQ)}(h h]h }(hjjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj)}(hjh]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hdumperh]hdumper}(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)}(hregister a kernel log dumper.h]hregister a kernel log dumper.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]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:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(hD``struct kmsg_dumper *dumper`` pointer to the kmsg_dumper structure h](j)}(h``struct kmsg_dumper *dumper``h]jS)}(hjh]hstruct kmsg_dumper *dumper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(h$pointer to the kmsg_dumper structureh]h$pointer to the kmsg_dumper structure}(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)}(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:136: ./kernel/printk/printk.chMhjubjM)}(hAdds a kernel log dumper to the system. The dump callback in the structure will be called when the kernel oopses or panics and must be set. Returns zero on success and ``-EINVAL`` or ``-EBUSY`` otherwise.h](hAdds a kernel log dumper to the system. The dump callback in the structure will be called when the kernel oopses or panics and must be set. Returns zero on success and }(hjAhhhNhNubjS)}(h ``-EINVAL``h]h-EINVAL}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubh or }(hjAhhhNhNubjS)}(h ``-EBUSY``h]h-EBUSY}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjAubh otherwise.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hkmsg_dump_unregisterh]j)}(hkmsg_dump_unregisterh]hkmsg_dump_unregister}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(struct kmsg_dumper *dumper)h]j:)}(hstruct kmsg_dumper *dumperh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(h kmsg_dumperh]h kmsg_dumper}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kmsg_dump_unregisterasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdumperh]hdumper}(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)}(hunregister a kmsg dumper.h]hunregister a kmsg dumper.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjQhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjljHjljIjJjKuh1hhhhjhNhNubj)}(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)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjpubj)}(hhh]j)}(hD``struct kmsg_dumper *dumper`` pointer to the kmsg_dumper structure h](j)}(h``struct kmsg_dumper *dumper``h]jS)}(hjh]hstruct kmsg_dumper *dumper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(h$pointer to the kmsg_dumper structureh]h$pointer to the kmsg_dumper structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjpubjM)}(hYRemoves a dump device from the system. Returns zero on success and ``-EINVAL`` otherwise.h](hCRemoves a dump device from the system. Returns zero on success and }(hjhhhNhNubjS)}(h ``-EINVAL``h]h-EINVAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjpubeh}(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}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#hhhj4hMubh)}(hkmsg_dump_get_lineh]j)}(hkmsg_dump_get_lineh]hkmsg_dump_get_line}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1hhj#hhhj4hMubj4)}(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}(hjchhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj_ubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_ubh)}(hhh]j)}(hkmsg_dump_iterh]hkmsg_dump_iter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjIsbc.kmsg_dump_get_lineasbuh1hhj_ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubj:)}(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&]noemphjjuh1j9hj[ubj:)}(h char *lineh](j)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlineh]hline}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubj:)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjPmodnameN classnameNjwjz)}j}]jc.kmsg_dump_get_lineasbuh1hhjGubjQ)}(h h]h }(hjlhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjGubj)}(hsizeh]hsize}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubj:)}(h size_t *lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.kmsg_dump_get_lineasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj[ubeh}(h]h ]h"]h$]h&]jjuh1j3hj#hhhj4hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhj4hMubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj4hMhjhhubj4)}(hhh]jM)}(hretrieve one kmsg log lineh]hretrieve one kmsg log line}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhj4hMubeh}(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:136: ./kernel/printk/printk.chMhjubj)}(hhh](j)}(h3``struct kmsg_dump_iter *iter`` kmsg dump iterator h](j)}(h``struct kmsg_dump_iter *iter``h]jS)}(hj:h]hstruct kmsg_dump_iter *iter}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj8ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj4ubj)}(hhh]jM)}(hkmsg dump iteratorh]hkmsg dump iterator}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhj1ubj)}(h+``bool syslog`` include the "<4>" prefixes h](j)}(h``bool syslog``h]jS)}(hjsh]h bool syslog}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjqubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjmubj)}(hhh]jM)}(hinclude the "<4>" prefixesh]hinclude the “<4>” prefixes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(h*``char *line`` buffer to copy the line to h](j)}(h``char *line``h]jS)}(hjh]h char *line}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(hbuffer to copy the line toh]hbuffer to copy the line to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(h+``size_t size`` maximum size of the buffer h](j)}(h``size_t size``h]jS)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(hmaximum size of the bufferh]hmaximum size of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(h2``size_t *len`` length of line placed into buffer h](j)}(h``size_t *len``h]jS)}(hjh]h size_t *len}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]jM)}(h!length of line placed into bufferh]h!length of line placed into buffer}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj1ubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.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.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./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.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]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:136: ./kernel/printk/printk.chMJubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMJubh)}(hkmsg_dump_get_bufferh]j)}(hkmsg_dump_get_bufferh]hkmsg_dump_get_buffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMJubj4)}(hS(struct kmsg_dump_iter *iter, bool syslog, char *buf, size_t size, size_t *len_out)h](j:)}(hstruct kmsg_dump_iter *iterh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkmsg_dump_iterh]hkmsg_dump_iter}(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 }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hiterh]hiter}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h bool syslogh](j)}(hjh]hbool}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjQ)}(h h]h }(hjwhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubj)}(hsyslogh]hsyslog}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h char *bufh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j2c.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}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj-modnameN classnameNjwjz)}j}]j2c.kmsg_dump_get_bufferasbuh1hhj$ubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hlen_outh]hlen_out}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhMJubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMJubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMJhjhhubj4)}(hhh]jM)}(hcopy kmsg log linesh]hcopy kmsg log lines}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMJhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMJubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct kmsg_dump_iter *iter`` kmsg dump iterator ``bool syslog`` include the "<4>" prefixes ``char *buf`` buffer to copy the line to ``size_t size`` maximum size of the buffer ``size_t *len_out`` length of line placed into buffer **Description** Start at the end of the kmsg buffer and fill the provided buffer with as many of the *youngest* kmsg records that fit into it. If the buffer is large enough, all available kmsg records will be copied with a single call. Consecutive calls will fill the buffer with the next block of available older records, not including the earlier retrieved ones. A return value of FALSE indicates that there are no more records to read.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMNhjubj)}(hhh](j)}(h3``struct kmsg_dump_iter *iter`` kmsg dump iterator h](j)}(h``struct kmsg_dump_iter *iter``h]jS)}(hjh]hstruct kmsg_dump_iter *iter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMKhjubj)}(hhh]jM)}(hkmsg dump iteratorh]hkmsg dump iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjubj)}(h+``bool syslog`` include the "<4>" prefixes h](j)}(h``bool syslog``h]jS)}(hjh]h bool syslog}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMLhjubj)}(hhh]jM)}(hinclude the "<4>" prefixesh]hinclude the “<4>” prefixes}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubj)}(h)``char *buf`` buffer to copy the line to h](j)}(h ``char *buf``h]jS)}(hjAh]h char *buf}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMMhj;ubj)}(hhh]jM)}(hbuffer to copy the line toh]hbuffer to copy the line to}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVhMMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMMhjubj)}(h+``size_t size`` maximum size of the buffer h](j)}(h``size_t size``h]jS)}(hjzh]h size_t size}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjxubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMNhjtubj)}(hhh]jM)}(hmaximum size of the bufferh]hmaximum size of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjubj)}(h6``size_t *len_out`` length of line placed into buffer h](j)}(h``size_t *len_out``h]jS)}(hjh]hsize_t *len_out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMOhjubj)}(hhh]jM)}(h!length of line placed into bufferh]h!length of line placed into buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMQhjubjM)}(hStart at the end of the kmsg buffer and fill the provided buffer with as many of the *youngest* kmsg records that fit into it. If the buffer is large enough, all available kmsg records will be copied with a single call.h](hUStart at the end of the kmsg buffer and fill the provided buffer with as many of the }(hjhhhNhNubj3)}(h *youngest*h]hyoungest}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh| kmsg records that fit into it. If the buffer is large enough, all available kmsg records will be copied with a single call.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMPhjubjM)}(hConsecutive calls will fill the buffer with the next block of available older records, not including the earlier retrieved ones.h]hConsecutive calls will fill the buffer with the next block of available older records, not including the earlier retrieved ones.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMUhjubjM)}(hIA return value of FALSE indicates that there are no more records to read.h]hIA return value of FALSE indicates that there are no more records to read.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMXhjubeh}(h]h ] kernelindentah"]h$]h&]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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_hhhjqhMubh)}(hkmsg_dump_rewindh]j)}(hkmsg_dump_rewindh]hkmsg_dump_rewind}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj_hhhjqhMubj4)}(h(struct kmsg_dump_iter *iter)h]j:)}(hstruct kmsg_dump_iter *iterh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hkmsg_dump_iterh]hkmsg_dump_iter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.kmsg_dump_rewindasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubah}(h]h ]h"]h$]h&]jjuh1j3hj_hhhjqhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj[hhhjqhMubah}(h]jVah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjqhMhjXhhubj4)}(hhh]jM)}(hreset the iteratorh]hreset the iterator}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj hhubah}(h]h ]h"]h$]h&]uh1j3hjXhhhjqhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj;jHj;jIjJjKuh1hhhhjhNhNubj)}(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)}(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:136: ./kernel/printk/printk.chMhj?ubj)}(hhh]j)}(h3``struct kmsg_dump_iter *iter`` kmsg dump iterator h](j)}(h``struct kmsg_dump_iter *iter``h]jS)}(hjdh]hstruct kmsg_dump_iter *iter}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjbubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj^ubj)}(hhh]jM)}(hkmsg dump iteratorh]hkmsg dump iterator}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj?ubjM)}(hReset the dumper's iterator so that kmsg_dump_get_line() and kmsg_dump_get_buffer() can be called again and used multiple times within the same dumper.dump() callback.h]hReset the dumper’s iterator so that kmsg_dump_get_line() and kmsg_dump_get_buffer() can be called again and used multiple times within the same dumper.dump() callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhj?ubeh}(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:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h__printk_cpu_sync_waith]j)}(h__printk_cpu_sync_waith]h__printk_cpu_sync_wait}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(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)}(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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjHhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjcjHjcjIjJjKuh1hhhhjhNhNubj)}(hB**Parameters** ``void`` no arguments **Context** Any context.h](jM)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.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:136: ./kernel/printk/printk.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjgubjM)}(h **Context**h]j)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjgubjM)}(h Any context.h]h Any context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjgubeh}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h__printk_cpu_sync_try_geth]j)}(h__printk_cpu_sync_try_geth]h__printk_cpu_sync_try_get}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h(void)h]j:)}(hvoidh]j)}(hvoidh]hvoid}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(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)}(h6Try to acquire the printk cpu-reentrant spinning lock.h]h6Try to acquire the printk cpu-reentrant spinning lock.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjphhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXX**Parameters** ``void`` no arguments **Description** If no processor has the lock, the calling processor takes the lock and becomes the owner. If the calling processor is already the owner of the lock, this function succeeds immediately. **Context** Any context. Expects interrupts to be disabled. **Return** 1 on success, otherwise 0.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]jS)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubjM)}(hIf no processor has the lock, the calling processor takes the lock and becomes the owner. If the calling processor is already the owner of the lock, this function succeeds immediately.h]hIf no processor has the lock, the calling processor takes the lock and becomes the owner. If the calling processor is already the owner of the lock, this function succeeds immediately.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h **Context**h]j)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h/Any context. Expects interrupts to be disabled.h]h/Any context. Expects interrupts to be disabled.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h **Return**h]j)}(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:136: ./kernel/printk/printk.chMhjubjM)}(h1 on success, otherwise 0.h]h1 on success, otherwise 0.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~hhhjhMubh)}(h__printk_cpu_sync_puth]j)}(h__printk_cpu_sync_puth]h__printk_cpu_sync_put}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhj~hhhjhMubj4)}(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&]jjuh1j3hj~hhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjzhhhjhMubah}(h]juah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjwhhubj4)}(hhh]jM)}(h/Release the printk cpu-reentrant spinning lock.h]h/Release the printk cpu-reentrant spinning lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjwhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(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:136: ./kernel/printk/printk.chMhjubj)}(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:136: ./kernel/printk/printk.chKhj$ubj)}(hhh]jM)}(h no argumentsh]h no arguments}(hjChhhNhNubah}(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&]uh1jhjubjM)}(h**Description**h]j)}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chKhjubjM)}(h4The calling processor must be the owner of the lock.h]h4The calling processor must be the owner of the lock.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h **Context**h]j)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubjM)}(h/Any context. Expects interrupts to be disabled.h]h/Any context. Expects interrupts to be disabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhY/var/lib/git/docbuild/linux/Documentation/driver-api/basics:136: ./kernel/printk/printk.chMhjubeh}(h]h ] kernelindentah"]h$]h&]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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM:ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM:ubh)}(hvpanich]j)}(hvpanich]hvpanic}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhM:ubj4)}(h(const char *fmt, va_list args)h](j:)}(hconst char *fmth](j?)}(hjP*h]hconst}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hcharh]hchar}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hfmth]hfmt}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h va_list argsh](h)}(hhh]j)}(hva_listh]hva_list}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjpmodnameN classnameNjwjz)}j}]j)}jsjsbc.vpanicasbuh1hhjgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjgubj)}(hargsh]hargs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubeh}(h]h ]h"]h$]h&]jjuh1j3hjhhhjhM:ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhM:ubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhM:hjhhubj4)}(hhh]jM)}(hhalt the systemh]hhalt the system}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM:hjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhM:ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``const char *fmt`` The text string to print ``va_list args`` Arguments for the format string **Description** Display a message, then perform cleanups. This function never returns.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM>hjubj)}(hhh](j)}(h-``const char *fmt`` The text string to print h](j)}(h``const char *fmt``h]jS)}(hjh]hconst char *fmt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM;hjubj)}(hhh]jM)}(hThe text string to printh]hThe text string to print}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjubj)}(h1``va_list args`` Arguments for the format string h](j)}(h``va_list args``h]jS)}(hj@h]h va_list args}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM<hj:ubj)}(hhh]jM)}(hArguments for the format stringh]hArguments for the format string}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjUhM<hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM<hjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj{h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM>hjubjM)}(hFDisplay a message, then perform cleanups. This function never returns.h]hFDisplay a message, then perform cleanups. This function never returns.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chM=hjubeh}(h]h ] kernelindentah"]h$]h&]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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(h add_tainth]j)}(h add_tainth]h add_taint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(h+(unsigned flag, enum lockdep_ok lockdep_ok)h](j:)}(h unsigned flagh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hflagh]hflag}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(henum lockdep_ok lockdep_okh](j?)}(hjAh]henum}(hj2hhhNhNubah}(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}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjRmodnameN classnameNjwjz)}j}]j)}jsjsb c.add_taintasbuh1hhj.ubjQ)}(h h]h }(hjphhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj)}(h lockdep_okh]h lockdep_ok}(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$add a taint flag if not already set.h]h$add a taint flag if not already set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX)**Parameters** ``unsigned flag`` one of the TAINT_* constants. ``enum lockdep_ok lockdep_ok`` whether lock debugging is still OK. **Description** If something bad has gone wrong, you'll want **lockdebug_ok** = false, but for some notewortht-but-not-corrupting cases, it can be set to true.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjubj)}(hhh](j)}(h0``unsigned flag`` one of the TAINT_* constants. h](j)}(h``unsigned flag``h]jS)}(hjh]h unsigned flag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjubj)}(hhh]jM)}(hone of the TAINT_* constants.h]hone of the TAINT_* constants.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hC``enum lockdep_ok lockdep_ok`` whether lock debugging is still OK. h](j)}(h``enum lockdep_ok lockdep_ok``h]jS)}(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:140: ./kernel/panic.chMhjubj)}(hhh]jM)}(h#whether lock debugging is still OK.h]h#whether lock debugging is still OK.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubeh}(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&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjubjM)}(hIf something bad has gone wrong, you'll want **lockdebug_ok** = false, but for some notewortht-but-not-corrupting cases, it can be set to true.h](h/If something bad has gone wrong, you’ll want }(hjshhhNhNubj)}(h**lockdebug_ok**h]h lockdebug_ok}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubhR = false, but for some notewortht-but-not-corrupting cases, it can be set to true.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhQ/var/lib/git/docbuild/linux/Documentation/driver-api/basics:140: ./kernel/panic.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]kernel-utility-functionsah ]h"]kernel utility functionsah$]h&]uh1hhhhhhhhKsubh)}(hhh](h)}(hDevice Resource Managementh]hDevice Resource Management}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h __devres_alloc_node (C function)c.__devres_alloc_nodehNtauh1hhjhhhNhNubh)}(hhh](h)}(hdvoid * __devres_alloc_node (dr_release_t release, size_t size, gfp_t gfp, int nid, const char *name)h]h)}(hbvoid *__devres_alloc_node(dr_release_t release, size_t size, gfp_t gfp, int nid, const char *name)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(h__devres_alloc_nodeh]j)}(h__devres_alloc_nodeh]h__devres_alloc_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(hI(dr_release_t release, size_t size, gfp_t gfp, int nid, const char *name)h](j:)}(hdr_release_t releaseh](h)}(hhh]j)}(h dr_release_th]h dr_release_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.__devres_alloc_nodeasbuh1hhjubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hreleaseh]hrelease}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjfmodnameN classnameNjwjz)}j}]j6c.__devres_alloc_nodeasbuh1hhj]ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj]ubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(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}]j6c.__devres_alloc_nodeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hint nidh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hnidh]hnid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hconst char *nameh](j?)}(hjP*h]hconst}(hj&hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj"ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hcharh]hchar}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hnameh]hname}(hjjhhhNhNubah}(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)}(hAllocate device resource datah]hAllocate device resource data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``dr_release_t release`` Release function devres will be associated with ``size_t size`` Allocation size ``gfp_t gfp`` Allocation flags ``int nid`` NUMA node ``const char *name`` Name of the resource **Description** Allocate devres of **size** bytes. The allocated area is zeroed, then associated with **release**. The returned pointer can be passed to other devres_*() functions. **Return** Pointer to allocated devres on success, NULL on failure.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh](j)}(hI``dr_release_t release`` Release function devres will be associated with h](j)}(h``dr_release_t release``h]jS)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(h/Release function devres will be associated withh]h/Release function devres will be associated with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``size_t size`` Allocation size h](j)}(h``size_t size``h]jS)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(hAllocation sizeh]hAllocation size}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj#hKhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hKhjubj)}(h``gfp_t gfp`` Allocation flags h](j)}(h ``gfp_t gfp``h]jS)}(hjGh]h gfp_t gfp}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjEubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjAubj)}(hhh]jM)}(hAllocation flagsh]hAllocation flags}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hKhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKhjubj)}(h``int nid`` NUMA node h](j)}(h ``int nid``h]jS)}(hjh]hint nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjzubj)}(hhh]jM)}(h NUMA nodeh]h NUMA node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h*``const char *name`` Name of the resource h](j)}(h``const char *name``h]jS)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(hName of the resourceh]hName of the resource}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(hAllocate devres of **size** bytes. The allocated area is zeroed, then associated with **release**. The returned pointer can be passed to other devres_*() functions.h](hAllocate devres of }(hj hhhNhNubj)}(h**size**h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh< bytes. The allocated area is zeroed, then associated with }(hj hhhNhNubj)}(h **release**h]hrelease}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhD. The returned pointer can be passed to other devres_*() functions.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(h **Return**h]j)}(hj?h]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(h8Pointer to allocated devres on success, NULL on failure.h]h8Pointer to allocated devres on success, NULL on failure.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h devres_for_each_res (C function)c.devres_for_each_reshNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid devres_for_each_res (struct device *dev, dr_release_t release, dr_match_t match, void *match_data, void (*fn)(struct device *, void *, void *), void *data)h]h)}(hvoid devres_for_each_res(struct device *dev, dr_release_t release, dr_match_t match, void *match_data, void (*fn)(struct device*, void*, void*), void *data)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubh)}(hdevres_for_each_resh]j)}(hdevres_for_each_resh]hdevres_for_each_res}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhKubj4)}(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*}(hj hhhNhNubah}(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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]jc.devres_for_each_resasbuh1hhj/ubjQ)}(h h]h }(hjThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hreleaseh]hrelease}(hjbhhhNhNubah}(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}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.devres_for_each_resasbuh1hhjwubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjwubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(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)}(hj6h]h(}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfnh]hfn}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h)}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj6h]h(}(hjVhhhNhNubah}(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)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.devres_for_each_resasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj7h]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)}(hj7h]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*}(hj hhhNhNubah}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hdatah]hdata}(hjYhhhNhNubah}(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'hj|hhhjhKubah}(h]jwah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhKhjyhhubj4)}(hhh]jM)}(hResource iteratorh]hResource iterator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjhhubah}(h]h ]h"]h$]h&]uh1j3hjyhhhjhKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX9**Parameters** ``struct device *dev`` Device to iterate resource from ``dr_release_t release`` Look for resources associated with this release function ``dr_match_t match`` Match function (optional) ``void *match_data`` Data for the match function ``void (*fn)(struct device *, void *, void *)`` Function to be called for each matched resource. ``void *data`` Data for **fn**, the 3rd parameter of **fn** **Description** Call **fn** for each devres of **dev** which is associated with **release** and for which **match** returns 1. **Return** voidh](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh](j)}(h7``struct device *dev`` Device to iterate resource from h](j)}(h``struct device *dev``h]jS)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(hDevice to iterate resource fromh]hDevice to iterate resource from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]jS)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(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)}(hj6h]hdr_match_t match}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj4ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj0ubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjKhKhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhKhjubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjoh]hvoid *match_data}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjmubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjiubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(ha``void (*fn)(struct device *, void *, void *)`` Function to be called for each matched resource. h](j)}(h/``void (*fn)(struct device *, void *, void *)``h]jS)}(hjh]h+void (*fn)(struct device *, void *, void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(h0Function to be called for each matched resource.h]h0Function to be called for each matched resource.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h<``void *data`` Data for **fn**, the 3rd parameter of **fn** h](j)}(h``void *data``h]jS)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubj)}(hhh]jM)}(h,Data for **fn**, the 3rd parameter of **fn**h](h Data for }(hjhhhNhNubj)}(h**fn**h]hfn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, the 3rd parameter of }(hjhhhNhNubj)}(h**fn**h]hfn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jLhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hj< h]h Description}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj: ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(hnCall **fn** for each devres of **dev** which is associated with **release** and for which **match** returns 1.h](hCall }(hjR hhhNhNubj)}(h**fn**h]hfn}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR ubh for each devres of }(hjR hhhNhNubj)}(h**dev**h]hdev}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR ubh which is associated with }(hjR hhhNhNubj)}(h **release**h]hrelease}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR ubh and for which }(hjR hhhNhNubj)}(h **match**h]hmatch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR ubh returns 1.}(hjR hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubjM)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_free (C function) c.devres_freehNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid devres_free (void *res)h]h)}(hvoid devres_free(void *res)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hKubh)}(h devres_freeh]j)}(h devres_freeh]h devres_free}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj hhhj hKubj4)}(h (void *res)h]j:)}(h void *resh](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*}(hjI hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj) ubj)}(hresh]hres}(hjV hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj) ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj% ubah}(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)}(hFree device resource datah]hFree device resource data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj} hhubah}(h]h ]h"]h$]h&]uh1j3hj hhhj hKubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj jHj jIjJjKuh1hhhhjhNhNubj)}(hy**Parameters** ``void *res`` Pointer to devres data to free **Description** Free devres created with devres_alloc().h](jM)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj ubj)}(hhh]j)}(h-``void *res`` Pointer to devres data to free h](j)}(h ``void *res``h]jS)}(hj h]h void *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:146: ./drivers/base/devres.chKhj ubj)}(hhh]jM)}(hPointer to devres data to freeh]hPointer to devres data to free}(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&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj ubjM)}(h(Free devres created with devres_alloc().h]h(Free devres created with devres_alloc().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_add (C function) c.devres_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void devres_add (struct device *dev, void *res)h]h)}(h.void devres_add(struct device *dev, void *res)h](j)}(hvoidh]hvoid}(hjA hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj= hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM ubjQ)}(h h]h }(hjP hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj= hhhjO hM ubh)}(h devres_addh]j)}(h devres_addh]h devres_add}(hjb hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj= hhhjO hM ubj4)}(h(struct device *dev, void *res)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 sb c.devres_addasbuh1hhjz 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:)}(h void *resh](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)}(hresh]hres}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjv ubeh}(h]h ]h"]h$]h&]jjuh1j3hj= hhhjO hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj9 hhhjO hM ubah}(h]j4 ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjO hM hj6 hhubj4)}(hhh]jM)}(hRegister device resourceh]hRegister device resource}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj@ hhubah}(h]h ]h"]h$]h&]uh1j3hj6 hhhjO hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj[ jHj[ jIjJjKuh1hhhhjhNhNubj)}(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)}(hje h]h Parameters}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj_ ubj)}(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&]uh1jRhj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj~ ubj)}(hhh]jM)}(hDevice to add resource toh]hDevice to add resource to}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj~ ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj{ ubj)}(h#``void *res`` Resource to register h](j)}(h ``void *res``h]jS)}(hj h]h void *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:146: ./drivers/base/devres.chMhj ubj)}(hhh]jM)}(hResource to registerh]hResource to register}(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:146: ./drivers/base/devres.chMhj_ ubjM)}(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 }(hj hhhNhNubj)}(h**res**h]hres}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to }(hj hhhNhNubj)}(h**dev**h]hdev}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh. }(hj hhhNhNubj)}(h**res**h]hres}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh should have been allocated using devres_alloc(). On driver detach, the associated release function will be invoked and devres will be freed automatically.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj_ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_find (C function) c.devres_findhNtauh1hhjhhhNhNubh)}(hhh](h)}(havoid * devres_find (struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h]h)}(h_void *devres_find(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j)}(hvoidh]hvoid}(hjs hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM2ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjo hhhj hM2ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo hhhj hM2ubh)}(h devres_findh]j)}(h devres_findh]h devres_find}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjo hhhj hM2ubj4)}(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 sb c.devres_findasbuh1hhj 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}(hjhhhNhNubah}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]j  c.devres_findasbuh1hhj+ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hreleaseh]hrelease}(hj^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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]j  c.devres_findasbuh1hhjsubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj ubj:)}(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&]noemphjjuh1j9hj ubeh}(h]h ]h"]h$]h&]jjuh1j3hjo hhhj hM2ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjk hhhj hM2ubah}(h]jf ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj hM2hjh hhubj4)}(hhh]jM)}(hFind device resourceh]hFind device resource}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM2hjhhubah}(h]h ]h"]h$]h&]uh1j3hjh hhhj hM2ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj*jHj*jIjJjKuh1hhhhjhNhNubj)}(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)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM6hj.ubj)}(hhh](j)}(h6``struct device *dev`` Device to lookup resource from h](j)}(h``struct device *dev``h]jS)}(hjSh]hstruct device *dev}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM3hjMubj)}(hhh]jM)}(hDevice to lookup resource fromh]hDevice to lookup resource from}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhM3hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhM3hjJubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]jS)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM4hjubj)}(hhh]jM)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjJubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]jS)}(hjh]hdr_match_t match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM5hjubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjJubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjh]hvoid *match_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM6hjubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubjM)}(h**Description**h]j)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM8hj.ubjM)}(hFind the latest devres of **dev** which is associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all.h](hFind the latest devres of }(hjOhhhNhNubj)}(h**dev**h]hdev}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh which is associated with }(hjOhhhNhNubj)}(h **release**h]hrelease}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh and for which }(hjOhhhNhNubj)}(h **match**h]hmatch}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh returns 1. If }(hjOhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh) is NULL, it’s considered to match all.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM7hj.ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM;hj.ubjM)}(h+Pointer to found devres, NULL if not found.h]h+Pointer to found devres, NULL if not found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM<hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_get (C function) c.devres_gethNtauh1hhjhhhNhNubh)}(hhh](h)}(hYvoid * devres_get (struct device *dev, void *new_res, dr_match_t match, void *match_data)h]h)}(hWvoid *devres_get(struct device *dev, void *new_res, dr_match_t match, void *match_data)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMNubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMNubj)}(hjh]h*}(hj hhhNhNubah}(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}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj3ubjQ)}(h h]h }(hjDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubh)}(hhh]j)}(hdeviceh]hdevice}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjWmodnameN classnameNjwjz)}j}]j)}jsjsb c.devres_getasbuh1hhj3ubjQ)}(h h]h }(hjuhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubj:)}(h void *new_resh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnew_resh]hnew_res}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubj:)}(hdr_match_t matchh](h)}(hhh]j)}(h dr_match_th]h dr_match_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jq c.devres_getasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj/ubj:)}(hvoid *match_datah](j)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj)}(hjh]h*}(hjOhhhNhNubah}(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&]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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMNhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMNubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct device *dev`` Device to lookup or add devres for ``void *new_res`` Pointer to new initialized devres to add if not found ``dr_match_t match`` Match function (optional) ``void *match_data`` Data for the match function **Description** Find the latest devres of **dev** which has the same release function as **new_res** and for which **match** return 1. If found, **new_res** is freed; otherwise, **new_res** is added atomically. **Return** Pointer to found or added devres.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMRhjubj)}(hhh](j)}(h:``struct device *dev`` Device to lookup or add devres for h](j)}(h``struct device *dev``h]jS)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMOhjubj)}(hhh]jM)}(h"Device to lookup or add devres forh]h"Device to lookup or add devres for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubj)}(hH``void *new_res`` Pointer to new initialized devres to add if not found h](j)}(h``void *new_res``h]jS)}(hjh]h void *new_res}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMPhjubj)}(hhh]jM)}(h5Pointer to new initialized devres to add if not foundh]h5Pointer to new initialized devres to add if not found}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]jS)}(hj9h]hdr_match_t match}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj7ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMQhj3ubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjNhMQhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMQhjubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjrh]hvoid *match_data}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjpubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMRhjlubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubeh}(h]h ]h"]h$]h&]uh1jhjubjM)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMThjubjM)}(hFind the latest devres of **dev** which has the same release function as **new_res** and for which **match** return 1. If found, **new_res** is freed; otherwise, **new_res** is added atomically.h](hFind the latest devres of }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh( which has the same release function as }(hjhhhNhNubj)}(h **new_res**h]hnew_res}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and for which }(hjhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh return 1. If found, }(hjhhhNhNubj)}(h **new_res**h]hnew_res}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is freed; otherwise, }(hjhhhNhNubj)}(h **new_res**h]hnew_res}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is added atomically.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMShjubjM)}(h **Return**h]j)}(hj.h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMWhjubjM)}(h!Pointer to found or added devres.h]h!Pointer to found or added devres.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMXhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_remove (C function)c.devres_removehNtauh1hhjhhhNhNubh)}(hhh](h)}(hcvoid * devres_remove (struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h]h)}(havoid *devres_remove(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j)}(hvoidh]hvoid}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjohhhjhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjhMubh)}(h devres_removeh]j)}(h devres_removeh]h devres_remove}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjohhhjhMubj4)}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.devres_removeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hj hhhNhNubah}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4modnameN classnameNjwjz)}j}]jc.devres_removeasbuh1hhj+ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hreleaseh]hrelease}(hj^hhhNhNubah}(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}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj|modnameN classnameNjwjz)}j}]jc.devres_removeasbuh1hhjsubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(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&]jjuh1j3hjohhhjhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjkhhhjhMubah}(h]jfah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMhjhhhubj4)}(hhh]jM)}(h$Find a device resource and remove ith]h$Find a device resource and remove it}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hjhhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj*jHj*jIjJjKuh1hhhhjhNhNubj)}(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)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj.ubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from h](j)}(h``struct device *dev``h]jS)}(hjSh]hstruct device *dev}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjQubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjMubj)}(hhh]jM)}(hDevice to find resource fromh]hDevice to find resource from}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjJubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]jS)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]jS)}(hjh]hdr_match_t match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjh]hvoid *match_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubjM)}(h**Description**h]j)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.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 }(hjOhhhNhNubj)}(h**dev**h]hdev}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh associated with }(hjOhhhNhNubj)}(h **release**h]hrelease}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh and for which }(hjOhhhNhNubj)}(h **match**h]hmatch}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh returns 1. If }(hjOhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubhe is NULL, it’s considered to match all. If found, the resource is removed atomically and returned.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj.ubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj.ubjM)}(h8Pointer to removed devres on success, NULL if not found.h]h8Pointer to removed devres on success, NULL if not found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_destroy (C function)c.devres_destroyhNtauh1hhjhhhNhNubh)}(hhh](h)}(haint devres_destroy (struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h]h)}(h`int devres_destroy(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubh)}(hdevres_destroyh]j)}(hdevres_destroyh]hdevres_destroy}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMubj4)}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj*hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj&ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubh)}(hhh]j)}(hdeviceh]hdevice}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjJmodnameN classnameNjwjz)}j}]j)}jsjsbc.devres_destroyasbuh1hhj&ubjQ)}(h h]h }(hjhhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubj:)}(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}]jdc.devres_destroyasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hreleaseh]hrelease}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubj:)}(hdr_match_t matchh](h)}(hhh]j)}(h dr_match_th]h dr_match_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jdc.devres_destroyasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h match_datah]h match_data}(hjUhhhNhNubah}(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%Find a device resource and destroy ith]h%Find a device resource and destroy it}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj|hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct device *dev`` Device to find resource from ``dr_release_t release`` Look for resources associated with this release function ``dr_match_t match`` Match function (optional) ``void *match_data`` Data for the match function **Description** Find the latest devres of **dev** associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all. If found, the resource is removed atomically and freed. Note that the release function for the resource will not be called, only the devres-allocated data will be freed. The caller becomes responsible for freeing any other data. **Return** 0 if devres is found and freed, -ENOENT if not found.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh](j)}(h4``struct device *dev`` Device to find resource from h](j)}(h``struct device *dev``h]jS)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hDevice to find resource fromh]hDevice to find resource from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]jS)}(hjh]hdr_release_t release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]jS)}(hj2h]hdr_match_t match}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj,ubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjkh]hvoid *match_data}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjiubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjeubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(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&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubjM)}(hFind the latest devres of **dev** associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all. If found, the resource is removed atomically and freed.h](hFind the latest devres of }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh associated with }(hjhhhNhNubj)}(h **release**h]hrelease}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and for which }(hjhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh returns 1. If }(hjhhhNhNubj)}(h **match**h]hmatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhb is NULL, it’s considered to match all. If found, the resource is removed atomically and freed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubjM)}(hNote that the release function for the resource will not be called, only the devres-allocated data will be freed. The caller becomes responsible for freeing any other data.h]hNote that the release function for the resource will not be called, only the devres-allocated data will be freed. The caller becomes responsible for freeing any other data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubjM)}(h **Return**h]j)}(hj$h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubjM)}(h50 if devres is found and freed, -ENOENT if not found.h]h50 if devres is found and freed, -ENOENT if not found.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_release (C function)c.devres_releasehNtauh1hhjhhhNhNubh)}(hhh](h)}(haint devres_release (struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h]h)}(h`int devres_release(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjxhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjehhhjwhMubh)}(hdevres_releaseh]j)}(hdevres_releaseh]hdevres_release}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjehhhjwhMubj4)}(hN(struct device *dev, dr_release_t release, dr_match_t match, void *match_data)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]j)}jsjsbc.devres_releaseasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hdr_release_t releaseh](h)}(hhh]j)}(h dr_release_th]h dr_release_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.devres_releaseasbuh1hhjubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hreleaseh]hrelease}(hjGhhhNhNubah}(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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjemodnameN classnameNjwjz)}j}]jc.devres_releaseasbuh1hhj\ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\ubj)}(hmatchh]hmatch}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(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&]jjuh1j3hjehhhjwhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjahhhjwhMubah}(h]j\ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjwhMhj^hhubj4)}(hhh]jM)}(h6Find a device resource and destroy it, calling releaseh]h6Find a device resource and destroy it, calling release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjhhubah}(h]h ]h"]h$]h&]uh1j3hj^hhhjwhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjjHjjIjJjKuh1hhhhjhNhNubj)}(hXN**Parameters** ``struct device *dev`` Device to find resource from ``dr_release_t release`` Look for resources associated with this release function ``dr_match_t match`` Match function (optional) ``void *match_data`` Data for the match function **Description** Find the latest devres of **dev** associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all. If found, the resource is removed atomically, the release function called and the resource freed. **Return** 0 if devres is found and freed, -ENOENT if not found.h](jM)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(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:146: ./drivers/base/devres.chMhj6ubj)}(hhh]jM)}(hDevice to find resource fromh]hDevice to find resource from}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3ubj)}(hR``dr_release_t release`` Look for resources associated with this release function h](j)}(h``dr_release_t release``h]jS)}(hjuh]hdr_release_t release}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjsubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjoubj)}(hhh]jM)}(h8Look for resources associated with this release functionh]h8Look for resources associated with this release function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubj)}(h/``dr_match_t match`` Match function (optional) h](j)}(h``dr_match_t match``h]jS)}(hjh]hdr_match_t match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hMatch function (optional)h]hMatch function (optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubj)}(h1``void *match_data`` Data for the match function h](j)}(h``void *match_data``h]jS)}(hjh]hvoid *match_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubj)}(hhh]jM)}(hData for the match functionh]hData for the match function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubeh}(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&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubjM)}(hFind the latest devres of **dev** associated with **release** and for which **match** returns 1. If **match** is NULL, it's considered to match all. If found, the resource is removed atomically, the release function called and the resource freed.h](hFind the latest devres of }(hj8hhhNhNubj)}(h**dev**h]hdev}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh associated with }(hj8hhhNhNubj)}(h **release**h]hrelease}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh and for which }(hj8hhhNhNubj)}(h **match**h]hmatch}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh returns 1. If }(hj8hhhNhNubj)}(h **match**h]hmatch}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh is NULL, it’s considered to match all. If found, the resource is removed atomically, the release function called and the resource freed.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubjM)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubjM)}(h50 if devres is found and freed, -ENOENT if not found.h]h50 if devres is found and freed, -ENOENT if not found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_open_group (C function)c.devres_open_grouphNtauh1hhjhhhNhNubh)}(hhh](h)}(hBvoid * devres_open_group (struct device *dev, void *id, gfp_t gfp)h]h)}(h@void *devres_open_group(struct device *dev, void *id, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMLubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMLubh)}(hdevres_open_grouph]j)}(hdevres_open_grouph]hdevres_open_group}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1hhjhhhjhMLubj4)}(h)(struct device *dev, void *id, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj@modnameN classnameNjwjz)}j}]j)}jsjsbc.devres_open_groupasbuh1hhjubjQ)}(h h]h }(hj^hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjubj:)}(hvoid *idh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hidh]hid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]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}]jZc.devres_open_groupasbuh1hhjubjQ)}(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&]jjuh1j3hjhhhjhMLubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjhhhjhMLubah}(h]jah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjhMLhjhhubj4)}(hhh]jM)}(hOpen a new devres grouph]hOpen a new devres group}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMLhj* hhubah}(h]h ]h"]h$]h&]uh1j3hjhhhjhMLubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjE jHjE jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct device *dev`` Device to open devres group for ``void *id`` Separator ID ``gfp_t gfp`` Allocation flags **Description** Open a new devres group for **dev** with **id**. For **id**, using a pointer to an object which won't be used for another group is recommended. If **id** is NULL, address-wise unique ID is created. **Return** ID of the new group, NULL on failure.h](jM)}(h**Parameters**h]j)}(hjO h]h Parameters}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMPhjI ubj)}(hhh](j)}(h7``struct device *dev`` Device to open devres group for h](j)}(h``struct device *dev``h]jS)}(hjn h]hstruct device *dev}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjl ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMMhjh 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&]uh1jhjh ubeh}(h]h ]h"]h$]h&]uh1jhj hMMhje 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:146: ./drivers/base/devres.chMNhj ubj)}(hhh]jM)}(h Separator IDh]h Separator ID}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj hMNhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMNhje 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:146: ./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 hMOhje 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&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMQhjI 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 }(hj1!hhhNhNubj)}(h**dev**h]hdev}(hj9!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1!ubh with }(hj1!hhhNhNubj)}(h**id**h]hid}(hjK!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1!ubh. For }(hj1!hhhNhNubj)}(h**id**h]hid}(hj]!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1!ubh[, using a pointer to an object which won’t be used for another group is recommended. If }(hj1!hhhNhNubj)}(h**id**h]hid}(hjo!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1!ubh, is NULL, address-wise unique ID is created.}(hj1!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMPhjI ubjM)}(h **Return**h]j)}(hj!h]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMThjI ubjM)}(h%ID of the new group, NULL on failure.h]h%ID of the new group, NULL on failure.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMUhjI ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevres_close_group (C function)c.devres_close_grouphNtauh1hhjhhhNhNubh)}(hhh](h)}(h6void devres_close_group (struct device *dev, void *id)h]h)}(h5void devres_close_group(struct device *dev, void *id)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj!hMubh)}(hdevres_close_grouph]j)}(hdevres_close_grouph]hdevres_close_group}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj!hhhj!hMubj4)}(h(struct device *dev, void *id)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj "hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj"ubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubh)}(hhh]j)}(hdeviceh]hdevice}(hj*"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'"ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj,"modnameN classnameNjwjz)}j}]j)}jsj!sbc.devres_close_groupasbuh1hhj"ubjQ)}(h h]h }(hjJ"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj)}(hjh]h*}(hjX"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hdevh]hdev}(hje"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubj:)}(hvoid *idh](j)}(hvoidh]hvoid}(hj~"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz"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)}(hidh]hid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj"ubeh}(h]h ]h"]h$]h&]jjuh1j3hj!hhhj!hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj!hhhj!hMubah}(h]j!ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj!hMhj!hhubj4)}(hhh]jM)}(hClose a devres grouph]hClose a devres group}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj"hhubah}(h]h ]h"]h$]h&]uh1j3hj!hhhj!hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj"jHj"jIjJjKuh1hhhhjhNhNubj)}(h**Parameters** ``struct device *dev`` Device to close devres group for ``void *id`` ID of target group, can be NULL **Description** Close the group identified by **id**. If **id** is NULL, the latest open group is selected.h](jM)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj"ubj)}(hhh](j)}(h8``struct device *dev`` Device to close devres group for h](j)}(h``struct device *dev``h]jS)}(hj#h]hstruct device *dev}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj#ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj #ubj)}(hhh]jM)}(h Device to close devres group forh]h Device to close devres group for}(hj+#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj'#hMhj(#ubah}(h]h ]h"]h$]h&]uh1jhj #ubeh}(h]h ]h"]h$]h&]uh1jhj'#hMhj #ubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]jS)}(hjK#h]hvoid *id}(hjM#hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjI#ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjE#ubj)}(hhh]jM)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hjd#hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj`#hMhja#ubah}(h]h ]h"]h$]h&]uh1jhjE#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:146: ./drivers/base/devres.chMhj"ubjM)}(h\Close the group identified by **id**. If **id** is NULL, the latest open group is selected.h](hClose the group identified by }(hj#hhhNhNubj)}(h**id**h]hid}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh. If }(hj#hhhNhNubj)}(h**id**h]hid}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh, is NULL, the latest open group is selected.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h devres_remove_group (C function)c.devres_remove_grouphNtauh1hhjhhhNhNubh)}(hhh](h)}(h7void devres_remove_group (struct device *dev, void *id)h]h)}(h6void devres_remove_group(struct device *dev, void *id)h](j)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#hhhj#hMubh)}(hdevres_remove_grouph]j)}(hdevres_remove_grouph]hdevres_remove_group}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj $ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj#hhhj#hMubj4)}(h(struct device *dev, void *id)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj,$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj($ubjQ)}(h h]h }(hj9$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj($ubh)}(hhh]j)}(hdeviceh]hdevice}(hjJ$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG$ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjL$modnameN classnameNjwjz)}j}]j)}jsj$sbc.devres_remove_groupasbuh1hhj($ubjQ)}(h h]h }(hjj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj($ubj)}(hjh]h*}(hjx$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj($ubj)}(hdevh]hdev}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj($ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj$$ubj:)}(hvoid *idh](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hidh]hid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj$$ubeh}(h]h ]h"]h$]h&]jjuh1j3hj#hhhj#hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj#hhhj#hMubah}(h]j#ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj#hMhj#hhubj4)}(hhh]jM)}(hRemove a devres grouph]hRemove a devres group}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj$hhubah}(h]h ]h"]h$]h&]uh1j3hj#hhhj#hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj %jHj %jIjJjKuh1hhhhjhNhNubj)}(hX#**Parameters** ``struct device *dev`` Device to remove group for ``void *id`` ID of target group, can be NULL **Description** Remove the group identified by **id**. If **id** is NULL, the latest open group is selected. Note that removing a group doesn't affect any other resources.h](jM)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj %ubj)}(hhh](j)}(h2``struct device *dev`` Device to remove group for h](j)}(h``struct device *dev``h]jS)}(hj2%h]hstruct device *dev}(hj4%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj0%ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj,%ubj)}(hhh]jM)}(hDevice to remove group forh]hDevice to remove group for}(hjK%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjG%hMhjH%ubah}(h]h ]h"]h$]h&]uh1jhj,%ubeh}(h]h ]h"]h$]h&]uh1jhjG%hMhj)%ubj)}(h-``void *id`` ID of target group, can be NULL h](j)}(h ``void *id``h]jS)}(hjk%h]hvoid *id}(hjm%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhji%ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhje%ubj)}(hhh]jM)}(hID of target group, can be NULLh]hID of target group, can be NULL}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhje%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:146: ./drivers/base/devres.chMhj %ubjM)}(hRemove the group identified by **id**. If **id** is NULL, the latest open group is selected. Note that removing a group doesn't affect any other resources.h](hRemove the group identified by }(hj%hhhNhNubj)}(h**id**h]hid}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh. If }(hj%hhhNhNubj)}(h**id**h]hid}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubhn is NULL, the latest open group is selected. Note that removing a group doesn’t affect any other resources.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj %ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!devres_release_group (C function)c.devres_release_grouphNtauh1hhjhhhNhNubh)}(hhh](h)}(h7int devres_release_group (struct device *dev, void *id)h]h)}(h6int devres_release_group(struct device *dev, void *id)h](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj &hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj &hhhj&hMubh)}(hdevres_release_grouph]j)}(hdevres_release_grouph]hdevres_release_group}(hj0&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}(hjL&hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjH&ubjQ)}(h h]h }(hjY&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjH&ubh)}(hhh]j)}(hdeviceh]hdevice}(hjj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg&ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjl&modnameN classnameNjwjz)}j}]j)}jsj2&sbc.devres_release_groupasbuh1hhjH&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjH&ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH&ubj)}(hdevh]hdev}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjD&ubj:)}(hvoid *idh](j)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hidh]hid}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjD&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#Release resources in a devres grouph]h#Release resources in a devres group}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj'hhubah}(h]h ]h"]h$]h&]uh1j3hj&hhhj&hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj)'jHj)'jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct device *dev`` Device to 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)}(hj3'h]h Parameters}(hj5'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1'ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj-'ubj)}(hhh](j)}(h3``struct device *dev`` Device to release group for h](j)}(h``struct device *dev``h]jS)}(hjR'h]hstruct device *dev}(hjT'hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjP'ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjL'ubj)}(hhh]jM)}(hDevice to release group forh]hDevice to release group for}(hjk'hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjg'hMhjh'ubah}(h]h ]h"]h$]h&]uh1jhjL'ubeh}(h]h ]h"]h$]h&]uh1jhjg'hMhjI'ubj)}(h-``void *id`` ID of target group, can be NULL 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:146: ./drivers/base/devres.chMhj'ubj)}(hhh]jM)}(hID of target group, can be NULLh]hID of target group, can be NULL}(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&]uh1jhj-'ubjM)}(h**Description**h]j)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj-'ubjM)}(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 }(hj'hhhNhNubj)}(h**id**h]hid}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh. If }(hj'hhhNhNubj)}(h**id**h]hid}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh is NULL, the latest open group is selected. The selected group and groups properly nested inside the selected group are removed.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj-'ubjM)}(h **Return**h]j)}(hj(h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj-'ubjM)}(h+The number of released non-group resources.h]h+The number of released non-group resources.}(hj'(hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj-'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__devm_add_action (C function)c.__devm_add_actionhNtauh1hhjhhhNhNubh)}(hhh](h)}(h`int __devm_add_action (struct device *dev, void (*action)(void *), void *data, const char *name)h]h)}(h^int __devm_add_action(struct device *dev, void (*action)(void*), void *data, const char *name)h](j)}(hinth]hint}(hjV(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR(hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM ubjQ)}(h h]h }(hje(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjR(hhhjd(hM ubh)}(h__devm_add_actionh]j)}(h__devm_add_actionh]h__devm_add_action}(hjw(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs(ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjR(hhhjd(hM ubj4)}(hI(struct device *dev, void (*action)(void*), void *data, const char *name)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)}jsjy(sbc.__devm_add_actionasbuh1hhj(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:)}(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)}(hj6h]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)}(hjI)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hj6h]h(}(hjV)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hvoidh]hvoid}(hjc)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hjh]h*}(hjq)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*}(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&]noemphjjuh1j9hj(ubj:)}(hconst char *nameh](j?)}(hjP*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)}(hnameh]hname}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj(ubeh}(h]h ]h"]h$]h&]jjuh1j3hjR(hhhjd(hM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjN(hhhjd(hM ubah}(h]jI(ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjd(hM hjK(hhubj4)}(hhh]jM)}(h0add a custom action to list of managed resourcesh]h0add a custom action to list of managed resources}(hjF*hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hjC*hhubah}(h]h ]h"]h$]h&]uh1j3hjK(hhhjd(hM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj^*jHj^*jIjJjKuh1hhhhjhNhNubj)}(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)}(hjh*h]h Parameters}(hjj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf*ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjb*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:146: ./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 that should be called 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:146: ./drivers/base/devres.chMhj*ubj)}(hhh]jM)}(hFunction that should be calledh]hFunction that should be called}(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:146: ./drivers/base/devres.chMhj*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+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj~*ubj)}(hC``const char *name`` Name of the resource (for debugging purposes) h](j)}(h``const char *name``h]jS)}(hjD+h]hconst char *name}(hjF+hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjB+ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj>+ubj)}(hhh]jM)}(h-Name of the resource (for debugging purposes)h]h-Name of the resource (for debugging purposes)}(hj]+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjY+hMhjZ+ubah}(h]h ]h"]h$]h&]uh1jhj>+ubeh}(h]h ]h"]h$]h&]uh1jhjY+hMhj~*ubeh}(h]h ]h"]h$]h&]uh1jhjb*ubjM)}(h**Description**h]j)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}+ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjb*ubjM)}(h{This adds a custom action to the list of managed resources so that it gets executed as part of standard resource unwinding.h]h{This adds a custom action to the list of managed resources so that it gets executed as part of standard resource unwinding.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjb*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&devm_remove_action_nowarn (C function)c.devm_remove_action_nowarnhNtauh1hhjhhhNhNubh)}(hhh](h)}(hVint devm_remove_action_nowarn (struct device *dev, void (*action)(void *), void *data)h]h)}(hTint devm_remove_action_nowarn(struct device *dev, void (*action)(void*), void *data)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMZubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+hhhj+hMZubh)}(hdevm_remove_action_nowarnh]j)}(hdevm_remove_action_nowarnh]hdevm_remove_action_nowarn}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj+hhhj+hMZubj4)}(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}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj!,modnameN classnameNjwjz)}j}]j)}jsj+sbc.devm_remove_action_nowarnasbuh1hhj+ubjQ)}(h h]h }(hj?,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj)}(hjh]h*}(hjM,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hdevh]hdev}(hjZ,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj+ubj:)}(hvoid (*action)(void*)h](j)}(hvoidh]hvoid}(hjs,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo,ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjo,ubj)}(hj6h]h(}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo,ubj)}(hactionh]haction}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo,ubj)}(hjh]h)}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo,ubj)}(hj6h]h(}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo,ubj)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo,ubj)}(hjh]h)}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo,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*}(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&]noemphjjuh1j9hj+ubeh}(h]h ]h"]h$]h&]jjuh1j3hj+hhhj+hMZubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj+hhhj+hMZubah}(h]j+ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj+hMZhj+hhubj4)}(hhh]jM)}(h&removes previously added custom actionh]h&removes previously added custom action}(hjW-hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMZhjT-hhubah}(h]h ]h"]h$]h&]uh1j3hj+hhhj+hMZubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjo-jHjo-jIjJjKuh1hhhhjhNhNubj)}(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)}(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:146: ./drivers/base/devres.chM^hjs-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:146: ./drivers/base/devres.chM[hj-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&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hM[hj-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:146: ./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\hj-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:146: ./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]hj-ubeh}(h]h ]h"]h$]h&]uh1jhjs-ubjM)}(h**Description**h]j)}(hjW.h]h Description}(hjY.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU.ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM_hjs-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 }(hjm.hhhNhNubj)}(h **action**h]haction}(hju.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm.ubhf previously added by devm_add_action(). Both action and data should match one of the existing entries.}(hjm.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM^hjs-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.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMahjs-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.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMdhjs-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:146: ./drivers/base/devres.chMghjs-ubjM)}(h **Return**h]j)}(hj.h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMjhjs-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:146: ./drivers/base/devres.chMkhjs-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h devm_release_action (C function)c.devm_release_actionhNtauh1hhjhhhNhNubh)}(hhh](h)}(hQvoid devm_release_action (struct device *dev, void (*action)(void *), void *data)h]h)}(hOvoid devm_release_action(struct device *dev, void (*action)(void*), void *data)h](j)}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./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 }(hjL/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;/ubh)}(hhh]j)}(hdeviceh]hdevice}(hj]/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ/ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj_/modnameN classnameNjwjz)}j}]j)}jsj%/sbc.devm_release_actionasbuh1hhj;/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&]noemphjjuh1j9hj7/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)}(hj6h]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)}(hj6h]h(}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]h)}(hj*0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7/ubj:)}(h void *datah](j)}(hvoidh]hvoid}(hjB0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>0ubjQ)}(h h]h }(hjP0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>0ubj)}(hjh]h*}(hj^0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>0ubj)}(hdatah]hdata}(hjk0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj7/ubeh}(h]h ]h"]h$]h&]jjuh1j3hj.hhhj/hM~ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj.hhhj/hM~ubah}(h]j.ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj/hM~hj.hhubj4)}(hhh]jM)}(h&release previously added custom actionh]h&release previously added custom action}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM~hj0hhubah}(h]h ]h"]h$]h&]uh1j3hj.hhhj/hM~ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj0jHj0jIjJjKuh1hhhhjhNhNubj)}(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)}(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:146: ./drivers/base/devres.chMhj0ubj)}(hhh](j)}(h3``struct device *dev`` Device that owns the action 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:146: ./drivers/base/devres.chMhj0ubj)}(hhh]jM)}(hDevice that owns the actionh]hDevice that owns the action}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj0ubj)}(h<``void (*action)(void *)`` Function implementing the action h](j)}(h``void (*action)(void *)``h]jS)}(hj1h]hvoid (*action)(void *)}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 1ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj 1ubj)}(hhh]jM)}(h Function implementing the actionh]h Function implementing the action}(hj(1hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj$1hMhj%1ubah}(h]h ]h"]h$]h&]uh1jhj 1ubeh}(h]h ]h"]h$]h&]uh1jhj$1hMhj0ubj)}(hC``void *data`` Pointer to data passed to **action** implementation h](j)}(h``void *data``h]jS)}(hjH1h]h void *data}(hjJ1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjF1ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjB1ubj)}(hhh]jM)}(h3Pointer to data passed to **action** implementationh](hPointer to data passed to }(hja1hhhNhNubj)}(h **action**h]haction}(hji1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja1ubh implementation}(hja1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhj]1hMhj^1ubah}(h]h ]h"]h$]h&]uh1jhjB1ubeh}(h]h ]h"]h$]h&]uh1jhj]1hMhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubjM)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj0ubjM)}(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 }(hj1hhhNhNubj)}(h **action**h]haction}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubhg previously added by devm_add_action(). Both action and data should match one of the existing entries.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kmalloc (C function)c.devm_kmallochNtauh1hhjhhhNhNubh)}(hhh](h)}(h@void * devm_kmalloc (struct device *dev, size_t size, gfp_t gfp)h]h)}(h>void *devm_kmalloc(struct device *dev, size_t size, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1hhhj1hMubj)}(hjh]h*}(hj 2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj1hMubh)}(h devm_kmalloch]j)}(h devm_kmalloch]h devm_kmalloc}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj1hhhj1hMubj4)}(h,(struct device *dev, size_t size, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj62hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj22ubjQ)}(h h]h }(hjC2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj22ubh)}(hhh]j)}(hdeviceh]hdevice}(hjT2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjV2modnameN classnameNjwjz)}j}]j)}jsj2sbc.devm_kmallocasbuh1hhj22ubjQ)}(h h]h }(hjt2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj22ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj22ubj)}(hdevh]hdev}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj22ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.2ubj:)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]jp2c.devm_kmallocasbuh1hhj2ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hsizeh]hsize}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.2ubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj2modnameN classnameNjwjz)}j}]jp2c.devm_kmallocasbuh1hhj2ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj)}(hgfph]hgfp}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj.2ubeh}(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)}(hResource-managed kmalloch]hResource-managed kmalloc}(hjI3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjF3hhubah}(h]h ]h"]h$]h&]uh1j3hj1hhhj1hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGja3jHja3jIjJjKuh1hhhhjhNhNubj)}(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)}(hjk3h]h Parameters}(hjm3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji3ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhje3ubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hj3h]hstruct device *dev}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj3ubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj3ubj)}(h ``size_t size`` Allocation size h](j)}(h``size_t size``h]jS)}(hj3h]h size_t size}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj3ubj)}(hhh]jM)}(hAllocation sizeh]hAllocation size}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj3ubj)}(h#``gfp_t gfp`` Allocation gfp flags h](j)}(h ``gfp_t gfp``h]jS)}(hj3h]h gfp_t gfp}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj3ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj3ubj)}(hhh]jM)}(hAllocation gfp flagsh]hAllocation gfp flags}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj3ubeh}(h]h ]h"]h$]h&]uh1jhje3ubjM)}(h**Description**h]j)}(hj74h]h Description}(hj94hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj54ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhje3ubjM)}(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.}(hjM4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhje3ubjM)}(h **Return**h]j)}(hj^4h]hReturn}(hj`4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\4ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhje3ubjM)}(h8Pointer to allocated memory on success, NULL on failure.h]h8Pointer to allocated memory on success, NULL on failure.}(hjt4hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhje3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_krealloc (C function)c.devm_kreallochNtauh1hhjhhhNhNubh)}(hhh](h)}(hPvoid * devm_krealloc (struct device *dev, void *ptr, size_t new_size, gfp_t gfp)h]h)}(hNvoid *devm_krealloc(struct device *dev, void *ptr, size_t new_size, gfp_t gfp)h](j)}(hvoidh]hvoid}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4hhhj4hMubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hMubh)}(h devm_krealloch]j)}(h devm_krealloch]h devm_krealloc}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj4hhhj4hMubj4)}(h;(struct device *dev, void *ptr, size_t new_size, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj4hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubh)}(hhh]j)}(hdeviceh]hdevice}(hj 5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj 5modnameN classnameNjwjz)}j}]j)}jsj4sbc.devm_kreallocasbuh1hhj4ubjQ)}(h h]h }(hj+5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj)}(hjh]h*}(hj95hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hdevh]hdev}(hjF5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubj:)}(h void *ptrh](j)}(hvoidh]hvoid}(hj_5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[5ubjQ)}(h h]h }(hjm5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[5ubj)}(hjh]h*}(hj{5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[5ubj)}(hptrh]hptr}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubj:)}(hsize_t new_sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j'5c.devm_kreallocasbuh1hhj5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hnew_sizeh]hnew_size}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj5modnameN classnameNjwjz)}j}]j'5c.devm_kreallocasbuh1hhj5ubjQ)}(h h]h }(hj 6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj)}(hgfph]hgfp}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj4ubeh}(h]h ]h"]h$]h&]jjuh1j3hj4hhhj4hMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj4hhhj4hMubah}(h]j4ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj4hMhj4hhubj4)}(hhh]jM)}(hResource-managed krealloc()h]hResource-managed krealloc()}(hjB6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj?6hhubah}(h]h ]h"]h$]h&]uh1j3hj4hhhj4hMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjZ6jHjZ6jIjJjKuh1hhhhjhNhNubj)}(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)}(hjd6h]h Parameters}(hjf6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb6ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj^6ubj)}(hhh](j)}(h8``struct device *dev`` Device to re-allocate memory for h](j)}(h``struct device *dev``h]jS)}(hj6h]hstruct device *dev}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj}6ubj)}(hhh]jM)}(h Device to re-allocate memory forh]h Device to re-allocate memory for}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj}6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjz6ubj)}(h9``void *ptr`` Pointer to the memory chunk to re-allocate h](j)}(h ``void *ptr``h]jS)}(hj6h]h void *ptr}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj6ubj)}(hhh]jM)}(h*Pointer to the memory chunk to re-allocateh]h*Pointer to the memory chunk to re-allocate}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjz6ubj)}(h(``size_t new_size`` New allocation size h](j)}(h``size_t new_size``h]jS)}(hj6h]hsize_t new_size}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj6ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj6ubj)}(hhh]jM)}(hNew allocation sizeh]hNew allocation size}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj 7hMhj 7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj 7hMhjz6ubj)}(h#``gfp_t gfp`` Allocation gfp flags h](j)}(h ``gfp_t gfp``h]jS)}(hj.7h]h gfp_t gfp}(hj07hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,7ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj(7ubj)}(hhh]jM)}(hAllocation gfp flagsh]hAllocation gfp flags}(hjG7hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjC7hMhjD7ubah}(h]h ]h"]h$]h&]uh1jhj(7ubeh}(h]h ]h"]h$]h&]uh1jhjC7hMhjz6ubeh}(h]h ]h"]h$]h&]uh1jhj^6ubjM)}(h**Description**h]j)}(hji7h]h Description}(hjk7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg7ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj^6ubjM)}(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 }(hj7hhhNhNubj)}(h**ptr**h]hptr}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubhX is NULL or ZERO_SIZE_PTR, it’s the equivalent of devm_kmalloc(). If new_size is zero, it frees the previously allocated memory and returns ZERO_SIZE_PTR. This function doesn’t change the order in which the release callback for the re-alloc’ed devres will be called (except when falling back to devm_kmalloc() or when freeing resources when new_size is zero). The contents of the memory are preserved up to the lesser of new and old sizes.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj^6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kstrdup (C function)c.devm_kstrduphNtauh1hhjhhhNhNubh)}(hhh](h)}(hBchar * devm_kstrdup (struct device *dev, const char *s, gfp_t gfp)h]h)}(h@char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp)h](j)}(hcharh]hchar}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM,ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7hhhj7hM,ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj7hM,ubh)}(h devm_kstrduph]j)}(h devm_kstrduph]h devm_kstrdup}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1hhj7hhhj7hM,ubj4)}(h.(struct device *dev, const char *s, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj 8hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubh)}(hhh]j)}(hdeviceh]hdevice}(hj(8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj*8modnameN classnameNjwjz)}j}]j)}jsj7sbc.devm_kstrdupasbuh1hhj8ubjQ)}(h h]h }(hjH8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hjh]h*}(hjV8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hdevh]hdev}(hjc8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubj:)}(h const char *sh](j?)}(hjP*h]hconst}(hj|8hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjx8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjx8ubj)}(hcharh]hchar}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjx8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx8ubj)}(hsh]hs}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj8modnameN classnameNjwjz)}j}]jD8c.devm_kstrdupasbuh1hhj8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj)}(hgfph]hgfp}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj8ubeh}(h]h ]h"]h$]h&]jjuh1j3hj7hhhj7hM,ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj7hhhj7hM,ubah}(h]j7ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj7hM,hj7hhubj4)}(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.}(hj29hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM,hj/9hhubah}(h]h ]h"]h$]h&]uh1j3hj7hhhj7hM,ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjJ9jHjJ9jIjJjKuh1hhhhjhNhNubj)}(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)}(hjT9h]h Parameters}(hjV9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR9ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM0hjN9ubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hjs9h]hstruct device *dev}(hju9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjq9ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM.hjm9ubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hM.hj9ubah}(h]h ]h"]h$]h&]uh1jhjm9ubeh}(h]h ]h"]h$]h&]uh1jhj9hM.hjj9ubj)}(h*``const char *s`` the string to duplicate h](j)}(h``const char *s``h]jS)}(hj9h]h const char *s}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM/hj9ubj)}(hhh]jM)}(hthe string to duplicateh]hthe string to duplicate}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj9hM/hj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hM/hjj9ubj)}(hR``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]jS)}(hj9h]h gfp_t gfp}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj9ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM1hj9ubj)}(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}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM0hj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hM1hjj9ubeh}(h]h ]h"]h$]h&]uh1jhjN9ubjM)}(h **Return**h]j)}(hj!:h]hReturn}(hj#:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM3hjN9ubjM)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hj7:hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM2hjN9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kstrdup_const (C function)c.devm_kstrdup_consthNtauh1hhjhhhNhNubh)}(hhh](h)}(hNconst char * devm_kstrdup_const (struct device *dev, const char *s, gfp_t gfp)h]h)}(hLconst char *devm_kstrdup_const(struct device *dev, const char *s, gfp_t gfp)h](j?)}(hjP*h]hconst}(hjf:hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjb:hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM?ubjQ)}(h h]h }(hjt:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjb:hhhjs:hM?ubj)}(hcharh]hchar}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb:hhhjs:hM?ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjb:hhhjs:hM?ubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb:hhhjs:hM?ubh)}(hdevm_kstrdup_consth]j)}(hdevm_kstrdup_consth]hdevm_kstrdup_const}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjb:hhhjs:hM?ubj4)}(h.(struct device *dev, const char *s, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj:hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj:ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubh)}(hhh]j)}(hdeviceh]hdevice}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj:modnameN classnameNjwjz)}j}]j)}jsj:sbc.devm_kstrdup_constasbuh1hhj:ubjQ)}(h h]h }(hj ;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hdevh]hdev}(hj$;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubj:)}(h const char *sh](j?)}(hjP*h]hconst}(hj=;hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj9;ubjQ)}(h h]h }(hjJ;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9;ubj)}(hcharh]hchar}(hjX;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9;ubjQ)}(h h]h }(hjf;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9;ubj)}(hjh]h*}(hjt;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9;ubj)}(hj8h]hs}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj;modnameN classnameNjwjz)}j}]j;c.devm_kstrdup_constasbuh1hhj;ubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj)}(hgfph]hgfp}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj:ubeh}(h]h ]h"]h$]h&]jjuh1j3hjb:hhhjs:hM?ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hj^:hhhjs:hM?ubah}(h]jY:ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjs:hM?hj[:hhubj4)}(hhh]jM)}(h/resource managed conditional string duplicationh]h/resource managed conditional string duplication}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM?hj;hhubah}(h]h ]h"]h$]h&]uh1j3hj[:hhhjs:hM?ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj <jHj <jIjJjKuh1hhhhjhNhNubj)}(hX**Parameters** ``struct device *dev`` device for which to duplicate the string ``const char *s`` the string to duplicate ``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory **Description** Strings allocated by devm_kstrdup_const will be automatically freed when the associated device is detached. **Return** Source string if it is in .rodata section otherwise it falls back to devm_kstrdup.h](jM)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMChj<ubj)}(hhh](j)}(h@``struct device *dev`` device for which to duplicate the string h](j)}(h``struct device *dev``h]jS)}(hj3<h]hstruct device *dev}(hj5<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj1<ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM@hj-<ubj)}(hhh]jM)}(h(device for which to duplicate the stringh]h(device for which to duplicate the string}(hjL<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjH<hM@hjI<ubah}(h]h ]h"]h$]h&]uh1jhj-<ubeh}(h]h ]h"]h$]h&]uh1jhjH<hM@hj*<ubj)}(h*``const char *s`` the string to duplicate h](j)}(h``const char *s``h]jS)}(hjl<h]h const char *s}(hjn<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjj<ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMAhjf<ubj)}(hhh]jM)}(hthe string to duplicateh]hthe string to duplicate}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hMAhj<ubah}(h]h ]h"]h$]h&]uh1jhjf<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMAhj*<ubj)}(hM``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]jS)}(hj<h]h gfp_t gfp}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj<ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMBhj<ubj)}(hhh]jM)}(h>the GFP mask used in the kmalloc() call when allocating memoryh]h>the GFP mask used in the kmalloc() call when allocating memory}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj<hMBhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMBhj*<ubeh}(h]h ]h"]h$]h&]uh1jhj<ubjM)}(h**Description**h]j)}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMDhj<ubjM)}(hkStrings allocated by devm_kstrdup_const will be automatically freed when the associated device is detached.h]hkStrings allocated by devm_kstrdup_const will be automatically freed when the associated device is detached.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMChj<ubjM)}(h **Return**h]j)}(hj=h]hReturn}(hj =hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMFhj<ubjM)}(hRSource string if it is in .rodata section otherwise it falls back to devm_kstrdup.h]hRSource string if it is in .rodata section otherwise it falls back to devm_kstrdup.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMGhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kvasprintf (C function)c.devm_kvasprintfhNtauh1hhjhhhNhNubh)}(hhh](h)}(hSchar * devm_kvasprintf (struct device *dev, gfp_t gfp, const char *fmt, va_list ap)h]h)}(hQchar *devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt, va_list ap)h](j)}(hcharh]hchar}(hjL=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH=hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMUubjQ)}(h h]h }(hj[=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjH=hhhjZ=hMUubj)}(hjh]h*}(hji=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH=hhhjZ=hMUubh)}(hdevm_kvasprintfh]j)}(hdevm_kvasprintfh]hdevm_kvasprintf}(hjz=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv=ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjH=hhhjZ=hMUubj4)}(h<(struct device *dev, gfp_t gfp, const char *fmt, va_list ap)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj=hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj=ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubh)}(hhh]j)}(hdeviceh]hdevice}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj=modnameN classnameNjwjz)}j}]j)}jsj|=sbc.devm_kvasprintfasbuh1hhj=ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj)}(hjh]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hdevh]hdev}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj >hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj >modnameN classnameNjwjz)}j}]j=c.devm_kvasprintfasbuh1hhj>ubjQ)}(h h]h }(hj)>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(hgfph]hgfp}(hj7>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(hconst char *fmth](j?)}(hjP*h]hconst}(hjP>hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjL>ubjQ)}(h h]h }(hj]>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjL>ubj)}(hcharh]hchar}(hjk>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL>ubjQ)}(h h]h }(hjy>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjL>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL>ubj)}(hfmth]hfmt}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubj:)}(h va_list aph](h)}(hhh]j)}(hva_listh]hva_list}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj>modnameN classnameNjwjz)}j}]j=c.devm_kvasprintfasbuh1hhj>ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj)}(haph]hap}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj=ubeh}(h]h ]h"]h$]h&]jjuh1j3hjH=hhhjZ=hMUubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjD=hhhjZ=hMUubah}(h]j?=ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjZ=hMUhjA=hhubj4)}(hhh]jM)}(h>Allocate resource managed space and format a string into that.h]h>Allocate resource managed space and format a string into that.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMUhj?hhubah}(h]h ]h"]h$]h&]uh1j3hjA=hhhjZ=hMUubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGj?jHj?jIjJjKuh1hhhhjhNhNubj)}(hXM**Parameters** ``struct device *dev`` Device to allocate memory for ``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory ``const char *fmt`` The printf()-style format string ``va_list ap`` Arguments for the format string **Return** Pointer to allocated string on success, NULL on failure.h](jM)}(h**Parameters**h]j)}(hj(?h]h Parameters}(hj*?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&?ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMYhj"?ubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hjG?h]hstruct device *dev}(hjI?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjE?ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMWhjA?ubj)}(hhh]jM)}(hDevice to allocate memory forh]hDevice to allocate memory for}(hj`?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\?hMWhj]?ubah}(h]h ]h"]h$]h&]uh1jhjA?ubeh}(h]h ]h"]h$]h&]uh1jhj\?hMWhj>?ubj)}(hR``gfp_t gfp`` the GFP mask used in the devm_kmalloc() call when allocating memory h](j)}(h ``gfp_t gfp``h]jS)}(hj?h]h gfp_t gfp}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj~?ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMYhjz?ubj)}(hhh]jM)}(hCthe GFP mask used in the devm_kmalloc() call when allocating memoryh]hCthe GFP mask used in the devm_kmalloc() call when allocating memory}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMXhj?ubah}(h]h ]h"]h$]h&]uh1jhjz?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMYhj>?ubj)}(h5``const char *fmt`` The printf()-style format string h](j)}(h``const char *fmt``h]jS)}(hj?h]hconst char *fmt}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMZhj?ubj)}(hhh]jM)}(h The printf()-style format stringh]h The printf()-style format string}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj?hMZhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMZhj>?ubj)}(h/``va_list ap`` Arguments for the format string h](j)}(h``va_list ap``h]jS)}(hj?h]h va_list ap}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM[hj?ubj)}(hhh]jM)}(hArguments for the format stringh]hArguments for the format string}(hj @hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj@hM[hj @ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj@hM[hj>?ubeh}(h]h ]h"]h$]h&]uh1jhj"?ubjM)}(h **Return**h]j)}(hj.@h]hReturn}(hj0@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,@ubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM]hj"?ubjM)}(h8Pointer to allocated string on success, NULL on failure.h]h8Pointer to allocated string on success, NULL on failure.}(hjD@hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM\hj"?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kasprintf (C function)c.devm_kasprintfhNtauh1hhjhhhNhNubh)}(hhh](h)}(hKchar * devm_kasprintf (struct device *dev, gfp_t gfp, const char *fmt, ...)h]h)}(hIchar *devm_kasprintf(struct device *dev, gfp_t gfp, const char *fmt, ...)h](j)}(hcharh]hchar}(hjs@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo@hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMuubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjo@hhhj@hMuubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo@hhhj@hMuubh)}(hdevm_kasprintfh]j)}(hdevm_kasprintfh]hdevm_kasprintf}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1hhjo@hhhj@hMuubj4)}(h5(struct device *dev, gfp_t gfp, const char *fmt, ...)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj@hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubh)}(hhh]j)}(hdeviceh]hdevice}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj@modnameN classnameNjwjz)}j}]j)}jsj@sbc.devm_kasprintfasbuh1hhj@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj)}(hjh]h*}(hj AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hdevh]hdev}(hjAhhhNhNubah}(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}(hj2AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/Aubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj4AmodnameN classnameNjwjz)}j}]j@c.devm_kasprintfasbuh1hhj+AubjQ)}(h h]h }(hjPAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+Aubj)}(hgfph]hgfp}(hj^AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+Aubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubj:)}(hconst char *fmth](j?)}(hjP*h]hconst}(hjwAhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjsAubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsAubj)}(hcharh]hchar}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsAubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjsAubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsAubj)}(hfmth]hfmt}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsAubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubj:)}(h...h]j)}(hjh]h...}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]noemphjjuh1j9hj@ubeh}(h]h ]h"]h$]h&]jjuh1j3hjo@hhhj@hMuubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjk@hhhj@hMuubah}(h]jf@ah ](j+j,eh"]h$]h&]j0j1)j2huh1hhj@hMuhjh@hhubj4)}(hhh]jM)}(h>Allocate resource managed space and format a string into that.h]h>Allocate resource managed space and format a string into that.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMuhjAhhubah}(h]h ]h"]h$]h&]uh1j3hjh@hhhj@hMuubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjBjHjBjIjJjKuh1hhhhjhNhNubj)}(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)}(hjBh]h Parameters}(hj!BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMyhjBubj)}(hhh](j)}(h5``struct device *dev`` Device to allocate memory for h](j)}(h``struct device *dev``h]jS)}(hj>Bh]hstruct device *dev}(hj@BhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj>hjCubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubh)}(hhh]j)}(hdeviceh]hdevice}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjCmodnameN classnameNjwjz)}j}]j)}jsjCsb c.devm_kfreeasbuh1hhjCubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hdevh]hdev}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjCubj:)}(h const void *ph](j?)}(hjP*h]hconst}(hjDhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjDubjQ)}(h h]h }(hj&DhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(hvoidh]hvoid}(hj4DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjQ)}(h h]h }(hjBDhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjDubj)}(hjh]h*}(hjPDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]hp}(hj]DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjCubeh}(h]h ]h"]h$]h&]jjuh1j3hjfChhhjxChMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjbChhhjxChMubah}(h]j]Cah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjxChMhj_Chhubj4)}(hhh]jM)}(hResource-managed kfreeh]hResource-managed kfree}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjDhhubah}(h]h ]h"]h$]h&]uh1j3hj_ChhhjxChMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjDjHjDjIjJjKuh1hhhhjhNhNubj)}(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)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjDubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]jS)}(hjDh]hstruct device *dev}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjDubj)}(hhh]jM)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjDubj)}(h!``const void *p`` Memory to free h](j)}(h``const void *p``h]jS)}(hjEh]h const void *p}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjDubj)}(hhh]jM)}(hMemory to freeh]hMemory to free}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjDubeh}(h]h ]h"]h$]h&]uh1jhjDubjM)}(h**Description**h]j)}(hj;Eh]h Description}(hj=EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Eubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjDubjM)}(h*Free memory allocated with devm_kmalloc().h]h*Free memory allocated with devm_kmalloc().}(hjQEhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdevm_kmemdup (C function)c.devm_kmemduphNtauh1hhjhhhNhNubh)}(hhh](h)}(hPvoid * devm_kmemdup (struct device *dev, const void *src, size_t len, gfp_t gfp)h]h)}(hNvoid *devm_kmemdup(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j)}(hvoidh]hvoid}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|EhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|EhhhjEhMubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|EhhhjEhMubh)}(h devm_kmemduph]j)}(h devm_kmemduph]h devm_kmemdup}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1hhj|EhhhjEhMubj4)}(h<(struct device *dev, const void *src, size_t len, 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}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjEmodnameN classnameNjwjz)}j}]j)}jsjEsbc.devm_kmemdupasbuh1hhjEubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(hdevh]hdev}(hj#FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubj:)}(hconst void *srch](j?)}(hjP*h]hconst}(hjhj8FubjQ)}(h h]h }(hjIFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8Fubj)}(hvoidh]hvoid}(hjWFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8FubjQ)}(h h]h }(hjeFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8Fubj)}(hjh]h*}(hjsFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8Fubj)}(hsrch]hsrc}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8Fubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubj:)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjFmodnameN classnameNjwjz)}j}]jFc.devm_kmemdupasbuh1hhjFubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hlenh]hlen}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(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_kmemdupasbuh1hhjFubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubj)}(hgfph]hgfp}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjEubeh}(h]h ]h"]h$]h&]jjuh1j3hj|EhhhjEhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjxEhhhjEhMubah}(h]jsEah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjEhMhjuEhhubj4)}(hhh]jM)}(hResource-managed kmemduph]hResource-managed kmemdup}(hj:GhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj7Ghhubah}(h]h ]h"]h$]h&]uh1j3hjuEhhhjEhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjRGjHjRGjIjJjKuh1hhhhjhNhNubj)}(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)}(hj\Gh]h Parameters}(hj^GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZGubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjVGubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]jS)}(hj{Gh]hstruct device *dev}(hj}GhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjyGubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjuGubj)}(hhh]jM)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjuGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjrGubj)}(h/``const void *src`` Memory region to duplicate h](j)}(h``const void *src``h]jS)}(hjGh]hconst void *src}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjGubj)}(hhh]jM)}(hMemory region to duplicateh]hMemory region to duplicate}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjrGubj)}(h$``size_t len`` Memory region length h](j)}(h``size_t len``h]jS)}(hjGh]h size_t len}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjGubj)}(hhh]jM)}(hMemory region lengthh]hMemory region length}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjrGubj)}(h``gfp_t gfp`` GFP mask to use h](j)}(h ``gfp_t gfp``h]jS)}(hj&Hh]h gfp_t gfp}(hj(HhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj$Hubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj Hubj)}(hhh]jM)}(hGFP mask to useh]hGFP mask to use}(hj?HhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj;HhMhjhjHhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHhhhjHhMubj)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjHhMubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHhhhjHhMubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjHhMubh)}(hdevm_kmemdup_consth]j)}(hdevm_kmemdup_consth]hdevm_kmemdup_const}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ](jjeh"]h$]h&]jjuh1hhjHhhhjHhMubj4)}(h<(struct device *dev, const void *src, size_t len, gfp_t gfp)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj IhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjIubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubh)}(hhh]j)}(hdeviceh]hdevice}(hj)IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&Iubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj+ImodnameN classnameNjwjz)}j}]j)}jsjHsbc.devm_kmemdup_constasbuh1hhjIubjQ)}(h h]h }(hjIIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hjh]h*}(hjWIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hdevh]hdev}(hjdIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubj:)}(hconst void *srch](j?)}(hjP*h]hconst}(hj}IhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjyIubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyIubj)}(hvoidh]hvoid}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyIubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyIubj)}(hjh]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyIubj)}(hsrch]hsrc}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubj:)}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjImodnameN classnameNjwjz)}j}]jEIc.devm_kmemdup_constasbuh1hhjIubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj)}(hlenh]hlen}(hj JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubj:)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj%JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"Jubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetj'JmodnameN classnameNjwjz)}j}]jEIc.devm_kmemdup_constasbuh1hhjJubjQ)}(h h]h }(hjCJhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjJubj)}(hgfph]hgfp}(hjQJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjIubeh}(h]h ]h"]h$]h&]jjuh1j3hjHhhhjHhMubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjHhhhjHhMubah}(h]jHah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjHhMhjHhhubj4)}(hhh]jM)}(h5conditionally duplicate and manage a region of memoryh]h5conditionally duplicate and manage a region of memory}(hj{JhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjxJhhubah}(h]h ]h"]h$]h&]uh1j3hjHhhhjHhMubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjJjHjJjIjJjKuh1hhhhjhNhNubj)}(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)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjJubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]jS)}(hjJh]hstruct device *dev}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjJubj)}(hhh]jM)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjJubj)}(h/``const void *src`` memory region to duplicate h](j)}(h``const void *src``h]jS)}(hjJh]hconst void *src}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjJubj)}(hhh]jM)}(hmemory region to duplicateh]hmemory region to duplicate}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj KhMhj Kubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhj KhMhjJubj)}(h%``size_t len`` memory region length, h](j)}(h``size_t len``h]jS)}(hj.Kh]h size_t len}(hj0KhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj,Kubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhj(Kubj)}(hhh]jM)}(hmemory region length,h]hmemory region length,}(hjGKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjCKhMhjDKubah}(h]h ]h"]h$]h&]uh1jhj(Kubeh}(h]h ]h"]h$]h&]uh1jhjCKhMhjJubj)}(h``gfp_t gfp`` GFP mask to use h](j)}(h ``gfp_t gfp``h]jS)}(hjgKh]h gfp_t gfp}(hjiKhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjeKubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjaKubj)}(hhh]jM)}(hGFP mask to useh]hGFP mask to use}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj|KhMhj}Kubah}(h]h ]h"]h$]h&]uh1jhjaKubeh}(h]h ]h"]h$]h&]uh1jhj|KhMhjJubeh}(h]h ]h"]h$]h&]uh1jhjJubjM)}(h **Return**h]j)}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjJubjM)}(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.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h devm_get_free_pages (C function)c.devm_get_free_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(hZunsigned long devm_get_free_pages (struct device *dev, gfp_t gfp_mask, unsigned int order)h]h)}(hYunsigned long devm_get_free_pages(struct device *dev, gfp_t gfp_mask, unsigned int order)h](j)}(hunsignedh]hunsigned}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKhhhjKhMubj)}(hlongh]hlong}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjKhMubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKhhhjKhMubh)}(hdevm_get_free_pagesh]j)}(hdevm_get_free_pagesh]hdevm_get_free_pages}(hj$LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Lubah}(h]h ](jjeh"]h$]h&]jjuh1hhjKhhhjKhMubj4)}(h8(struct device *dev, gfp_t gfp_mask, unsigned int order)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj@LhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhjNubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubh)}(hhh]j)}(hdeviceh]hdevice}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjAreftypejs reftargetjOmodnameN classnameNjwjz)}j}]j)}jsjNsbc.devm_free_pagesasbuh1hhjNubjQ)}(h h]h }(hj1OhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj)}(hjh]h*}(hj?OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hdevh]hdev}(hjLOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubj:)}(hunsigned long addrh](j)}(hunsignedh]hunsigned}(hjeOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaOubjQ)}(h h]h }(hjsOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaOubj)}(hlongh]hlong}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaOubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjaOubj)}(haddrh]haddr}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaOubeh}(h]h ]h"]h$]h&]noemphjjuh1j9hjNubeh}(h]h ]h"]h$]h&]jjuh1j3hjNhhhjNhM ubeh}(h]h ]h"]h$]h&]jjj%uh1hj&j'hjNhhhjNhM ubah}(h]jNah ](j+j,eh"]h$]h&]j0j1)j2huh1hhjNhM hjNhhubj4)}(hhh]jM)}(hResource-managed free_pagesh]hResource-managed free_pages}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hjOhhubah}(h]h ]h"]h$]h&]uh1j3hjNhhhjNhM ubeh}(h]h ](jAfunctioneh"]h$]h&]jFjAjGjOjHjOjIjJjKuh1hhhhjhNhNubj)}(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)}(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:146: ./drivers/base/devres.chMhjOubj)}(hhh](j)}(h5``struct device *dev`` Device this memory belongs to h](j)}(h``struct device *dev``h]jS)}(hjPh]hstruct device *dev}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hjPubj)}(hhh]jM)}(hDevice this memory belongs toh]hDevice this memory belongs to}(hj!PhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjPhM hjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhM hjOubj)}(h&``unsigned long addr`` Memory to free h](j)}(h``unsigned long addr``h]jS)}(hjAPh]hunsigned long addr}(hjCPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj?Pubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hj;Pubj)}(hhh]jM)}(hMemory to freeh]hMemory to free}(hjZPhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjVPhM hjWPubah}(h]h ]h"]h$]h&]uh1jhj;Pubeh}(h]h ]h"]h$]h&]uh1jhjVPhM hjOubeh}(h]h ]h"]h$]h&]uh1jhjOubjM)}(h**Description**h]j)}(hj|Ph]h Description}(hj~PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzPubah}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chMhjOubjM)}(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 }(hjPhhhNhNubj)}(h **order**h]horder}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jLhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h __devm_alloc_percpu (C function)c.__devm_alloc_percpuhNtauh1hhjhhhNhNubh)}(hhh](h)}(hSvoid __percpu * __devm_alloc_percpu (struct device *dev, size_t size, size_t align)h]h)}(hQvoid __percpu *__devm_alloc_percpu(struct device *dev, size_t size, size_t align)h](j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/basics:146: ./drivers/base/devres.chM#ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPhhhjPhM#ubh__percpu}(hjPhhhNhNubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjPhhhjPhM#ubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjPhM#ubh)}(h__devm_alloc_percpuh]j)}(h__devm_alloc_percpuh]h__devm_alloc_percpu}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ](jjeh"]h$]h&]jjuh1hhjPhhhjPhM#ubj4)}(h/(struct device *dev, size_t size, size_t align)h](j:)}(hstruct device *devh](j?)}(hjBh]hstruct}(hj/QhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj+QubjQ)}(h h]h }(hjj>jr@jw@jBjBjDjDj GjGjJjJjLjLjPjPjSjSjWjWjYjYj[j[j]j]j_j_j`j`jajajfjgjgj&ij+ijjjjjkjkjmjmj$oj)ojpjpj8rj=rjsjsjLujQujvjvjxjxjj>j@j@jBjBj=DjBDjUFjZFjIjIj KjKjLjLjOj OjPjPj%Sj*SjVjVjXjXja[jf[jj]j]j]j&aj+ajddjidjBfjGfjijijGkjLkj4mj9mjSojXojTrjYrjtjtjvjvjuwjzwjyjyjzjzj|j|j~j~jjjjjjj(j-jɊjΊjjjVj[j&j+jgjljjj?jDjqjvjVj[j+j0jjjjjjjƨj˨jjj#j(jjjjjįjɯjj jVj[jjj+j0jj½j^jcj j%jjjj jujzjtjyjjjjjjj1j6jjjZj_jjjjjjjjjjjnjsjjjj jjjjjAjFjXj]j}jjmjrjj jjj3j8jIjNjjjWj\jjjjjjj(j-jjjjjjjjj j j j j<jAjjjjj,j1j|jjjjj!jljqj!j!j#j#jJ&jO&j(j(j*j*j:-j?-j/j/j1j1j*4j/4jz6j6j98j>8j :j:j;j;j=j=j}?j?jNAjSAjCj$CjDjDjFjFjHjHjQJjVJj"Lj'LjMjMjOjOjQjQjfSjkSj7Ujjjjjj jjj"j1j6jEjJjYj^j`jejMjRj:j?jyj~jjj jjjjjjkjpjjjWj\jjjCjHjjj jjjjjjljqjjjXj]jjjDjIjjjyj~j]jbjAjFj%j*j jjjjjjjj j jX j] j< jA j j%jj jjjjjjjjjxj}jjj?jDj!j!j+$j0$j&j&j(j(jh+jm+j-j-jT0jY0j2j2j5j 5j7j7j:j :j}<j<j>j>jDAjIAjCjCj0Fj5FjHjHjKj!KjMjMjOjOjKRjPRjTjTjWjWjZjZj^j ^j aj%ajgdjldjgjgjjjjjj>jxAj}AjDjDjFjFjHjHjJjJjLjLjNjNjPjPjRjRjTjTjWjWjgYjlYj[j[j^j ^jW`j\`jbjbjdjdjGgjLgjijijkjkj%nj*njupjzpjrjrjujujewjjwjyjyj|j |jU~jZ~jjjjjjjjjXj]j)j.jjjˌjЌjjj[j`j,j1jjjΕjӕjjjpjujAjFjjjjj!j&jqjvjjƥjjjajfjjjjj?jDjjjߵjjj"jmjrjj¼j jj]jbjjjjj;j@jjjjjjjYj^jjjjjjjjjjjcjhjjjjjjjjjVj[jFjKj6j;jjjjjjjjjjjjj jjj$j3 j8 j: j? j'j,jjjSjXjjjjjYj^jjjEjJj j j1#j6#j%j%j(j"(j*j*j,j,jZ/j_/j1j1jF4jK4j6j6j29j79j;j;j>j#>j@j@jSBjXBj7DjjQ>j@j@jBjBj*Ej/EjzGjGjIjIjLj LjXNj]NjPjPjRjRjHUjMUjWjWjYjYj\j \jD^jI^j'aj,aj djdjfjfjijijljljpjpj3sj8sjTvjYvjxjxjzjzj|j|jjjjjjj_jdjRjWjdjijxj}jjjjjjjjŔjjjdjijjj~jjbjgjyj~j}jjjjjjjjvj{jjjPjUjƳj˳jjjjjjjjj;j@j-j2jj$jjj)j.jFjKjcjhjjj"j'jjjjjjjjjjjjjjj)j.j3j8jjjjjjjjjtjyjjjjjjjjjjjjjjjjjjjYj^jjjjjjjjjjjVj[jjjjjujzjjjjjSjjjjwj|j j j4 j9 jf jk jjjfjkjjj\jajjj!j!j#j#j&j&jI(jN(j+j+j.j.j1j1j4j4j7j7jY:j^:j?=jD=jf@jk@j]CjbCjsEjxEjHjHjKjKjNjNjPjPu 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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjTubah}(h]h ]h"]h$]h&]levelKtypeINFOlineKXsourcejIuh1jThjubatransform_messages] transformerN include_log] decorationNhhub.