€•BŒ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/bpf/cpumasks”Œ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/bpf/cpumasks”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/it_IT/bpf/cpumasks”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/ja_JP/bpf/cpumasks”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/ko_KR/bpf/cpumasks”Œ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/bpf/cpumasks”Œ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/bpf/cpumasks”Œ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/bpf/cpumasks.rst”h´KubhŒtarget”“”)�”}”(hŒ.. _cpumasks-header-label:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œcpumasks-header-label”uh1hÈh´Khhh²hh³hÇubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒBPF cpumask kfuncs”h]”hŒBPF cpumask kfuncs”…”�”}”(hhÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhhØh²hh³hÇh´Kubh×)�”}”(hhh]”(hÜ)�”}”(hŒ1. Introduction”h]”hŒ1. Introduction”…”�”}”(hhîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhhëh²hh³hÇh´K ubhŒ paragraph”“”)�”}”(hX8``struct cpumask`` is a bitmap data structure in the kernel whose indices reflect the CPUs on the system. Commonly, cpumasks are used to track which CPUs a task is affinitized to, but they can also be used to e.g. track which cores are associated with a scheduling domain, which cores on a machine are idle, etc.”h]”(hŒliteral”“”)�”}”(hŒ``struct cpumask``”h]”hŒstruct cpumask”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhþubhX& is a bitmap data structure in the kernel whose indices reflect the CPUs on the system. Commonly, cpumasks are used to track which CPUs a task is affinitized to, but they can also be used to e.g. track which cores are associated with a scheduling domain, which cores on a machine are idle, etc.”…”�”}”(hhþh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´K hhëh²hubhý)�”}”(hŒ~BPF provides programs with a set of :ref:`kfuncs-header-label` that can be used to allocate, mutate, query, and free cpumasks.”h]”(hŒ$BPF provides programs with a set of ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:ref:`kfuncs-header-label`”h]”hŒinline”“”)�”}”(hj&h]”hŒkfuncs-header-label”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1j(hj$ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ bpf/cpumasks”Œ refdomain”j5Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆŒ reftarget”Œkfuncs-header-label”uh1hh³hÇh´KhjubhŒ@ that can be used to allocate, mutate, query, and free cpumasks.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Khhëh²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ1. introduction”ah$]”h&]”uh1hÖhhØh²hh³hÇh´K ubh×)�”}”(hhh]”(hÜ)�”}”(hŒ2. BPF cpumask objects”h]”hŒ2. BPF cpumask objects”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj[h²hh³hÇh´Kubhý)�”}”(hŒKThere are two different types of cpumasks that can be used by BPF programs.”h]”hŒKThere are two different types of cpumasks that can be used by BPF programs.”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Khj[h²hubh×)�”}”(hhh]”(hÜ)�”}”(hŒ2.1 ``struct bpf_cpumask *``”h]”(hŒ2.1 ”…”�”}”(hj}h²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask *``”h]”hŒstruct bpf_cpumask *”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjzh²hh³hÇh´Kubhý)�”}”(hX``struct bpf_cpumask *`` is a cpumask that is allocated by BPF, on behalf of a BPF program, and whose lifecycle is entirely controlled by BPF. These cpumasks are RCU-protected, can be mutated, can be used as kptrs, and can be safely cast to a ``struct cpumask *``.”h]”(j)�”}”(hŒ``struct bpf_cpumask *``”h]”hŒstruct bpf_cpumask *”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™ubhŒÛ is a cpumask that is allocated by BPF, on behalf of a BPF program, and whose lifecycle is entirely controlled by BPF. These cpumasks are RCU-protected, can be mutated, can be used as kptrs, and can be safely cast to a ”…”�”}”(hj™h²hh³Nh´Nubj)�”}”(hŒ``struct cpumask *``”h]”hŒstruct cpumask *”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™ubhŒ.”…”�”}”(hj™h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Khjzh²hubeh}”(h]”Œstruct-bpf-cpumask”ah ]”h"]”Œ2.1 struct bpf_cpumask *”ah$]”h&]”uh1hÖhj[h²hh³hÇh´Kubh×)�”}”(hhh]”(hÜ)�”}”(hŒ(2.1.1 ``struct bpf_cpumask *`` lifecycle”h]”(hŒ2.1.1 ”…”�”}”(hjÒh²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask *``”h]”hŒstruct bpf_cpumask *”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒubhŒ lifecycle”…”�”}”(hjÒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjÏh²hh³hÇh´K#ubhý)�”}”(hŒ_A ``struct bpf_cpumask *`` is allocated, acquired, and released, using the following functions:”h]”(hŒA ”…”�”}”(hjòh²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask *``”h]”hŒstruct bpf_cpumask *”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòubhŒE is allocated, acquired, and released, using the following functions:”…”�”}”(hjòh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´K%hjÏh²hubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œbpf_cpumask_create (C function)”Œc.bpf_cpumask_create”hNt”auh1jhjÏh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ:__bpf_kfunc struct bpf_cpumask * bpf_cpumask_create (void)”h]”hŒdesc_signature_line”“”)�”}”(hŒ8__bpf_kfunc struct bpf_cpumask *bpf_cpumask_create(void)”h]”(hŒ __bpf_kfunc”…”�”}”(hj0h²hh³Nh´NubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j8hj0h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:40: ./kernel/bpf/cpumask.c”h´K(ubhŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jJhj0h²hh³jIh´K(ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj0h²hh³jIh´K(ubh)�”}”(hhh]”hŒ desc_sig_name”“”)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jlhjiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”jpŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j‹Œ ASTIdentifier”“”)�”}”j†Œbpf_cpumask_create”sbŒc.bpf_cpumask_create”†”asbuh1hhj0h²hh³jIh´K(ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj0h²hh³jIh´K(ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j§hj0h²hh³jIh´K(ubhŒ desc_name”“”)�”}”(hŒbpf_cpumask_create”h]”jm)�”}”(hj–h]”hŒbpf_cpumask_create”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjºubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j¸hj0h²hh³jIh´K(ubhŒdesc_parameterlist”“”)�”}”(hŒ(void)”h]”hŒdesc_parameter”“”)�”}”(hŒvoid”h]”hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jßhjÛubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjÕubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhj0h²hh³jIh´K(ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1j.Œsphinx_line_type”Œ declarator”hj*h²hh³jIh´K(ubah}”(h]”j!ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1j(h³jIh´K(hj%h²hubhŒ desc_content”“”)�”}”(hhh]”hý)�”}”(hŒCreate a mutable BPF cpumask.”h]”hŒCreate a mutable BPF cpumask.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:40: ./kernel/bpf/cpumask.c”h´K(hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%h²hh³jIh´K(ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”Œdomain”j„Œobjtype”j.Œdesctype”j.Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1j#h²hhjÏh³Nh´NubhŒ container”“”)�”}”(hX**Parameters** ``void`` no arguments **Description** Allocates a cpumask that can be queried, mutated, acquired, and released by a BPF program. The cpumask returned by this function must either be embedded in a map as a kptr, or freed with bpf_cpumask_release(). bpf_cpumask_create() allocates memory using the BPF memory allocator, and will not block. It may return NULL if no memory is available. **Return** * A pointer to a new struct bpf_cpumask instance on success. * NULL if the BPF memory allocator is out of memory.”h]”(hý)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hj@h]”hŒ Parameters”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:40: ./kernel/bpf/cpumask.c”h´K,hj:ubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ``void`` no arguments ”h]”(hŒterm”“”)�”}”(hŒ``void``”h]”j)�”}”(hjgh]”hŒvoid”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:40: ./kernel/bpf/cpumask.c”h´Khj_ubhŒ definition”“”)�”}”(hhh]”hý)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j|h´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j|h´KhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhj:ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hj¤h]”hŒ Description”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:40: ./kernel/bpf/cpumask.c”h´Khj:ubhý)�”}”(hŒÑAllocates a cpumask that can be queried, mutated, acquired, and released by a BPF program. The cpumask returned by this function must either be embedded in a map as a kptr, or freed with bpf_cpumask_release().”h]”hŒÑAllocates a cpumask that can be queried, mutated, acquired, and released by a BPF program. The cpumask returned by this function must either be embedded in a map as a kptr, or freed with bpf_cpumask_release().”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:40: ./kernel/bpf/cpumask.c”h´K)hj:ubhý)�”}”(hŒ‡bpf_cpumask_create() allocates memory using the BPF memory allocator, and will not block. It may return NULL if no memory is available.”h]”hŒ‡bpf_cpumask_create() allocates memory using the BPF memory allocator, and will not block. It may return NULL if no memory is available.”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:40: ./kernel/bpf/cpumask.c”h´K-hj:ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hjÚh]”hŒReturn”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:40: ./kernel/bpf/cpumask.c”h´K0hj:ubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ:A pointer to a new struct bpf_cpumask instance on success.”h]”hý)�”}”(hjùh]”hŒ:A pointer to a new struct bpf_cpumask instance on success.”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:40: ./kernel/bpf/cpumask.c”h´K1hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjòubjö)�”}”(hŒ2NULL if the BPF memory allocator is out of memory.”h]”hý)�”}”(hjh]”hŒ2NULL if the BPF memory allocator is out of memory.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:40: ./kernel/bpf/cpumask.c”h´K2hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjòubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”j«uh1jðh³jh´K1hj:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hjÏh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ bpf_cpumask_acquire (C function)”Œc.bpf_cpumask_acquire”hNt”auh1jhjÏh²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒR__bpf_kfunc struct bpf_cpumask * bpf_cpumask_acquire (struct bpf_cpumask *cpumask)”h]”j/)�”}”(hŒP__bpf_kfunc struct bpf_cpumask *bpf_cpumask_acquire(struct bpf_cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hjJh²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjJh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:43: ./kernel/bpf/cpumask.c”h´KGubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjJh²hh³j`h´KGubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjJh²hh³j`h´KGubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j�Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œbpf_cpumask_acquire”sbŒc.bpf_cpumask_acquire”†”asbuh1hhjJh²hh³j`h´KGubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjJh²hh³j`h´KGubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjJh²hh³j`h´KGubj¹)�”}”(hŒbpf_cpumask_acquire”h]”jm)�”}”(hj�h]”hŒbpf_cpumask_acquire”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj»ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjJh²hh³j`h´KGubjÔ)�”}”(hŒ(struct bpf_cpumask *cpumask)”h]”jÚ)�”}”(hŒstruct bpf_cpumask *cpumask”h]”(jK)�”}”(hjNh]”hŒstruct”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjÖubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÖubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjõubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”júŒmodname”NŒ classname”NjŠj�)�”}”j�]”j›Œc.bpf_cpumask_acquire”†”asbuh1hhjÖubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÖubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÖubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÖubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjÒubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjJh²hh³j`h´KGubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhjFh²hh³j`h´KGubah}”(h]”jAah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³j`h´KGhjCh²hubj)�”}”(hhh]”hý)�”}”(hŒ%Acquire a reference to a BPF cpumask.”h]”hŒ%Acquire a reference to a BPF cpumask.”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:43: ./kernel/bpf/cpumask.c”h´KGhjXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCh²hh³j`h´KGubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3jsj4jsj5‰j6‰j7‰uh1j#h²hhjÏh³Nh´Nubj9)�”}”(hXp**Parameters** ``struct bpf_cpumask *cpumask`` The BPF cpumask being acquired. The cpumask must be a trusted pointer. **Description** Acquires a reference to a BPF cpumask. The cpumask returned by this function must either be embedded in a map as a kptr, or freed with bpf_cpumask_release(). **Return** * The struct bpf_cpumask pointer passed to the function.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hj}h]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:43: ./kernel/bpf/cpumask.c”h´KKhjwubjY)�”}”(hhh]”j^)�”}”(hŒg``struct bpf_cpumask *cpumask`` The BPF cpumask being acquired. The cpumask must be a trusted pointer. ”h]”(jd)�”}”(hŒ``struct bpf_cpumask *cpumask``”h]”j)�”}”(hjœh]”hŒstruct bpf_cpumask *cpumask”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:43: ./kernel/bpf/cpumask.c”h´KIhj–ubj~)�”}”(hhh]”hý)�”}”(hŒFThe BPF cpumask being acquired. The cpumask must be a trusted pointer.”h]”hŒFThe BPF cpumask being acquired. The cpumask must be a trusted pointer.”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:43: ./kernel/bpf/cpumask.c”h´KHhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j±h´KIhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhjwubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hjØh]”hŒ Description”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:43: ./kernel/bpf/cpumask.c”h´KKhjwubhý)�”}”(hŒ�Acquires a reference to a BPF cpumask. The cpumask returned by this function must either be embedded in a map as a kptr, or freed with bpf_cpumask_release().”h]”hŒ�Acquires a reference to a BPF cpumask. The cpumask returned by this function must either be embedded in a map as a kptr, or freed with bpf_cpumask_release().”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:43: ./kernel/bpf/cpumask.c”h´KJhjwubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hjÿh]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:43: ./kernel/bpf/cpumask.c”h´KNhjwubjñ)�”}”(hhh]”jö)�”}”(hŒ6The struct bpf_cpumask pointer passed to the function.”h]”hý)�”}”(hjh]”hŒ6The struct bpf_cpumask pointer passed to the function.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:43: ./kernel/bpf/cpumask.c”h´KOhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubah}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³j)h´KOhjwubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hjÏh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ bpf_cpumask_release (C function)”Œc.bpf_cpumask_release”hNt”auh1jhjÏh²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒB__bpf_kfunc void bpf_cpumask_release (struct bpf_cpumask *cpumask)”h]”j/)�”}”(hŒA__bpf_kfunc void bpf_cpumask_release(struct bpf_cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hjRh²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjRh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:46: ./kernel/bpf/cpumask.c”h´KZubjà)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhjRh²hh³jhh´KZubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjRh²hh³jhh´KZubj¹)�”}”(hŒbpf_cpumask_release”h]”jm)�”}”(hŒbpf_cpumask_release”h]”hŒbpf_cpumask_release”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj…ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjRh²hh³jhh´KZubjÔ)�”}”(hŒ(struct bpf_cpumask *cpumask)”h]”jÚ)�”}”(hŒstruct bpf_cpumask *cpumask”h]”(jK)�”}”(hjNh]”hŒstruct”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj¡ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¡ubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÀubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÅŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j‹sbŒc.bpf_cpumask_release”†”asbuh1hhj¡ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¡ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¡ubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj�ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjRh²hh³jhh´KZubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhjNh²hh³jhh´KZubah}”(h]”jIah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jhh´KZhjKh²hubj)�”}”(hhh]”hý)�”}”(hŒ*Release a previously acquired BPF cpumask.”h]”hŒ*Release a previously acquired BPF cpumask.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:46: ./kernel/bpf/cpumask.c”h´KZhj%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKh²hh³jhh´KZubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3j@j4j@j5‰j6‰j7‰uh1j#h²hhjÏh³Nh´Nubj9)�”}”(hX"**Parameters** ``struct bpf_cpumask *cpumask`` The cpumask being released. **Description** Releases a previously acquired reference to a BPF cpumask. When the final reference of the BPF cpumask has been released, it is subsequently freed in an RCU callback in the BPF memory allocator.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hjJh]”hŒ Parameters”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:46: ./kernel/bpf/cpumask.c”h´K^hjDubjY)�”}”(hhh]”j^)�”}”(hŒ<``struct bpf_cpumask *cpumask`` The cpumask being released. ”h]”(jd)�”}”(hŒ``struct bpf_cpumask *cpumask``”h]”j)�”}”(hjih]”hŒstruct bpf_cpumask *cpumask”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:46: ./kernel/bpf/cpumask.c”h´K[hjcubj~)�”}”(hhh]”hý)�”}”(hŒThe cpumask being released.”h]”hŒThe cpumask being released.”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j~h´K[hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j~h´K[hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhjDubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hj¤h]”hŒ Description”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:46: ./kernel/bpf/cpumask.c”h´K]hjDubhý)�”}”(hŒÂReleases a previously acquired reference to a BPF cpumask. When the final reference of the BPF cpumask has been released, it is subsequently freed in an RCU callback in the BPF memory allocator.”h]”hŒÂReleases a previously acquired reference to a BPF cpumask. When the final reference of the BPF cpumask has been released, it is subsequently freed in an RCU callback in the BPF memory allocator.”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒQ/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:46: ./kernel/bpf/cpumask.c”h´K\hjDubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hjÏh²hh³Nh´Nubhý)�”}”(hŒ For example:”h]”hŒ For example:”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´K1hjÏh²hubhŒ literal_block”“”)�”}”(hXstruct cpumask_map_value { struct bpf_cpumask __kptr * cpumask; }; struct array_map { __uint(type, BPF_MAP_TYPE_ARRAY); __type(key, int); __type(value, struct cpumask_map_value); __uint(max_entries, 65536); } cpumask_map SEC(".maps"); static int cpumask_map_insert(struct bpf_cpumask *mask, u32 pid) { struct cpumask_map_value local, *v; long status; struct bpf_cpumask *old; u32 key = pid; local.cpumask = NULL; status = bpf_map_update_elem(&cpumask_map, &key, &local, 0); if (status) { bpf_cpumask_release(mask); return status; } v = bpf_map_lookup_elem(&cpumask_map, &key); if (!v) { bpf_cpumask_release(mask); return -ENOENT; } old = bpf_kptr_xchg(&v->cpumask, mask); if (old) bpf_cpumask_release(old); return 0; } /** * A sample tracepoint showing how a task's cpumask can be queried and * recorded as a kptr. */ SEC("tp_btf/task_newtask") int BPF_PROG(record_task_cpumask, struct task_struct *task, u64 clone_flags) { struct bpf_cpumask *cpumask; int ret; cpumask = bpf_cpumask_create(); if (!cpumask) return -ENOMEM; if (!bpf_cpumask_full(task->cpus_ptr)) bpf_printk("task %s has CPU affinity", task->comm); bpf_cpumask_copy(cpumask, task->cpus_ptr); return cpumask_map_insert(cpumask, task->pid); }”h]”hXstruct cpumask_map_value { struct bpf_cpumask __kptr * cpumask; }; struct array_map { __uint(type, BPF_MAP_TYPE_ARRAY); __type(key, int); __type(value, struct cpumask_map_value); __uint(max_entries, 65536); } cpumask_map SEC(".maps"); static int cpumask_map_insert(struct bpf_cpumask *mask, u32 pid) { struct cpumask_map_value local, *v; long status; struct bpf_cpumask *old; u32 key = pid; local.cpumask = NULL; status = bpf_map_update_elem(&cpumask_map, &key, &local, 0); if (status) { bpf_cpumask_release(mask); return status; } v = bpf_map_lookup_elem(&cpumask_map, &key); if (!v) { bpf_cpumask_release(mask); return -ENOENT; } old = bpf_kptr_xchg(&v->cpumask, mask); if (old) bpf_cpumask_release(old); return 0; } /** * A sample tracepoint showing how a task's cpumask can be queried and * recorded as a kptr. */ SEC("tp_btf/task_newtask") int BPF_PROG(record_task_cpumask, struct task_struct *task, u64 clone_flags) { struct bpf_cpumask *cpumask; int ret; cpumask = bpf_cpumask_create(); if (!cpumask) return -ENOMEM; if (!bpf_cpumask_full(task->cpus_ptr)) bpf_printk("task %s has CPU affinity", task->comm); bpf_cpumask_copy(cpumask, task->cpus_ptr); return cpumask_map_insert(cpumask, task->pid); }”…”�”}”hjàsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒforce”‰Œlanguage”j„Œhighlight_args”}”uh1jÞh³hÇh´K3hjÏh²hubeh}”(h]”Œstruct-bpf-cpumask-lifecycle”ah ]”h"]”Œ$2.1.1 struct bpf_cpumask * lifecycle”ah$]”h&]”uh1hÖhj[h²hh³hÇh´K#ubhŒ transition”“”)�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1júh³hÇh´Kphj[h²hubh×)�”}”(hhh]”(hÜ)�”}”(hŒ'2.1.1 ``struct bpf_cpumask *`` as kptrs”h]”(hŒ2.1.1 ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask *``”h]”hŒstruct bpf_cpumask *”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ as kptrs”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjh²hh³hÇh´Ksubhý)�”}”(hX As mentioned and illustrated above, these ``struct bpf_cpumask *`` objects can also be stored in a map and used as kptrs. If a ``struct bpf_cpumask *`` is in a map, the reference can be removed from the map with bpf_kptr_xchg(), or opportunistically acquired using RCU:”h]”(hŒ*As mentioned and illustrated above, these ”…”�”}”(hj)h²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask *``”h]”hŒstruct bpf_cpumask *”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)ubhŒ= objects can also be stored in a map and used as kptrs. If a ”…”�”}”(hj)h²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask *``”h]”hŒstruct bpf_cpumask *”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)ubhŒv is in a map, the reference can be removed from the map with bpf_kptr_xchg(), or opportunistically acquired using RCU:”…”�”}”(hj)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Kuhjh²hubjß)�”}”(hXc/* struct containing the struct bpf_cpumask kptr which is stored in the map. */ struct cpumasks_kfunc_map_value { struct bpf_cpumask __kptr * bpf_cpumask; }; /* The map containing struct cpumasks_kfunc_map_value entries. */ struct { __uint(type, BPF_MAP_TYPE_ARRAY); __type(key, int); __type(value, struct cpumasks_kfunc_map_value); __uint(max_entries, 1); } cpumasks_kfunc_map SEC(".maps"); /* ... */ /** * A simple example tracepoint program showing how a * struct bpf_cpumask * kptr that is stored in a map can * be passed to kfuncs using RCU protection. */ SEC("tp_btf/cgroup_mkdir") int BPF_PROG(cgrp_ancestor_example, struct cgroup *cgrp, const char *path) { struct bpf_cpumask *kptr; struct cpumasks_kfunc_map_value *v; u32 key = 0; /* Assume a bpf_cpumask * kptr was previously stored in the map. */ v = bpf_map_lookup_elem(&cpumasks_kfunc_map, &key); if (!v) return -ENOENT; bpf_rcu_read_lock(); /* Acquire a reference to the bpf_cpumask * kptr that's already stored in the map. */ kptr = v->cpumask; if (!kptr) { /* If no bpf_cpumask was present in the map, it's because * we're racing with another CPU that removed it with * bpf_kptr_xchg() between the bpf_map_lookup_elem() * above, and our load of the pointer from the map. */ bpf_rcu_read_unlock(); return -EBUSY; } bpf_cpumask_setall(kptr); bpf_rcu_read_unlock(); return 0; }”h]”hXc/* struct containing the struct bpf_cpumask kptr which is stored in the map. */ struct cpumasks_kfunc_map_value { struct bpf_cpumask __kptr * bpf_cpumask; }; /* The map containing struct cpumasks_kfunc_map_value entries. */ struct { __uint(type, BPF_MAP_TYPE_ARRAY); __type(key, int); __type(value, struct cpumasks_kfunc_map_value); __uint(max_entries, 1); } cpumasks_kfunc_map SEC(".maps"); /* ... */ /** * A simple example tracepoint program showing how a * struct bpf_cpumask * kptr that is stored in a map can * be passed to kfuncs using RCU protection. */ SEC("tp_btf/cgroup_mkdir") int BPF_PROG(cgrp_ancestor_example, struct cgroup *cgrp, const char *path) { struct bpf_cpumask *kptr; struct cpumasks_kfunc_map_value *v; u32 key = 0; /* Assume a bpf_cpumask * kptr was previously stored in the map. */ v = bpf_map_lookup_elem(&cpumasks_kfunc_map, &key); if (!v) return -ENOENT; bpf_rcu_read_lock(); /* Acquire a reference to the bpf_cpumask * kptr that's already stored in the map. */ kptr = v->cpumask; if (!kptr) { /* If no bpf_cpumask was present in the map, it's because * we're racing with another CPU that removed it with * bpf_kptr_xchg() between the bpf_map_lookup_elem() * above, and our load of the pointer from the map. */ bpf_rcu_read_unlock(); return -EBUSY; } bpf_cpumask_setall(kptr); bpf_rcu_read_unlock(); return 0; }”…”�”}”hj[sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjî‰jïj„jð}”uh1jÞh³hÇh´Kzhjh²hubeh}”(h]”Œstruct-bpf-cpumask-as-kptrs”ah ]”h"]”Œ#2.1.1 struct bpf_cpumask * as kptrs”ah$]”h&]”uh1hÖhj[h²hh³hÇh´Ksubjû)�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1júh³hÇh´K¯hj[h²hubh×)�”}”(hhh]”(hÜ)�”}”(hŒ2.2 ``struct cpumask``”h]”(hŒ2.2 ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ``struct cpumask``”h]”hŒstruct cpumask”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj|h²hh³hÇh´K²ubhý)�”}”(hXi``struct cpumask`` is the object that actually contains the cpumask bitmap being queried, mutated, etc. A ``struct bpf_cpumask`` wraps a ``struct cpumask``, which is why it's safe to cast it as such (note however that it is **not** safe to cast a ``struct cpumask *`` to a ``struct bpf_cpumask *``, and the verifier will reject any program that tries to do so).”h]”(j)�”}”(hŒ``struct cpumask``”h]”hŒstruct cpumask”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›ubhŒX is the object that actually contains the cpumask bitmap being queried, mutated, etc. A ”…”�”}”(hj›h²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask``”h]”hŒstruct bpf_cpumask”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›ubhŒ wraps a ”…”�”}”(hj›h²hh³Nh´Nubj)�”}”(hŒ``struct cpumask``”h]”hŒstruct cpumask”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›ubhŒG, which is why it’s safe to cast it as such (note however that it is ”…”�”}”(hj›h²hh³Nh´NubjC)�”}”(hŒ**not**”h]”hŒnot”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj›ubhŒ safe to cast a ”…”�”}”(hj›h²hh³Nh´Nubj)�”}”(hŒ``struct cpumask *``”h]”hŒstruct cpumask *”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›ubhŒ to a ”…”�”}”(hj›h²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask *``”h]”hŒstruct bpf_cpumask *”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›ubhŒ@, and the verifier will reject any program that tries to do so).”…”�”}”(hj›h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´K´hj|h²hubhý)�”}”(hŒÍAs we'll see below, any kfunc that mutates its cpumask argument will take a ``struct bpf_cpumask *`` as that argument. Any argument that simply queries the cpumask will instead take a ``struct cpumask *``.”h]”(hŒNAs we’ll see below, any kfunc that mutates its cpumask argument will take a ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask *``”h]”hŒstruct bpf_cpumask *”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒT as that argument. Any argument that simply queries the cpumask will instead take a ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ``struct cpumask *``”h]”hŒstruct cpumask *”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Kºhj|h²hubeh}”(h]”Œstruct-cpumask”ah ]”h"]”Œ2.2 struct cpumask”ah$]”h&]”uh1hÖhj[h²hh³hÇh´K²ubeh}”(h]”Œbpf-cpumask-objects”ah ]”h"]”Œ2. bpf cpumask objects”ah$]”h&]”uh1hÖhhØh²hh³hÇh´Kubh×)�”}”(hhh]”(hÜ)�”}”(hŒ3. cpumask kfuncs”h]”hŒ3. cpumask kfuncs”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjS h²hh³hÇh´K¿ubhý)�”}”(hŒÈAbove, we described the kfuncs that can be used to allocate, acquire, release, etc a ``struct bpf_cpumask *``. This section of the document will describe the kfuncs for mutating and querying cpumasks.”h]”(hŒUAbove, we described the kfuncs that can be used to allocate, acquire, release, etc a ”…”�”}”(hjd h²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask *``”h]”hŒstruct bpf_cpumask *”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjd ubhŒ[. This section of the document will describe the kfuncs for mutating and querying cpumasks.”…”�”}”(hjd h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´KÁhjS h²hubh×)�”}”(hhh]”(hÜ)�”}”(hŒ3.1 Mutating cpumasks”h]”hŒ3.1 Mutating cpumasks”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj„ h²hh³hÇh´KÆubhý)�”}”(hŒÙSome cpumask kfuncs are "read-only" in that they don't mutate any of their arguments, whereas others mutate at least one argument (which means that the argument must be a ``struct bpf_cpumask *``, as described above).”h]”(hŒ±Some cpumask kfuncs are “read-onlyâ€� in that they don’t mutate any of their arguments, whereas others mutate at least one argument (which means that the argument must be a ”…”�”}”(hj• h²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask *``”h]”hŒstruct bpf_cpumask *”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj• ubhŒ, as described above).”…”�”}”(hj• h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´KÈhj„ h²hubhý)�”}”(hŒ�This section will describe all of the cpumask kfuncs which mutate at least one argument. :ref:`cpumasks-querying-label` below describes the read-only kfuncs.”h]”(hŒYThis section will describe all of the cpumask kfuncs which mutate at least one argument. ”…”�”}”(hjµ h²hh³Nh´Nubh)�”}”(hŒ:ref:`cpumasks-querying-label`”h]”j))�”}”(hj¿ h]”hŒcpumasks-querying-label”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”(j4Œstd”Œstd-ref”eh"]”h$]”h&]”uh1j(hj½ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jAŒ refdomain”jË Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjGŒcpumasks-querying-label”uh1hh³hÇh´KÌhjµ ubhŒ& below describes the read-only kfuncs.”…”�”}”(hjµ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´KÌhj„ h²hubeh}”(h]”Œmutating-cpumasks”ah ]”h"]”Œ3.1 mutating cpumasks”ah$]”h&]”uh1hÖhjS h²hh³hÇh´KÆubh×)�”}”(hhh]”(hÜ)�”}”(hŒ3.1.1 Setting and clearing CPUs”h]”hŒ3.1.1 Setting and clearing CPUs”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjï h²hh³hÇh´KÐubhý)�”}”(hŒ~bpf_cpumask_set_cpu() and bpf_cpumask_clear_cpu() can be used to set and clear a CPU in a ``struct bpf_cpumask`` respectively:”h]”(hŒZbpf_cpumask_set_cpu() and bpf_cpumask_clear_cpu() can be used to set and clear a CPU in a ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask``”h]”hŒstruct bpf_cpumask”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ respectively:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´KÒhjï h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ bpf_cpumask_set_cpu (C function)”Œc.bpf_cpumask_set_cpu”hNt”auh1jhjï h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒK__bpf_kfunc void bpf_cpumask_set_cpu (u32 cpu, struct bpf_cpumask *cpumask)”h]”j/)�”}”(hŒJ__bpf_kfunc void bpf_cpumask_set_cpu(u32 cpu, struct bpf_cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hj5 h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj5 h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:213: ./kernel/bpf/cpumask.c”h´K¡ubjà)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjL h²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhj5 h²hh³jK h´K¡ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj5 h²hh³jK h´K¡ubj¹)�”}”(hŒbpf_cpumask_set_cpu”h]”jm)�”}”(hŒbpf_cpumask_set_cpu”h]”hŒbpf_cpumask_set_cpu”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjh ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hj5 h²hh³jK h´K¡ubjÔ)�”}”(hŒ&(u32 cpu, struct bpf_cpumask *cpumask)”h]”(jÚ)�”}”(hŒu32 cpu”h]”(h)�”}”(hhh]”jm)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjˆ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j� Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jn sbŒc.bpf_cpumask_set_cpu”†”asbuh1hhj„ ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj„ ubjm)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj„ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj€ ubjÚ)�”}”(hŒstruct bpf_cpumask *cpumask”h]”(jK)�”}”(hjNh]”hŒstruct”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjÎ ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÎ ubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjí ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jò Œmodname”NŒ classname”NjŠj�)�”}”j�]”j§ Œc.bpf_cpumask_set_cpu”†”asbuh1hhjÎ ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÎ ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÎ ubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj) h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÎ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj€ ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhj5 h²hh³jK h´K¡ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhj1 h²hh³jK h´K¡ubah}”(h]”j, ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jK h´K¡hj. h²hubj)�”}”(hhh]”hý)�”}”(hŒ%Set a bit for a CPU in a BPF cpumask.”h]”hŒ%Set a bit for a CPU in a BPF cpumask.”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:213: ./kernel/bpf/cpumask.c”h´K¡hjP h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj. h²hh³jK h´K¡ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3jk j4jk j5‰j6‰j7‰uh1j#h²hhjï h³Nh´Nubj9)�”}”(hŒ�**Parameters** ``u32 cpu`` The CPU to be set in the cpumask. ``struct bpf_cpumask *cpumask`` The BPF cpumask in which a bit is being set.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hju h]”hŒ Parameters”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:213: ./kernel/bpf/cpumask.c”h´K¥hjo ubjY)�”}”(hhh]”(j^)�”}”(hŒ.``u32 cpu`` The CPU to be set in the cpumask. ”h]”(jd)�”}”(hŒ ``u32 cpu``”h]”j)�”}”(hj” h]”hŒu32 cpu”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:213: ./kernel/bpf/cpumask.c”h´K¢hjŽ ubj~)�”}”(hhh]”hý)�”}”(hŒ!The CPU to be set in the cpumask.”h]”hŒ!The CPU to be set in the cpumask.”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j© h´K¢hjª ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjŽ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j© h´K¢hj‹ ubj^)�”}”(hŒL``struct bpf_cpumask *cpumask`` The BPF cpumask in which a bit is being set.”h]”(jd)�”}”(hŒ``struct bpf_cpumask *cpumask``”h]”j)�”}”(hjÍ h]”hŒstruct bpf_cpumask *cpumask”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjË ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:213: ./kernel/bpf/cpumask.c”h´K¤hjÇ ubj~)�”}”(hhh]”hý)�”}”(hŒ,The BPF cpumask in which a bit is being set.”h]”hŒ,The BPF cpumask in which a bit is being set.”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:213: ./kernel/bpf/cpumask.c”h´K£hjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjÇ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jâ h´K¤hj‹ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhjo ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hjï h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ"bpf_cpumask_clear_cpu (C function)”Œc.bpf_cpumask_clear_cpu”hNt”auh1jhjï h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒM__bpf_kfunc void bpf_cpumask_clear_cpu (u32 cpu, struct bpf_cpumask *cpumask)”h]”j/)�”}”(hŒL__bpf_kfunc void bpf_cpumask_clear_cpu(u32 cpu, struct bpf_cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hj# h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj# h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:213: ./kernel/bpf/cpumask.c”h´K®ubjà)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhj# h²hh³j9 h´K®ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj# h²hh³j9 h´K®ubj¹)�”}”(hŒbpf_cpumask_clear_cpu”h]”jm)�”}”(hŒbpf_cpumask_clear_cpu”h]”hŒbpf_cpumask_clear_cpu”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjV ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hj# h²hh³j9 h´K®ubjÔ)�”}”(hŒ&(u32 cpu, struct bpf_cpumask *cpumask)”h]”(jÚ)�”}”(hŒu32 cpu”h]”(h)�”}”(hhh]”jm)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjv ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j{ Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j\ sbŒc.bpf_cpumask_clear_cpu”†”asbuh1hhjr ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjr ubjm)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjr ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjn ubjÚ)�”}”(hŒstruct bpf_cpumask *cpumask”h]”(jK)�”}”(hjNh]”hŒstruct”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj¼ ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¼ ubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÛ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jà Œmodname”NŒ classname”NjŠj�)�”}”j�]”j• Œc.bpf_cpumask_clear_cpu”†”asbuh1hhj¼ ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¼ ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¼ ubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¼ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjn ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhj# h²hh³j9 h´K®ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhj h²hh³j9 h´K®ubah}”(h]”j ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³j9 h´K®hj h²hubj)�”}”(hhh]”hý)�”}”(hŒ'Clear a bit for a CPU in a BPF cpumask.”h]”hŒ'Clear a bit for a CPU in a BPF cpumask.”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:213: ./kernel/bpf/cpumask.c”h´K®hj> h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³j9 h´K®ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3jY j4jY j5‰j6‰j7‰uh1j#h²hhjï h³Nh´Nubj9)�”}”(hŒ™**Parameters** ``u32 cpu`` The CPU to be cleared from the cpumask. ``struct bpf_cpumask *cpumask`` The BPF cpumask in which a bit is being cleared.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hjc h]”hŒ Parameters”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhja ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:213: ./kernel/bpf/cpumask.c”h´K²hj] ubjY)�”}”(hhh]”(j^)�”}”(hŒ4``u32 cpu`` The CPU to be cleared from the cpumask. ”h]”(jd)�”}”(hŒ ``u32 cpu``”h]”j)�”}”(hj‚ h]”hŒu32 cpu”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:213: ./kernel/bpf/cpumask.c”h´K¯hj| ubj~)�”}”(hhh]”hý)�”}”(hŒ'The CPU to be cleared from the cpumask.”h]”hŒ'The CPU to be cleared from the cpumask.”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j— h´K¯hj˜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj| ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j— h´K¯hjy ubj^)�”}”(hŒP``struct bpf_cpumask *cpumask`` The BPF cpumask in which a bit is being cleared.”h]”(jd)�”}”(hŒ``struct bpf_cpumask *cpumask``”h]”j)�”}”(hj» h]”hŒstruct bpf_cpumask *cpumask”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:213: ./kernel/bpf/cpumask.c”h´K±hjµ ubj~)�”}”(hhh]”hý)�”}”(hŒ0The BPF cpumask in which a bit is being cleared.”h]”hŒ0The BPF cpumask in which a bit is being cleared.”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:213: ./kernel/bpf/cpumask.c”h´K°hjÑ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjµ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jÐ h´K±hjy ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhj] ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hjï h²hh³Nh´Nubhý)�”}”(hŒRThese kfuncs are pretty straightforward, and can be used, for example, as follows:”h]”hŒRThese kfuncs are pretty straightforward, and can be used, for example, as follows:”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´KØhjï h²hubjß)�”}”(hX¤/** * A sample tracepoint showing how a cpumask can be queried. */ SEC("tp_btf/task_newtask") int BPF_PROG(test_set_clear_cpu, struct task_struct *task, u64 clone_flags) { struct bpf_cpumask *cpumask; cpumask = bpf_cpumask_create(); if (!cpumask) return -ENOMEM; bpf_cpumask_set_cpu(0, cpumask); if (!bpf_cpumask_test_cpu(0, cast(cpumask))) /* Should never happen. */ goto release_exit; bpf_cpumask_clear_cpu(0, cpumask); if (bpf_cpumask_test_cpu(0, cast(cpumask))) /* Should never happen. */ goto release_exit; /* struct cpumask * pointers such as task->cpus_ptr can also be queried. */ if (bpf_cpumask_test_cpu(0, task->cpus_ptr)) bpf_printk("task %s can use CPU %d", task->comm, 0); release_exit: bpf_cpumask_release(cpumask); return 0; }”h]”hX¤/** * A sample tracepoint showing how a cpumask can be queried. */ SEC("tp_btf/task_newtask") int BPF_PROG(test_set_clear_cpu, struct task_struct *task, u64 clone_flags) { struct bpf_cpumask *cpumask; cpumask = bpf_cpumask_create(); if (!cpumask) return -ENOMEM; bpf_cpumask_set_cpu(0, cpumask); if (!bpf_cpumask_test_cpu(0, cast(cpumask))) /* Should never happen. */ goto release_exit; bpf_cpumask_clear_cpu(0, cpumask); if (bpf_cpumask_test_cpu(0, cast(cpumask))) /* Should never happen. */ goto release_exit; /* struct cpumask * pointers such as task->cpus_ptr can also be queried. */ if (bpf_cpumask_test_cpu(0, task->cpus_ptr)) bpf_printk("task %s can use CPU %d", task->comm, 0); release_exit: bpf_cpumask_release(cpumask); return 0; }”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjî‰jïj„jð}”uh1jÞh³hÇh´KÛhjï h²hubjû)�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1júh³hÇh´Kühjï h²hubhý)�”}”(hŒ›bpf_cpumask_test_and_set_cpu() and bpf_cpumask_test_and_clear_cpu() are complementary kfuncs that allow callers to atomically test and set (or clear) CPUs:”h]”hŒ›bpf_cpumask_test_and_set_cpu() and bpf_cpumask_test_and_clear_cpu() are complementary kfuncs that allow callers to atomically test and set (or clear) CPUs:”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Kþhjï h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ)bpf_cpumask_test_and_set_cpu (C function)”Œc.bpf_cpumask_test_and_set_cpu”hNt”auh1jhjï h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒT__bpf_kfunc bool bpf_cpumask_test_and_set_cpu (u32 cpu, struct bpf_cpumask *cpumask)”h]”j/)�”}”(hŒS__bpf_kfunc bool bpf_cpumask_test_and_set_cpu(u32 cpu, struct bpf_cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hjFh²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjFh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KÌubjà)�”}”(hŒbool”h]”hŒbool”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhjFh²hh³j\h´KÌubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjFh²hh³j\h´KÌubj¹)�”}”(hŒbpf_cpumask_test_and_set_cpu”h]”jm)�”}”(hŒbpf_cpumask_test_and_set_cpu”h]”hŒbpf_cpumask_test_and_set_cpu”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjyubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjFh²hh³j\h´KÌubjÔ)�”}”(hŒ&(u32 cpu, struct bpf_cpumask *cpumask)”h]”(jÚ)�”}”(hŒu32 cpu”h]”(h)�”}”(hhh]”jm)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jžŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jsbŒc.bpf_cpumask_test_and_set_cpu”†”asbuh1hhj•ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj•ubjm)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj‘ubjÚ)�”}”(hŒstruct bpf_cpumask *cpumask”h]”(jK)�”}”(hjNh]”hŒstruct”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjßubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjßubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjþubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jŒmodname”NŒ classname”NjŠj�)�”}”j�]”j¸Œc.bpf_cpumask_test_and_set_cpu”†”asbuh1hhjßubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjßubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjßubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj‘ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjFh²hh³j\h´KÌubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhjBh²hh³j\h´KÌubah}”(h]”j=ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³j\h´KÌhj?h²hubj)�”}”(hhh]”hý)�”}”(hŒ/Atomically test and set a CPU in a BPF cpumask.”h]”hŒ/Atomically test and set a CPU in a BPF cpumask.”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KÌhjah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?h²hh³j\h´KÌubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3j|j4j|j5‰j6‰j7‰uh1j#h²hhjï h³Nh´Nubj9)�”}”(hX**Parameters** ``u32 cpu`` The CPU being set and queried for. ``struct bpf_cpumask *cpumask`` The BPF cpumask being set and queried for containing a CPU. **Return** * true - **cpu** is set in the cpumask * false - **cpu** was not set in the cpumask, or **cpu** is invalid.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hj†h]”hŒ Parameters”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KÐhj€ubjY)�”}”(hhh]”(j^)�”}”(hŒ/``u32 cpu`` The CPU being set and queried for. ”h]”(jd)�”}”(hŒ ``u32 cpu``”h]”j)�”}”(hj¥h]”hŒu32 cpu”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KÍhjŸubj~)�”}”(hhh]”hý)�”}”(hŒ"The CPU being set and queried for.”h]”hŒ"The CPU being set and queried for.”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jºh´KÍhj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jºh´KÍhjœubj^)�”}”(hŒ\``struct bpf_cpumask *cpumask`` The BPF cpumask being set and queried for containing a CPU. ”h]”(jd)�”}”(hŒ``struct bpf_cpumask *cpumask``”h]”j)�”}”(hjÞh]”hŒstruct bpf_cpumask *cpumask”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KÎhjØubj~)�”}”(hhh]”hý)�”}”(hŒ;The BPF cpumask being set and queried for containing a CPU.”h]”hŒ;The BPF cpumask being set and queried for containing a CPU.”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jóh´KÎhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jóh´KÎhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhj€ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hjh]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KÐhj€ubjñ)�”}”(hhh]”(jö)�”}”(hŒ%true - **cpu** is set in the cpumask”h]”hý)�”}”(hj4h]”(hŒtrue - ”…”�”}”(hj6h²hh³Nh´NubjC)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj6ubhŒ is set in the cpumask”…”�”}”(hj6h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KÐhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj/ubjö)�”}”(hŒBfalse - **cpu** was not set in the cpumask, or **cpu** is invalid.”h]”hý)�”}”(hj^h]”(hŒfalse - ”…”�”}”(hj`h²hh³Nh´NubjC)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj`ubhŒ was not set in the cpumask, or ”…”�”}”(hj`h²hh³Nh´NubjC)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj`ubhŒ is invalid.”…”�”}”(hj`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KÑhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj/ubeh}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³jUh´KÐhj€ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hjï h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ+bpf_cpumask_test_and_clear_cpu (C function)”Œ c.bpf_cpumask_test_and_clear_cpu”hNt”auh1jhjï h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒV__bpf_kfunc bool bpf_cpumask_test_and_clear_cpu (u32 cpu, struct bpf_cpumask *cpumask)”h]”j/)�”}”(hŒU__bpf_kfunc bool bpf_cpumask_test_and_clear_cpu(u32 cpu, struct bpf_cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hjºh²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjºh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KÝubjà)�”}”(hj_h]”hŒbool”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhjºh²hh³jÐh´KÝubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjºh²hh³jÐh´KÝubj¹)�”}”(hŒbpf_cpumask_test_and_clear_cpu”h]”jm)�”}”(hŒbpf_cpumask_test_and_clear_cpu”h]”hŒbpf_cpumask_test_and_clear_cpu”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjìubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjºh²hh³jÐh´KÝubjÔ)�”}”(hŒ&(u32 cpu, struct bpf_cpumask *cpumask)”h]”(jÚ)�”}”(hŒu32 cpu”h]”(h)�”}”(hhh]”jm)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jòsbŒ c.bpf_cpumask_test_and_clear_cpu”†”asbuh1hhjubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjubjm)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjubjÚ)�”}”(hŒstruct bpf_cpumask *cpumask”h]”(jK)�”}”(hjNh]”hŒstruct”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjRubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjRubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjqubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jvŒmodname”NŒ classname”NjŠj�)�”}”j�]”j+Œ c.bpf_cpumask_test_and_clear_cpu”†”asbuh1hhjRubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjRubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjRubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjºh²hh³jÐh´KÝubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhj¶h²hh³jÐh´KÝubah}”(h]”j±ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jÐh´KÝhj³h²hubj)�”}”(hhh]”hý)�”}”(hŒ1Atomically test and clear a CPU in a BPF cpumask.”h]”hŒ1Atomically test and clear a CPU in a BPF cpumask.”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KÝhjÔh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³h²hh³jÐh´KÝubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3jïj4jïj5‰j6‰j7‰uh1j#h²hhjï h³Nh´Nubj9)�”}”(hX!**Parameters** ``u32 cpu`` The CPU being cleared and queried for. ``struct bpf_cpumask *cpumask`` The BPF cpumask being cleared and queried for containing a CPU. **Return** * true - **cpu** is set in the cpumask * false - **cpu** was not set in the cpumask, or **cpu** is invalid.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hjùh]”hŒ Parameters”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KáhjóubjY)�”}”(hhh]”(j^)�”}”(hŒ3``u32 cpu`` The CPU being cleared and queried for. ”h]”(jd)�”}”(hŒ ``u32 cpu``”h]”j)�”}”(hjh]”hŒu32 cpu”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´Kßhjubj~)�”}”(hhh]”hý)�”}”(hŒ&The CPU being cleared and queried for.”h]”hŒ&The CPU being cleared and queried for.”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j-h´Kßhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j-h´Kßhjubj^)�”}”(hŒ```struct bpf_cpumask *cpumask`` The BPF cpumask being cleared and queried for containing a CPU. ”h]”(jd)�”}”(hŒ``struct bpf_cpumask *cpumask``”h]”j)�”}”(hjQh]”hŒstruct bpf_cpumask *cpumask”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KàhjKubj~)�”}”(hhh]”hý)�”}”(hŒ?The BPF cpumask being cleared and queried for containing a CPU.”h]”hŒ?The BPF cpumask being cleared and queried for containing a CPU.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jfh´Kàhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jfh´Kàhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhjóubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hjŒh]”hŒReturn”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”•h´Kâhjóubjñ)�”}”(hhh]”(jö)�”}”(hŒ%true - **cpu** is set in the cpumask”h]”hý)�”}”(hj§h]”(hŒtrue - ”…”�”}”(hj©h²hh³Nh´NubjC)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj©ubhŒ is set in the cpumask”…”�”}”(hj©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´Kâhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¢ubjö)�”}”(hŒBfalse - **cpu** was not set in the cpumask, or **cpu** is invalid.”h]”hý)�”}”(hjÑh]”(hŒfalse - ”…”�”}”(hjÓh²hh³Nh´NubjC)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÓubhŒ was not set in the cpumask, or ”…”�”}”(hjÓh²hh³Nh´NubjC)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÓubhŒ is invalid.”…”�”}”(hjÓh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:258: ./kernel/bpf/cpumask.c”h´KãhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¢ubeh}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³jÈh´Kâhjóubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hjï h²hh³Nh´Nubjû)�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1júh³hÇh´Mhjï h²hubhý)�”}”(hŒ†We can also set and clear entire ``struct bpf_cpumask *`` objects in one operation using bpf_cpumask_setall() and bpf_cpumask_clear():”h]”(hŒ!We can also set and clear entire ”…”�”}”(hj"h²hh³Nh´Nubj)�”}”(hŒ``struct bpf_cpumask *``”h]”hŒstruct bpf_cpumask *”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"ubhŒM objects in one operation using bpf_cpumask_setall() and bpf_cpumask_clear():”…”�”}”(hj"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Mhjï h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒbpf_cpumask_setall (C function)”Œc.bpf_cpumask_setall”hNt”auh1jhjï h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒA__bpf_kfunc void bpf_cpumask_setall (struct bpf_cpumask *cpumask)”h]”j/)�”}”(hŒ@__bpf_kfunc void bpf_cpumask_setall(struct bpf_cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hjWh²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjWh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:266: ./kernel/bpf/cpumask.c”h´Kïubjà)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhjWh²hh³jmh´Kïubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjWh²hh³jmh´Kïubj¹)�”}”(hŒbpf_cpumask_setall”h]”jm)�”}”(hŒbpf_cpumask_setall”h]”hŒbpf_cpumask_setall”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjŠubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjWh²hh³jmh´KïubjÔ)�”}”(hŒ(struct bpf_cpumask *cpumask)”h]”jÚ)�”}”(hŒstruct bpf_cpumask *cpumask”h]”(jK)�”}”(hjNh]”hŒstruct”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj¦ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¦ubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÅubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÊŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j�sbŒc.bpf_cpumask_setall”†”asbuh1hhj¦ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¦ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¦ubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj¢ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjWh²hh³jmh´Kïubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhjSh²hh³jmh´Kïubah}”(h]”jNah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jmh´KïhjPh²hubj)�”}”(hhh]”hý)�”}”(hŒ%Set all of the bits in a BPF cpumask.”h]”hŒ%Set all of the bits in a BPF cpumask.”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:266: ./kernel/bpf/cpumask.c”h´Kïhj*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPh²hh³jmh´Kïubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3jEj4jEj5‰j6‰j7‰uh1j#h²hhjï h³Nh´Nubj9)�”}”(hŒ]**Parameters** ``struct bpf_cpumask *cpumask`` The BPF cpumask having all of its bits set.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hjOh]”hŒ Parameters”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:266: ./kernel/bpf/cpumask.c”h´KóhjIubjY)�”}”(hhh]”j^)�”}”(hŒK``struct bpf_cpumask *cpumask`` The BPF cpumask having all of its bits set.”h]”(jd)�”}”(hŒ``struct bpf_cpumask *cpumask``”h]”j)�”}”(hjnh]”hŒstruct bpf_cpumask *cpumask”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:266: ./kernel/bpf/cpumask.c”h´Kõhjhubj~)�”}”(hhh]”hý)�”}”(hŒ+The BPF cpumask having all of its bits set.”h]”hŒ+The BPF cpumask having all of its bits set.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:266: ./kernel/bpf/cpumask.c”h´Kðhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jƒh´Kõhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhjIubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hjï h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒbpf_cpumask_clear (C function)”Œc.bpf_cpumask_clear”hNt”auh1jhjï h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒ@__bpf_kfunc void bpf_cpumask_clear (struct bpf_cpumask *cpumask)”h]”j/)�”}”(hŒ?__bpf_kfunc void bpf_cpumask_clear(struct bpf_cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hjÄh²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÄh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:266: ./kernel/bpf/cpumask.c”h´Køubjà)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhjÄh²hh³jÚh´Køubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÄh²hh³jÚh´Køubj¹)�”}”(hŒbpf_cpumask_clear”h]”jm)�”}”(hŒbpf_cpumask_clear”h]”hŒbpf_cpumask_clear”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj÷ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjÄh²hh³jÚh´KøubjÔ)�”}”(hŒ(struct bpf_cpumask *cpumask)”h]”jÚ)�”}”(hŒstruct bpf_cpumask *cpumask”h]”(jK)�”}”(hjNh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j7Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jýsbŒc.bpf_cpumask_clear”†”asbuh1hhjubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjÄh²hh³jÚh´Køubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhjÀh²hh³jÚh´Køubah}”(h]”j»ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jÚh´Køhj½h²hubj)�”}”(hhh]”hý)�”}”(hŒ'Clear all of the bits in a BPF cpumask.”h]”hŒ'Clear all of the bits in a BPF cpumask.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:266: ./kernel/bpf/cpumask.c”h´Køhj—h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½h²hh³jÚh´Køubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3j²j4j²j5‰j6‰j7‰uh1j#h²hhjï h³Nh´Nubj9)�”}”(hŒP**Parameters** ``struct bpf_cpumask *cpumask`` The BPF cpumask being cleared.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hj¼h]”hŒ Parameters”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:266: ./kernel/bpf/cpumask.c”h´Kühj¶ubjY)�”}”(hhh]”j^)�”}”(hŒ>``struct bpf_cpumask *cpumask`` The BPF cpumask being cleared.”h]”(jd)�”}”(hŒ``struct bpf_cpumask *cpumask``”h]”j)�”}”(hjÛh]”hŒstruct bpf_cpumask *cpumask”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:266: ./kernel/bpf/cpumask.c”h´KþhjÕubj~)�”}”(hhh]”hý)�”}”(hŒThe BPF cpumask being cleared.”h]”hŒThe BPF cpumask being cleared.”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:266: ./kernel/bpf/cpumask.c”h´Kùhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jðh´KþhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhj¶ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hjï h²hh³Nh´Nubeh}”(h]”Œsetting-and-clearing-cpus”ah ]”h"]”Œ3.1.1 setting and clearing cpus”ah$]”h&]”uh1hÖhjS h²hh³hÇh´KÐubh×)�”}”(hhh]”(hÜ)�”}”(hŒ!3.1.2 Operations between cpumasks”h]”hŒ!3.1.2 Operations between cpumasks”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj$h²hh³hÇh´Mubhý)�”}”(hŒÐIn addition to setting and clearing individual CPUs in a single cpumask, callers can also perform bitwise operations between multiple cpumasks using bpf_cpumask_and(), bpf_cpumask_or(), and bpf_cpumask_xor():”h]”hŒÐIn addition to setting and clearing individual CPUs in a single cpumask, callers can also perform bitwise operations between multiple cpumasks using bpf_cpumask_and(), bpf_cpumask_or(), and bpf_cpumask_xor():”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Mhj$h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒbpf_cpumask_and (C function)”Œc.bpf_cpumask_and”hNt”auh1jhj$h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒr__bpf_kfunc bool bpf_cpumask_and (struct bpf_cpumask *dst, const struct cpumask *src1, const struct cpumask *src2)”h]”j/)�”}”(hŒq__bpf_kfunc bool bpf_cpumask_and(struct bpf_cpumask *dst, const struct cpumask *src1, const struct cpumask *src2)”h]”(hŒ __bpf_kfunc”…”�”}”(hjXh²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjXh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mubjà)�”}”(hj_h]”hŒbool”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhjXh²hh³jnh´Mubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjXh²hh³jnh´Mubj¹)�”}”(hŒbpf_cpumask_and”h]”jm)�”}”(hŒbpf_cpumask_and”h]”hŒbpf_cpumask_and”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjŠubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjXh²hh³jnh´MubjÔ)�”}”(hŒQ(struct bpf_cpumask *dst, const struct cpumask *src1, const struct cpumask *src2)”h]”(jÚ)�”}”(hŒstruct bpf_cpumask *dst”h]”(jK)�”}”(hjNh]”hŒstruct”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj¦ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¦ubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÅubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÊŒmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j�sbŒc.bpf_cpumask_and”†”asbuh1hhj¦ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¦ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¦ubjm)�”}”(hŒdst”h]”hŒdst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj¢ubjÚ)�”}”(hŒconst struct cpumask *src1”h]”(jK)�”}”(hŒconst”h]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjSubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jXŒmodname”NŒ classname”NjŠj�)�”}”j�]”jäŒc.bpf_cpumask_and”†”asbuh1hhjubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubjm)�”}”(hŒsrc1”h]”hŒsrc1”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj¢ubjÚ)�”}”(hŒconst struct cpumask *src2”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj¤ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¤ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj¤ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¤ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÞubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jãŒmodname”NŒ classname”NjŠj�)�”}”j�]”jäŒc.bpf_cpumask_and”†”asbuh1hhj¤ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¤ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¤ubjm)�”}”(hŒsrc2”h]”hŒsrc2”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj¢ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjXh²hh³jnh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhjTh²hh³jnh´Mubah}”(h]”jOah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jnh´MhjQh²hubj)�”}”(hhh]”hý)�”}”(hŒ&AND two cpumasks and store the result.”h]”hŒ&AND two cpumasks and store the result.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´MhjAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQh²hh³jnh´Mubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3j\j4j\j5‰j6‰j7‰uh1j#h²hhj$h³Nh´Nubj9)�”}”(hX¦**Parameters** ``struct bpf_cpumask *dst`` The BPF cpumask where the result is being stored. ``const struct cpumask *src1`` The first input. ``const struct cpumask *src2`` The second input. **Return** * true - **dst** has at least one bit set following the operation * false - **dst** is empty following the operation **Description** struct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hjfh]”hŒ Parameters”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mhj`ubjY)�”}”(hhh]”(j^)�”}”(hŒN``struct bpf_cpumask *dst`` The BPF cpumask where the result is being stored. ”h]”(jd)�”}”(hŒ``struct bpf_cpumask *dst``”h]”j)�”}”(hj…h]”hŒstruct bpf_cpumask *dst”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mhjubj~)�”}”(hhh]”hý)�”}”(hŒ1The BPF cpumask where the result is being stored.”h]”hŒ1The BPF cpumask where the result is being stored.”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jšh´Mhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jšh´Mhj|ubj^)�”}”(hŒ0``const struct cpumask *src1`` The first input. ”h]”(jd)�”}”(hŒ``const struct cpumask *src1``”h]”j)�”}”(hj¾h]”hŒconst struct cpumask *src1”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mhj¸ubj~)�”}”(hhh]”hý)�”}”(hŒThe first input.”h]”hŒThe first input.”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÓh´MhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jÓh´Mhj|ubj^)�”}”(hŒ1``const struct cpumask *src2`` The second input. ”h]”(jd)�”}”(hŒ``const struct cpumask *src2``”h]”j)�”}”(hj÷h]”hŒconst struct cpumask *src2”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mhjñubj~)�”}”(hhh]”hý)�”}”(hŒThe second input.”h]”hŒThe second input.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j h´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j h´Mhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhj`ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hj2h]”hŒReturn”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mhj`ubjñ)�”}”(hhh]”(jö)�”}”(hŒ@true - **dst** has at least one bit set following the operation”h]”hý)�”}”(hjMh]”(hŒtrue - ”…”�”}”(hjOh²hh³Nh´NubjC)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjOubhŒ1 has at least one bit set following the operation”…”�”}”(hjOh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´MhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjHubjö)�”}”(hŒ1false - **dst** is empty following the operation ”h]”hý)�”}”(hŒ0false - **dst** is empty following the operation”h]”(hŒfalse - ”…”�”}”(hjyh²hh³Nh´NubjC)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjyubhŒ! is empty following the operation”…”�”}”(hjyh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjHubeh}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³jnh´Mhj`ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hj¨h]”hŒ Description”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´M hj`ubhý)�”}”(hŒJstruct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hŒ4struct bpf_cpumask pointers may be safely passed to ”…”�”}”(hj¾h²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj¾ubhŒ and ”…”�”}”(hj¾h²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj¾ubhŒ.”…”�”}”(hj¾h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´M hj`ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj$h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒbpf_cpumask_or (C function)”Œc.bpf_cpumask_or”hNt”auh1jhj$h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒq__bpf_kfunc void bpf_cpumask_or (struct bpf_cpumask *dst, const struct cpumask *src1, const struct cpumask *src2)”h]”j/)�”}”(hŒp__bpf_kfunc void bpf_cpumask_or(struct bpf_cpumask *dst, const struct cpumask *src1, const struct cpumask *src2)”h]”(hŒ __bpf_kfunc”…”�”}”(hj h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mubjà)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhj h²hh³j#h´Mubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj h²hh³j#h´Mubj¹)�”}”(hŒbpf_cpumask_or”h]”jm)�”}”(hŒbpf_cpumask_or”h]”hŒbpf_cpumask_or”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj@ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hj h²hh³j#h´MubjÔ)�”}”(hŒQ(struct bpf_cpumask *dst, const struct cpumask *src1, const struct cpumask *src2)”h]”(jÚ)�”}”(hŒstruct bpf_cpumask *dst”h]”(jK)�”}”(hjNh]”hŒstruct”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj\ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj\ubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j€Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jFsbŒc.bpf_cpumask_or”†”asbuh1hhj\ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj\ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj\ubjm)�”}”(hŒdst”h]”hŒdst”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjXubjÚ)�”}”(hŒconst struct cpumask *src1”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjÎubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÎubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjÎubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÎubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j Œmodname”NŒ classname”NjŠj�)�”}”j�]”jšŒc.bpf_cpumask_or”†”asbuh1hhjÎubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÎubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÎubjm)�”}”(hŒsrc1”h]”hŒsrc1”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÎubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjXubjÚ)�”}”(hŒconst struct cpumask *src2”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjYubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjYubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjYubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjYubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j˜Œmodname”NŒ classname”NjŠj�)�”}”j�]”jšŒc.bpf_cpumask_or”†”asbuh1hhjYubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjYubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjYubjm)�”}”(hŒsrc2”h]”hŒsrc2”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjXubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhj h²hh³j#h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhj h²hh³j#h´Mubah}”(h]”jah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³j#h´Mhjh²hubj)�”}”(hhh]”hý)�”}”(hŒ%OR two cpumasks and store the result.”h]”hŒ%OR two cpumasks and store the result.”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mhjöh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³j#h´Mubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3jj4jj5‰j6‰j7‰uh1j#h²hhj$h³Nh´Nubj9)�”}”(hX#**Parameters** ``struct bpf_cpumask *dst`` The BPF cpumask where the result is being stored. ``const struct cpumask *src1`` The first input. ``const struct cpumask *src2`` The second input. **Description** struct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´MhjubjY)�”}”(hhh]”(j^)�”}”(hŒN``struct bpf_cpumask *dst`` The BPF cpumask where the result is being stored. ”h]”(jd)�”}”(hŒ``struct bpf_cpumask *dst``”h]”j)�”}”(hj:h]”hŒstruct bpf_cpumask *dst”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mhj4ubj~)�”}”(hhh]”hý)�”}”(hŒ1The BPF cpumask where the result is being stored.”h]”hŒ1The BPF cpumask where the result is being stored.”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jOh´MhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jOh´Mhj1ubj^)�”}”(hŒ0``const struct cpumask *src1`` The first input. ”h]”(jd)�”}”(hŒ``const struct cpumask *src1``”h]”j)�”}”(hjsh]”hŒconst struct cpumask *src1”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mhjmubj~)�”}”(hhh]”hý)�”}”(hŒThe first input.”h]”hŒThe first input.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jˆh´Mhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jˆh´Mhj1ubj^)�”}”(hŒ1``const struct cpumask *src2`` The second input. ”h]”(jd)�”}”(hŒ``const struct cpumask *src2``”h]”j)�”}”(hj¬h]”hŒconst struct cpumask *src2”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mhj¦ubj~)�”}”(hhh]”hý)�”}”(hŒThe second input.”h]”hŒThe second input.”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÁh´MhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jÁh´Mhj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhjubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hjçh]”hŒ Description”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mhjubhý)�”}”(hŒJstruct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hŒ4struct bpf_cpumask pointers may be safely passed to ”…”�”}”(hjýh²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjýubhŒ and ”…”�”}”(hjýh²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjýubhŒ.”…”�”}”(hjýh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´Mhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj$h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒbpf_cpumask_xor (C function)”Œc.bpf_cpumask_xor”hNt”auh1jhj$h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒr__bpf_kfunc void bpf_cpumask_xor (struct bpf_cpumask *dst, const struct cpumask *src1, const struct cpumask *src2)”h]”j/)�”}”(hŒq__bpf_kfunc void bpf_cpumask_xor(struct bpf_cpumask *dst, const struct cpumask *src1, const struct cpumask *src2)”h]”(hŒ __bpf_kfunc”…”�”}”(hjLh²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjLh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´M#ubjà)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhjLh²hh³jbh´M#ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjLh²hh³jbh´M#ubj¹)�”}”(hŒbpf_cpumask_xor”h]”jm)�”}”(hŒbpf_cpumask_xor”h]”hŒbpf_cpumask_xor”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjLh²hh³jbh´M#ubjÔ)�”}”(hŒQ(struct bpf_cpumask *dst, const struct cpumask *src1, const struct cpumask *src2)”h]”(jÚ)�”}”(hŒstruct bpf_cpumask *dst”h]”(jK)�”}”(hjNh]”hŒstruct”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj›ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj›ubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j¿Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j…sbŒc.bpf_cpumask_xor”†”asbuh1hhj›ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj›ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj›ubjm)�”}”(hŒdst”h]”hŒdst”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj—ubjÚ)�”}”(hŒconst struct cpumask *src1”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jLŒmodname”NŒ classname”NjŠj�)�”}”j�]”jÙŒc.bpf_cpumask_xor”†”asbuh1hhj ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ubjm)�”}”(hŒsrc1”h]”hŒsrc1”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj—ubjÚ)�”}”(hŒconst struct cpumask *src2”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj˜ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj˜ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj˜ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj˜ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j׌modname”NŒ classname”NjŠj�)�”}”j�]”jÙŒc.bpf_cpumask_xor”†”asbuh1hhj˜ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj˜ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj˜ubjm)�”}”(hŒsrc2”h]”hŒsrc2”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj—ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjLh²hh³jbh´M#ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhjHh²hh³jbh´M#ubah}”(h]”jCah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jbh´M#hjEh²hubj)�”}”(hhh]”hý)�”}”(hŒ&XOR two cpumasks and store the result.”h]”hŒ&XOR two cpumasks and store the result.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´M#hj5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjEh²hh³jbh´M#ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3jPj4jPj5‰j6‰j7‰uh1j#h²hhj$h³Nh´Nubj9)�”}”(hX#**Parameters** ``struct bpf_cpumask *dst`` The BPF cpumask where the result is being stored. ``const struct cpumask *src1`` The first input. ``const struct cpumask *src2`` The second input. **Description** struct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hjZh]”hŒ Parameters”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´M'hjTubjY)�”}”(hhh]”(j^)�”}”(hŒN``struct bpf_cpumask *dst`` The BPF cpumask where the result is being stored. ”h]”(jd)�”}”(hŒ``struct bpf_cpumask *dst``”h]”j)�”}”(hjyh]”hŒstruct bpf_cpumask *dst”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´M$hjsubj~)�”}”(hhh]”hý)�”}”(hŒ1The BPF cpumask where the result is being stored.”h]”hŒ1The BPF cpumask where the result is being stored.”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jŽh´M$hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jŽh´M$hjpubj^)�”}”(hŒ0``const struct cpumask *src1`` The first input. ”h]”(jd)�”}”(hŒ``const struct cpumask *src1``”h]”j)�”}”(hj²h]”hŒconst struct cpumask *src1”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´M%hj¬ubj~)�”}”(hhh]”hý)�”}”(hŒThe first input.”h]”hŒThe first input.”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÇh´M%hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jÇh´M%hjpubj^)�”}”(hŒ1``const struct cpumask *src2`` The second input. ”h]”(jd)�”}”(hŒ``const struct cpumask *src2``”h]”j)�”}”(hjëh]”hŒconst struct cpumask *src2”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´M&hjåubj~)�”}”(hhh]”hý)�”}”(hŒThe second input.”h]”hŒThe second input.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j h´M&hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjåubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j h´M&hjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhjTubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hj& h]”hŒ Description”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj$ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´M(hjTubhý)�”}”(hŒJstruct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hŒ4struct bpf_cpumask pointers may be safely passed to ”…”�”}”(hj< h²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hjD h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj< ubhŒ and ”…”�”}”(hj< h²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj< ubhŒ.”…”�”}”(hj< h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:276: ./kernel/bpf/cpumask.c”h´M'hjTubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj$h²hh³Nh´Nubhý)�”}”(hŒ�The following is an example of how they may be used. Note that some of the kfuncs shown in this example will be covered in more detail below.”h]”hŒ�The following is an example of how they may be used. Note that some of the kfuncs shown in this example will be covered in more detail below.”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Mhj$h²hubjß)�”}”(hXÄ/** * A sample tracepoint showing how a cpumask can be mutated using bitwise operators (and queried). */ SEC("tp_btf/task_newtask") int BPF_PROG(test_and_or_xor, struct task_struct *task, u64 clone_flags) { struct bpf_cpumask *mask1, *mask2, *dst1, *dst2; mask1 = bpf_cpumask_create(); if (!mask1) return -ENOMEM; mask2 = bpf_cpumask_create(); if (!mask2) { bpf_cpumask_release(mask1); return -ENOMEM; } // ...Safely create the other two masks... */ bpf_cpumask_set_cpu(0, mask1); bpf_cpumask_set_cpu(1, mask2); bpf_cpumask_and(dst1, (const struct cpumask *)mask1, (const struct cpumask *)mask2); if (!bpf_cpumask_empty((const struct cpumask *)dst1)) /* Should never happen. */ goto release_exit; bpf_cpumask_or(dst1, (const struct cpumask *)mask1, (const struct cpumask *)mask2); if (!bpf_cpumask_test_cpu(0, (const struct cpumask *)dst1)) /* Should never happen. */ goto release_exit; if (!bpf_cpumask_test_cpu(1, (const struct cpumask *)dst1)) /* Should never happen. */ goto release_exit; bpf_cpumask_xor(dst2, (const struct cpumask *)mask1, (const struct cpumask *)mask2); if (!bpf_cpumask_equal((const struct cpumask *)dst1, (const struct cpumask *)dst2)) /* Should never happen. */ goto release_exit; release_exit: bpf_cpumask_release(mask1); bpf_cpumask_release(mask2); bpf_cpumask_release(dst1); bpf_cpumask_release(dst2); return 0; }”h]”hXÄ/** * A sample tracepoint showing how a cpumask can be mutated using bitwise operators (and queried). */ SEC("tp_btf/task_newtask") int BPF_PROG(test_and_or_xor, struct task_struct *task, u64 clone_flags) { struct bpf_cpumask *mask1, *mask2, *dst1, *dst2; mask1 = bpf_cpumask_create(); if (!mask1) return -ENOMEM; mask2 = bpf_cpumask_create(); if (!mask2) { bpf_cpumask_release(mask1); return -ENOMEM; } // ...Safely create the other two masks... */ bpf_cpumask_set_cpu(0, mask1); bpf_cpumask_set_cpu(1, mask2); bpf_cpumask_and(dst1, (const struct cpumask *)mask1, (const struct cpumask *)mask2); if (!bpf_cpumask_empty((const struct cpumask *)dst1)) /* Should never happen. */ goto release_exit; bpf_cpumask_or(dst1, (const struct cpumask *)mask1, (const struct cpumask *)mask2); if (!bpf_cpumask_test_cpu(0, (const struct cpumask *)dst1)) /* Should never happen. */ goto release_exit; if (!bpf_cpumask_test_cpu(1, (const struct cpumask *)dst1)) /* Should never happen. */ goto release_exit; bpf_cpumask_xor(dst2, (const struct cpumask *)mask1, (const struct cpumask *)mask2); if (!bpf_cpumask_equal((const struct cpumask *)dst1, (const struct cpumask *)dst2)) /* Should never happen. */ goto release_exit; release_exit: bpf_cpumask_release(mask1); bpf_cpumask_release(mask2); bpf_cpumask_release(dst1); bpf_cpumask_release(dst2); return 0; }”…”�”}”hj„ sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆjî‰jïj„jð}”uh1jÞh³hÇh´Mhj$h²hubjû)�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1júh³hÇh´MOhj$h²hubhý)�”}”(hŒTThe contents of an entire cpumask may be copied to another using bpf_cpumask_copy():”h]”hŒTThe contents of an entire cpumask may be copied to another using bpf_cpumask_copy():”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´MQhj$h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒbpf_cpumask_copy (C function)”Œc.bpf_cpumask_copy”hNt”auh1jhj$h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒV__bpf_kfunc void bpf_cpumask_copy (struct bpf_cpumask *dst, const struct cpumask *src)”h]”j/)�”}”(hŒU__bpf_kfunc void bpf_cpumask_copy(struct bpf_cpumask *dst, const struct cpumask *src)”h]”(hŒ __bpf_kfunc”…”�”}”(hjÀ h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÀ h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:340: ./kernel/bpf/cpumask.c”h´M€ubjà)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhjÀ h²hh³jÖ h´M€ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÀ h²hh³jÖ h´M€ubj¹)�”}”(hŒbpf_cpumask_copy”h]”jm)�”}”(hŒbpf_cpumask_copy”h]”hŒbpf_cpumask_copy”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjó ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjÀ h²hh³jÖ h´M€ubjÔ)�”}”(hŒ4(struct bpf_cpumask *dst, const struct cpumask *src)”h]”(jÚ)�”}”(hŒstruct bpf_cpumask *dst”h]”(jK)�”}”(hjNh]”hŒstruct”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj!ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj!ubh)�”}”(hhh]”jm)�”}”(hŒ bpf_cpumask”h]”hŒ bpf_cpumask”…”�”}”(hj1!h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj.!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j3!Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jù sbŒc.bpf_cpumask_copy”†”asbuh1hhj!ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ!h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj!ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj_!h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj!ubjm)�”}”(hŒdst”h]”hŒdst”…”�”}”(hjl!h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj !ubjÚ)�”}”(hŒconst struct cpumask *src”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hj…!h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj�!ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’!h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj�!ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj�!ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­!h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj�!ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj¾!h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj»!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÀ!Œmodname”NŒ classname”NjŠj�)�”}”j�]”jM!Œc.bpf_cpumask_copy”†”asbuh1hhj�!ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ!h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj�!ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjê!h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�!ubjm)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hj÷!h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj�!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj !ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjÀ h²hh³jÖ h´M€ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhj¼ h²hh³jÖ h´M€ubah}”(h]”j· ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jÖ h´M€hj¹ h²hubj)�”}”(hhh]”hý)�”}”(hŒ2Copy the contents of a cpumask into a BPF cpumask.”h]”hŒ2Copy the contents of a cpumask into a BPF cpumask.”…”�”}”(hj!"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:340: ./kernel/bpf/cpumask.c”h´M€hj"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹ h²hh³jÖ h´M€ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3j9"j4j9"j5‰j6‰j7‰uh1j#h²hhj$h³Nh´Nubj9)�”}”(hŒÛ**Parameters** ``struct bpf_cpumask *dst`` The BPF cpumask being copied into. ``const struct cpumask *src`` The cpumask being copied. **Description** A struct bpf_cpumask pointer may be safely passed to **src**.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hjC"h]”hŒ Parameters”…”�”}”(hjE"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjA"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:340: ./kernel/bpf/cpumask.c”h´M„hj="ubjY)�”}”(hhh]”(j^)�”}”(hŒ?``struct bpf_cpumask *dst`` The BPF cpumask being copied into. ”h]”(jd)�”}”(hŒ``struct bpf_cpumask *dst``”h]”j)�”}”(hjb"h]”hŒstruct bpf_cpumask *dst”…”�”}”(hjd"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:340: ./kernel/bpf/cpumask.c”h´M�hj\"ubj~)�”}”(hhh]”hý)�”}”(hŒ"The BPF cpumask being copied into.”h]”hŒ"The BPF cpumask being copied into.”…”�”}”(hj{"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jw"h´M�hjx"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj\"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jw"h´M�hjY"ubj^)�”}”(hŒ8``const struct cpumask *src`` The cpumask being copied. ”h]”(jd)�”}”(hŒ``const struct cpumask *src``”h]”j)�”}”(hj›"h]”hŒconst struct cpumask *src”…”�”}”(hj�"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:340: ./kernel/bpf/cpumask.c”h´M‚hj•"ubj~)�”}”(hhh]”hý)�”}”(hŒThe cpumask being copied.”h]”hŒThe cpumask being copied.”…”�”}”(hj´"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j°"h´M‚hj±"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj•"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j°"h´M‚hjY"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhj="ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hjÖ"h]”hŒ Description”…”�”}”(hjØ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÔ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:340: ./kernel/bpf/cpumask.c”h´M„hj="ubhý)�”}”(hŒ=A struct bpf_cpumask pointer may be safely passed to **src**.”h]”(hŒ5A struct bpf_cpumask pointer may be safely passed to ”…”�”}”(hjì"h²hh³Nh´NubjC)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjô"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjì"ubhŒ.”…”�”}”(hjì"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:340: ./kernel/bpf/cpumask.c”h´Mƒhj="ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj$h²hh³Nh´Nubjû)�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1júh³hÇh´MWhj$h²hubhÉ)�”}”(hŒ.. _cpumasks-querying-label:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒcpumasks-querying-label”uh1hÈh´MYhj$h²hh³hÇubeh}”(h]”Œoperations-between-cpumasks”ah ]”h"]”Œ!3.1.2 operations between cpumasks”ah$]”h&]”uh1hÖhjS h²hh³hÇh´Mubh×)�”}”(hhh]”(hÜ)�”}”(hŒ3.2 Querying cpumasks”h]”hŒ3.2 Querying cpumasks”…”�”}”(hj4#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj1#h²hh³hÇh´M\ubhý)�”}”(hŒ|In addition to the above kfuncs, there is also a set of read-only kfuncs that can be used to query the contents of cpumasks.”h]”hŒ|In addition to the above kfuncs, there is also a set of read-only kfuncs that can be used to query the contents of cpumasks.”…”�”}”(hjB#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´M^hj1#h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒbpf_cpumask_first (C function)”Œc.bpf_cpumask_first”hNt”auh1jhj1#h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒA__bpf_kfunc u32 bpf_cpumask_first (const struct cpumask *cpumask)”h]”j/)�”}”(hŒ@__bpf_kfunc u32 bpf_cpumask_first(const struct cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hje#h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm#h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hje#h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´Kpubh)�”}”(hhh]”jm)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj|#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j�#Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œbpf_cpumask_first”sbŒc.bpf_cpumask_first”†”asbuh1hhje#h²hh³j{#h´Kpubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hje#h²hh³j{#h´Kpubj¹)�”}”(hŒbpf_cpumask_first”h]”jm)�”}”(hj�#h]”hŒbpf_cpumask_first”…”�”}”(hj²#h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj®#ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hje#h²hh³j{#h´KpubjÔ)�”}”(hŒ(const struct cpumask *cpumask)”h]”jÚ)�”}”(hŒconst struct cpumask *cpumask”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hjÍ#h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjÉ#ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ#h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÉ#ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjè#h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjÉ#ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ#h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÉ#ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j$Œmodname”NŒ classname”NjŠj�)�”}”j�]”j›#Œc.bpf_cpumask_first”†”asbuh1hhjÉ#ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$$h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÉ#ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj2$h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÉ#ubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj?$h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÉ#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjÅ#ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhje#h²hh³j{#h´Kpubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhja#h²hh³j{#h´Kpubah}”(h]”j\#ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³j{#h´Kphj^#h²hubj)�”}”(hhh]”hý)�”}”(hŒ6Get the index of the first nonzero bit in the cpumask.”h]”hŒ6Get the index of the first nonzero bit in the cpumask.”…”�”}”(hji$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´Kphjf$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^#h²hh³j{#h´Kpubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3j�$j4j�$j5‰j6‰j7‰uh1j#h²hhj1#h³Nh´Nubj9)�”}”(hX%**Parameters** ``const struct cpumask *cpumask`` The cpumask being queried. **Description** Find the index of the first nonzero bit of the cpumask. A struct bpf_cpumask pointer may be safely passed to this function. **Return** * The index of the first nonzero bit in the struct cpumask.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hj‹$h]”hŒ Parameters”…”�”}”(hj�$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj‰$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´Kthj…$ubjY)�”}”(hhh]”j^)�”}”(hŒ=``const struct cpumask *cpumask`` The cpumask being queried. ”h]”(jd)�”}”(hŒ!``const struct cpumask *cpumask``”h]”j)�”}”(hjª$h]”hŒconst struct cpumask *cpumask”…”�”}”(hj¬$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¨$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´Kqhj¤$ubj~)�”}”(hhh]”hý)�”}”(hŒThe cpumask being queried.”h]”hŒThe cpumask being queried.”…”�”}”(hjÃ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j¿$h´KqhjÀ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj¤$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j¿$h´Kqhj¡$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhj…$ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hjå$h]”hŒ Description”…”�”}”(hjç$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjã$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´Kshj…$ubhý)�”}”(hŒ{Find the index of the first nonzero bit of the cpumask. A struct bpf_cpumask pointer may be safely passed to this function.”h]”hŒ{Find the index of the first nonzero bit of the cpumask. A struct bpf_cpumask pointer may be safely passed to this function.”…”�”}”(hjû$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´Krhj…$ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hj %h]”hŒReturn”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj %ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´Kuhj…$ubjñ)�”}”(hhh]”jö)�”}”(hŒ9The index of the first nonzero bit in the struct cpumask.”h]”hý)�”}”(hj'%h]”hŒ9The index of the first nonzero bit in the struct cpumask.”…”�”}”(hj)%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´Kvhj%%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj"%ubah}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³j6%h´Kvhj…$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj1#h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ#bpf_cpumask_first_zero (C function)”Œc.bpf_cpumask_first_zero”hNt”auh1jhj1#h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒF__bpf_kfunc u32 bpf_cpumask_first_zero (const struct cpumask *cpumask)”h]”j/)�”}”(hŒE__bpf_kfunc u32 bpf_cpumask_first_zero(const struct cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hj_%h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg%h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj_%h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´Kubh)�”}”(hhh]”jm)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjy%h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjv%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j{%Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œbpf_cpumask_first_zero”sbŒc.bpf_cpumask_first_zero”†”asbuh1hhj_%h²hh³ju%h´Kubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš%h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj_%h²hh³ju%h´Kubj¹)�”}”(hŒbpf_cpumask_first_zero”h]”jm)�”}”(hj—%h]”hŒbpf_cpumask_first_zero”…”�”}”(hj¬%h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¨%ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hj_%h²hh³ju%h´KubjÔ)�”}”(hŒ(const struct cpumask *cpumask)”h]”jÚ)�”}”(hŒconst struct cpumask *cpumask”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hjÇ%h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjÃ%ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ%h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÃ%ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjâ%h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjÃ%ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï%h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÃ%ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjý%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j&Œmodname”NŒ classname”NjŠj�)�”}”j�]”j•%Œc.bpf_cpumask_first_zero”†”asbuh1hhjÃ%ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÃ%ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj,&h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÃ%ubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj9&h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÃ%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj¿%ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhj_%h²hh³ju%h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhj[%h²hh³ju%h´Kubah}”(h]”jV%ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³ju%h´KhjX%h²hubj)�”}”(hhh]”hý)�”}”(hŒ4Get the index of the first unset bit in the cpumask.”h]”hŒ4Get the index of the first unset bit in the cpumask.”…”�”}”(hjc&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´Khj`&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjX%h²hh³ju%h´Kubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3j{&j4j{&j5‰j6‰j7‰uh1j#h²hhj1#h³Nh´Nubj9)�”}”(hX **Parameters** ``const struct cpumask *cpumask`` The cpumask being queried. **Description** Find the index of the first unset bit of the cpumask. A struct bpf_cpumask pointer may be safely passed to this function. **Return** * The index of the first zero bit in the struct cpumask.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hj…&h]”hŒ Parameters”…”�”}”(hj‡&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjƒ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´Kƒhj&ubjY)�”}”(hhh]”j^)�”}”(hŒ=``const struct cpumask *cpumask`` The cpumask being queried. ”h]”(jd)�”}”(hŒ!``const struct cpumask *cpumask``”h]”j)�”}”(hj¤&h]”hŒconst struct cpumask *cpumask”…”�”}”(hj¦&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K�hjž&ubj~)�”}”(hhh]”hý)�”}”(hŒThe cpumask being queried.”h]”hŒThe cpumask being queried.”…”�”}”(hj½&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j¹&h´K�hjº&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjž&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j¹&h´K�hj›&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhj&ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hjß&h]”hŒ Description”…”�”}”(hjá&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÝ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´Kƒhj&ubhý)�”}”(hŒyFind the index of the first unset bit of the cpumask. A struct bpf_cpumask pointer may be safely passed to this function.”h]”hŒyFind the index of the first unset bit of the cpumask. A struct bpf_cpumask pointer may be safely passed to this function.”…”�”}”(hjõ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K‚hj&ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hj'h]”hŒReturn”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K…hj&ubjñ)�”}”(hhh]”jö)�”}”(hŒ6The index of the first zero bit in the struct cpumask.”h]”hý)�”}”(hj!'h]”hŒ6The index of the first zero bit in the struct cpumask.”…”�”}”(hj#'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K†hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj'ubah}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³j0'h´K†hj&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj1#h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ"bpf_cpumask_first_and (C function)”Œc.bpf_cpumask_first_and”hNt”auh1jhj1#h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒ^__bpf_kfunc u32 bpf_cpumask_first_and (const struct cpumask *src1, const struct cpumask *src2)”h]”j/)�”}”(hŒ]__bpf_kfunc u32 bpf_cpumask_first_and(const struct cpumask *src1, const struct cpumask *src2)”h]”(hŒ __bpf_kfunc”…”�”}”(hjY'h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja'h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjY'h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K�ubh)�”}”(hhh]”jm)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjs'h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjp'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”ju'Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œbpf_cpumask_first_and”sbŒc.bpf_cpumask_first_and”†”asbuh1hhjY'h²hh³jo'h´K�ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”'h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjY'h²hh³jo'h´K�ubj¹)�”}”(hŒbpf_cpumask_first_and”h]”jm)�”}”(hj‘'h]”hŒbpf_cpumask_first_and”…”�”}”(hj¦'h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¢'ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjY'h²hh³jo'h´K�ubjÔ)�”}”(hŒ8(const struct cpumask *src1, const struct cpumask *src2)”h]”(jÚ)�”}”(hŒconst struct cpumask *src1”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hjÁ'h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj½'ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎ'h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj½'ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjÜ'h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj½'ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé'h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj½'ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjú'h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj÷'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jü'Œmodname”NŒ classname”NjŠj�)�”}”j�]”j�'Œc.bpf_cpumask_first_and”†”asbuh1hhj½'ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj½'ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj&(h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj½'ubjm)�”}”(hŒsrc1”h]”hŒsrc1”…”�”}”(hj3(h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj½'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj¹'ubjÚ)�”}”(hŒconst struct cpumask *src2”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hjL(h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjH(ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY(h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjH(ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjg(h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjH(ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt(h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjH(ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj…(h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj‚(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j‡(Œmodname”NŒ classname”NjŠj�)�”}”j�]”j�'Œc.bpf_cpumask_first_and”†”asbuh1hhjH(ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£(h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjH(ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj±(h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1•j§hjH(ubjm)�”}”(hŒsrc2”h]”hŒsrc2”…”�”}”(hj¾(h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjH(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj¹'ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjY'h²hh³jo'h´K�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhjU'h²hh³jo'h´K�ubah}”(h]”jP'ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jo'h´K�hjR'h²hubj)�”}”(hhh]”hý)�”}”(hŒGReturn the index of the first nonzero bit from the AND of two cpumasks.”h]”hŒGReturn the index of the first nonzero bit from the AND of two cpumasks.”…”�”}”(hjè(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K�hjå(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjR'h²hh³jo'h´K�ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3j)j4j)j5‰j6‰j7‰uh1j#h²hhj1#h³Nh´Nubj9)�”}”(hXo**Parameters** ``const struct cpumask *src1`` The first cpumask. ``const struct cpumask *src2`` The second cpumask. **Description** Find the index of the first nonzero bit of the AND of two cpumasks. struct bpf_cpumask pointers may be safely passed to **src1** and **src2**. **Return** * The index of the first bit that is nonzero in both cpumask instances.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hj )h]”hŒ Parameters”…”�”}”(hj )h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K“hj)ubjY)�”}”(hhh]”(j^)�”}”(hŒ2``const struct cpumask *src1`` The first cpumask. ”h]”(jd)�”}”(hŒ``const struct cpumask *src1``”h]”j)�”}”(hj))h]”hŒconst struct cpumask *src1”…”�”}”(hj+)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj')ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K‘hj#)ubj~)�”}”(hhh]”hý)�”}”(hŒThe first cpumask.”h]”hŒThe first cpumask.”…”�”}”(hjB)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j>)h´K‘hj?)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj#)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j>)h´K‘hj )ubj^)�”}”(hŒ3``const struct cpumask *src2`` The second cpumask. ”h]”(jd)�”}”(hŒ``const struct cpumask *src2``”h]”j)�”}”(hjb)h]”hŒconst struct cpumask *src2”…”�”}”(hjd)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K’hj\)ubj~)�”}”(hhh]”hý)�”}”(hŒThe second cpumask.”h]”hŒThe second cpumask.”…”�”}”(hj{)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jw)h´K’hjx)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj\)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jw)h´K’hj )ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhj)ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hj�)h]”hŒ Description”…”�”}”(hjŸ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj›)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K”hj)ubhý)�”}”(hŒŽFind the index of the first nonzero bit of the AND of two cpumasks. struct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hŒxFind the index of the first nonzero bit of the AND of two cpumasks. struct bpf_cpumask pointers may be safely passed to ”…”�”}”(hj³)h²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hj»)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj³)ubhŒ and ”…”�”}”(hj³)h²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hjÍ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj³)ubhŒ.”…”�”}”(hj³)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K“hj)ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hjè)h]”hŒReturn”…”�”}”(hjê)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjæ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K–hj)ubjñ)�”}”(hhh]”jö)�”}”(hŒEThe index of the first bit that is nonzero in both cpumask instances.”h]”hý)�”}”(hj*h]”hŒEThe index of the first bit that is nonzero in both cpumask instances.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K—hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjþ)ubah}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³j*h´K—hj)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj1#h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!bpf_cpumask_test_cpu (C function)”Œc.bpf_cpumask_test_cpu”hNt”auh1jhj1#h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒN__bpf_kfunc bool bpf_cpumask_test_cpu (u32 cpu, const struct cpumask *cpumask)”h]”j/)�”}”(hŒM__bpf_kfunc bool bpf_cpumask_test_cpu(u32 cpu, const struct cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hj;*h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC*h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj;*h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K»ubjà)�”}”(hj_h]”hŒbool”…”�”}”(hjR*h²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhj;*h²hh³jQ*h´K»ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_*h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj;*h²hh³jQ*h´K»ubj¹)�”}”(hŒbpf_cpumask_test_cpu”h]”jm)�”}”(hŒbpf_cpumask_test_cpu”h]”hŒbpf_cpumask_test_cpu”…”�”}”(hjq*h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjm*ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hj;*h²hh³jQ*h´K»ubjÔ)�”}”(hŒ((u32 cpu, const struct cpumask *cpumask)”h]”(jÚ)�”}”(hŒu32 cpu”h]”(h)�”}”(hhh]”jm)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj�*h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj�*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j’*Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†js*sbŒc.bpf_cpumask_test_cpu”†”asbuh1hhj‰*ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°*h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj‰*ubjm)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj¾*h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj‰*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj…*ubjÚ)�”}”(hŒconst struct cpumask *cpumask”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hj×*h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjÓ*ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä*h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÓ*ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjò*h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjÓ*ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ*h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÓ*ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj +ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j+Œmodname”NŒ classname”NjŠj�)�”}”j�]”j¬*Œc.bpf_cpumask_test_cpu”†”asbuh1hhjÓ*ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.+h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÓ*ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj<+h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÓ*ubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjI+h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÓ*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj…*ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhj;*h²hh³jQ*h´K»ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhj7*h²hh³jQ*h´K»ubah}”(h]”j2*ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jQ*h´K»hj4*h²hubj)�”}”(hhh]”hý)�”}”(hŒ'Test whether a CPU is set in a cpumask.”h]”hŒ'Test whether a CPU is set in a cpumask.”…”�”}”(hjs+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K»hjp+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4*h²hh³jQ*h´K»ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3j‹+j4j‹+j5‰j6‰j7‰uh1j#h²hhj1#h³Nh´Nubj9)�”}”(hX**Parameters** ``u32 cpu`` The CPU being queried for. ``const struct cpumask *cpumask`` The cpumask being queried for containing a CPU. **Return** * true - **cpu** is set in the cpumask * false - **cpu** was not set in the cpumask, or **cpu** is an invalid cpu.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hj•+h]”hŒ Parameters”…”�”}”(hj—+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj“+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K¿hj�+ubjY)�”}”(hhh]”(j^)�”}”(hŒ'``u32 cpu`` The CPU being queried for. ”h]”(jd)�”}”(hŒ ``u32 cpu``”h]”j)�”}”(hj´+h]”hŒu32 cpu”…”�”}”(hj¶+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj²+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K¼hj®+ubj~)�”}”(hhh]”hý)�”}”(hŒThe CPU being queried for.”h]”hŒThe CPU being queried for.”…”�”}”(hjÍ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÉ+h´K¼hjÊ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj®+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jÉ+h´K¼hj«+ubj^)�”}”(hŒR``const struct cpumask *cpumask`` The cpumask being queried for containing a CPU. ”h]”(jd)�”}”(hŒ!``const struct cpumask *cpumask``”h]”j)�”}”(hjí+h]”hŒconst struct cpumask *cpumask”…”�”}”(hjï+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjë+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K½hjç+ubj~)�”}”(hhh]”hý)�”}”(hŒ/The cpumask being queried for containing a CPU.”h]”hŒ/The cpumask being queried for containing a CPU.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j,h´K½hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjç+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j,h´K½hj«+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhj�+ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hj(,h]”hŒReturn”…”�”}”(hj*,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj&,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K¿hj�+ubjñ)�”}”(hhh]”(jö)�”}”(hŒ%true - **cpu** is set in the cpumask”h]”hý)�”}”(hjC,h]”(hŒtrue - ”…”�”}”(hjE,h²hh³Nh´NubjC)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hjL,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjE,ubhŒ is set in the cpumask”…”�”}”(hjE,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´K¿hjA,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj>,ubjö)�”}”(hŒIfalse - **cpu** was not set in the cpumask, or **cpu** is an invalid cpu.”h]”hý)�”}”(hjm,h]”(hŒfalse - ”…”�”}”(hjo,h²hh³Nh´NubjC)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hjv,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjo,ubhŒ was not set in the cpumask, or ”…”�”}”(hjo,h²hh³Nh´NubjC)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hjˆ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjo,ubhŒ is an invalid cpu.”…”�”}”(hjo,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´KÀhjk,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj>,ubeh}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³jd,h´K¿hj�+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj1#h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒbpf_cpumask_weight (C function)”Œc.bpf_cpumask_weight”hNt”auh1jhj1#h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒB__bpf_kfunc u32 bpf_cpumask_weight (const struct cpumask *cpumask)”h]”j/)�”}”(hŒA__bpf_kfunc u32 bpf_cpumask_weight(const struct cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hjÉ,h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ,h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÉ,h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´M®ubh)�”}”(hhh]”jm)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjã,h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjà,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jå,Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œbpf_cpumask_weight”sbŒc.bpf_cpumask_weight”†”asbuh1hhjÉ,h²hh³jß,h´M®ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÉ,h²hh³jß,h´M®ubj¹)�”}”(hŒbpf_cpumask_weight”h]”jm)�”}”(hj-h]”hŒbpf_cpumask_weight”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj-ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjÉ,h²hh³jß,h´M®ubjÔ)�”}”(hŒ(const struct cpumask *cpumask)”h]”jÚ)�”}”(hŒconst struct cpumask *cpumask”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hj1-h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj--ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>-h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj--ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjL-h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj--ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY-h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj--ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjj-h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjg-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jl-Œmodname”NŒ classname”NjŠj�)�”}”j�]”jÿ,Œc.bpf_cpumask_weight”†”asbuh1hhj--ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ-h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj--ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj–-h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj--ubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj£-h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj--ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj)-ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjÉ,h²hh³jß,h´M®ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhjÅ,h²hh³jß,h´M®ubah}”(h]”jÀ,ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jß,h´M®hjÂ,h²hubj)�”}”(hhh]”hý)�”}”(hŒ)Return the number of bits in **cpumask**.”h]”(hŒReturn the number of bits in ”…”�”}”(hjÍ-h²hh³Nh´NubjC)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hjÕ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÍ-ubhŒ.”…”�”}”(hjÍ-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´M®hjÊ-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÂ,h²hh³jß,h´M®ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3j÷-j4j÷-j5‰j6‰j7‰uh1j#h²hhj1#h³Nh´Nubj9)�”}”(hŒÆ**Parameters** ``const struct cpumask *cpumask`` The cpumask being queried. **Description** Count the number of set bits in the given cpumask. **Return** * The number of bits set in the mask.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hj.h]”hŒ Parameters”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÿ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´M²hjû-ubjY)�”}”(hhh]”j^)�”}”(hŒ=``const struct cpumask *cpumask`` The cpumask being queried. ”h]”(jd)�”}”(hŒ!``const struct cpumask *cpumask``”h]”j)�”}”(hj .h]”hŒconst struct cpumask *cpumask”…”�”}”(hj".h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´M¯hj.ubj~)�”}”(hhh]”hý)�”}”(hŒThe cpumask being queried.”h]”hŒThe cpumask being queried.”…”�”}”(hj9.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j5.h´M¯hj6.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j5.h´M¯hj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhjû-ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hj[.h]”hŒ Description”…”�”}”(hj].h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjY.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´M±hjû-ubhý)�”}”(hŒ2Count the number of set bits in the given cpumask.”h]”hŒ2Count the number of set bits in the given cpumask.”…”�”}”(hjq.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´M°hjû-ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hj‚.h]”hŒReturn”…”�”}”(hj„.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj€.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´M²hjû-ubjñ)�”}”(hhh]”jö)�”}”(hŒ#The number of bits set in the mask.”h]”hý)�”}”(hj�.h]”hŒ#The number of bits set in the mask.”…”�”}”(hjŸ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:353: ./kernel/bpf/cpumask.c”h´M³hj›.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj˜.ubah}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³j¬.h´M³hjû-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj1#h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒbpf_cpumask_equal (C function)”Œc.bpf_cpumask_equal”hNt”auh1jhj1#h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒ[__bpf_kfunc bool bpf_cpumask_equal (const struct cpumask *src1, const struct cpumask *src2)”h]”j/)�”}”(hŒZ__bpf_kfunc bool bpf_cpumask_equal(const struct cpumask *src1, const struct cpumask *src2)”h]”(hŒ __bpf_kfunc”…”�”}”(hjÕ.h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ.h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÕ.h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´M2ubjà)�”}”(hj_h]”hŒbool”…”�”}”(hjì.h²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhjÕ.h²hh³jë.h´M2ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù.h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÕ.h²hh³jë.h´M2ubj¹)�”}”(hŒbpf_cpumask_equal”h]”jm)�”}”(hŒbpf_cpumask_equal”h]”hŒbpf_cpumask_equal”…”�”}”(hj /h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj/ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjÕ.h²hh³jë.h´M2ubjÔ)�”}”(hŒ8(const struct cpumask *src1, const struct cpumask *src2)”h]”(jÚ)�”}”(hŒconst struct cpumask *src1”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hj'/h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj#/ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4/h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj#/ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjB/h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj#/ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO/h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj#/ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj`/h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj]/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jb/Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j /sbŒc.bpf_cpumask_equal”†”asbuh1hhj#/ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€/h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj#/ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjŽ/h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj#/ubjm)�”}”(hŒsrc1”h]”hŒsrc1”…”�”}”(hj›/h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj#/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj/ubjÚ)�”}”(hŒconst struct cpumask *src2”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hj´/h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj°/ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ/h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj°/ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjÏ/h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj°/ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ/h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj°/ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjí/h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjê/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jï/Œmodname”NŒ classname”NjŠj�)�”}”j�]”j|/Œc.bpf_cpumask_equal”†”asbuh1hhj°/ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj°/ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj°/ubjm)�”}”(hŒsrc2”h]”hŒsrc2”…”�”}”(hj&0h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj°/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj/ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjÕ.h²hh³jë.h´M2ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhjÑ.h²hh³jë.h´M2ubah}”(h]”jÌ.ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jë.h´M2hjÎ.h²hubj)�”}”(hhh]”hý)�”}”(hŒ Check two cpumasks for equality.”h]”hŒ Check two cpumasks for equality.”…”�”}”(hjP0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´M2hjM0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎ.h²hh³jë.h´M2ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3jh0j4jh0j5‰j6‰j7‰uh1j#h²hhj1#h³Nh´Nubj9)�”}”(hXU**Parameters** ``const struct cpumask *src1`` The first input. ``const struct cpumask *src2`` The second input. **Return** * true - **src1** and **src2** have the same bits set. * false - **src1** and **src2** differ in at least one bit. **Description** struct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hjr0h]”hŒ Parameters”…”�”}”(hjt0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjp0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´M6hjl0ubjY)�”}”(hhh]”(j^)�”}”(hŒ0``const struct cpumask *src1`` The first input. ”h]”(jd)�”}”(hŒ``const struct cpumask *src1``”h]”j)�”}”(hj‘0h]”hŒconst struct cpumask *src1”…”�”}”(hj“0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´M3hj‹0ubj~)�”}”(hhh]”hý)�”}”(hŒThe first input.”h]”hŒThe first input.”…”�”}”(hjª0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j¦0h´M3hj§0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj‹0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j¦0h´M3hjˆ0ubj^)�”}”(hŒ1``const struct cpumask *src2`` The second input. ”h]”(jd)�”}”(hŒ``const struct cpumask *src2``”h]”j)�”}”(hjÊ0h]”hŒconst struct cpumask *src2”…”�”}”(hjÌ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´M4hjÄ0ubj~)�”}”(hhh]”hý)�”}”(hŒThe second input.”h]”hŒThe second input.”…”�”}”(hjã0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jß0h´M4hjà0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjÄ0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jß0h´M4hjˆ0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhjl0ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hj1h]”hŒReturn”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´M6hjl0ubjñ)�”}”(hhh]”(jö)�”}”(hŒ6true - **src1** and **src2** have the same bits set.”h]”hý)�”}”(hj 1h]”(hŒ true - ”…”�”}”(hj"1h²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hj)1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj"1ubhŒ and ”…”�”}”(hj"1h²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hj;1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj"1ubhŒ have the same bits set.”…”�”}”(hj"1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´M6hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj1ubjö)�”}”(hŒ;false - **src1** and **src2** differ in at least one bit. ”h]”hý)�”}”(hŒ:false - **src1** and **src2** differ in at least one bit.”h]”(hŒ false - ”…”�”}”(hj^1h²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hjf1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj^1ubhŒ and ”…”�”}”(hj^1h²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hjx1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj^1ubhŒ differ in at least one bit.”…”�”}”(hj^1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´M7hjZ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj1ubeh}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³jS1h´M6hjl0ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hjŸ1h]”hŒ Description”…”�”}”(hj¡1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj�1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´M9hjl0ubhý)�”}”(hŒJstruct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hŒ4struct bpf_cpumask pointers may be safely passed to ”…”�”}”(hjµ1h²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hj½1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjµ1ubhŒ and ”…”�”}”(hjµ1h²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hjÏ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjµ1ubhŒ.”…”�”}”(hjµ1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´M9hjl0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj1#h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ#bpf_cpumask_intersects (C function)”Œc.bpf_cpumask_intersects”hNt”auh1jhj1#h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒ`__bpf_kfunc bool bpf_cpumask_intersects (const struct cpumask *src1, const struct cpumask *src2)”h]”j/)�”}”(hŒ___bpf_kfunc bool bpf_cpumask_intersects(const struct cpumask *src1, const struct cpumask *src2)”h]”(hŒ __bpf_kfunc”…”�”}”(hj2h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj2h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MBubjà)�”}”(hj_h]”hŒbool”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhj2h²hh³j2h´MBubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(2h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj2h²hh³j2h´MBubj¹)�”}”(hŒbpf_cpumask_intersects”h]”jm)�”}”(hŒbpf_cpumask_intersects”h]”hŒbpf_cpumask_intersects”…”�”}”(hj:2h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj62ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hj2h²hh³j2h´MBubjÔ)�”}”(hŒ8(const struct cpumask *src1, const struct cpumask *src2)”h]”(jÚ)�”}”(hŒconst struct cpumask *src1”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hjV2h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjR2ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc2h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjR2ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjq2h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjR2ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~2h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjR2ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj�2h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjŒ2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j‘2Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†j<2sbŒc.bpf_cpumask_intersects”†”asbuh1hhjR2ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯2h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjR2ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj½2h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjR2ubjm)�”}”(hŒsrc1”h]”hŒsrc1”…”�”}”(hjÊ2h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjR2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjN2ubjÚ)�”}”(hŒconst struct cpumask *src2”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hjã2h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjß2ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð2h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjß2ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjþ2h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjß2ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjß2ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j3Œmodname”NŒ classname”NjŠj�)�”}”j�]”j«2Œc.bpf_cpumask_intersects”†”asbuh1hhjß2ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:3h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjß2ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjH3h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjß2ubjm)�”}”(hŒsrc2”h]”hŒsrc2”…”�”}”(hjU3h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjß2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjN2ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhj2h²hh³j2h´MBubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhj2h²hh³j2h´MBubah}”(h]”jû1ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³j2h´MBhjý1h²hubj)�”}”(hhh]”hý)�”}”(hŒCheck two cpumasks for overlap.”h]”hŒCheck two cpumasks for overlap.”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MBhj|3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjý1h²hh³j2h´MBubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3j—3j4j—3j5‰j6‰j7‰uh1j#h²hhj1#h³Nh´Nubj9)�”}”(hXn**Parameters** ``const struct cpumask *src1`` The first input. ``const struct cpumask *src2`` The second input. **Return** * true - **src1** and **src2** have at least one of the same bits set. * false - **src1** and **src2** don't have any of the same bits set. **Description** struct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hj¡3h]”hŒ Parameters”…”�”}”(hj£3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjŸ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MFhj›3ubjY)�”}”(hhh]”(j^)�”}”(hŒ0``const struct cpumask *src1`` The first input. ”h]”(jd)�”}”(hŒ``const struct cpumask *src1``”h]”j)�”}”(hjÀ3h]”hŒconst struct cpumask *src1”…”�”}”(hjÂ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MChjº3ubj~)�”}”(hhh]”hý)�”}”(hŒThe first input.”h]”hŒThe first input.”…”�”}”(hjÙ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÕ3h´MChjÖ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjº3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jÕ3h´MChj·3ubj^)�”}”(hŒ1``const struct cpumask *src2`` The second input. ”h]”(jd)�”}”(hŒ``const struct cpumask *src2``”h]”j)�”}”(hjù3h]”hŒconst struct cpumask *src2”…”�”}”(hjû3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MDhjó3ubj~)�”}”(hhh]”hý)�”}”(hŒThe second input.”h]”hŒThe second input.”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j4h´MDhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjó3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j4h´MDhj·3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhj›3ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hj44h]”hŒReturn”…”�”}”(hj64h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj24ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MFhj›3ubjñ)�”}”(hhh]”(jö)�”}”(hŒFtrue - **src1** and **src2** have at least one of the same bits set.”h]”hý)�”}”(hjO4h]”(hŒ true - ”…”�”}”(hjQ4h²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hjX4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjQ4ubhŒ and ”…”�”}”(hjQ4h²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hjj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjQ4ubhŒ( have at least one of the same bits set.”…”�”}”(hjQ4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MFhjM4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjJ4ubjö)�”}”(hŒDfalse - **src1** and **src2** don't have any of the same bits set. ”h]”hý)�”}”(hŒCfalse - **src1** and **src2** don't have any of the same bits set.”h]”(hŒ false - ”…”�”}”(hj�4h²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hj•4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj�4ubhŒ and ”…”�”}”(hj�4h²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hj§4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj�4ubhŒ' don’t have any of the same bits set.”…”�”}”(hj�4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MGhj‰4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjJ4ubeh}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³j‚4h´MFhj›3ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hjÎ4h]”hŒ Description”…”�”}”(hjÐ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÌ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MIhj›3ubhý)�”}”(hŒJstruct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hŒ4struct bpf_cpumask pointers may be safely passed to ”…”�”}”(hjä4h²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hjì4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjä4ubhŒ and ”…”�”}”(hjä4h²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hjþ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjä4ubhŒ.”…”�”}”(hjä4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MIhj›3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj1#h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒbpf_cpumask_subset (C function)”Œc.bpf_cpumask_subset”hNt”auh1jhj1#h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒ\__bpf_kfunc bool bpf_cpumask_subset (const struct cpumask *src1, const struct cpumask *src2)”h]”j/)�”}”(hŒ[__bpf_kfunc bool bpf_cpumask_subset(const struct cpumask *src1, const struct cpumask *src2)”h]”(hŒ __bpf_kfunc”…”�”}”(hj35h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;5h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj35h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MRubjà)�”}”(hj_h]”hŒbool”…”�”}”(hjJ5h²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhj35h²hh³jI5h´MRubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW5h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj35h²hh³jI5h´MRubj¹)�”}”(hŒbpf_cpumask_subset”h]”jm)�”}”(hŒbpf_cpumask_subset”h]”hŒbpf_cpumask_subset”…”�”}”(hji5h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhje5ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hj35h²hh³jI5h´MRubjÔ)�”}”(hŒ8(const struct cpumask *src1, const struct cpumask *src2)”h]”(jÚ)�”}”(hŒconst struct cpumask *src1”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hj…5h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj�5ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’5h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj�5ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj�5ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­5h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj�5ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj¾5h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj»5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jÀ5Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jk5sbŒc.bpf_cpumask_subset”†”asbuh1hhj�5ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ5h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj�5ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjì5h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�5ubjm)�”}”(hŒsrc1”h]”hŒsrc1”…”�”}”(hjù5h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj�5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj}5ubjÚ)�”}”(hŒconst struct cpumask *src2”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj6ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj6ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hj-6h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj6ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:6h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj6ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjK6h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjH6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jM6Œmodname”NŒ classname”NjŠj�)�”}”j�]”jÚ5Œc.bpf_cpumask_subset”†”asbuh1hhj6ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji6h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj6ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjw6h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj6ubjm)�”}”(hŒsrc2”h]”hŒsrc2”…”�”}”(hj„6h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj}5ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhj35h²hh³jI5h´MRubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhj/5h²hh³jI5h´MRubah}”(h]”j*5ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jI5h´MRhj,5h²hubj)�”}”(hhh]”hý)�”}”(hŒ*Check if a cpumask is a subset of another.”h]”hŒ*Check if a cpumask is a subset of another.”…”�”}”(hj®6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MRhj«6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,5h²hh³jI5h´MRubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3jÆ6j4jÆ6j5‰j6‰j7‰uh1j#h²hhj1#h³Nh´Nubj9)�”}”(hX•**Parameters** ``const struct cpumask *src1`` The first cpumask being checked as a subset. ``const struct cpumask *src2`` The second cpumask being checked as a superset. **Return** * true - All of the bits of **src1** are set in **src2**. * false - At least one bit in **src1** is not set in **src2**. **Description** struct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hjÐ6h]”hŒ Parameters”…”�”}”(hjÒ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÎ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MVhjÊ6ubjY)�”}”(hhh]”(j^)�”}”(hŒL``const struct cpumask *src1`` The first cpumask being checked as a subset. ”h]”(jd)�”}”(hŒ``const struct cpumask *src1``”h]”j)�”}”(hjï6h]”hŒconst struct cpumask *src1”…”�”}”(hjñ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjí6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MShjé6ubj~)�”}”(hhh]”hý)�”}”(hŒ,The first cpumask being checked as a subset.”h]”hŒ,The first cpumask being checked as a subset.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j7h´MShj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjé6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j7h´MShjæ6ubj^)�”}”(hŒO``const struct cpumask *src2`` The second cpumask being checked as a superset. ”h]”(jd)�”}”(hŒ``const struct cpumask *src2``”h]”j)�”}”(hj(7h]”hŒconst struct cpumask *src2”…”�”}”(hj*7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj&7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MThj"7ubj~)�”}”(hhh]”hý)�”}”(hŒ/The second cpumask being checked as a superset.”h]”hŒ/The second cpumask being checked as a superset.”…”�”}”(hjA7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j=7h´MThj>7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj"7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j=7h´MThjæ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhjÊ6ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hjc7h]”hŒReturn”…”�”}”(hje7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhja7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MVhjÊ6ubjñ)�”}”(hhh]”(jö)�”}”(hŒ9true - All of the bits of **src1** are set in **src2**.”h]”hý)�”}”(hj~7h]”(hŒtrue - All of the bits of ”…”�”}”(hj€7h²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hj‡7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj€7ubhŒ are set in ”…”�”}”(hj€7h²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hj™7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj€7ubhŒ.”…”�”}”(hj€7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MVhj|7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjy7ubjö)�”}”(hŒ>false - At least one bit in **src1** is not set in **src2**. ”h]”hý)�”}”(hŒ=false - At least one bit in **src1** is not set in **src2**.”h]”(hŒfalse - At least one bit in ”…”�”}”(hj¼7h²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hjÄ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj¼7ubhŒ is not set in ”…”�”}”(hj¼7h²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hjÖ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj¼7ubhŒ.”…”�”}”(hj¼7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MWhj¸7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjy7ubeh}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³j±7h´MVhjÊ6ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hjý7h]”hŒ Description”…”�”}”(hjÿ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjû7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MYhjÊ6ubhý)�”}”(hŒJstruct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hŒ4struct bpf_cpumask pointers may be safely passed to ”…”�”}”(hj8h²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj8ubhŒ and ”…”�”}”(hj8h²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hj-8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj8ubhŒ.”…”�”}”(hj8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MYhjÊ6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj1#h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒbpf_cpumask_empty (C function)”Œc.bpf_cpumask_empty”hNt”auh1jhj1#h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒB__bpf_kfunc bool bpf_cpumask_empty (const struct cpumask *cpumask)”h]”j/)�”}”(hŒA__bpf_kfunc bool bpf_cpumask_empty(const struct cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hjb8h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj8h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjb8h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mbubjà)�”}”(hj_h]”hŒbool”…”�”}”(hjy8h²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhjb8h²hh³jx8h´Mbubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†8h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjb8h²hh³jx8h´Mbubj¹)�”}”(hŒbpf_cpumask_empty”h]”jm)�”}”(hŒbpf_cpumask_empty”h]”hŒbpf_cpumask_empty”…”�”}”(hj˜8h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj”8ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjb8h²hh³jx8h´MbubjÔ)�”}”(hŒ(const struct cpumask *cpumask)”h]”jÚ)�”}”(hŒconst struct cpumask *cpumask”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hj´8h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj°8ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ8h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj°8ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjÏ8h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj°8ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ8h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj°8ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjí8h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjê8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jï8Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jš8sbŒc.bpf_cpumask_empty”†”asbuh1hhj°8ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 9h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj°8ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj°8ubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj(9h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj°8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj¬8ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjb8h²hh³jx8h´Mbubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhj^8h²hh³jx8h´Mbubah}”(h]”jY8ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jx8h´Mbhj[8h²hubj)�”}”(hhh]”hý)�”}”(hŒCheck if a cpumask is empty.”h]”hŒCheck if a cpumask is empty.”…”�”}”(hjR9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MbhjO9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[8h²hh³jx8h´Mbubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3jj9j4jj9j5‰j6‰j7‰uh1j#h²hhj1#h³Nh´Nubj9)�”}”(hX**Parameters** ``const struct cpumask *cpumask`` The cpumask being checked. **Return** * true - None of the bits in **cpumask** are set. * false - At least one bit in **cpumask** is set. **Description** A struct bpf_cpumask pointer may be safely passed to **cpumask**.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hjt9h]”hŒ Parameters”…”�”}”(hjv9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjr9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mfhjn9ubjY)�”}”(hhh]”j^)�”}”(hŒ=``const struct cpumask *cpumask`` The cpumask being checked. ”h]”(jd)�”}”(hŒ!``const struct cpumask *cpumask``”h]”j)�”}”(hj“9h]”hŒconst struct cpumask *cpumask”…”�”}”(hj•9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mchj�9ubj~)�”}”(hhh]”hý)�”}”(hŒThe cpumask being checked.”h]”hŒThe cpumask being checked.”…”�”}”(hj¬9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j¨9h´Mchj©9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj�9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j¨9h´MchjŠ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhjn9ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hjÎ9h]”hŒReturn”…”�”}”(hjÐ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÌ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mehjn9ubjñ)�”}”(hhh]”(jö)�”}”(hŒ1true - None of the bits in **cpumask** are set.”h]”hý)�”}”(hjé9h]”(hŒtrue - None of the bits in ”…”�”}”(hjë9h²hh³Nh´NubjC)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hjò9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjë9ubhŒ are set.”…”�”}”(hjë9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mehjç9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjä9ubjö)�”}”(hŒ1false - At least one bit in **cpumask** is set. ”h]”hý)�”}”(hŒ0false - At least one bit in **cpumask** is set.”h]”(hŒfalse - At least one bit in ”…”�”}”(hj:h²hh³Nh´NubjC)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj:ubhŒ is set.”…”�”}”(hj:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mfhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjä9ubeh}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³j :h´Mehjn9ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hjD:h]”hŒ Description”…”�”}”(hjF:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjB:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mhhjn9ubhý)�”}”(hŒAA struct bpf_cpumask pointer may be safely passed to **cpumask**.”h]”(hŒ5A struct bpf_cpumask pointer may be safely passed to ”…”�”}”(hjZ:h²hh³Nh´NubjC)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hjb:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjZ:ubhŒ.”…”�”}”(hjZ:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mhhjn9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj1#h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒbpf_cpumask_full (C function)”Œc.bpf_cpumask_full”hNt”auh1jhj1#h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒA__bpf_kfunc bool bpf_cpumask_full (const struct cpumask *cpumask)”h]”j/)�”}”(hŒ@__bpf_kfunc bool bpf_cpumask_full(const struct cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hj—:h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ:h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj—:h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mqubjà)�”}”(hj_h]”hŒbool”…”�”}”(hj®:h²hh³Nh´Nubah}”(h]”h ]”jìah"]”h$]”h&]”uh1jßhj—:h²hh³j­:h´Mqubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»:h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj—:h²hh³j­:h´Mqubj¹)�”}”(hŒbpf_cpumask_full”h]”jm)�”}”(hŒbpf_cpumask_full”h]”hŒbpf_cpumask_full”…”�”}”(hjÍ:h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÉ:ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hj—:h²hh³j­:h´MqubjÔ)�”}”(hŒ(const struct cpumask *cpumask)”h]”jÚ)�”}”(hŒconst struct cpumask *cpumask”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hjé:h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjå:ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö:h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjå:ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjå:ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjå:ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj";h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j$;Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†jÏ:sbŒc.bpf_cpumask_full”†”asbuh1hhjå:ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB;h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjå:ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjP;h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjå:ubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj];h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjå:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjá:ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhj—:h²hh³j­:h´Mqubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhj“:h²hh³j­:h´Mqubah}”(h]”jŽ:ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³j­:h´Mqhj�:h²hubj)�”}”(hhh]”hý)�”}”(hŒ$Check if a cpumask has all bits set.”h]”hŒ$Check if a cpumask has all bits set.”…”�”}”(hj‡;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mqhj„;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�:h²hh³j­:h´Mqubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3jŸ;j4jŸ;j5‰j6‰j7‰uh1j#h²hhj1#h³Nh´Nubj9)�”}”(hX**Parameters** ``const struct cpumask *cpumask`` The cpumask being checked. **Return** * true - All of the bits in **cpumask** are set. * false - At least one bit in **cpumask** is cleared. **Description** A struct bpf_cpumask pointer may be safely passed to **cpumask**.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hj©;h]”hŒ Parameters”…”�”}”(hj«;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj§;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Muhj£;ubjY)�”}”(hhh]”j^)�”}”(hŒ=``const struct cpumask *cpumask`` The cpumask being checked. ”h]”(jd)�”}”(hŒ!``const struct cpumask *cpumask``”h]”j)�”}”(hjÈ;h]”hŒconst struct cpumask *cpumask”…”�”}”(hjÊ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MrhjÂ;ubj~)�”}”(hhh]”hý)�”}”(hŒThe cpumask being checked.”h]”hŒThe cpumask being checked.”…”�”}”(hjá;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÝ;h´MrhjÞ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjÂ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jÝ;h´Mrhj¿;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhj£;ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hj<h]”hŒReturn”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mthj£;ubjñ)�”}”(hhh]”(jö)�”}”(hŒ0true - All of the bits in **cpumask** are set.”h]”hý)�”}”(hj<h]”(hŒtrue - All of the bits in ”…”�”}”(hj <h²hh³Nh´NubjC)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hj'<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj <ubhŒ are set.”…”�”}”(hj <h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mthj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj<ubjö)�”}”(hŒ5false - At least one bit in **cpumask** is cleared. ”h]”hý)�”}”(hŒ4false - At least one bit in **cpumask** is cleared.”h]”(hŒfalse - At least one bit in ”…”�”}”(hjJ<h²hh³Nh´NubjC)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hjR<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjJ<ubhŒ is cleared.”…”�”}”(hjJ<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´MuhjF<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj<ubeh}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³j?<h´Mthj£;ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hjy<h]”hŒ Description”…”�”}”(hj{<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjw<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mwhj£;ubhý)�”}”(hŒAA struct bpf_cpumask pointer may be safely passed to **cpumask**.”h]”(hŒ5A struct bpf_cpumask pointer may be safely passed to ”…”�”}”(hj�<h²hh³Nh´NubjC)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hj—<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj�<ubhŒ.”…”�”}”(hj�<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:357: ./kernel/bpf/cpumask.c”h´Mwhj£;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj1#h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'bpf_cpumask_any_distribute (C function)”Œc.bpf_cpumask_any_distribute”hNt”auh1jhj1#h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒJ__bpf_kfunc u32 bpf_cpumask_any_distribute (const struct cpumask *cpumask)”h]”j/)�”}”(hŒI__bpf_kfunc u32 bpf_cpumask_any_distribute(const struct cpumask *cpumask)”h]”(hŒ __bpf_kfunc”…”�”}”(hjÌ<h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ<h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÌ<h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´MŒubh)�”}”(hhh]”jm)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjæ<h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjã<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jè<Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œbpf_cpumask_any_distribute”sbŒc.bpf_cpumask_any_distribute”†”asbuh1hhjÌ<h²hh³jâ<h´MŒubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÌ<h²hh³jâ<h´MŒubj¹)�”}”(hŒbpf_cpumask_any_distribute”h]”jm)�”}”(hj=h]”hŒbpf_cpumask_any_distribute”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj=ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjÌ<h²hh³jâ<h´MŒubjÔ)�”}”(hŒ(const struct cpumask *cpumask)”h]”jÚ)�”}”(hŒconst struct cpumask *cpumask”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hj4=h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj0=ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA=h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj0=ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjO=h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhj0=ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\=h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj0=ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjm=h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjj=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”jo=Œmodname”NŒ classname”NjŠj�)�”}”j�]”j=Œc.bpf_cpumask_any_distribute”†”asbuh1hhj0=ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹=h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj0=ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj™=h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj0=ubjm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj¦=h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj0=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhj,=ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjÌ<h²hh³jâ<h´MŒubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhjÈ<h²hh³jâ<h´MŒubah}”(h]”jÃ<ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³jâ<h´MŒhjÅ<h²hubj)�”}”(hhh]”hý)�”}”(hŒ'Return a random set CPU from a cpumask.”h]”hŒ'Return a random set CPU from a cpumask.”…”�”}”(hjÐ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´MŒhjÍ=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅ<h²hh³jâ<h´MŒubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3jè=j4jè=j5‰j6‰j7‰uh1j#h²hhj1#h³Nh´Nubj9)�”}”(hX**Parameters** ``const struct cpumask *cpumask`` The cpumask being queried. **Return** * A random set bit within [0, num_cpus) if at least one bit is set. * >= num_cpus if no bit is set. **Description** A struct bpf_cpumask pointer may be safely passed to **src**.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hjò=h]”hŒ Parameters”…”�”}”(hjô=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjð=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M�hjì=ubjY)�”}”(hhh]”j^)�”}”(hŒ=``const struct cpumask *cpumask`` The cpumask being queried. ”h]”(jd)�”}”(hŒ!``const struct cpumask *cpumask``”h]”j)�”}”(hj>h]”hŒconst struct cpumask *cpumask”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M�hj >ubj~)�”}”(hhh]”hý)�”}”(hŒThe cpumask being queried.”h]”hŒThe cpumask being queried.”…”�”}”(hj*>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³j&>h´M�hj'>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj >ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³j&>h´M�hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhjì=ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hjL>h]”hŒReturn”…”�”}”(hjN>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjJ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M�hjì=ubjñ)�”}”(hhh]”(jö)�”}”(hŒAA random set bit within [0, num_cpus) if at least one bit is set.”h]”hý)�”}”(hjg>h]”hŒAA random set bit within [0, num_cpus) if at least one bit is set.”…”�”}”(hji>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M�hje>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjb>ubjö)�”}”(hŒ>= num_cpus if no bit is set. ”h]”hý)�”}”(hŒ>= num_cpus if no bit is set.”h]”hŒ>= num_cpus if no bit is set.”…”�”}”(hj�>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M�hj}>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjb>ubeh}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³jv>h´M�hjì=ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hjž>h]”hŒ Description”…”�”}”(hj >h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjœ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M’hjì=ubhý)�”}”(hŒ=A struct bpf_cpumask pointer may be safely passed to **src**.”h]”(hŒ5A struct bpf_cpumask pointer may be safely passed to ”…”�”}”(hj´>h²hh³Nh´NubjC)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj¼>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj´>ubhŒ.”…”�”}”(hj´>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M’hjì=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj1#h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ+bpf_cpumask_any_and_distribute (C function)”Œ c.bpf_cpumask_any_and_distribute”hNt”auh1jhj1#h²hh³Nh´Nubj$)�”}”(hhh]”(j))�”}”(hŒg__bpf_kfunc u32 bpf_cpumask_any_and_distribute (const struct cpumask *src1, const struct cpumask *src2)”h]”j/)�”}”(hŒf__bpf_kfunc u32 bpf_cpumask_any_and_distribute(const struct cpumask *src1, const struct cpumask *src2)”h]”(hŒ __bpf_kfunc”…”�”}”(hjñ>h²hh³Nh´Nubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù>h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjñ>h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M›ubh)�”}”(hhh]”jm)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj ?h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j ?Œmodname”NŒ classname”NjŠj�)�”}”j�]”j“)�”}”j†Œbpf_cpumask_any_and_distribute”sbŒ c.bpf_cpumask_any_and_distribute”†”asbuh1hhjñ>h²hh³j?h´M›ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,?h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjñ>h²hh³j?h´M›ubj¹)�”}”(hŒbpf_cpumask_any_and_distribute”h]”jm)�”}”(hj)?h]”hŒbpf_cpumask_any_and_distribute”…”�”}”(hj>?h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj:?ubah}”(h]”h ]”(jÎjÏeh"]”h$]”h&]”hÅhÆuh1j¸hjñ>h²hh³j?h´M›ubjÔ)�”}”(hŒ8(const struct cpumask *src1, const struct cpumask *src2)”h]”(jÚ)�”}”(hŒconst struct cpumask *src1”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hjY?h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjU?ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf?h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjU?ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjt?h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjU?ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�?h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjU?ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj’?h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj�?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j”?Œmodname”NŒ classname”NjŠj�)�”}”j�]”j'?Œ c.bpf_cpumask_any_and_distribute”†”asbuh1hhjU?ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°?h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjU?ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj¾?h²hh³Nh´Nubah•‰1}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjU?ubjm)�”}”(hŒsrc1”h]”hŒsrc1”…”�”}”(hjË?h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjU?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjQ?ubjÚ)�”}”(hŒconst struct cpumask *src2”h]”(jK)�”}”(hjh]”hŒconst”…”�”}”(hjä?h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjà?ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ?h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjà?ubjK)�”}”(hjNh]”hŒstruct”…”�”}”(hjÿ?h²hh³Nh´Nubah}”(h]”h ]”jWah"]”h$]”h&]”uh1jJhjà?ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj @h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjà?ubh)�”}”(hhh]”jm)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j„Œreftype”j†Œ reftarget”j@Œmodname”NŒ classname”NjŠj�)�”}”j�]”j'?Œ c.bpf_cpumask_any_and_distribute”†”asbuh1hhjà?ubj9)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;@h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjà?ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjI@h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjà?ubjm)�”}”(hŒsrc2”h]”hŒsrc2”…”�”}”(hjV@h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjà?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jÙhjQ?ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÓhjñ>h²hh³j?h´M›ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j.jjhjí>h²hh³j?h´M›ubah}”(h]”jè>ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j(h³j?h´M›hjê>h²hubj)�”}”(hhh]”hý)�”}”(hŒ5Return a random set CPU from the AND of two cpumasks.”h]”hŒ5Return a random set CPU from the AND of two cpumasks.”…”�”}”(hj€@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M›hj}@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjê>h²hh³j?h´M›ubeh}”(h]”h ]”(j„Œfunction”eh"]”h$]”h&]”j2j„j3j˜@j4j˜@j5‰j6‰j7‰uh1j#h²hhj1#h³Nh´Nubj9)�”}”(hXg**Parameters** ``const struct cpumask *src1`` The first cpumask. ``const struct cpumask *src2`` The second cpumask. **Return** * A random set bit within [0, num_cpus) from the AND of two cpumasks, if at least one bit is set. * >= num_cpus if no bit is set. **Description** struct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hý)�”}”(hŒ**Parameters**”h]”jC)�”}”(hj¢@h]”hŒ Parameters”…”�”}”(hj¤@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj @ubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´MŸhjœ@ubjY)�”}”(hhh]”(j^)�”}”(hŒ2``const struct cpumask *src1`` The first cpumask. ”h]”(jd)�”}”(hŒ``const struct cpumask *src1``”h]”j)�”}”(hjÁ@h]”hŒconst struct cpumask *src1”…”�”}”(hjÃ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M�hj»@ubj~)�”}”(hhh]”hý)�”}”(hŒThe first cpumask.”h]”hŒThe first cpumask.”…”�”}”(hjÚ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jÖ@h´M�hj×@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hj»@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jÖ@h´M�hj¸@ubj^)�”}”(hŒ3``const struct cpumask *src2`` The second cpumask. ”h]”(jd)�”}”(hŒ``const struct cpumask *src2``”h]”j)�”}”(hjú@h]”hŒconst struct cpumask *src2”…”�”}”(hjü@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjø@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jch³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´Mžhjô@ubj~)�”}”(hhh]”hý)�”}”(hŒThe second cpumask.”h]”hŒThe second cpumask.”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³jAh´MžhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j}hjô@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j]h³jAh´Mžhj¸@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jXhjœ@ubhý)�”}”(hŒ **Return**”h]”jC)�”}”(hj5Ah]”hŒReturn”…”�”}”(hj7Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj3Aubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M hjœ@ubjñ)�”}”(hhh]”(jö)�”}”(hŒ_A random set bit within [0, num_cpus) from the AND of two cpumasks, if at least one bit is set.”h]”hý)�”}”(hŒ_A random set bit within [0, num_cpus) from the AND of two cpumasks, if at least one bit is set.”h]”hŒ_A random set bit within [0, num_cpus) from the AND of two cpumasks, if at least one bit is set.”…”�”}”(hjRAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M hjNAubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjKAubjö)�”}”(hŒ>= num_cpus if no bit is set. ”h]”hý)�”}”(hŒ>= num_cpus if no bit is set.”h]”hŒ>= num_cpus if no bit is set.”…”�”}”(hjkAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M¢hjgAubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjKAubeh}”(h]”h ]”h"]”h$]”h&]”j-j«uh1jðh³j`Ah´M hjœ@ubhý)�”}”(hŒ**Description**”h]”jC)�”}”(hjˆAh]”hŒ Description”…”�”}”(hjŠAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj†Aubah}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M¤hjœ@ubhý)�”}”(hŒJstruct bpf_cpumask pointers may be safely passed to **src1** and **src2**.”h]”(hŒ4struct bpf_cpumask pointers may be safely passed to ”…”�”}”(hjžAh²hh³Nh´NubjC)�”}”(hŒ**src1**”h]”hŒsrc1”…”�”}”(hj¦Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjžAubhŒ and ”…”�”}”(hjžAh²hh³Nh´NubjC)�”}”(hŒ**src2**”h]”hŒsrc2”…”�”}”(hj¸Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjžAubhŒ.”…”�”}”(hjžAh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³ŒR/var/lib/git/docbuild/linux/Documentation/bpf/cpumasks:361: ./kernel/bpf/cpumask.c”h´M¤hjœ@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j8hj1#h²hh³Nh´Nubjû)�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1júh³hÇh´Mlhj1#h²hubhý)�”}”(hX=Some example usages of these querying kfuncs were shown above. We will not replicate those examples here. Note, however, that all of the aforementioned kfuncs are tested in `tools/testing/selftests/bpf/progs/cpumask_success.c`_, so please take a look there if you're looking for more examples of how they can be used.”h]”(hŒ­Some example usages of these querying kfuncs were shown above. We will not replicate those examples here. Note, however, that all of the aforementioned kfuncs are tested in ”…”�”}”(hjâAh²hh³Nh´NubhŒ reference”“”)�”}”(hŒ6`tools/testing/selftests/bpf/progs/cpumask_success.c`_”h]”hŒ3tools/testing/selftests/bpf/progs/cpumask_success.c”…”�”}”(hjìAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ3tools/testing/selftests/bpf/progs/cpumask_success.c”Œrefuri”Œyhttps://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/tools/testing/selftests/bpf/progs/cpumask_success.c”uh1jêAhjâAŒresolved”KubhŒ\, so please take a look there if you’re looking for more examples of how they can be used.”…”�”}”(hjâAh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hüh³hÇh´Mnhj1#h²hubhÉ)�”}”(hŒµ.. _tools/testing/selftests/bpf/progs/cpumask_success.c: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/tools/testing/selftests/bpf/progs/cpumask_success.c”h]”h}”(h]”Œ3tools-testing-selftests-bpf-progs-cpumask-success-c”ah ]”h"]”Œ3tools/testing/selftests/bpf/progs/cpumask_success.c”ah$]”h&]”jüAjýAuh1hÈh´Mthj1#h²hh³hÇŒ referenced”Kubeh}”(h]”(Œquerying-cpumasks”j(#eh ]”h"]”(Œ3.2 querying cpumasks”Œcpumasks-querying-label”eh$]”h&]”uh1hÖhjS h²hh³hÇh´M\Œexpect_referenced_by_name”}”jBj#sŒexpect_referenced_by_id”}”j(#j#subeh}”(h]”Œcpumask-kfuncs”ah ]”h"]”Œ3. cpumask kfuncs”ah$]”h&]”uh1hÖhhØh²hh³hÇh´K¿ubh×)�”}”(hhh]”(hÜ)�”}”(hŒ4. Adding BPF cpumask kfuncs”h]”hŒ4. Adding BPF cpumask kfuncs”…”�”}”(hj.Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj+Bh²hh³hÇh´Myubhý)�”}”(hX´The set of supported BPF cpumask kfuncs are not (yet) a 1-1 match with the cpumask operations in include/linux/cpumask.h. Any of those cpumask operations could easily be encapsulated in a new kfunc if and when required. If you'd like to support a new cpumask operation, please feel free to submit a patch. If you do add a new cpumask kfunc, please document it here, and add any relevant selftest testcases to the cpumask selftest suite.”h]”hX¶The set of supported BPF cpumask kfuncs are not (yet) a 1-1 match with the cpumask operations in include/linux/cpumask.h. Any of those cpumask operations could easily be encapsulated in a new kfunc if and when required. If you’d like to support a new cpumask operation, please feel free to submit a patch. If you do add a new cpumask kfunc, please document it here, and add any relevant selftest testcases to the cpumask selftest suite.”…”�”}”(hjjí>jBj BjLBj+BuŒ 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”]”(hŒsystem_message”“”)�”}”(hhh]”hý)�”}”(hhh]”hŒ;Hyperlink target "cpumasks-header-label" is not referenced.”…”�”}”hjíBsbah}”(h]”h ]”h"]”h$]”h&]”uh1hühjêBubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1jèBubjéB)�”}”(hhh]”hý)�”}”(hhh]”hŒ=Hyperlink target "cpumasks-querying-label" is not referenced.”…”�”}”hjCsbah}”(h]”h ]”h"]”h$]”h&]”uh1hühjCubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jCŒsource”hÇŒline”MYuh1jèBubeŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.