€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ /translations/zh_CN/core-api/SMP”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/zh_TW/core-api/SMP”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/it_IT/core-api/SMP”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/ja_JP/core-api/SMP”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/ko_KR/core-api/SMP”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/pt_BR/core-api/SMP”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/sp_SP/core-api/SMP”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ!SPDX-License-Identifier: GPL-2.0+”h]”hŒ!SPDX-License-Identifier: GPL-2.0+”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ:/var/lib/git/docbuild/linux/Documentation/core-api/SMP.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒSMP primitives”h]”hŒSMP primitives”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œon_each_cpu_mask (C function)”Œc.on_each_cpu_mask”hNt”auh1hÝhhÊh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ_void on_each_cpu_mask (const struct cpumask *mask, smp_call_func_t func, void *info, bool wait)”h]”hŒdesc_signature_line”“”)�”}”(hŒ^void on_each_cpu_mask(const struct cpumask *mask, smp_call_func_t func, void *info, bool wait)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jhhüh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´KKubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jhhüh²hh³jh´KKubhŒ desc_name”“”)�”}”(hŒon_each_cpu_mask”h]”hŒ desc_sig_name”“”)�”}”(hŒon_each_cpu_mask”h]”hŒon_each_cpu_mask”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j)hj%ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j#hhüh²hh³jh´KKubhŒdesc_parameterlist”“”)�”}”(hŒI(const struct cpumask *mask, smp_call_func_t func, void *info, bool wait)”h]”(hŒdesc_parameter”“”)�”}”(hŒconst struct cpumask *mask”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒconst”h]”hŒconst”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jNhjJubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJubjO)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j[ah"]”h$]”h&]”uh1jNhjJubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJubh)�”}”(hhh]”j*)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj‰ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”jŽŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j¨Œ ASTIdentifier”“”)�”}”j£j-sbŒc.on_each_cpu_mask”†”asbuh1hhjJubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jÃhjJubj*)�”}”(hŒmask”h]”hŒmask”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjDubjI)�”}”(hŒsmp_call_func_t func”h]”(h)�”}”(hhh]”j*)�”}”(hŒsmp_call_func_t”h]”hŒsmp_call_func_t”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjíubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¡Œreftype”j£Œ reftarget”jòŒmodname”NŒ classname”Nj§jª)�”}”j­]”j±Œc.on_each_cpu_mask”†”asbuh1hhjéubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjéubj*)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjDubjI)�”}”(hŒ void *info”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj1ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1ubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhj1ubj*)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjDubjI)�”}”(hŒ bool wait”h]”(j)�”}”(hŒbool”h]”hŒbool”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjsubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsubj*)�”}”(hŒwait”h]”hŒwait”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjsubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjDubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBhhüh²hh³jh´KKubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1húŒsphinx_line_type”Œ declarator”hhöh²hh³jh´KKubah}”(h]”hìah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1hôh³jh´KKhhñh²hubhŒ desc_content”“”)�”}”(hhh]”hŒ paragraph”“”)�”}”(hŒYRun a function on processors specified by cpumask, which may include the local processor.”h]”hŒYRun a function on processors specified by cpumask, which may include the local processor.”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´KKhjÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhhñh²hh³jh´KKubeh}”(h]”h ]”(j¡Œfunction”eh"]”h$]”h&]”Œdomain”j¡Œobjtype”jáŒdesctype”jáŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1hïh²hhhÊh³hîh´NubhŒ container”“”)�”}”(hX„**Parameters** ``const struct cpumask *mask`` The set of cpus to run on (only runs on online subset). ``smp_call_func_t func`` The function to run. This must be fast and non-blocking. ``void *info`` An arbitrary pointer to pass to the function. ``bool wait`` If true, wait (atomically) until function has completed on other CPUs. **Description** If **wait** is true, then returns once **func** has returned. You must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler. The exception is that it may be used during early boot while early_boot_irqs_disabled is set.”h]”(jÈ)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hjóh]”hŒ Parameters”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´KOhjíubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒW``const struct cpumask *mask`` The set of cpus to run on (only runs on online subset). ”h]”(hŒterm”“”)�”}”(hŒ``const struct cpumask *mask``”h]”hŒliteral”“”)�”}”(hjh]”hŒconst struct cpumask *mask”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´KMhjubhŒ definition”“”)�”}”(hhh]”jÈ)�”}”(hŒ7The set of cpus to run on (only runs on online subset).”h]”hŒ7The set of cpus to run on (only runs on online subset).”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j1h´KMhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j1h´KMhj ubj)�”}”(hŒR``smp_call_func_t func`` The function to run. This must be fast and non-blocking. ”h]”(j)�”}”(hŒ``smp_call_func_t func``”h]”j)�”}”(hjWh]”hŒsmp_call_func_t func”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´KNhjQubj3)�”}”(hhh]”jÈ)�”}”(hŒ8The function to run. This must be fast and non-blocking.”h]”hŒ8The function to run. This must be fast and non-blocking.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jlh´KNhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jlh´KNhj ubj)�”}”(hŒ=``void *info`` An arbitrary pointer to pass to the function. ”h]”(j)�”}”(hŒ``void *info``”h]”j)�”}”(hj�h]”hŒ void *info”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´KOhjŠubj3)�”}”(hhh]”jÈ)�”}”(hŒ-An arbitrary pointer to pass to the function.”h]”hŒ-An arbitrary pointer to pass to the function.”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j¥h´KOhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥h´KOhj ubj)�”}”(hŒU``bool wait`` If true, wait (atomically) until function has completed on other CPUs. ”h]”(j)�”}”(hŒ ``bool wait``”h]”j)�”}”(hjÉh]”hŒ bool wait”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´KQhjÃubj3)�”}”(hhh]”jÈ)�”}”(hŒFIf true, wait (atomically) until function has completed on other CPUs.”h]”hŒFIf true, wait (atomically) until function has completed on other CPUs.”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´KPhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÞh´KQhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjíubjÈ)�”}”(hŒ**Description**”h]”jö)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´KShjíubjÈ)�”}”(hŒ=If **wait** is true, then returns once **func** has returned.”h]”(hŒIf ”…”�”}”(hjh²hh³Nh´Nubjö)�”}”(hŒ**wait**”h]”hŒwait”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubhŒ is true, then returns once ”…”�”}”(hjh²hh³Nh´Nubjö)�”}”(hŒ**func**”h]”hŒfunc”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubhŒ has returned.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´KRhjíubjÈ)�”}”(hŒÛYou must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler. The exception is that it may be used during early boot while early_boot_irqs_disabled is set.”h]”hŒÛYou must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler. The exception is that it may be used during early boot while early_boot_irqs_disabled is set.”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´KThjíubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jëhhÊh²hh³hîh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒsmp_processor_id (C macro)”Œc.smp_processor_id”hNt”auh1hÝhhÊh²hh³hîh´Nubhð)�”}”(hhh]”(hõ)�”}”(hŒsmp_processor_id”h]”hû)�”}”(hŒsmp_processor_id”h]”j$)�”}”(hŒsmp_processor_id”h]”j*)�”}”(hjwh]”hŒsmp_processor_id”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj}ubah}”(h]”h ]”(j=j>eh"]”h$]”h&]”hÅhÆuh1j#hjyh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj´ˆuh1hújµj¶hjuh²hh³j”h´Mubah}”(h]”jpah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1hôh³j”h´Mhjrh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjrh²hh³j”h´Mubeh}”(h]”h ]”(j¡Œmacro”eh"]”h$]”h&]”jåj¡jæj­jçj­jè‰jé‰jê‰uh1hïh²hhhÊh³hîh´NubjÈ)�”}”(hŒ``smp_processor_id ()``”h]”j)�”}”(hj³h]”hŒsmp_processor_id ()”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´MhhÊh²hubhŒ block_quote”“”)�”}”(hXo get the current (stable) CPU id **Description** This is the normal accessor to the CPU id and should be used whenever possible. The CPU id is stable when: - IRQs are disabled; - preemption is disabled; - the task is CPU affine. When CONFIG_DEBUG_PREEMPT=y, we verify these assumptions and WARN when smp_processor_id() is used when the CPU id is not stable. ”h]”(jÊ)�”}”(hŒ get the current (stable) CPU id ”h]”jÈ)�”}”(hŒget the current (stable) CPU id”h]”hŒget the current (stable) CPU id”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´MhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³jáh´MhjËubjÈ)�”}”(hŒ**Description**”h]”jö)�”}”(hjêh]”hŒ Description”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´MhjËubjÈ)�”}”(hŒOThis is the normal accessor to the CPU id and should be used whenever possible.”h]”hŒOThis is the normal accessor to the CPU id and should be used whenever possible.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´MhjËubjÈ)�”}”(hŒThe CPU id is stable when:”h]”hŒThe CPU id is stable when:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´MhjËubjÊ)�”}”(hŒI- IRQs are disabled; - preemption is disabled; - the task is CPU affine. ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒIRQs are disabled;”h]”jÈ)�”}”(hj+h]”hŒIRQs are disabled;”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´Mhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj$ubj()�”}”(hŒpreemption is disabled;”h]”jÈ)�”}”(hjCh]”hŒpreemption is disabled;”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´MhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj$ubj()�”}”(hŒthe task is CPU affine. ”h]”jÈ)�”}”(hŒthe task is CPU affine.”h]”hŒthe task is CPU affine.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´MhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj$ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j"h³j:h´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³j:h´MhjËubjÈ)�”}”(hŒ€When CONFIG_DEBUG_PREEMPT=y, we verify these assumptions and WARN when smp_processor_id() is used when the CPU id is not stable.”h]”hŒ€When CONFIG_DEBUG_PREEMPT=y, we verify these assumptions and WARN when smp_processor_id() is used when the CPU id is not stable.”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/SMP:7: ./include/linux/smp.h”h´M hjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³jáh´MhhÊh²hubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ%smp_call_function_single (C function)”Œc.smp_call_function_single”hNt”auh1hÝhhÊh²hh³Nh´Nubhð)�”}”(hhh]”(hõ)�”}”(hŒSint smp_call_function_single (int cpu, smp_call_func_t func, void *info, bool wait)”h]”hû)�”}”(hŒRint smp_call_function_single(int cpu, smp_call_func_t func, void *info, bool wait)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjªh²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Môubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjªh²hh³j¼h´Môubj$)�”}”(hŒsmp_call_function_single”h]”j*)�”}”(hŒsmp_call_function_single”h]”hŒsmp_call_function_single”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjËubah}”(h]”h ]”(j=j>eh"]”h$]”h&]”hÅhÆuh1j#hjªh²hh³j¼h´MôubjC)�”}”(hŒ6(int cpu, smp_call_func_t func, void *info, bool wait)”h]”(jI)�”}”(hŒint cpu”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjçubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçubj*)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjçubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjãubjI)�”}”(hŒsmp_call_func_t func”h]”(h)�”}”(hhh]”j*)�”}”(hŒsmp_call_func_t”h]”hŒsmp_call_func_t”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¡Œreftype”j£Œ reftarget”j%Œmodname”NŒ classname”Nj§jª)�”}”j­]”j°)�”}”j£jÑsbŒc.smp_call_function_single”†”asbuh1hhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubj*)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjãubjI)�”}”(hŒ void *info”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjfubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjfubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhjfubj*)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjãubjI)�”}”(hŒ bool wait”h]”(j)�”}”(hjyh]”hŒbool”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj¨ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨ubj*)�”}”(hŒwait”h]”hŒwait”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjãubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBhjªh²hh³j¼h´Môubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj´ˆuh1hújµj¶hj¦h²hh³j¼h´Môubah}”(h]”j¡ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1hôh³j¼h´Môhj£h²hubjÃ)�”}”(hhh]”jÈ)�”}”(hŒ Run a function on a specific CPU”h]”hŒ Run a function on a specific CPU”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Môhjîh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj£h²hh³j¼h´Môubeh}”(h]”h ]”(j¡Œfunction”eh"]”h$]”h&]”jåj¡jæj jçj jè‰jé‰jê‰uh1hïh²hhhÊh³Nh´Nubjì)�”}”(hX`**Parameters** ``int cpu`` Specific target CPU for this function. ``smp_call_func_t func`` The function to run. This must be fast and non-blocking. ``void *info`` An arbitrary pointer to pass to the function. ``bool wait`` If true, wait until function has completed on other CPUs. **Return** ``0`` on success, else a negative status code.”h]”(jÈ)�”}”(hŒ**Parameters**”h]”jö)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Møhj ubj )�”}”(hhh]”(j)�”}”(hŒ3``int cpu`` Specific target CPU for this function. ”h]”(j)�”}”(hŒ ``int cpu``”h]”j)�”}”(hj2h]”hŒint cpu”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mõhj,ubj3)�”}”(hhh]”jÈ)�”}”(hŒ&Specific target CPU for this function.”h]”hŒ&Specific target CPU for this function.”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jGh´MõhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jGh´Mõhj)ubj)�”}”(hŒR``smp_call_func_t func`` The function to run. This must be fast and non-blocking. ”h]”(j)�”}”(hŒ``smp_call_func_t func``”h]”j)�”}”(hjkh]”hŒsmp_call_func_t func”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Möhjeubj3)�”}”(hhh]”jÈ)�”}”(hŒ8The function to run. This must be fast and non-blocking.”h]”hŒ8The function to run. This must be fast and non-blocking.”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j€h´Möhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j€h´Möhj)ubj)�”}”(hŒ=``void *info`` An arbitrary pointer to pass to the function. ”h]”(j)�”}”(hŒ``void *info``”h]”j)�”}”(hj¤h]”hŒ void *info”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M÷hjžubj3)�”}”(hhh]”jÈ)�”}”(hŒ-An arbitrary pointer to pass to the function.”h]”hŒ-An arbitrary pointer to pass to the function.”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j¹h´M÷hjºubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¹h´M÷hj)ubj)�”}”(hŒH``bool wait`` If true, wait until function has completed on other CPUs. ”h]”(j)�”}”(hŒ ``bool wait``”h]”j)�”}”(hjÝh]”hŒ bool wait”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Møhj×ubj3)�”}”(hhh]”jÈ)�”}”(hŒ9If true, wait until function has completed on other CPUs.”h]”hŒ9If true, wait until function has completed on other CPUs.”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jòh´Møhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jòh´Møhj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubjÈ)�”}”(hŒ **Return**”h]”jö)�”}”(hjh]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Múhj ubjÈ)�”}”(hŒ.``0`` on success, else a negative status code.”h]”(j)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.ubhŒ) on success, else a negative status code.”…”�”}”(hj.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Múhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jëhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ+smp_call_function_single_async (C function)”Œ c.smp_call_function_single_async”hNt”auh1hÝhhÊh²hh³Nh´Nubhð)�”}”(hhh]”(hõ)�”}”(hŒEint smp_call_function_single_async (int cpu, call_single_data_t *csd)”h]”hû)�”}”(hŒDint smp_call_function_single_async(int cpu, call_single_data_t *csd)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjgh²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgh²hh³jyh´Mubj$)�”}”(hŒsmp_call_function_single_async”h]”j*)�”}”(hŒsmp_call_function_single_async”h]”hŒsmp_call_function_single_async”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjˆubah}”(h]”h ]”(j=j>eh"]”h$]”h&]”hÅhÆuh1j#hjgh²hh³jyh´MubjC)�”}”(hŒ"(int cpu, call_single_data_t *csd)”h]”(jI)�”}”(hŒint cpu”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj¤ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤ubj*)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhj ubjI)�”}”(hŒcall_single_data_t *csd”h]”(h)�”}”(hhh]”j*)�”}”(hŒcall_single_data_t”h]”hŒcall_single_data_t”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¡Œreftype”j£Œ reftarget”jâŒmodname”NŒ classname”Nj§jª)�”}”j­]”j°)�”}”j£jŽsbŒ c.smp_call_function_single_async”†”asbuh1hhjÙubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhjÙubj*)�”}”(hŒcsd”h]”hŒcsd”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhj ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBhjgh²hh³jyh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj´ˆuh1hújµj¶hjch²hh³jyh´Mubah}”(h]”j^ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1hôh³jyh´Mhj`h²hubjÃ)�”}”(hhh]”jÈ)�”}”(hŒ/Run an asynchronous function on a specific CPU.”h]”hŒ/Run an asynchronous function on a specific CPU.”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´MhjB h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj`h²hh³jyh´Mubeh}”(h]”h ]”(j¡Œfunction”eh"]”h$]”h&]”jåj¡jæj] jçj] jè‰jé‰jê‰uh1hïh²hhhÊh³Nh´Nubjì)�”}”(hXc**Parameters** ``int cpu`` The CPU to run on. ``call_single_data_t *csd`` Pre-allocated and setup data structure **Description** Like smp_call_function_single(), but the call is asynchonous and can thus be done from contexts with disabled interrupts. The caller passes his own pre-allocated data structure (ie: embedded in an object) and is responsible for synchronizing it such that the IPIs performed on the **csd** are strictly serialized. If the function is called with one csd which has not yet been processed by previous call to smp_call_function_single_async(), the function will return immediately with -EBUSY showing that the csd object is still in progress. **NOTE** Be careful, there is unfortunately no current debugging facility to validate the correctness of this serialization. **Return** ``0`` on success or negative errno value on error”h]”(jÈ)�”}”(hŒ**Parameters**”h]”jö)�”}”(hjg h]”hŒ Parameters”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhje ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhja ubj )�”}”(hhh]”(j)�”}”(hŒ``int cpu`` The CPU to run on. ”h]”(j)�”}”(hŒ ``int cpu``”h]”j)�”}”(hj† h]”hŒint cpu”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhj€ ubj3)�”}”(hhh]”jÈ)�”}”(hŒThe CPU to run on.”h]”hŒThe CPU to run on.”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j› h´Mhjœ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj€ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j› h´Mhj} ubj)�”}”(hŒC``call_single_data_t *csd`` Pre-allocated and setup data structure ”h]”(j)�”}”(hŒ``call_single_data_t *csd``”h]”j)�”}”(hj¿ h]”hŒcall_single_data_t *csd”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhj¹ ubj3)�”}”(hhh]”jÈ)�”}”(hŒ&Pre-allocated and setup data structure”h]”hŒ&Pre-allocated and setup data structure”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jÔ h´MhjÕ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj¹ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔ h´Mhj} ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hja ubjÈ)�”}”(hŒ**Description**”h]”jö)�”}”(hjú h]”hŒ Description”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjø ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhja ubjÈ)�”}”(hŒyLike smp_call_function_single(), but the call is asynchonous and can thus be done from contexts with disabled interrupts.”h]”hŒyLike smp_call_function_single(), but the call is asynchonous and can thus be done from contexts with disabled interrupts.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhja ubjÈ)�”}”(hŒ¿The caller passes his own pre-allocated data structure (ie: embedded in an object) and is responsible for synchronizing it such that the IPIs performed on the **csd** are strictly serialized.”h]”(hŒŸThe caller passes his own pre-allocated data structure (ie: embedded in an object) and is responsible for synchronizing it such that the IPIs performed on the ”…”�”}”(hj h²hh³Nh´Nubjö)�”}”(hŒ**csd**”h]”hŒcsd”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj ubhŒ are strictly serialized.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M hja ubjÈ)�”}”(hŒàIf the function is called with one csd which has not yet been processed by previous call to smp_call_function_single_async(), the function will return immediately with -EBUSY showing that the csd object is still in progress.”h]”hŒàIf the function is called with one csd which has not yet been processed by previous call to smp_call_function_single_async(), the function will return immediately with -EBUSY showing that the csd object is still in progress.”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhja ubjÈ)�”}”(hŒ**NOTE**”h]”jö)�”}”(hjQ h]”hŒNOTE”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjO ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhja ubjÈ)�”}”(hŒsBe careful, there is unfortunately no current debugging facility to validate the correctness of this serialization.”h]”hŒsBe careful, there is unfortunately no current debugging facility to validate the correctness of this serialization.”…”�”}”(hjg h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhja ubjÈ)�”}”(hŒ **Return**”h]”jö)�”}”(hjx h]”hŒReturn”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhja ubjÈ)�”}”(hŒ1``0`` on success or negative errno value on error”h]”(j)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽ ubhŒ, on success or negative errno value on error”…”�”}”(hjŽ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhja ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jëhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ"smp_call_function_any (C function)”Œc.smp_call_function_any”hNt”auh1hÝhhÊh²hh³Nh´Nubhð)�”}”(hhh]”(hõ)�”}”(hŒbint smp_call_function_any (const struct cpumask *mask, smp_call_func_t func, void *info, int wait)”h]”hû)�”}”(hŒaint smp_call_function_any(const struct cpumask *mask, smp_call_func_t func, void *info, int wait)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÇ h²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M1ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇ h²hh³jÙ h´M1ubj$)�”}”(hŒsmp_call_function_any”h]”j*)�”}”(hŒsmp_call_function_any”h]”hŒsmp_call_function_any”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjè ubah}”(h]”h ]”(j=j>eh"]”h$]”h&]”hÅhÆuh1j#hjÇ h²hh³jÙ h´M1ubjC)�”}”(hŒH(const struct cpumask *mask, smp_call_func_t func, void *info, int wait)”h]”(jI)�”}”(hŒconst struct cpumask *mask”h]”(jO)�”}”(hjRh]”hŒconst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j[ah"]”h$]”h&]”uh1jNhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubjO)�”}”(hjoh]”hŒstruct”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”j[ah"]”h$]”h&]”uh1jNhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubh)�”}”(hhh]”j*)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj> ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¡Œreftype”j£Œ reftarget”jC Œmodname”NŒ classname”Nj§jª)�”}”j­]”j°)�”}”j£jî sbŒc.smp_call_function_any”†”asbuh1hhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhj ubj*)�”}”(hŒmask”h]”hŒmask”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhj ubjI)�”}”(hŒsmp_call_func_t func”h]”(h)�”}”(hhh]”j*)�”}”(hŒsmp_call_func_t”h]”hŒsmp_call_func_t”…”�”}”(hj˜ h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj• ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¡Œreftype”j£Œ reftarget”jš Œmodname”NŒ classname”Nj§jª)�”}”j­]”j] Œc.smp_call_function_any”†”asbuh1hhj‘ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘ ubj*)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj‘ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhj ubjI)�”}”(hŒ void *info”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÙ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙ ubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hjù h²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhjÙ ubj*)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjÙ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhj ubjI)�”}”(hŒint wait”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubj*)�”}”(hŒwait”h]”hŒwait”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhj ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBhjÇ h²hh³jÙ h´M1ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj´ˆuh1hújµj¶hjà h²hh³jÙ h´M1ubah}”(h]”j¾ ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1hôh³jÙ h´M1hjÀ h²hubjÃ)�”}”(hhh]”jÈ)�”}”(hŒ'Run a function on any of the given cpus”h]”hŒ'Run a function on any of the given cpus”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M1hjb h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÀ h²hh³jÙ h´M1ubeh}”(h]”h ]”(j¡Œfunction”eh"]”h$]”h&]”jåj¡jæj} jçj} jè‰jé‰jê‰uh1hïh²hhhÊh³Nh´Nubjì)�”}”(hXù**Parameters** ``const struct cpumask *mask`` The mask of cpus it can run on. ``smp_call_func_t func`` The function to run. This must be fast and non-blocking. ``void *info`` An arbitrary pointer to pass to the function. ``int wait`` If true, wait until function has completed. **Description** Selection preference: 1) current cpu if in **mask** 2) nearest cpu in **mask**, based on NUMA topology **Return** ``0`` on success, else a negative status code (if no cpus were online).”h]”(jÈ)�”}”(hŒ**Parameters**”h]”jö)�”}”(hj‡ h]”hŒ Parameters”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj… ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M5hj� ubj )�”}”(hhh]”(j)�”}”(hŒ?``const struct cpumask *mask`` The mask of cpus it can run on. ”h]”(j)�”}”(hŒ``const struct cpumask *mask``”h]”j)�”}”(hj¦ h]”hŒconst struct cpumask *mask”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M2hj  ubj3)�”}”(hhh]”jÈ)�”}”(hŒThe mask of cpus it can run on.”h]”hŒThe mask of cpus it can run on.”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j» h´M2hj¼ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj  ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j» h´M2hj� ubj)�”}”(hŒR``smp_call_func_t func`` The function to run. This must be fast and non-blocking. ”h]”(j)�”}”(hŒ``smp_call_func_t func``”h]”j)�”}”(hjß h]”hŒsmp_call_func_t func”…”�”}”(hjá h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÝ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M3hjÙ ubj3)�”}”(hhh]”jÈ)�”}”(hŒ8The function to run. This must be fast and non-blocking.”h]”hŒ8The function to run. This must be fast and non-blocking.”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jô h´M3hjõ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjÙ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jô h´M3hj� ubj)�”}”(hŒ=``void *info`` An arbitrary pointer to pass to the function. ”h]”(j)�”}”(hŒ``void *info``”h]”j)�”}”(hj h]”hŒ void *info”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M4hj ubj3)�”}”(hhh]”jÈ)�”}”(hŒ-An arbitrary pointer to pass to the function.”h]”hŒ-An arbitrary pointer to pass to the function.”…”�”}”(hj1 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j- h´M4hj. ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j- h´M4hj� ubj)�”}”(hŒ9``int wait`` If true, wait until function has completed. ”h]”(j)�”}”(hŒ ``int wait``”h]”j)�”}”(hjQ h]”hŒint wait”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjO ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M5hjK ubj3)�”}”(hhh]”jÈ)�”}”(hŒ+If true, wait until function has completed.”h]”hŒ+If true, wait until function has completed.”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jf h´M5hjg ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjK ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jf h´M5hj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj� ubjÈ)�”}”(hŒ**Description**”h]”jö)�”}”(hjŒ h]”hŒ Description”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjŠ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M7hj� ubj )�”}”(hhh]”j)�”}”(hŒgSelection preference: 1) current cpu if in **mask** 2) nearest cpu in **mask**, based on NUMA topology ”h]”(j)�”}”(hŒSelection preference:”h]”hŒSelection preference:”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M8hj¥ ubj3)�”}”(hhh]”hŒenumerated_list”“”)�”}”(hhh]”(j()�”}”(hŒcurrent cpu if in **mask**”h]”jÈ)�”}”(hj h]”(hŒcurrent cpu if in ”…”�”}”(hjÄ h²hh³Nh´Nubjö)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÄ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M7hjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj½ ubj()�”}”(hŒ0nearest cpu in **mask**, based on NUMA topology ”h]”jÈ)�”}”(hŒ/nearest cpu in **mask**, based on NUMA topology”h]”(hŒnearest cpu in ”…”�”}”(hjê h²hh³Nh´Nubjö)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjê ubhŒ, based on NUMA topology”…”�”}”(hjê h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j· h´M8hjæ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj½ ubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ)”uh1j» hj¸ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj¥ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j· h´M8hj¢ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj� ubjÈ)�”}”(hŒ **Return**”h]”jö)�”}”(hj/h]”hŒReturn”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M:hj� ubjÈ)�”}”(hŒG``0`` on success, else a negative status code (if no cpus were online).”h]”(j)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjEubhŒB on success, else a negative status code (if no cpus were online).”…”�”}”(hjEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M;hj� ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jëhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ#smp_call_function_many (C function)”Œc.smp_call_function_many”hNt”auh1hÝhhÊh²hh³Nh´Nubhð)�”}”(hhh]”(hõ)�”}”(hŒevoid smp_call_function_many (const struct cpumask *mask, smp_call_func_t func, void *info, bool wait)”h]”hû)�”}”(hŒdvoid smp_call_function_many(const struct cpumask *mask, smp_call_func_t func, void *info, bool wait)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj~h²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mðubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~h²hh³j�h´Mðubj$)�”}”(hŒsmp_call_function_many”h]”j*)�”}”(hŒsmp_call_function_many”h]”hŒsmp_call_function_many”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjŸubah}”(h]”h ]”(j=j>eh"]”h$]”h&]”hÅhÆuh1j#hj~h²hh³j�h´MðubjC)�”}”(hŒI(const struct cpumask *mask, smp_call_func_t func, void *info, bool wait)”h]”(jI)�”}”(hŒconst struct cpumask *mask”h]”(jO)�”}”(hjRh]”hŒconst”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j[ah"]”h$]”h&]”uh1jNhj»ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»ubjO)�”}”(hjoh]”hŒstruct”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j[ah"]”h$]”h&]”uh1jNhj»ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»ubh)�”}”(hhh]”j*)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjõubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¡Œreftype”j£Œ reftarget”júŒmodname”NŒ classname”Nj§jª)�”}”j­]”j°)�”}”j£j¥sbŒc.smp_call_function_many”†”asbuh1hhj»ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»ubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhj»ubj*)�”}”(hŒmask”h]”hŒmask”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhj·ubjI)�”}”(hŒsmp_call_func_t func”h]”(h)�”}”(hhh]”j*)�”}”(hŒsmp_call_func_t”h]”hŒsmp_call_func_t”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¡Œreftype”j£Œ reftarget”jQŒmodname”NŒ classname”Nj§jª)�”}”j­]”jŒc.smp_call_function_many”†”asbuh1hhjHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHubj*)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhj·ubjI)�”}”(hŒ void *info”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhj�ubj*)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhj·ubjI)�”}”(hŒ bool wait”h]”(j)�”}”(hjyh]”hŒbool”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjÒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒubj*)�”}”(hŒwait”h]”hŒwait”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjÒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhj·ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBhj~h²hh³j�h´Mðubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj´ˆuh1hújµj¶hjzh²hh³j�h´Mðubah}”(h]”juah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1hôh³j�h´Mðhjwh²hubjÃ)�”}”(hhh]”jÈ)�”}”(hŒ Run a function on a set of CPUs.”h]”hŒ Run a function on a set of CPUs.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mðhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjwh²hh³j�h´Mðubeh}”(h]”h ]”(j¡Œfunction”eh"]”h$]”h&]”jåj¡jæj3jçj3jè‰jé‰jê‰uh1hïh²hhhÊh³Nh´Nubjì)�”}”(hXw**Parameters** ``const struct cpumask *mask`` The set of cpus to run on (only runs on online subset). ``smp_call_func_t func`` The function to run. This must be fast and non-blocking. ``void *info`` An arbitrary pointer to pass to the function. ``bool wait`` If true, wait (atomically) until function has completed on other CPUs. **Description** You must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler. **func** is not called on the local CPU even if **mask** contains it. Consider using on_each_cpu_cond_mask() instead if this is not desirable.”h]”(jÈ)�”}”(hŒ**Parameters**”h]”jö)�”}”(hj=h]”hŒ Parameters”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Môhj7ubj )�”}”(hhh]”(j)�”}”(hŒW``const struct cpumask *mask`` The set of cpus to run on (only runs on online subset). ”h]”(j)�”}”(hŒ``const struct cpumask *mask``”h]”j)�”}”(hj\h]”hŒconst struct cpumask *mask”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´MñhjVubj3)�”}”(hhh]”jÈ)�”}”(hŒ7The set of cpus to run on (only runs on online subset).”h]”hŒ7The set of cpus to run on (only runs on online subset).”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jqh´Mñhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jqh´MñhjSubj)�”}”(hŒR``smp_call_func_t func`` The function to run. This must be fast and non-blocking. ”h]”(j)�”}”(hŒ``smp_call_func_t func``”h]”j)�”}”(hj•h]”hŒsmp_call_func_t func”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mòhj�ubj3)�”}”(hhh]”jÈ)�”}”(hŒ8The function to run. This must be fast and non-blocking.”h]”hŒ8The function to run. This must be fast and non-blocking.”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jªh´Mòhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªh´MòhjSubj)�”}”(hŒ=``void *info`` An arbitrary pointer to pass to the function. ”h]”(j)�”}”(hŒ``void *info``”h]”j)�”}”(hjÎh]”hŒ void *info”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´MóhjÈubj3)�”}”(hhh]”jÈ)�”}”(hŒ-An arbitrary pointer to pass to the function.”h]”hŒ-An arbitrary pointer to pass to the function.”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jãh´Móhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jãh´MóhjSubj)�”}”(hŒU``bool wait`` If true, wait (atomically) until function has completed on other CPUs. ”h]”(j)�”}”(hŒ ``bool wait``”h]”j)�”}”(hjh]”hŒ bool wait”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mõhjubj3)�”}”(hhh]”jÈ)�”}”(hŒFIf true, wait (atomically) until function has completed on other CPUs.”h]”hŒFIf true, wait (atomically) until function has completed on other CPUs.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Môhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´MõhjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj7ubjÈ)�”}”(hŒ**Description**”h]”jö)�”}”(hjCh]”hŒ Description”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M÷hj7ubjÈ)�”}”(hŒ|You must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler.”h]”hŒ|You must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler.”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Möhj7ubjÈ)�”}”(hŒ�**func** is not called on the local CPU even if **mask** contains it. Consider using on_each_cpu_cond_mask() instead if this is not desirable.”h]”(jö)�”}”(hŒ**func**”h]”hŒfunc”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjhubhŒ( is not called on the local CPU even if ”…”�”}”(hjhh²hh³Nh´Nubjö)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjhubhŒW contains it. Consider using on_each_cpu_cond_mask() instead if this is not desirable.”…”�”}”(hjhh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mùhj7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jëhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒsmp_call_function (C function)”Œc.smp_call_function”hNt”auh1hÝhhÊh²hh³Nh´Nubhð)�”}”(hhh]”(hõ)�”}”(hŒCvoid smp_call_function (smp_call_func_t func, void *info, int wait)”h]”hû)�”}”(hŒBvoid smp_call_function(smp_call_func_t func, void *info, int wait)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj³h²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³h²hh³jÅh´Mubj$)�”}”(hŒsmp_call_function”h]”j*)�”}”(hŒsmp_call_function”h]”hŒsmp_call_function”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjÔubah}”(h]”h ]”(j=j>eh"]”h$]”h&]”hÅhÆuh1j#hj³h²hh³jÅh´MubjC)�”}”(hŒ,(smp_call_func_t func, void *info, int wait)”h]”(jI)�”}”(hŒsmp_call_func_t func”h]”(h)�”}”(hhh]”j*)�”}”(hŒsmp_call_func_t”h]”hŒsmp_call_func_t”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¡Œreftype”j£Œ reftarget”jùŒmodname”NŒ classname”Nj§jª)�”}”j­]”j°)�”}”j£jÚsbŒc.smp_call_function”†”asbuh1hhjðubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðubj*)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjìubjI)�”}”(hŒ void *info”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj:ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:ubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhj:ubj*)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjìubjI)�”}”(hŒint wait”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj|ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|ubj*)�”}”(hŒwait”h]”hŒwait”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjìubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBhj³h²hh³jÅh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj´ˆuh1hújµj¶hj¯h²hh³jÅh´Mubah}”(h]”jªah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1hôh³jÅh´Mhj¬h²hubjÃ)�”}”(hhh]”jÈ)�”}”(hŒ!Run a function on all other CPUs.”h]”hŒ!Run a function on all other CPUs.”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´MhjÃh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¬h²hh³jÅh´Mubeh}”(h]”h ]”(j¡Œfunction”eh"]”h$]”h&]”jåj¡jæjÞjçjÞjè‰jé‰jê‰uh1hïh²hhhÊh³Nh´Nubjì)�”}”(hX **Parameters** ``smp_call_func_t func`` The function to run. This must be fast and non-blocking. ``void *info`` An arbitrary pointer to pass to the function. ``int wait`` If true, wait (atomically) until function has completed on other CPUs. **Description** If **wait** is true, then returns once **func** has returned; otherwise it returns just before the target cpu calls **func**. You must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler.”h]”(jÈ)�”}”(hŒ**Parameters**”h]”jö)�”}”(hjèh]”hŒ Parameters”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M hjâubj )�”}”(hhh]”(j)�”}”(hŒR``smp_call_func_t func`` The function to run. This must be fast and non-blocking. ”h]”(j)�”}”(hŒ``smp_call_func_t func``”h]”j)�”}”(hjh]”hŒsmp_call_func_t func”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhjubj3)�”}”(hhh]”jÈ)�”}”(hŒ8The function to run. This must be fast and non-blocking.”h]”hŒ8The function to run. This must be fast and non-blocking.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Mhjþubj)�”}”(hŒ=``void *info`` An arbitrary pointer to pass to the function. ”h]”(j)�”}”(hŒ``void *info``”h]”j)�”}”(hj@h]”hŒ void *info”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhj:ubj3)�”}”(hhh]”jÈ)�”}”(hŒ-An arbitrary pointer to pass to the function.”h]”hŒ-An arbitrary pointer to pass to the function.”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jUh´MhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jUh´Mhjþubj)�”}”(hŒT``int wait`` If true, wait (atomically) until function has completed on other CPUs. ”h]”(j)�”}”(hŒ ``int wait``”h]”j)�”}”(hjyh]”hŒint wait”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M hjsubj3)�”}”(hhh]”jÈ)�”}”(hŒFIf true, wait (atomically) until function has completed on other CPUs.”h]”hŒFIf true, wait (atomically) until function has completed on other CPUs.”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽh´M hjþubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjâubjÈ)�”}”(hŒ**Description**”h]”jö)�”}”(hjµh]”hŒ Description”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M hjâubjÈ)�”}”(hŒ}If **wait** is true, then returns once **func** has returned; otherwise it returns just before the target cpu calls **func**.”h]”(hŒIf ”…”�”}”(hjËh²hh³Nh´Nubjö)�”}”(hŒ**wait**”h]”hŒwait”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjËubhŒ is true, then returns once ”…”�”}”(hjËh²hh³Nh´Nubjö)�”}”(hŒ**func**”h]”hŒfunc”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjËubhŒE has returned; otherwise it returns just before the target cpu calls ”…”�”}”(hjËh²hh³Nh´Nubjö)�”}”(hŒ**func**”h]”hŒfunc”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjËubhŒ.”…”�”}”(hjËh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M hjâubjÈ)�”}”(hŒ|You must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler.”h]”hŒ|You must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M hjâubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jëhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ"on_each_cpu_cond_mask (C function)”Œc.on_each_cpu_cond_mask”hNt”auh1hÝhhÊh²hh³Nh´Nubhð)�”}”(hhh]”(hõ)�”}”(hŒvoid on_each_cpu_cond_mask (smp_cond_func_t cond_func, smp_call_func_t func, void *info, bool wait, const struct cpumask *mask)”h]”hû)�”}”(hŒ~void on_each_cpu_cond_mask(smp_cond_func_t cond_func, smp_call_func_t func, void *info, bool wait, const struct cpumask *mask)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj;h²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mqubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;h²hh³jMh´Mqubj$)�”}”(hŒon_each_cpu_cond_mask”h]”j*)�”}”(hŒon_each_cpu_cond_mask”h]”hŒon_each_cpu_cond_mask”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj\ubah}”(h]”h ]”(j=j>eh"]”h$]”h&]”hÅhÆuh1j#hj;h²hh³jMh´MqubjC)�”}”(hŒd(smp_cond_func_t cond_func, smp_call_func_t func, void *info, bool wait, const struct cpumask *mask)”h]”(jI)�”}”(hŒsmp_cond_func_t cond_func”h]”(h)�”}”(hhh]”j*)�”}”(hŒsmp_cond_func_t”h]”hŒsmp_cond_func_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¡Œreftype”j£Œ reftarget”j�Œmodname”NŒ classname”Nj§jª)�”}”j­]”j°)�”}”j£jbsbŒc.on_each_cpu_cond_mask”†”asbuh1hhjxubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjxubj*)�”}”(hŒ cond_func”h]”hŒ cond_func”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjtubjI)�”}”(hŒsmp_call_func_t func”h]”(h)�”}”(hhh]”j*)�”}”(hŒsmp_call_func_t”h]”hŒsmp_call_func_t”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjÆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¡Œreftype”j£Œ reftarget”jËŒmodname”NŒ classname”Nj§jª)�”}”j­]”j›Œc.on_each_cpu_cond_mask”†”asbuh1hhjÂubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂubj*)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjÂubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjtubjI)�”}”(hŒ void *info”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhj ubj*)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjtubjI)�”}”(hŒ bool wait”h]”(j)�”}”(hjyh]”hŒbool”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjLubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLubj*)�”}”(hŒwait”h]”hŒwait”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjtubjI)�”}”(hŒconst struct cpumask *mask”h]”(jO)�”}”(hjRh]”hŒconst”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j[ah"]”h$]”h&]”uh1jNhj€ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€ubjO)�”}”(hjoh]”hŒstruct”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”j[ah"]”h$]”h&]”uh1jNhj€ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€ubh)�”}”(hhh]”j*)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¡Œreftype”•5nj£Œ reftarget”j¿Œmodname”NŒ classname”Nj§jª)�”}”j­]”j›Œc.on_each_cpu_cond_mask”†”asbuh1hhj€ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€ubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhj€ubj*)�”}”(hŒmask”h]”hŒmask”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjtubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBhj;h²hh³jMh´Mqubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj´ˆuh1hújµj¶hj7h²hh³jMh´Mqubah}”(h]”j2ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1hôh³jMh´Mqhj4h²hubjÃ)�”}”(hhh]”jÈ)�”}”(hŒ·Call a function on each processor for which the supplied function cond_func returns true, optionally waiting for all the required CPUs to finish. This may include the local processor.”h]”hŒ·Call a function on each processor for which the supplied function cond_func returns true, optionally waiting for all the required CPUs to finish. This may include the local processor.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mqhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj4h²hh³jMh´Mqubeh}”(h]”h ]”(j¡Œfunction”eh"]”h$]”h&]”jåj¡jæj8jçj8jè‰jé‰jê‰uh1hïh²hhhÊh³Nh´Nubjì)�”}”(hX8**Parameters** ``smp_cond_func_t cond_func`` A callback function that is passed a cpu id and the info parameter. The function is called with preemption disabled. The function should return a boolean value indicating whether to IPI the specified CPU. ``smp_call_func_t func`` The function to run on all applicable CPUs. This must be fast and non-blocking. ``void *info`` An arbitrary pointer to pass to both functions. ``bool wait`` If true, wait until function has completed on other CPUs. ``const struct cpumask *mask`` The set of cpus to run on (only runs on online subset). **Description** Target CPU selection and work queueing are done with preemption disabled. This protects against CPUs going offline, but not against CPUs coming online concurrently; newly online CPUs are not guaranteed to be seen or sent an IPI. If **wait** is true, the final wait for remote completion happens after that preemption-disabled section. You must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler.”h]”(jÈ)�”}”(hŒ**Parameters**”h]”jö)�”}”(hjBh]”hŒ Parameters”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Muhj<ubj )�”}”(hhh]”(j)�”}”(hŒë``smp_cond_func_t cond_func`` A callback function that is passed a cpu id and the info parameter. The function is called with preemption disabled. The function should return a boolean value indicating whether to IPI the specified CPU. ”h]”(j)�”}”(hŒ``smp_cond_func_t cond_func``”h]”j)�”}”(hjah]”hŒsmp_cond_func_t cond_func”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Myhj[ubj3)�”}”(hhh]”jÈ)�”}”(hŒÌA callback function that is passed a cpu id and the info parameter. The function is called with preemption disabled. The function should return a boolean value indicating whether to IPI the specified CPU.”h]”hŒÌA callback function that is passed a cpu id and the info parameter. The function is called with preemption disabled. The function should return a boolean value indicating whether to IPI the specified CPU.”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Muhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jvh´MyhjXubj)�”}”(hŒi``smp_call_func_t func`` The function to run on all applicable CPUs. This must be fast and non-blocking. ”h]”(j)�”}”(hŒ``smp_call_func_t func``”h]”j)�”}”(hj›h]”hŒsmp_call_func_t func”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M{hj•ubj3)�”}”(hhh]”jÈ)�”}”(hŒOThe function to run on all applicable CPUs. This must be fast and non-blocking.”h]”hŒOThe function to run on all applicable CPUs. This must be fast and non-blocking.”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mzhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j°h´M{hjXubj)�”}”(hŒ?``void *info`` An arbitrary pointer to pass to both functions. ”h]”(j)�”}”(hŒ``void *info``”h]”j)�”}”(hjÕh]”hŒ void *info”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M|hjÏubj3)�”}”(hhh]”jÈ)�”}”(hŒ/An arbitrary pointer to pass to both functions.”h]”hŒ/An arbitrary pointer to pass to both functions.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jêh´M|hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêh´M|hjXubj)�”}”(hŒH``bool wait`` If true, wait until function has completed on other CPUs. ”h]”(j)�”}”(hŒ ``bool wait``”h]”j)�”}”(hjh]”hŒ bool wait”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M}hjubj3)�”}”(hhh]”jÈ)�”}”(hŒ9If true, wait until function has completed on other CPUs.”h]”hŒ9If true, wait until function has completed on other CPUs.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j#h´M}hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j#h´M}hjXubj)�”}”(hŒW``const struct cpumask *mask`` The set of cpus to run on (only runs on online subset). ”h]”(j)�”}”(hŒ``const struct cpumask *mask``”h]”j)�”}”(hjGh]”hŒconst struct cpumask *mask”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M~hjAubj3)�”}”(hhh]”jÈ)�”}”(hŒ7The set of cpus to run on (only runs on online subset).”h]”hŒ7The set of cpus to run on (only runs on online subset).”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j\h´M~hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j\h´M~hjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj<ubjÈ)�”}”(hŒ**Description**”h]”jö)�”}”(hj‚h]”hŒ Description”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M€hj<ubjÈ)�”}”(hXNTarget CPU selection and work queueing are done with preemption disabled. This protects against CPUs going offline, but not against CPUs coming online concurrently; newly online CPUs are not guaranteed to be seen or sent an IPI. If **wait** is true, the final wait for remote completion happens after that preemption-disabled section.”h]”(hŒèTarget CPU selection and work queueing are done with preemption disabled. This protects against CPUs going offline, but not against CPUs coming online concurrently; newly online CPUs are not guaranteed to be seen or sent an IPI. If ”…”�”}”(hj˜h²hh³Nh´Nubjö)�”}”(hŒ**wait**”h]”hŒwait”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj˜ubhŒ^ is true, the final wait for remote completion happens after that preemption-disabled section.”…”�”}”(hj˜h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhj<ubjÈ)�”}”(hŒ|You must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler.”h]”hŒ|You must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler.”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M…hj<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jëhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒkick_all_cpus_sync (C function)”Œc.kick_all_cpus_sync”hNt”auh1hÝhhÊh²hh³Nh´Nubhð)�”}”(hhh]”(hõ)�”}”(hŒvoid kick_all_cpus_sync (void)”h]”hû)�”}”(hŒvoid kick_all_cpus_sync(void)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjäh²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mšubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäh²hh³jöh´Mšubj$)�”}”(hŒkick_all_cpus_sync”h]”j*)�”}”(hŒkick_all_cpus_sync”h]”hŒkick_all_cpus_sync”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjubah}”(h]”h ]”(j=j>eh"]”h$]”h&]”hÅhÆuh1j#hjäh²hh³jöh´MšubjC)�”}”(hŒ(void)”h]”jI)�”}”(hŒvoid”h]”j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj!ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBhjäh²hh³jöh´Mšubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj´ˆuh1hújµj¶hjàh²hh³jöh´Mšubah}”(h]”jÛah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1hôh³jöh´MšhjÝh²hubjÃ)�”}”(hhh]”jÈ)�”}”(hŒForce all cpus out of idle”h]”hŒForce all cpus out of idle”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´MšhjLh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÝh²hh³jöh´Mšubeh}”(h]”h ]”(j¡Œfunction”eh"]”h$]”h&]”jåj¡jæjgjçjgjè‰jé‰jê‰uh1hïh²hhhÊh³Nh´Nubjì)�”}”(hXÊ**Parameters** ``void`` no arguments **Description** Used to synchronize the update of pm_idle function pointer. It's called after the pointer is updated and returns after the dummy callback function has been executed on all cpus. The execution of the function can only happen on the remote cpus after they have left the idle function which had been called via pm_idle function pointer. So it's guaranteed that nothing uses the previous pointer anymore.”h]”(jÈ)�”}”(hŒ**Parameters**”h]”jö)�”}”(hjqh]”hŒ Parameters”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mžhjkubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj�h]”hŒvoid”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´KhjŠubj3)�”}”(hhh]”jÈ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j¥h´Khj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥h´Khj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjkubjÈ)�”}”(hŒ**Description**”h]”jö)�”}”(hjËh]”hŒ Description”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´KhjkubjÈ)�”}”(hX�Used to synchronize the update of pm_idle function pointer. It's called after the pointer is updated and returns after the dummy callback function has been executed on all cpus. The execution of the function can only happen on the remote cpus after they have left the idle function which had been called via pm_idle function pointer. So it's guaranteed that nothing uses the previous pointer anymore.”h]”hX”Used to synchronize the update of pm_idle function pointer. It’s called after the pointer is updated and returns after the dummy callback function has been executed on all cpus. The execution of the function can only happen on the remote cpus after they have left the idle function which had been called via pm_idle function pointer. So it’s guaranteed that nothing uses the previous pointer anymore.”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M›hjkubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jëhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒ"wake_up_all_idle_cpus (C function)”Œc.wake_up_all_idle_cpus”hNt”auh1hÝhhÊh²hh³Nh´Nubhð)�”}”(hhh]”(hõ)�”}”(hŒ!void wake_up_all_idle_cpus (void)”h]”hû)�”}”(hŒ void wake_up_all_idle_cpus(void)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj h²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M­ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj h²hh³jh´M­ubj$)�”}”(hŒwake_up_all_idle_cpus”h]”j*)�”}”(hŒwake_up_all_idle_cpus”h]”hŒwake_up_all_idle_cpus”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj-ubah}”(h]”h ]”(j=j>eh"]”h$]”h&]”hÅhÆuh1j#hj h²hh³jh´M­ubjC)�”}”(hŒ(void)”h]”jI)�”}”(hŒvoid”h]”j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjIubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjEubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBhj h²hh³jh´M­ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj´ˆuh1hújµj¶hjh²hh³jh´M­ubah}”(h]”jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1hôh³jh´M­hjh²hubjÃ)�”}”(hhh]”jÈ)�”}”(hŒ¯break all cpus out of idle wake_up_all_idle_cpus try to break all cpus which is in idle state even including idle polling cpus, for non-idle cpus, we will do nothing for them.”h]”hŒ¯break all cpus out of idle wake_up_all_idle_cpus try to break all cpus which is in idle state even including idle polling cpus, for non-idle cpus, we will do nothing for them.”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M­hjth²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³jh´M­ubeh}”(h]”h ]”(j¡Œfunction”eh"]”h$]”h&]”jåj¡jæj�jçj�jè‰jé‰jê‰uh1hïh²hhhÊh³Nh´Nubjì)�”}”(hŒ'**Parameters** ``void`` no arguments”h]”(jÈ)�”}”(hŒ**Parameters**”h]”jö)�”}”(hj™h]”hŒ Parameters”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M±hj“ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj¸h]”hŒvoid”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´M³hj²ubj3)�”}”(hhh]”jÈ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´KhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÍh´M³hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj“ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jëhhÊh²hh³Nh´NubhÞ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(hêŒsmp_call_on_cpu (C function)”Œc.smp_call_on_cpu”hNt”auh1hÝhhÊh²hh³Nh´Nubhð)�”}”(hhh]”(hõ)�”}”(hŒQint smp_call_on_cpu (unsigned int cpu, int (*func)(void *), void *par, bool phys)”h]”hû)�”}”(hŒOint smp_call_on_cpu(unsigned int cpu, int (*func)(void*), void *par, bool phys)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjh²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Múubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh²hh³j h´Múubj$)�”}”(hŒsmp_call_on_cpu”h]”j*)�”}”(hŒsmp_call_on_cpu”h]”hŒsmp_call_on_cpu”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj/ubah}”(h]”h ]”(j=j>eh"]”h$]”h&]”hÅhÆuh1j#hjh²hh³j h´MúubjC)�”}”(hŒ<(unsigned int cpu, int (*func)(void*), void *par, bool phys)”h]”(jI)�”}”(hŒunsigned int cpu”h]”(j)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjKubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjKubj)�”}”(hŒint”h]”hŒint”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjKubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjKubj*)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjGubjI)�”}”(hŒint (*func)(void*)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjœubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœubjÄ)�”}”(hŒ(”h]”hŒ(”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhjœubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhjœubj*)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjœubjÄ)�”}”(hjh]”hŒ)”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhjœubjÄ)�”}”(hj¾h]”hŒ(”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhjœubj)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjœubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhjœubjÄ)�”}”(hjh]”hŒ)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhjœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjGubjI)�”}”(hŒ void *par”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhj.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.ubjÄ)�”}”(hjÇh]”hŒ*”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jÐah"]”h$]”h&]”uh1jÃhj.ubj*)�”}”(hŒpar”h]”hŒpar”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hj.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjGubjI)�”}”(hŒ bool phys”h]”(j)�”}”(hjyh]”hŒbool”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjpubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjpubj*)�”}”(hŒphys”h]”hŒphys”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j)hjpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jHhjGubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBhjh²hh³j h´Múubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj´ˆuh1hújµj¶hj h²hh³j h´Múubah}”(h]”jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1hôh³j h´Múhjh²hubjÃ)�”}”(hhh]”jÈ)�”}”(hŒ` for more info. **Return** ``-ENXIO`` if the **cpu** is invalid; otherwise the return value from **func**.”h]”(jÈ)�”}”(hŒ**Parameters**”h]”jö)�”}”(hjÛh]”hŒ Parameters”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´MþhjÕubj )�”}”(hhh]”(j)�”}”(hŒ(``unsigned int cpu`` The CPU to run on. ”h]”(j)�”}”(hŒ``unsigned int cpu``”h]”j)�”}”(hjúh]”hŒunsigned int cpu”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mühjôubj3)�”}”(hhh]”jÈ)�”}”(hŒThe CPU to run on.”h]”hŒThe CPU to run on.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jh´Mühjubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Mühjñubj)�”}”(hŒ,``int (*func)(void *)`` The function to run ”h]”(j)�”}”(hŒ``int (*func)(void *)``”h]”j)�”}”(hj3h]”hŒint (*func)(void *)”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mýhj-ubj3)�”}”(hhh]”jÈ)�”}”(hŒThe function to run”h]”hŒThe function to run”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³jHh´MýhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jHh´Mýhjñubj)�”}”(hŒ;``void *par`` An arbitrary pointer parameter for **func**. ”h]”(j)�”}”(hŒ ``void *par``”h]”j)�”}”(hjlh]”hŒ void *par”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mþhjfubj3)�”}”(hhh]”jÈ)�”}”(hŒ,An arbitrary pointer parameter for **func**.”h]”(hŒ#An arbitrary pointer parameter for ”…”�”}”(hj…h²hh³Nh´Nubjö)�”}”(hŒ**func**”h]”hŒfunc”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj…ubhŒ.”…”�”}”(hj…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j�h´Mþhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hjfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�h´Mþhjñubj)�”}”(hŒ‘``bool phys`` If **true**, force to run on physical **cpu**. See :c:type:`struct smp_call_on_cpu_struct ` for more info. ”h]”(j)�”}”(hŒ ``bool phys``”h]”j)�”}”(hj·h]”hŒ bool phys”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´Mhj±ubj3)�”}”(hhh]”jÈ)�”}”(hŒ‚If **true**, force to run on physical **cpu**. See :c:type:`struct smp_call_on_cpu_struct ` for more info.”h]”(hŒIf ”…”�”}”(hjÐh²hh³Nh´Nubjö)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÐubhŒ, force to run on physical ”…”�”}”(hjÐh²hh³Nh´Nubjö)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÐubhŒ. See ”…”�”}”(hjÐh²hh³Nh´Nubh)�”}”(hŒ@:c:type:`struct smp_call_on_cpu_struct `”h]”j)�”}”(hjþh]”hŒstruct smp_call_on_cpu_struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(Œxref”j¡Œc-type”eh"]”h$]”h&]”uh1jhjüubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ core-api/SMP”Œ refdomain”j¡Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j§jª)�”}”j­]”sbŒ reftarget”Œsmp_call_on_cpu_struct”uh1hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´MÿhjÐubhŒ for more info.”…”�”}”(hjÐh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³j!h´MÿhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j2hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌh´Mhjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÕubjÈ)�”}”(hŒ **Return**”h]”jö)�”}”(hj@h]”hŒReturn”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´MhjÕubjÈ)�”}”(hŒO``-ENXIO`` if the **cpu** is invalid; otherwise the return value from **func**.”h]”(j)�”}”(hŒ ``-ENXIO``”h]”hŒ-ENXIO”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjVubhŒ if the ”…”�”}”(hjVh²hh³Nh´Nubjö)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjVubhŒ- is invalid; otherwise the return value from ”…”�”}”(hjVh²hh³Nh´Nubjö)�”}”(hŒ**func**”h]”hŒfunc”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjVubhŒ.”…”�”}”(hjVh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÇh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/SMP:10: ./kernel/smp.c”h´MhjÕubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jëhhÊh²hh³Nh´Nubeh}”(h]”Œsmp-primitives”ah ]”h"]”Œsmp primitives”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jÉŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”j£j sŒ nametypes”}”j£‰sh}”(j hÊhìhöjpjuj¡j¦j^jcj¾ jà jujzjªj¯j2j7jÛjàjjjj uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.