€•@Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ#/translations/zh_CN/core-api/padata”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/zh_TW/core-api/padata”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/it_IT/core-api/padata”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ja_JP/core-api/padata”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ko_KR/core-api/padata”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/pt_BR/core-api/padata”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/sp_SP/core-api/padata”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ=/var/lib/git/docbuild/linux/Documentation/core-api/padata.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ'The padata parallel execution mechanism”h]”hŒ'The padata parallel execution mechanism”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ field_list”“”)�”}”(hhh]”hŒfield”“”)�”}”(hhh]”(hŒ field_name”“”)�”}”(hŒDate”h]”hŒDate”…”�”}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhhäh³hÇh´KubhŒ field_body”“”)�”}”(hŒ May 2020 ”h]”hŒ paragraph”“”)�”}”(hŒMay 2020”h]”hŒMay 2020”…”�”}”(hhÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´Khhùubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hhäubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´Khhßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhhÊh²hh³hÇh´Kubhþ)�”}”(hŒŽPadata is a mechanism by which the kernel can farm jobs out to be done in parallel on multiple CPUs while optionally retaining their ordering.”h]”hŒŽPadata is a mechanism by which the kernel can farm jobs out to be done in parallel on multiple CPUs while optionally retaining their ordering.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K hhÊh²hubhþ)�”}”(hŒÞIt was originally developed for IPsec, which needs to perform encryption and decryption on large numbers of packets without reordering those packets. This is currently the sole consumer of padata's serialized job support.”h]”hŒàIt was originally developed for IPsec, which needs to perform encryption and decryption on large numbers of packets without reordering those packets. This is currently the sole consumer of padata’s serialized job support.”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K hhÊh²hubhþ)�”}”(hŒ{Padata also supports multithreaded jobs, splitting up the job evenly while load balancing and coordinating between threads.”h]”hŒ{Padata also supports multithreaded jobs, splitting up the job evenly while load balancing and coordinating between threads.”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒRunning Serialized Jobs”h]”hŒRunning Serialized Jobs”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjIh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Initializing”h]”hŒ Initializing”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjZh²hh³hÇh´Kubhþ)�”}”(hŒŽThe first step in using padata to run serialized jobs is to set up a padata_instance structure for overall control of how jobs are to be run::”h]”hŒ�The first step in using padata to run serialized jobs is to set up a padata_instance structure for overall control of how jobs are to be run:”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´KhjZh²hubhŒ literal_block”“”)�”}”(hŒR#include struct padata_instance *padata_alloc(const char *name);”h]”hŒR#include struct padata_instance *padata_alloc(const char *name);”…”�”}”hj{sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´KhjZh²hubhþ)�”}”(hŒ&'name' simply identifies the instance.”h]”hŒ*‘name’ simply identifies the instance.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K hjZh²hubhþ)�”}”(hŒCThen, complete padata initialization by allocating a padata_shell::”h]”hŒBThen, complete padata initialization by allocating a padata_shell:”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K"hjZh²hubjz)�”}”(hŒGstruct padata_shell *padata_alloc_shell(struct padata_instance *pinst);”h]”hŒGstruct padata_shell *padata_alloc_shell(struct padata_instance *pinst);”…”�”}”hj¥sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´K$hjZh²hubhþ)�”}”(hŒäA padata_shell is used to submit a job to padata and allows a series of such jobs to be serialized independently. A padata_instance may have one or more padata_shells associated with it, each allowing a separate series of jobs.”h]”hŒäA padata_shell is used to submit a job to padata and allows a series of such jobs to be serialized independently. A padata_instance may have one or more padata_shells associated with it, each allowing a separate series of jobs.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K&hjZh²hubeh}”(h]”Œ initializing”ah ]”h"]”Œ initializing”ah$]”h&]”uh1hÈhjIh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒModifying cpumasks”h]”hŒModifying cpumasks”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÉh²hh³hÇh´K+ubhþ)�”}”(hŒ‡The CPUs used to run jobs can be changed in two ways, programmatically with padata_set_cpumask() or via sysfs. The former is defined::”h]”hŒ†The CPUs used to run jobs can be changed in two ways, programmatically with padata_set_cpumask() or via sysfs. The former is defined:”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K-hjÉh²hubjz)�”}”(hŒvint padata_set_cpumask(struct padata_instance *pinst, int cpumask_type, cpumask_var_t cpumask);”h]”hŒvint padata_set_cpumask(struct padata_instance *pinst, int cpumask_type, cpumask_var_t cpumask);”…”�”}”hjèsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´K0hjÉh²hubhþ)�”}”(hXUHere cpumask_type is one of PADATA_CPU_PARALLEL or PADATA_CPU_SERIAL, where a parallel cpumask describes which processors will be used to execute jobs submitted to this instance in parallel and a serial cpumask defines which processors are allowed to be used as the serialization callback processor. cpumask specifies the new cpumask to use.”h]”hXUHere cpumask_type is one of PADATA_CPU_PARALLEL or PADATA_CPU_SERIAL, where a parallel cpumask describes which processors will be used to execute jobs submitted to this instance in parallel and a serial cpumask defines which processors are allowed to be used as the serialization callback processor. cpumask specifies the new cpumask to use.”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K3hjÉh²hubhþ)�”}”(hX%There may be sysfs files for an instance's cpumasks. For example, pcrypt's live in /sys/kernel/pcrypt/. Within an instance's directory there are two files, parallel_cpumask and serial_cpumask, and either cpumask may be changed by echoing a bitmask into the file, for example::”h]”hX*There may be sysfs files for an instance’s cpumasks. For example, pcrypt’s live in /sys/kernel/pcrypt/. Within an instance’s directory there are two files, parallel_cpumask and serial_cpumask, and either cpumask may be changed by echoing a bitmask into the file, for example:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K9hjÉh²hubjz)�”}”(hŒ5echo f > /sys/kernel/pcrypt/pencrypt/parallel_cpumask”h]”hŒ5echo f > /sys/kernel/pcrypt/pencrypt/parallel_cpumask”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´K>hjÉh²hubhþ)�”}”(hŒmReading one of these files shows the user-supplied cpumask, which may be different from the 'usable' cpumask.”h]”hŒqReading one of these files shows the user-supplied cpumask, which may be different from the ‘usable’ cpumask.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K@hjÉh²hubhþ)�”}”(hXePadata maintains two pairs of cpumasks internally, the user-supplied cpumasks and the 'usable' cpumasks. (Each pair consists of a parallel and a serial cpumask.) The user-supplied cpumasks default to all possible CPUs on instance allocation and may be changed as above. The usable cpumasks are always a subset of the user-supplied cpumasks and contain only the online CPUs in the user-supplied masks; these are the cpumasks padata actually uses. So it is legal to supply a cpumask to padata that contains offline CPUs. Once an offline CPU in the user-supplied cpumask comes online, padata is going to use it.”h]”hXiPadata maintains two pairs of cpumasks internally, the user-supplied cpumasks and the ‘usable’ cpumasks. (Each pair consists of a parallel and a serial cpumask.) The user-supplied cpumasks default to all possible CPUs on instance allocation and may be changed as above. The usable cpumasks are always a subset of the user-supplied cpumasks and contain only the online CPUs in the user-supplied masks; these are the cpumasks padata actually uses. So it is legal to supply a cpumask to padata that contains offline CPUs. Once an offline CPU in the user-supplied cpumask comes online, padata is going to use it.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´KChjÉh²hubhþ)�”}”(hŒ_Changing the CPU masks are expensive operations, so it should not be done with great frequency.”h]”hŒ_Changing the CPU masks are expensive operations, so it should not be done with great frequency.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´KMhjÉh²hubeh}”(h]”Œmodifying-cpumasks”ah ]”h"]”Œmodifying cpumasks”ah$]”h&]”uh1hÈhjIh²hh³hÇh´K+ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Running A Job”h]”hŒ Running A Job”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjRh²hh³hÇh´KQubhþ)�”}”(hŒ|Actually submitting work to the padata instance requires the creation of a padata_priv structure, which represents one job::”h]”hŒ{Actually submitting work to the padata instance requires the creation of a padata_priv structure, which represents one job:”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´KShjRh²hubjz)�”}”(hŒ½struct padata_priv { /* Other stuff here... */ void (*parallel)(struct padata_priv *padata); void (*serial)(struct padata_priv *padata); };”h]”hŒ½struct padata_priv { /* Other stuff here... */ void (*parallel)(struct padata_priv *padata); void (*serial)(struct padata_priv *padata); };”…”�”}”hjqsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´KVhjRh²hubhþ)�”}”(hXvThis structure will almost certainly be embedded within some larger structure specific to the work to be done. Most of its fields are private to padata, but the structure should be zeroed at initialisation time, and the parallel() and serial() functions should be provided. Those functions will be called in the process of getting the work done as we will see momentarily.”h]”hXvThis structure will almost certainly be embedded within some larger structure specific to the work to be done. Most of its fields are private to padata, but the structure should be zeroed at initialisation time, and the parallel() and serial() functions should be provided. Those functions will be called in the process of getting the work done as we will see momentarily.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K\hjRh²hubhþ)�”}”(hŒ(The submission of the job is done with::”h]”hŒ'The submission of the job is done with:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´KchjRh²hubjz)�”}”(hŒpint padata_do_parallel(struct padata_shell *ps, struct padata_priv *padata, int *cb_cpu);”h]”hŒpint padata_do_parallel(struct padata_shell *ps, struct padata_priv *padata, int *cb_cpu);”…”�”}”hj›sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´KehjRh²hubhþ)�”}”(hXeThe ps and padata structures must be set up as described above; cb_cpu points to the preferred CPU to be used for the final callback when the job is done; it must be in the current instance's CPU mask (if not the cb_cpu pointer is updated to point to the CPU actually chosen). The return value from padata_do_parallel() is zero on success, indicating that the job is in progress. -EBUSY means that somebody, somewhere else is messing with the instance's CPU mask, while -EINVAL is a complaint about cb_cpu not being in the serial cpumask, no online CPUs in the parallel or serial cpumasks, or a stopped instance.”h]”hXiThe ps and padata structures must be set up as described above; cb_cpu points to the preferred CPU to be used for the final callback when the job is done; it must be in the current instance’s CPU mask (if not the cb_cpu pointer is updated to point to the CPU actually chosen). The return value from padata_do_parallel() is zero on success, indicating that the job is in progress. -EBUSY means that somebody, somewhere else is messing with the instance’s CPU mask, while -EINVAL is a complaint about cb_cpu not being in the serial cpumask, no online CPUs in the parallel or serial cpumasks, or a stopped instance.”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´KhhjRh²hubhþ)�”}”(hXèEach job submitted to padata_do_parallel() will, in turn, be passed to exactly one call to the above-mentioned parallel() function, on one CPU, so true parallelism is achieved by submitting multiple jobs. parallel() runs with software interrupts disabled and thus cannot sleep. The parallel() function gets the padata_priv structure pointer as its lone parameter; information about the actual work to be done is probably obtained by using container_of() to find the enclosing structure.”h]”hXèEach job submitted to padata_do_parallel() will, in turn, be passed to exactly one call to the above-mentioned parallel() function, on one CPU, so true parallelism is achieved by submitting multiple jobs. parallel() runs with software interrupts disabled and thus cannot sleep. The parallel() function gets the padata_priv structure pointer as its lone parameter; information about the actual work to be done is probably obtained by using container_of() to find the enclosing structure.”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´KrhjRh²hubhþ)�”}”(hXDNote that parallel() has no return value; the padata subsystem assumes that parallel() will take responsibility for the job from this point. The job need not be completed during this call, but, if parallel() leaves work outstanding, it should be prepared to be called again with a new job before the previous one completes.”h]”hXDNote that parallel() has no return value; the padata subsystem assumes that parallel() will take responsibility for the job from this point. The job need not be completed during this call, but, if parallel() leaves work outstanding, it should be prepared to be called again with a new job before the previous one completes.”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´KzhjRh²hubeh}”(h]”Œ running-a-job”ah ]”h"]”Œ running a job”ah$]”h&]”uh1hÈhjIh²hh³hÇh´KQubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒSerializing Jobs”h]”hŒSerializing Jobs”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÛh²hh³hÇh´K�ubhþ)�”}”(hŒˆWhen a job does complete, parallel() (or whatever function actually finishes the work) should inform padata of the fact with a call to::”h]”hŒ‡When a job does complete, parallel() (or whatever function actually finishes the work) should inform padata of the fact with a call to:”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´KƒhjÛh²hubjz)�”}”(hŒ2void padata_do_serial(struct padata_priv *padata);”h]”hŒ2void padata_do_serial(struct padata_priv *padata);”…”�”}”hjúsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´K†hjÛh²hubhþ)�”}”(hX«At some point in the future, padata_do_serial() will trigger a call to the serial() function in the padata_priv structure. That call will happen on the CPU requested in the initial call to padata_do_parallel(); it, too, is run with local software interrupts disabled. Note that this call may be deferred for a while since the padata code takes pains to ensure that jobs are completed in the order in which they were submitted.”h]”hX«At some point in the future, padata_do_serial() will trigger a call to the serial() function in the padata_priv structure. That call will happen on the CPU requested in the initial call to padata_do_parallel(); it, too, is run with local software interrupts disabled. Note that this call may be deferred for a while since the padata code takes pains to ensure that jobs are completed in the order in which they were submitted.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´KˆhjÛh²hubeh}”(h]”Œserializing-jobs”ah ]”h"]”Œserializing jobs”ah$]”h&]”uh1hÈhjIh²hh³hÇh´K�ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Destroying”h]”hŒ Destroying”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´K‘ubhþ)�”}”(hŒ€Cleaning up a padata instance predictably involves calling the two free functions that correspond to the allocation in reverse::”h]”hŒCleaning up a padata instance predictably involves calling the two free functions that correspond to the allocation in reverse:”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K“hjh²hubjz)�”}”(hŒavoid padata_free_shell(struct padata_shell *ps); void padata_free(struct padata_instance *pinst);”h]”hŒavoid padata_free_shell(struct padata_shell *ps); void padata_free(struct padata_instance *pinst);”…”�”}”hj=sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´K–hjh²hubhþ)�”}”(hŒoIt is the user's responsibility to ensure all outstanding jobs are complete before any of the above are called.”h]”hŒqIt is the user’s responsibility to ensure all outstanding jobs are complete before any of the above are called.”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K™hjh²hubeh}”(h]”Œ destroying”ah ]”h"]”Œ destroying”ah$]”h&]”uh1hÈhjIh²hh³hÇh´K‘ubeh}”(h]”Œrunning-serialized-jobs”ah ]”h"]”Œrunning serialized jobs”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒRunning Multithreaded Jobs”h]”hŒRunning Multithreaded Jobs”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjih²hh³hÇh´K�ubhþ)�”}”(hX9A multithreaded job has a main thread and zero or more helper threads, with the main thread participating in the job and then waiting until all helpers have finished. padata splits the job into units called chunks, where a chunk is a piece of the job that one thread completes in one call to the thread function.”h]”hX9A multithreaded job has a main thread and zero or more helper threads, with the main thread participating in the job and then waiting until all helpers have finished. padata splits the job into units called chunks, where a chunk is a piece of the job that one thread completes in one call to the thread function.”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´KŸhjih²hubhþ)�”}”(hX¥A user has to do three things to run a multithreaded job. First, describe the job by defining a padata_mt_job structure, which is explained in the Interface section. This includes a pointer to the thread function, which padata will call each time it assigns a job chunk to a thread. Then, define the thread function, which accepts three arguments, ``start``, ``end``, and ``arg``, where the first two delimit the range that the thread operates on and the last is a pointer to the job's shared state, if any. Prepare the shared state, which is typically allocated on the main thread's stack. Last, call padata_do_multithreaded(), which will return once the job is finished.”h]”(hX_A user has to do three things to run a multithreaded job. First, describe the job by defining a padata_mt_job structure, which is explained in the Interface section. This includes a pointer to the thread function, which padata will call each time it assigns a job chunk to a thread. Then, define the thread function, which accepts three arguments, ”…”�”}”(hjˆh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ ``start``”h]”hŒstart”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjˆubhŒ, ”…”�”}”(hjˆh²hh³Nh´Nubj‘)�”}”(hŒ``end``”h]”hŒend”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjˆubhŒ, and ”…”�”}”(hjˆh²hh³Nh´Nubj‘)�”}”(hŒ``arg``”h]”hŒarg”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjˆubhX+, where the first two delimit the range that the thread operates on and the last is a pointer to the job’s shared state, if any. Prepare the shared state, which is typically allocated on the main thread’s stack. Last, call padata_do_multithreaded(), which will return once the job is finished.”…”�”}”(hjˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K¤hjih²hubeh}”(h]”Œrunning-multithreaded-jobs”ah ]”h"]”Œrunning multithreaded jobs”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K�ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Interface”h]”hŒ Interface”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÖh²hh³hÇh´K¯ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œpadata_priv (C struct)”Œ c.padata_priv”hNt”auh1jçhjÖh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ padata_priv”h]”hŒdesc_signature_line”“”)�”}”(hŒstruct padata_priv”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1j hjh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jhjh²hh³jh´KubhŒ desc_name”“”)�”}”(hŒ padata_priv”h]”hŒ desc_sig_name”“”)�”}”(hjh]”hŒ padata_priv”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j2hj.ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j,hjh²hh³jh´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1jŒsphinx_line_type”Œ declarator”hjÿh²hh³jh´Kubah}”(h]”jöah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jýh³jh´Khjúh²hubhŒ desc_content”“”)�”}”(hhh]”hþ)�”}”(hŒRepresents one job”h]”hŒRepresents one job”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Khj`h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjúh²hh³jh´Kubeh}”(h]”h ]”(Œc”Œstruct”eh"]”h$]”h&]”Œdomain”j{Œobjtype”j|Œdesctype”j|Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jøh²hhjÖh³Nh´NubhŒ container”“”)�”}”(hX­**Definition**:: struct padata_priv { struct list_head list; struct parallel_data *pd; int cb_cpu; unsigned int seq_nr; int info; void (*parallel)(struct padata_priv *padata); void (*serial)(struct padata_priv *padata); }; **Members** ``list`` List entry, to attach to the padata lists. ``pd`` Pointer to the internal control structure. ``cb_cpu`` Callback cpu for serializatioon. ``seq_nr`` Sequence number of the parallelized data object. ``info`` Used to pass information from the parallel to the serial function. ``parallel`` Parallel execution function. ``serial`` Serial complete function.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(hŒstrong”“”)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŒubhŒ:”…”�”}”(hjŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Khjˆubjz)�”}”(hŒþstruct padata_priv { struct list_head list; struct parallel_data *pd; int cb_cpu; unsigned int seq_nr; int info; void (*parallel)(struct padata_priv *padata); void (*serial)(struct padata_priv *padata); };”h]”hŒþstruct padata_priv { struct list_head list; struct parallel_data *pd; int cb_cpu; unsigned int seq_nr; int info; void (*parallel)(struct padata_priv *padata); void (*serial)(struct padata_priv *padata); };”…”�”}”hj«sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K hjˆubhþ)�”}”(hŒ **Members**”h]”j‘)�”}”(hj¼h]”hŒMembers”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjºubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K*hjˆubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ4``list`` List entry, to attach to the padata lists. ”h]”(hŒterm”“”)�”}”(hŒ``list``”h]”j‘)�”}”(hjáh]”hŒlist”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KhjÙubhŒ definition”“”)�”}”(hhh]”hþ)�”}”(hŒ*List entry, to attach to the padata lists.”h]”hŒ*List entry, to attach to the padata lists.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jöh´Khjùubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jöh´KhjÔubjØ)�”}”(hŒ2``pd`` Pointer to the internal control structure. ”h]”(jÞ)�”}”(hŒ``pd``”h]”j‘)�”}”(hjh]”hŒpd”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Khjubjø)�”}”(hhh]”hþ)�”}”(hŒ*Pointer to the internal control structure.”h]”hŒ*Pointer to the internal control structure.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³j1h´Khj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j1h´KhjÔubjØ)�”}”(hŒ,``cb_cpu`` Callback cpu for serializatioon. ”h]”(jÞ)�”}”(hŒ ``cb_cpu``”h]”j‘)�”}”(hjUh]”hŒcb_cpu”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KhjOubjø)�”}”(hhh]”hþ)�”}”(hŒ Callback cpu for serializatioon.”h]”hŒ Callback cpu for serializatioon.”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jjh´Khjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jjh´KhjÔubjØ)�”}”(hŒ<``seq_nr`` Sequence number of the parallelized data object. ”h]”(jÞ)�”}”(hŒ ``seq_nr``”h]”j‘)�”}”(hjŽh]”hŒseq_nr”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K hjˆubjø)�”}”(hhh]”hþ)�”}”(hŒ0Sequence number of the parallelized data object.”h]”hŒ0Sequence number of the parallelized data object.”…”�”}”(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``info`` Used to pass information from the parallel to the serial function. ”h]”(jÞ)�”}”(hŒ``info``”h]”j‘)�”}”(hjÇh]”hŒinfo”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K!hjÁubjø)�”}”(hhh]”hþ)�”}”(hŒBUsed to pass information from the parallel to the serial function.”h]”hŒBUsed to pass information from the parallel to the serial function.”…”�”}”(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Œ*``parallel`` Parallel execution function. ”h]”(jÞ)�”}”(hŒ ``parallel``”h]”j‘)�”}”(hjh]”hŒparallel”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K"hjúubjø)�”}”(hhh]”hþ)�”}”(hŒParallel execution function.”h]”hŒParallel execution function.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jh´K"hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jh´K"hjÔubjØ)�”}”(hŒ$``serial`` Serial complete function.”h]”(jÞ)�”}”(hŒ ``serial``”h]”j‘)�”}”(hj9h]”hŒserial”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K"hj3ubjø)�”}”(hhh]”hþ)�”}”(hŒSerial complete function.”h]”hŒSerial complete function.”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K#hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jNh´K"hjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒhjˆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒpadata_list (C struct)”Œ c.padata_list”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒ padata_list”h]”j)�”}”(hŒstruct padata_list”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj�h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K)ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj�h²hh³j h´K)ubj-)�”}”(hŒ padata_list”h]”j3)�”}”(hj�h]”hŒ padata_list”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj¯ubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hj�h²hh³j h´K)ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhj‹h²hh³j h´K)ubah}”(h]”j†ah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³j h´K)hjˆh²hubj_)�”}”(hhh]”hþ)�”}”(hŒone per work type per CPU”h]”hŒone per work type per CPU”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K/hjÒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjˆh²hh³j h´K)ubeh}”(h]”h ]”(j{Œstruct”eh"]”h$]”h&]”j€j{j�jíj‚jíjƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hŒ£**Definition**:: struct padata_list { struct list_head list; spinlock_t lock; }; **Members** ``list`` List head. ``lock`` List lock.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j‘)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjõubhŒ:”…”�”}”(hjõh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K3hjñubjz)�”}”(hŒNstruct padata_list { struct list_head list; spinlock_t lock; };”h]”hŒNstruct padata_list { struct list_head list; spinlock_t lock; };”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K5hjñubhþ)�”}”(hŒ **Members**”h]”j‘)�”}”(hj#h]”hŒMembers”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K:hjñubjÓ)�”}”(hhh]”(jØ)�”}”(hŒ``list`` List head. ”h]”(jÞ)�”}”(hŒ``list``”h]”j‘)�”}”(hjBh]”hŒlist”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K2hj<ubjø)�”}”(hhh]”hþ)�”}”(hŒ List head.”h]”hŒ List head.”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jWh´K2hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jWh´K2hj9ubjØ)�”}”(hŒ``lock`` List lock.”h]”(jÞ)�”}”(hŒ``lock``”h]”j‘)�”}”(hj{h]”hŒlock”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K2hjuubjø)�”}”(hhh]”hþ)�”}”(hŒ List lock.”h]”hŒ List lock.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K3hj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjuubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j�h´K2hj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒhjñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒpadata_serial_queue (C struct)”Œc.padata_serial_queue”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒpadata_serial_queue”h]”j)�”}”(hŒstruct padata_serial_queue”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÑh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K9ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjÑh²hh³jâh´K9ubj-)�”}”(hŒpadata_serial_queue”h]”j3)�”}”(hjÏh]”hŒpadata_serial_queue”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjñubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hjÑh²hh³jâh´K9ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhjÍh²hh³jâh´K9ubah}”(h]”jÈah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³jâh´K9hjÊh²hubj_)�”}”(hhh]”hþ)�”}”(hŒThe percpu padata serial queue”h]”hŒThe percpu padata serial queue”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K:hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjÊh²hh³jâh´K9ubeh}”(h]”h ]”(j{Œstruct”eh"]”h$]”h&]”j€j{j�j/j‚j/jƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hXK**Definition**:: struct padata_serial_queue { struct padata_list serial; struct work_struct work; struct parallel_data *pd; }; **Members** ``serial`` List to wait for serialization after reordering. ``work`` work struct for serialization. ``pd`` Backpointer to the internal control structure.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j‘)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7ubhŒ:”…”�”}”(hj7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K>hj3ubjz)�”}”(hŒstruct padata_serial_queue { struct padata_list serial; struct work_struct work; struct parallel_data *pd; };”h]”hŒstruct padata_serial_queue { struct padata_list serial; struct work_struct work; struct parallel_data *pd; };”…”�”}”hjTsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K@hj3ubhþ)�”}”(hŒ **Members**”h]”j‘)�”}”(hjeh]”hŒMembers”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KFhj3ubjÓ)�”}”(hhh]”(jØ)�”}”(hŒ<``serial`` List to wait for serialization after reordering. ”h]”(jÞ)�”}”(hŒ ``serial``”h]”j‘)�”}”(hj„h]”hŒserial”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K=hj~ubjø)�”}”(hhh]”hþ)�”}”(hŒ0List to wait for serialization after reordering.”h]”hŒ0List to wait for serialization after reordering.”…”�”}”(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Œ(``work`` work struct for serialization. ”h]”(jÞ)�”}”(hŒ``work``”h]”j‘)�”}”(hj½h]”hŒwork”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K>hj·ubjø)�”}”(hhh]”hþ)�”}”(hŒwork struct for serialization.”h]”hŒwork struct for serialization.”…”�”}”(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Œ5``pd`` Backpointer to the internal control structure.”h]”(jÞ)�”}”(hŒ``pd``”h]”j‘)�”}”(hjöh]”hŒpd”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K>hjðubjø)�”}”(hhh]”hþ)�”}”(hŒ.Backpointer to the internal control structure.”h]”hŒ.Backpointer to the internal control structure.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”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&]”uh1jÒhj3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒpadata_cpumask (C struct)”Œc.padata_cpumask”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒpadata_cpumask”h]”j)�”}”(hŒstruct padata_cpumask”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjL h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjL h²hh³j] h´KEubj-)�”}”(hŒpadata_cpumask”h]”j3)�”}”(hjJ h]”hŒpadata_cpumask”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjl ubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hjL h²hh³j] h´KEubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhjH h²hh³j] h´KEubah}”(h]”jC ah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³j] h´KEhjE h²hubj_)�”}”(hhh]”hþ)�”}”(hŒ,The cpumasks for the parallel/serial workers”h]”hŒ,The cpumasks for the parallel/serial workers”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KGhj� h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjE h²hh³j] h´KEubeh}”(h]”h ]”(j{Œstruct”eh"]”h$]”h&]”j€j{j�jª j‚jª jƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hŒØ**Definition**:: struct padata_cpumask { cpumask_var_t pcpu; cpumask_var_t cbcpu; }; **Members** ``pcpu`` cpumask for the parallel workers. ``cbcpu`` cpumask for the serial (callback) workers.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j‘)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj² ubhŒ:”…”�”}”(hj² h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KKhj® ubjz)�”}”(hŒKstruct padata_cpumask { cpumask_var_t pcpu; cpumask_var_t cbcpu; };”h]”hŒKstruct padata_cpumask { cpumask_var_t pcpu; cpumask_var_t cbcpu; };”…”�”}”hjÏ sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KMhj® ubhþ)�”}”(hŒ **Members**”h]”j‘)�”}”(hjà h]”hŒMembers”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÞ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KRhj® ubjÓ)�”}”(hhh]”(jØ)�”}”(hŒ+``pcpu`` cpumask for the parallel workers. ”h]”(jÞ)�”}”(hŒ``pcpu``”h]”j‘)�”}”(hjÿ h]”hŒpcpu”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjý ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KJhjù ubjø)�”}”(hhh]”hþ)�”}”(hŒ!cpumask for the parallel workers.”h]”hŒ!cpumask for the parallel workers.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³j h´KJhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjù ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j h´KJhjö ubjØ)�”}”(hŒ4``cbcpu`` cpumask for the serial (callback) workers.”h]”(jÞ)�”}”(hŒ ``cbcpu``”h]”j‘)�”}”(hj8 h]”hŒcbcpu”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj6 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KJhj2 ubjø)�”}”(hhh]”hþ)�”}”(hŒ*cpumask for the serial (callback) workers.”h]”hŒ*cpumask for the serial (callback) workers.”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KKhjN ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj2 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jM h´KJhjö ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒhj® ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒparallel_data (C struct)”Œc.parallel_data”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒ parallel_data”h]”j)�”}”(hŒstruct parallel_data”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŽ h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KQubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjŽ h²hh³jŸ h´KQubj-)�”}”(hŒ parallel_data”h]”j3)�”}”(hjŒ h]”hŒ parallel_data”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj® ubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hjŽ h²hh³jŸ h´KQubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhjŠ h²hh³jŸ h´KQubah}”(h]”j… ah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³jŸ h´KQhj‡ h²hubj_)�”}”(hhh]”hþ)�”}”(hŒQInternal control structure, covers everything that depends on the cpumask in use.”h]”hŒQInternal control structure, covers everything that depends on the cpumask in use.”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KRhjÑ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hj‡ h²hh³jŸ h´KQubeh}”(h]”h ]”(j{Œstruct”eh"]”h$]”h&]”j€j{j�jì j‚jì jƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hX?**Definition**:: struct parallel_data { struct padata_shell *ps; struct padata_list __percpu *reorder_list; struct padata_serial_queue __percpu *squeue; refcount_t refcnt; unsigned int seq_nr; unsigned int processed; int cpu; struct padata_cpumask cpumask; }; **Members** ``ps`` padata_shell object. ``reorder_list`` percpu reorder lists ``squeue`` percpu padata queues used for serialuzation. ``refcnt`` Number of objects holding a reference on this parallel_data. ``seq_nr`` Sequence number of the parallelized data object. ``processed`` Number of already processed objects. ``cpu`` Next CPU to be processed. ``cpumask`` The cpumasks in use for parallel and serial workers.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j‘)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjô ubhŒ:”…”�”}”(hjô h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KVhjð ubjz)�”}”(hX`struct parallel_data { struct padata_shell *ps; struct padata_list __percpu *reorder_list; struct padata_serial_queue __percpu *squeue; refcount_t refcnt; unsigned int seq_nr; unsigned int processed; int cpu; struct padata_cpumask cpumask; };”h]”hX`struct parallel_data { struct padata_shell *ps; struct padata_list __percpu *reorder_list; struct padata_serial_queue __percpu *squeue; refcount_t refcnt; unsigned int seq_nr; unsigned int processed; int cpu; struct padata_cpumask cpumask; };”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KXhjð ubhþ)�”}”(hŒ **Members**”h]”j‘)�”}”(hj" h]”hŒMembers”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kchjð ubjÓ)�”}”(hhh]”(jØ)�”}”(hŒ``ps`` padata_shell object. ”h]”(jÞ)�”}”(hŒ``ps``”h]”j‘)�”}”(hjA h]”hŒps”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj? ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KVhj; ubjø)�”}”(hhh]”hþ)�”}”(hŒpadata_shell object.”h]”hŒpadata_shell object.”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jV h´KVhjW ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj; ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jV h´KVhj8 ubjØ)�”}”(hŒ&``reorder_list`` percpu reorder lists ”h]”(jÞ)�”}”(hŒ``reorder_list``”h]”j‘)�”}”(hjz h]”hŒ reorder_list”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjx ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KWhjt ubjø)�”}”(hhh]”hþ)�”}”(hŒpercpu reorder lists”h]”hŒpercpu reorder lists”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³j� h´KWhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjt ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j� h´KWhj8 ubjØ)�”}”(hŒ8``squeue`` percpu padata queues used for serialuzation. ”h]”(jÞ)�”}”(hŒ ``squeue``”h]”j‘)�”}”(hj³ h]”hŒsqueue”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj± ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KXhj­ ubjø)�”}”(hhh]”hþ)�”}”(hŒ,percpu padata queues used for serialuzation.”h]”hŒ,percpu padata queues used for serialuzation.”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jÈ h´KXhjÉ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj­ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jÈ h´KXhj8 ubjØ)�”}”(hŒH``refcnt`` Number of objects holding a reference on this parallel_data. ”h]”(jÞ)�”}”(hŒ ``refcnt``”h]”j‘)�”}”(hjì h]”hŒrefcnt”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjê ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KYhjæ ubjø)�”}”(hhh]”hþ)�”}”(hŒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³j: h´KZhj; ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j: h´KZhj8 ubjØ)�”}”(hŒ3``processed`` Number of already processed objects. ”h]”(jÞ)�”}”(hŒ ``processed``”h]”j‘)�”}”(hj^ h]”hŒ processed”…”�”}”(hj` h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj\ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K[hjX ubjø)�”}”(hhh]”hþ)�”}”(hŒ$Number of already processed objects.”h]”hŒ$Number of already processed objects.”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³js h´K[hjt ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjX ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³js h´K[hj8 ubjØ)�”}”(hŒ"``cpu`` Next CPU to be processed. ”h]”(jÞ)�”}”(hŒ``cpu``”h]”j‘)�”}”(hj— h]”hŒcpu”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj• ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K\hj‘ ubjø)�”}”(hhh]”hþ)�”}”(hŒNext CPU to be processed.”h]”hŒNext CPU to be processed.”…”�”}”(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\hj8 ubjØ)�”}”(hŒ@``cpumask`` The cpumasks in use for parallel and serial workers.”h]”(jÞ)�”}”(hŒ ``cpumask``”h]”j‘)�”}”(hjÐ h]”hŒcpumask”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÎ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K\hjÊ ubjø)�”}”(hhh]”hþ)�”}”(hŒ4The cpumasks in use for parallel and serial workers.”h]”hŒ4The cpumasks in use for parallel and serial workers.”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K]hjæ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjÊ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jå h´K\hj8 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒhjð ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒpadata_shell (C struct)”Œc.padata_shell”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒ padata_shell”h]”j)�”}”(hŒstruct padata_shell”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj& h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kcubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj& h²hh³j7 h´Kcubj-)�”}”(hŒ padata_shell”h]”j3)�”}”(hj$ h]”hŒ padata_shell”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjF ubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hj& h²hh³j7 h´Kcubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhj" h²hh³j7 h´Kcubah}”(h]”j ah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³j7 h´Kchj h²hubj_)�”}”(hhh]”hþ)�”}”(hŒ‚Wrapper around struct parallel_data, its purpose is to allow the underlying control structure to be replaced on the fly using RCU.”h]”hŒ‚Wrapper around struct parallel_data, its purpose is to allow the underlying control structure to be replaced on the fly using RCU.”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kjhji h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hj h²hh³j7 h´Kcubeh}”(h]”h ]”(j{Œstruct”eh"]”h$]”h&]”j€j{j�j„ j‚j„ jƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hX¸**Definition**:: struct padata_shell { struct padata_instance *pinst; struct parallel_data *pd; struct parallel_data *opd; struct list_head list; }; **Members** ``pinst`` padat instance. ``pd`` Actual parallel_data structure which may be substituted on the fly. ``opd`` Pointer to old pd to be freed by padata_replace. ``list`` List entry in padata_instance list.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j‘)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŒ ubhŒ:”…”�”}”(hjŒ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Knhjˆ ubjz)�”}”(hŒ¶struct padata_shell { struct padata_instance *pinst; struct parallel_data *pd; struct parallel_data *opd; struct list_head list; };”h]”hŒ¶struct padata_shell { struct padata_instance *pinst; struct parallel_data *pd; struct parallel_data *opd; struct list_head list; };”…”�”}”hj© sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kphjˆ ubhþ)�”}”(hŒ **Members**”h]”j‘)�”}”(hjº h]”hŒMembers”…”�”}”(hj¼ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¸ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kwhjˆ ubjÓ)�”}”(hhh]”(jØ)�”}”(hŒ``pinst`` padat instance. ”h]”(jÞ)�”}”(hŒ ``pinst``”h]”j‘)�”}”(hjÙ h]”hŒpinst”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj× ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KohjÓ ubjø)�”}”(hhh]”hþ)�”}”(hŒpadat instance.”h]”hŒpadat instance.”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jî h´Kohjï ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjÓ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jî h´KohjÐ ubjØ)�”}”(hŒK``pd`` Actual parallel_data structure which may be substituted on the fly. ”h]”(jÞ)�”}”(hŒ``pd``”h]”j‘)�”}”(hjh]”hŒpd”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kphj ubjø)�”}”(hhh]”hþ)�”}”(hŒCActual parallel_data structure which may be substituted on the fly.”h]”hŒCActual parallel_data structure which may be substituted on the fly.”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³j'h´Kphj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j'h´KphjÐ ubjØ)�”}”(hŒ9``opd`` Pointer to old pd to be freed by padata_replace. ”h]”(jÞ)�”}”(hŒ``opd``”h]”j‘)�”}”(hjKh]”hŒopd”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KqhjEubjø)�”}”(hhh]”hþ)�”}”(hŒ0Pointer to old pd to be freed by padata_replace.”h]”hŒ0Pointer to old pd to be freed by padata_replace.”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³j`h´Kqhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j`h´KqhjÐ ubjØ)�”}”(hŒ,``list`` List entry in padata_instance list.”h]”(jÞ)�”}”(hŒ``list``”h]”j‘)�”}”(hj„h]”hŒlist”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kqhj~ubjø)�”}”(hhh]”hþ)�”}”(hŒ#List entry in padata_instance list.”h]”hŒ#List entry in padata_instance list.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Krhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j™h´KqhjÐ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒhjˆ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒpadata_mt_job (C struct)”Œc.padata_mt_job”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒ padata_mt_job”h]”j)�”}”(hŒstruct padata_mt_job”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÚh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kxubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjÚh²hh³jëh´Kxubj-)�”}”(hŒ padata_mt_job”h]”j3)�”}”(hjØh]”hŒ padata_mt_job”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjúubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hjÚh²hh³jëh´Kxubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhjÖh²hh³jëh´Kxubah}”(h]”jÑah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³jëh´KxhjÓh²hubj_)�”}”(hhh]”hþ)�”}”(hŒ represents one multithreaded job”h]”hŒ represents one multithreaded job”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K{hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjÓh²hh³jëh´Kxubeh}”(h]”h ]”(j{Œstruct”eh"]”h$]”h&]”j€j{j�j8j‚j8jƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hXr**Definition**:: struct padata_mt_job { void (*thread_fn)(unsigned long start, unsigned long end, void *arg); void *fn_arg; unsigned long start; unsigned long size; unsigned long align; unsigned long min_chunk; int max_threads; bool numa_aware; }; **Members** ``thread_fn`` Called for each chunk of work that a padata thread does. ``fn_arg`` The thread function argument. ``start`` The start of the job (units are job-specific). ``size`` size of this node's work (units are job-specific). ``align`` Ranges passed to the thread function fall on this boundary, with the possible exceptions of the beginning and end of the job. ``min_chunk`` The minimum chunk size in job-specific units. This allows the client to communicate the minimum amount of work that's appropriate for one worker thread to do at once. ``max_threads`` Max threads to use for the job, actual number may be less depending on task size and minimum chunk size. ``numa_aware`` Distribute jobs to different nodes with CPU in a round robin fashion.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j‘)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj@ubhŒ:”…”�”}”(hj@h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Khj<ubjz)�”}”(hX.struct padata_mt_job { void (*thread_fn)(unsigned long start, unsigned long end, void *arg); void *fn_arg; unsigned long start; unsigned long size; unsigned long align; unsigned long min_chunk; int max_threads; bool numa_aware; };”h]”hX.struct padata_mt_job { void (*thread_fn)(unsigned long start, unsigned long end, void *arg); void *fn_arg; unsigned long start; unsigned long size; unsigned long align; unsigned long min_chunk; int max_threads; bool numa_aware; };”…”�”}”hj]sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K�hj<ubhþ)�”}”(hŒ **Members**”h]”j‘)�”}”(hjnh]”hŒMembers”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KŒhj<ubjÓ)�”}”(hhh]”(jØ)�”}”(hŒG``thread_fn`` Called for each chunk of work that a padata thread does. ”h]”(jÞ)�”}”(hŒ ``thread_fn``”h]”j‘)�”}”(hj�h]”hŒ thread_fn”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K~hj‡ubjø)�”}”(hhh]”hþ)�”}”(hŒ8Called for each chunk of work that a padata thread does.”h]”hŒ8Called for each chunk of work that a padata thread does.”…”�”}”(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Œ)``fn_arg`` The thread function argument. ”h]”(jÞ)�”}”(hŒ ``fn_arg``”h]”j‘)�”}”(hjÆh]”hŒfn_arg”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KhjÀubjø)�”}”(hhh]”hþ)�”}”(hŒThe thread function argument.”h]”hŒThe thread function argument.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jÛh´KhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jÛh´Khj„ubjØ)�”}”(hŒ9``start`` The start of the job (units are job-specific). ”h]”(jÞ)�”}”(hŒ ``start``”h]”j‘)�”}”(hjÿh]”hŒstart”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K€hjùubjø)�”}”(hhh]”hþ)�”}”(hŒ.The start of the job (units are job-specific).”h]”hŒ.The start of the job (units are job-specific).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jh´K€hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jh´K€hj„ubjØ)�”}”(hŒ<``size`` size of this node's work (units are job-specific). ”h]”(jÞ)�”}”(hŒ``size``”h]”j‘)�”}”(hj8h]”hŒsize”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K�hj2ubjø)�”}”(hhh]”hþ)�”}”(hŒ2size of this node's work (units are job-specific).”h]”hŒ4size of this node’s work (units are job-specific).”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jMh´K�hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jMh´K�hj„ubjØ)�”}”(hŒˆ``align`` Ranges passed to the thread function fall on this boundary, with the possible exceptions of the beginning and end of the job. ”h]”(jÞ)�”}”(hŒ ``align``”h]”j‘)�”}”(hjqh]”hŒalign”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”•´çh´Kƒhjkubjø)�”}”(hhh]”hþ)�”}”(hŒ}Ranges passed to the thread function fall on this boundary, with the possible exceptions of the beginning and end of the job.”h]”hŒ}Ranges passed to the thread function fall on this boundary, with the possible exceptions of the beginning and end of the job.”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K‚hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j†h´Kƒhj„ubjØ)�”}”(hŒ¶``min_chunk`` The minimum chunk size in job-specific units. This allows the client to communicate the minimum amount of work that's appropriate for one worker thread to do at once. ”h]”(jÞ)�”}”(hŒ ``min_chunk``”h]”j‘)�”}”(hj«h]”hŒ min_chunk”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K†hj¥ubjø)�”}”(hhh]”hþ)�”}”(hŒ§The minimum chunk size in job-specific units. This allows the client to communicate the minimum amount of work that's appropriate for one worker thread to do at once.”h]”hŒ©The minimum chunk size in job-specific units. This allows the client to communicate the minimum amount of work that’s appropriate for one worker thread to do at once.”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”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Œy``max_threads`` Max threads to use for the job, actual number may be less depending on task size and minimum chunk size. ”h]”(jÞ)�”}”(hŒ``max_threads``”h]”j‘)�”}”(hjåh]”hŒ max_threads”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kˆhjßubjø)�”}”(hhh]”hþ)�”}”(hŒhMax threads to use for the job, actual number may be less depending on task size and minimum chunk size.”h]”hŒhMax threads to use for the job, actual number may be less depending on task size and minimum chunk size.”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”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ŒT``numa_aware`` Distribute jobs to different nodes with CPU in a round robin fashion.”h]”(jÞ)�”}”(hŒ``numa_aware``”h]”j‘)�”}”(hjh]”hŒ numa_aware”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kˆhjubjø)�”}”(hhh]”hþ)�”}”(hŒEDistribute jobs to different nodes with CPU in a round robin fashion.”h]”hŒEDistribute jobs to different nodes with CPU in a round robin fashion.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K‰hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j4h´Kˆhj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒhj<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒpadata_instance (C struct)”Œc.padata_instance”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒpadata_instance”h]”j)�”}”(hŒstruct padata_instance”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjuh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjuh²hh³j†h´K�ubj-)�”}”(hŒpadata_instance”h]”j3)�”}”(hjsh]”hŒpadata_instance”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj•ubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hjuh²hh³j†h´K�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhjqh²hh³j†h´K�ubah}”(h]”jlah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³j†h´K�hjnh²hubj_)�”}”(hhh]”hþ)�”}”(hŒThe overall control structure.”h]”hŒThe overall control structure.”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K–hj¸h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjnh²hh³j†h´K�ubeh}”(h]”h ]”(j{Œstruct”eh"]”h$]”h&]”j€j{j�jÓj‚jÓjƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hX**Definition**:: struct padata_instance { struct hlist_node cpuhp_node; struct workqueue_struct *parallel_wq; struct workqueue_struct *serial_wq; struct list_head pslist; struct padata_cpumask cpumask; cpumask_var_t validate_cpumask; struct kobject kobj; struct mutex lock; u8 flags; #define PADATA_INIT 1; #define PADATA_RESET 2; #define PADATA_INVALID 4; }; **Members** ``cpuhp_node`` Linkage for CPU hotplug callbacks. ``parallel_wq`` The workqueue used for parallel work. ``serial_wq`` The workqueue used for serial work. ``pslist`` List of padata_shell objects attached to this instance. ``cpumask`` User supplied cpumasks for parallel and serial works. ``validate_cpumask`` Internal cpumask used to validate **cpumask** during hotplug. ``kobj`` padata instance kernel object. ``lock`` padata instance lock. ``flags`` padata flags.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j‘)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÛubhŒ:”…”�”}”(hjÛh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kšhj×ubjz)�”}”(hXßstruct padata_instance { struct hlist_node cpuhp_node; struct workqueue_struct *parallel_wq; struct workqueue_struct *serial_wq; struct list_head pslist; struct padata_cpumask cpumask; cpumask_var_t validate_cpumask; struct kobject kobj; struct mutex lock; u8 flags; #define PADATA_INIT 1; #define PADATA_RESET 2; #define PADATA_INVALID 4; };”h]”hXßstruct padata_instance { struct hlist_node cpuhp_node; struct workqueue_struct *parallel_wq; struct workqueue_struct *serial_wq; struct list_head pslist; struct padata_cpumask cpumask; cpumask_var_t validate_cpumask; struct kobject kobj; struct mutex lock; u8 flags; #define PADATA_INIT 1; #define PADATA_RESET 2; #define PADATA_INVALID 4; };”…”�”}”hjøsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kœhj×ubhþ)�”}”(hŒ **Members**”h]”j‘)�”}”(hj h]”hŒMembers”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K«hj×ubjÓ)�”}”(hhh]”(jØ)�”}”(hŒ2``cpuhp_node`` Linkage for CPU hotplug callbacks. ”h]”(jÞ)�”}”(hŒ``cpuhp_node``”h]”j‘)�”}”(hj(h]”hŒ cpuhp_node”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K™hj"ubjø)�”}”(hhh]”hþ)�”}”(hŒ"Linkage for CPU hotplug callbacks.”h]”hŒ"Linkage for CPU hotplug callbacks.”…”�”}”(hjAh²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™hjubjØ)�”}”(hŒ6``parallel_wq`` The workqueue used for parallel work. ”h]”(jÞ)�”}”(hŒ``parallel_wq``”h]”j‘)�”}”(hjah]”hŒ parallel_wq”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kšhj[ubjø)�”}”(hhh]”hþ)�”}”(hŒ%The workqueue used for parallel work.”h]”hŒ%The workqueue used for parallel work.”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jvh´Kšhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jvh´KšhjubjØ)�”}”(hŒ2``serial_wq`` The workqueue used for serial work. ”h]”(jÞ)�”}”(hŒ ``serial_wq``”h]”j‘)�”}”(hjšh]”hŒ serial_wq”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K›hj”ubjø)�”}”(hhh]”hþ)�”}”(hŒ#The workqueue used for serial work.”h]”hŒ#The workqueue used for serial work.”…”�”}”(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›hjubjØ)�”}”(hŒC``pslist`` List of padata_shell objects attached to this instance. ”h]”(jÞ)�”}”(hŒ ``pslist``”h]”j‘)�”}”(hjÓh]”hŒpslist”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KœhjÍubjø)�”}”(hhh]”hþ)�”}”(hŒ7List of padata_shell objects attached to this instance.”h]”hŒ7List of padata_shell objects attached to this instance.”…”�”}”(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œhjubjØ)�”}”(hŒB``cpumask`` User supplied cpumasks for parallel and serial works. ”h]”(jÞ)�”}”(hŒ ``cpumask``”h]”j‘)�”}”(hj h]”hŒcpumask”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K�hjubjø)�”}”(hhh]”hþ)�”}”(hŒ5User supplied cpumasks for parallel and serial works.”h]”hŒ5User supplied cpumasks for parallel and serial works.”…”�”}”(hj%h²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ŒS``validate_cpumask`` Internal cpumask used to validate **cpumask** during hotplug. ”h]”(jÞ)�”}”(hŒ``validate_cpumask``”h]”j‘)�”}”(hjEh]”hŒvalidate_cpumask”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´Kžhj?ubjø)�”}”(hhh]”hþ)�”}”(hŒ=Internal cpumask used to validate **cpumask** during hotplug.”h]”(hŒ"Internal cpumask used to validate ”…”�”}”(hj^h²hh³Nh´Nubj‘)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj^ubhŒ during hotplug.”…”�”}”(hj^h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jZh´Kžhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jZh´KžhjubjØ)�”}”(hŒ(``kobj`` padata instance kernel object. ”h]”(jÞ)�”}”(hŒ``kobj``”h]”j‘)�”}”(hj�h]”hŒkobj”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´KŸhjŠubjø)�”}”(hhh]”hþ)�”}”(hŒpadata instance kernel object.”h]”hŒpadata instance kernel object.”…”�”}”(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ŸhjubjØ)�”}”(hŒ``lock`` padata instance lock. ”h]”(jÞ)�”}”(hŒ``lock``”h]”j‘)�”}”(hjÉh]”hŒlock”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K hjÃubjø)�”}”(hhh]”hþ)�”}”(hŒpadata instance lock.”h]”hŒpadata instance lock.”…”�”}”(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 hjubjØ)�”}”(hŒ``flags`` padata flags.”h]”(jÞ)�”}”(hŒ ``flags``”h]”j‘)�”}”(hjh]”hŒflags”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K hjüubjø)�”}”(hhh]”hþ)�”}”(hŒ padata flags.”h]”hŒ padata flags.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/padata:177: ./include/linux/padata.h”h´K¡hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jh´K hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒhj×ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒpadata_do_parallel (C function)”Œc.padata_do_parallel”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒYint padata_do_parallel (struct padata_shell *ps, struct padata_priv *padata, int *cb_cpu)”h]”j)�”}”(hŒXint padata_do_parallel(struct padata_shell *ps, struct padata_priv *padata, int *cb_cpu)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒint”h]”hŒint”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j\hjXh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´K¥ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjXh²hh³jmh´K¥ubj-)�”}”(hŒpadata_do_parallel”h]”j3)�”}”(hŒpadata_do_parallel”h]”hŒpadata_do_parallel”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj|ubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hjXh²hh³jmh´K¥ubhŒdesc_parameterlist”“”)�”}”(hŒB(struct padata_shell *ps, struct padata_priv *padata, int *cb_cpu)”h]”(hŒdesc_parameter”“”)�”}”(hŒstruct padata_shell *ps”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjœubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjœubh)�”}”(hhh]”j3)�”}”(hŒ padata_shell”h]”hŒ padata_shell”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j{Œreftype”Œ identifier”Œ reftarget”jÀŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”jÙŒ ASTIdentifier”“”)�”}”jÔj‚sbŒc.padata_do_parallel”†”asbuh1hhjœubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjœubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jôhjœubj3)�”}”(hŒps”h]”hŒps”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhj–ubj›)�”}”(hŒstruct padata_priv *padata”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjubh)�”}”(hhh]”j3)�”}”(hŒ padata_priv”h]”hŒ padata_priv”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j{Œreftype”jÔŒ reftarget”j>Œmodname”NŒ classname”NjØjÛ)�”}”jÞ]”jâŒc.padata_do_parallel”†”asbuh1hhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjubjõ)�”}”(hjøh]”hŒ*”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jôhjubj3)�”}”(hŒpadata”h]”hŒpadata”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhj–ubj›)�”}”(hŒ int *cb_cpu”h]”(j])�”}”(hŒint”h]”hŒint”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jiah"]”h$]”h&]”uh1j\hjŠubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjŠubjõ)�”}”(hjøh]”hŒ*”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jôhjŠubj3)�”}”(hŒcb_cpu”h]”hŒcb_cpu”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjŠubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhj–ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j”hjXh²hh³jmh´K¥ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhjTh²hh³jmh´K¥ubah}”(h]”jOah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³jmh´K¥hjQh²hubj_)�”}”(hhh]”hþ)�”}”(hŒpadata parallelization function”h]”hŒpadata parallelization function”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´K¥hjÞh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjQh²hh³jmh´K¥ubeh}”(h]”h ]”(j{Œfunction”eh"]”h$]”h&]”j€j{j�jùj‚jùjƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hXT**Parameters** ``struct padata_shell *ps`` padatashell ``struct padata_priv *padata`` object to be parallelized ``int *cb_cpu`` pointer to the CPU that the serialization callback function should run on. If it's not in the serial cpumask of **pinst** (i.e. cpumask.cbcpu), this function selects a fallback CPU and if none found, returns -EINVAL. **Description** The parallelization callback function will run with BHs off. **Note** Every object which is parallelized by padata_do_parallel must be seen by padata_do_serial. **Return** 0 on success or else negative error code.”h]”(hþ)�”}”(hŒ**Parameters**”h]”j‘)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´K©hjýubjÓ)�”}”(hhh]”(jØ)�”}”(hŒ(``struct padata_shell *ps`` padatashell ”h]”(jÞ)�”}”(hŒ``struct padata_shell *ps``”h]”j‘)�”}”(hj"h]”hŒstruct padata_shell *ps”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´K§hjubjø)�”}”(hhh]”hþ)�”}”(hŒ padatashell”h]”hŒ padatashell”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³j7h´K§hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j7h´K§hjubjØ)�”}”(hŒ9``struct padata_priv *padata`` object to be parallelized ”h]”(jÞ)�”}”(hŒ``struct padata_priv *padata``”h]”j‘)�”}”(hj[h]”hŒstruct padata_priv *padata”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´K¨hjUubjø)�”}”(hhh]”hþ)�”}”(hŒobject to be parallelized”h]”hŒobject to be parallelized”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jph´K¨hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jph´K¨hjubjØ)�”}”(hŒê``int *cb_cpu`` pointer to the CPU that the serialization callback function should run on. If it's not in the serial cpumask of **pinst** (i.e. cpumask.cbcpu), this function selects a fallback CPU and if none found, returns -EINVAL. ”h]”(jÞ)�”}”(hŒ``int *cb_cpu``”h]”j‘)�”}”(hj”h]”hŒ int *cb_cpu”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´K¬hjŽubjø)�”}”(hhh]”hþ)�”}”(hŒÙpointer to the CPU that the serialization callback function should run on. If it's not in the serial cpumask of **pinst** (i.e. cpumask.cbcpu), this function selects a fallback CPU and if none found, returns -EINVAL.”h]”(hŒspointer to the CPU that the serialization callback function should run on. If it’s not in the serial cpumask of ”…”�”}”(hj­h²hh³Nh´Nubj‘)�”}”(hŒ **pinst**”h]”hŒpinst”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj­ubhŒ_ (i.e. cpumask.cbcpu), this function selects a fallback CPU and if none found, returns -EINVAL.”…”�”}”(hj­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´K©hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j©h´K¬hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒhjýubhþ)�”}”(hŒ**Description**”h]”j‘)�”}”(hjâh]”hŒ Description”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´K®hjýubhþ)�”}”(hŒah"]”h$]”h&]”uh1j2hj’ubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hjqh²hh³jƒh´M`ubj•)�”}”(hŒ(struct padata_priv *padata)”h]”j›)�”}”(hŒstruct padata_priv *padata”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj®ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj®ubh)�”}”(hhh]”j3)�”}”(hŒ padata_priv”h]”hŒ padata_priv”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjÍubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j{Œreftype”jÔŒ reftarget”jÒŒmodname”NŒ classname”NjØjÛ)�”}”jÞ]”já)�”}”jÔj˜sbŒc.padata_do_serial”†”asbuh1hhj®ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj®ubjõ)�”}”(hjøh]”hŒ*”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jôhj®ubj3)�”}”(hŒpadata”h]”hŒpadata”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhjªubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j”hjqh²hh³jƒh´M`ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhjmh²hh³jƒh´M`ubah}”(h]”jhah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³jƒh´M`hjjh²hubj_)�”}”(hhh]”hþ)�”}”(hŒpadata serialization function”h]”hŒpadata serialization function”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M`hj2h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjjh²hh³jƒh´M`ubeh}”(h]”h ]”(j{Œfunction”eh"]”h$]”h&]”j€j{j�jMj‚jMjƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hŒÕ**Parameters** ``struct padata_priv *padata`` object to be serialized. **Description** padata_do_serial must be called for every parallelized object. The serialization callback function will run with BHs off.”h]”(hþ)�”}”(hŒ**Parameters**”h]”j‘)�”}”(hjWh]”hŒ Parameters”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjUubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MdhjQubjÓ)�”}”(hhh]”jØ)�”}”(hŒ8``struct padata_priv *padata`` object to be serialized. ”h]”(jÞ)�”}”(hŒ``struct padata_priv *padata``”h]”j‘)�”}”(hjvh]”hŒstruct padata_priv *padata”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´Mbhjpubjø)�”}”(hhh]”hþ)�”}”(hŒobject to be serialized.”h]”hŒobject to be serialized.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³j‹h´MbhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j‹h´Mbhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jÒhjQubhþ)�”}”(hŒ**Description**”h]”j‘)�”}”(hj±h]”hŒ Description”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MdhjQubhþ)�”}”(hŒypadata_do_serial must be called for every parallelized object. The serialization callback function will run with BHs off.”h]”hŒypadata_do_serial must be called for every parallelized object. The serialization callback function will run with BHs off.”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MchjQubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒ$padata_do_multithreaded (C function)”Œc.padata_do_multithreaded”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒ8void padata_do_multithreaded (struct padata_mt_job *job)”h]”j)�”}”(hŒ7void padata_do_multithreaded(struct padata_mt_job *job)”h]”(j])�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jiah"]”h$]”h&]”uh1j\hjòh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M·ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjòh²hh³jh´M·ubj-)�”}”(hŒpadata_do_multithreaded”h]”j3)�”}”(hŒpadata_do_multithreaded”h]”hŒpadata_do_multithreaded”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hjòh²hh³jh´M·ubj•)�”}”(hŒ(struct padata_mt_job *job)”h]”j›)�”}”(hŒstruct padata_mt_job *job”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj/ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj/ubh)�”}”(hhh]”j3)�”}”(hŒ padata_mt_job”h]”hŒ padata_mt_job”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j{Œreftype”jÔŒ reftarget”jSŒmodname”NŒ classname”NjØjÛ)�”}”jÞ]”já)�”}”jÔjsbŒc.padata_do_multithreaded”†”asbuh1hhj/ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj/ubjõ)�”}”(hjøh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jôhj/ubj3)�”}”(hŒjob”h]”hŒjob”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhj+ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j”hjòh²hh³jh´M·ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhjîh²hh³jh´M·ubah}”(h]”jéah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³jh´M·hjëh²hubj_)�”}”(hhh]”hþ)�”}”(hŒrun a multithreaded job”h]”hŒrun a multithreaded job”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M·hj³h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjëh²hh³jh´M·ubeh}”(h]”h ]”(j{Œfunction”eh"]”h$]”h&]”j€j{j�jÎj‚jÎjƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hŒ–**Parameters** ``struct padata_mt_job *job`` Description of the job. **Description** See the definition of struct padata_mt_job for more details.”h]”(hþ)�”}”(hŒ**Parameters**”h]”j‘)�”}”(hjØh]”hŒ Parameters”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M»hjÒubjÓ)�”}”(hhh]”jØ)�”}”(hŒ6``struct padata_mt_job *job`` Description of the job. ”h]”(jÞ)�”}”(hŒ``struct padata_mt_job *job``”h]”j‘)�”}”(hj÷h]”hŒstruct padata_mt_job *job”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjõubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M¸hjñubjø)�”}”(hhh]”hþ)�”}”(hŒDescription of the job.”h]”hŒDescription of the job.”…”�”}”(hjh²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&]”uh1jÒhjÒubhþ)�”}”(hŒ**Description**”h]”j‘)�”}”(hj2h]”hŒ Description”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MºhjÒubhþ)�”}”(hŒah"]”h$]”h&]”uh1j2hj”ubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hjsh²hh³j…h´MÃubj•)�”}”(hŒH(struct padata_instance *pinst, int cpumask_type, cpumask_var_t cpumask)”h]”(j›)�”}”(hŒstruct padata_instance *pinst”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj°ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj°ubh)�”}”(hhh]”j3)�”}”(hŒpadata_instance”h]”hŒpadata_instance”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j{Œreftype”jÔŒ reftarget”jÔŒmodname”NŒ classname”NjØjÛ)�”}”jÞ]”já)�”}”jÔjšsbŒc.padata_set_cpumask”†”asbuh1hhj°ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj°ubjõ)�”}”(hjøh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jôhj°ubj3)�”}”(hŒpinst”h]”hŒpinst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhj¬ubj›)�”}”(hŒint cpumask_type”h]”(j])�”}”(hŒint”h]”hŒint”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jiah"]”h$]”h&]”uh1j\hj"ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj"ubj3)�”}”(hŒ cpumask_type”h]”hŒ cpumask_type”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhj¬ubj›)�”}”(hŒcpumask_var_t cpumask”h]”(h)�”}”(hhh]”j3)�”}”(hŒ cpumask_var_t”h]”hŒ cpumask_var_t”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj[ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j{Œreftype”jÔŒ reftarget”j`Œmodname”NŒ classname”NjØjÛ)�”}”jÞ]”jîŒc.padata_set_cpumask”†”asbuh1hhjWubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjWubj3)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhj¬ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j”hjsh²hh³j…h´MÃubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhjoh²hh³j…h´MÃubah}”(h]”jjah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³j…h´MÃhjlh²hubj_)�”}”(hhh]”hþ)�”}”(hŒRSets specified by **cpumask_type** cpumask to the value equivalent to **cpumask**.”h]”(hŒSets specified by ”…”�”}”(hj´h²hh³Nh´Nubj‘)�”}”(hŒ**cpumask_type**”h]”hŒ cpumask_type”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj´ubhŒ$ cpumask to the value equivalent to ”…”�”}”(hj´h²hh³Nh´Nubj‘)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj´ubhŒ.”…”�”}”(hj´h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MÃhj±h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjlh²hh³j…h´MÃubeh}”(h]”h ]”(j{Œfunction”eh"]”h$]”h&]”j€j{j�jðj‚jðjƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hX#**Parameters** ``struct padata_instance *pinst`` padata instance ``int cpumask_type`` PADATA_CPU_SERIAL or PADATA_CPU_PARALLEL corresponding to parallel and serial cpumasks respectively. ``cpumask_var_t cpumask`` the cpumask to use **Return** 0 on success or negative error code”h]”(hþ)�”}”(hŒ**Parameters**”h]”j‘)�”}”(hjúh]”hŒ Parameters”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MÇhjôubjÓ)�”}”(hhh]”(jØ)�”}”(hŒ2``struct padata_instance *pinst`` padata instance ”h]”(jÞ)�”}”(hŒ!``struct padata_instance *pinst``”h]”j‘)�”}”(hjh]”hŒstruct padata_instance *pinst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MÅhjubjø)�”}”(hhh]”hþ)�”}”(hŒpadata instance”h]”hŒpadata instance”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³j.h´MÅhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³j.h´MÅhjubjØ)�”}”(hŒz``int cpumask_type`` PADATA_CPU_SERIAL or PADATA_CPU_PARALLEL corresponding to parallel and serial cpumasks respectively. ”h]”(jÞ)�”}”(hŒ``int cpumask_type``”h]”j‘)�”}”(hjRh]”hŒint cpumask_type”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MÇhjLubjø)�”}”(hhh]”hþ)�”}”(hŒdPADATA_CPU_SERIAL or PADATA_CPU_PARALLEL corresponding to parallel and serial cpumasks respectively.”h]”hŒdPADATA_CPU_SERIAL or PADATA_CPU_PARALLEL corresponding to parallel and serial cpumasks respectively.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MÆhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jgh´MÇhjubjØ)�”}”(hŒ-``cpumask_var_t cpumask`` the cpumask to use ”h]”(jÞ)�”}”(hŒ``cpumask_var_t cpumask``”h]”j‘)�”}”(hjŒh]”hŒcpumask_var_t cpumask”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MÈhj†ubjø)�”}”(hhh]”hþ)�”}”(hŒthe cpumask to use”h]”hŒthe cpumask to use”…”�”}”(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Èhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÒhjôubhþ)�”}”(hŒ **Return**”h]”j‘)�”}”(hjÇh]”hŒReturn”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MÊhjôubhþ)�”}”(hŒ#0 on success or negative error code”h]”hŒ#0 on success or negative error code”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MÊhjôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒpadata_alloc (C function)”Œc.padata_alloc”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒ8struct padata_instance * padata_alloc (const char *name)”h]”j)�”}”(hŒ6struct padata_instance *padata_alloc(const char *name)”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M°ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjh²hh³jh´M°ubh)�”}”(hhh]”j3)�”}”(hŒpadata_instance”h]”hŒpadata_instance”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j{Œreftype”jÔŒ reftarget”j-Œmodname”NŒ classname”NjØjÛ)�”}”jÞ]”já)�”}”jÔŒ padata_alloc”sbŒc.padata_alloc”†”asbuh1hhjh²hh³jh´M°ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjh²hh³jh´M°ubjõ)�”}”(hjøh]”hŒ*”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jôhjh²hh³jh´M°ubj-)�”}”(hŒ padata_alloc”h]”j3)�”}”(hjIh]”hŒ padata_alloc”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjgubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hjh²hh³jh´M°ubj•)�”}”(hŒ(const char *name)”h]”j›)�”}”(hŒconst char *name”h]”(j )�”}”(hŒconst”h]”hŒconst”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj‚ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj‚ubj])�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jiah"]”h$]”h&]”uh1j\hj‚ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj‚ubjõ)�”}”(hjøh]”hŒ*”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jôhj‚ubj3)�”}”(hŒname”h]”hŒname”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhj~ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j”hjh²hh³jh´M°ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhjh²hh³jh´M°ubah}”(h]”jÿah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³jh´M°hjh²hubj_)�”}”(hhh]”hþ)�”}”(hŒ)allocate and initialize a padata instance”h]”hŒ)allocate and initialize a padata instance”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M°hjòh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjh²hh³jh´M°ubeh}”(h]”h ]”(j{Œfunction”eh"]”h$]”h&]”j€j{j�j j‚j jƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hŒx**Parameters** ``const char *name`` used to identify the instance **Return** new instance on success, NULL on error”h]”(hþ)�”}”(hŒ**Parameters**”h]”j‘)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M´hjubjÓ)�”}”(hhh]”jØ)�”}”(hŒ3``const char *name`` used to identify the instance ”h]”(jÞ)�”}”(hŒ``const char *name``”h]”j‘)�”}”(hj6h]”hŒconst char *name”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M±hj0ubjø)�”}”(hhh]”hþ)�”}”(hŒused to identify the instance”h]”hŒused to identify the instance”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jKh´M±hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jKh´M±hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÒhjubhþ)�”}”(hŒ **Return**”h]”j‘)�”}”(hjqh]”hŒReturn”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M³hjubhþ)�”}”(hŒ&new instance on success, NULL on error”h]”hŒ&new instance on success, NULL on error”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M³hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒpadata_free (C function)”Œ c.padata_free”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒ0void padata_free (struct padata_instance *pinst)”h]”j)�”}”(hŒ/void padata_free(struct padata_instance *pinst)”h]”(j])�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jiah"]”h$]”h&]”uh1j\hj²h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´Múubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj²h²hh³jÄh´Múubj-)�”}”(hŒ padata_free”h]”j3)�”}”(hŒ padata_free”h]”hŒ padata_free”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjÓubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hj²h²hh³jÄh´Múubj•)�”}”(hŒ(struct padata_instance *pinst)”h]”j›)�”}”(hŒstruct padata_instance *pinst”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjïubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjïubh)�”}”(hhh]”j3)�”}”(hŒpadata_instance”h]”hŒpadata_instance”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j{Œreftype”jÔŒ reftarget”jŒmodname”NŒ classname”NjØjÛ)�”}”jÞ]”já)�”}”jÔjÙsbŒ c.padata_free”†”asbuh1hhjïubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjïubjõ)�”}”(hjøh]”hŒ*”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jôhjïubj3)�”}”(hŒpinst”h]”hŒpinst”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjï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ÆjPˆuh1jjQjRhj®h²hh³jÄh´Múubah}”(h]”j©ah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³jÄh´Múhj«h²hubj_)�”}”(hhh]”hþ)�”}”(hŒfree a padata instance”h]”hŒfree a padata instance”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´Múhjsh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hj«h²hh³jÄh´Múubeh}”(h]”h ]”(j{Œfunction”eh"]”h$]”h&]”j€j{j�jŽj‚jŽjƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hŒK**Parameters** ``struct padata_instance *pinst`` padata instance to free”h]”(hþ)�”}”(hŒ**Parameters**”h]”j‘)�”}”(hj˜h]”hŒ Parameters”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´Mþhj’ubjÓ)�”}”(hhh]”jØ)�”}”(hŒ9``struct padata_instance *pinst`` padata instance to free”h]”(jÞ)�”}”(hŒ!``struct padata_instance *pinst``”h]”j‘)�”}”(hj·h]”hŒstruct padata_instance *pinst”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´Mhj±ubjø)�”}”(hhh]”hþ)�”}”(hŒpadata instance to free”h]”hŒpadata instance to free”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MühjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jÌh´Mhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÒhj’ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒpadata_alloc_shell (C function)”Œc.padata_alloc_shell”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒHstruct padata_shell * padata_alloc_shell (struct padata_instance *pinst)”h]”j)�”}”(hŒFstruct padata_shell *padata_alloc_shell(struct padata_instance *pinst)”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj h²hh³j h´Mubh)�”}”(hhh]”j3)�”}”(hŒ padata_shell”h]”hŒ padata_shell”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj- ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j{Œreftype”jÔŒ reftarget”j2 Œmodname”NŒ classname”NjØjÛ)�”}”jÞ]”já)�”}”jÔŒpadata_alloc_shell”sbŒc.padata_alloc_shell”†”asbuh1hhj h²hh³j h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj h²hh³j h´Mubjõ)�”}”(hjøh]”hŒ*”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jôhj h²hh³j h´Mubj-)�”}”(hŒpadata_alloc_shell”h]”j3)�”}”(hjN h]”hŒpadata_alloc_shell”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjl ubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hj h²hh³j h´Mubj•)�”}”(hŒ(struct padata_instance *pinst)”h]”j›)�”}”(hŒstruct padata_instance *pinst”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj‡ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜ h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj‡ ubh)�”}”(hhh]”j3)�”}”(hŒpadata_instance”h]”hŒpadata_instance”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj¦ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j{Œreftype”jÔŒ reftarget”j« Œmodname”NŒ classname”NjØjÛ)�”}”jÞ]”jL Œc.padata_alloc_shell”†”asbuh1hhj‡ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj‡ ubjõ)�”}”(hjøh]”hŒ*”…”�”}”(hjÕ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jôhj‡ ubj3)�”}”(hŒpinst”h]”hŒpinst”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj‡ 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´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjPˆuh1jjQjRhj h²hh³j h´Mubah}”(h]”j ah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³j h´Mhj h²hubj_)�”}”(hhh]”hþ)�”}”(hŒ%Allocate and initialize padata shell.”h]”hŒ%Allocate and initialize padata shell.”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´Mhj !h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hj h²hh³j h´Mubeh}”(h]”h ]”(j{Œfunction”eh"]”h$]”h&]”j€j{j�j$!j‚j$!jƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hŒƒ**Parameters** ``struct padata_instance *pinst`` Parent padata_instance object. **Return** new shell on success, NULL on error”h]”(hþ)�”}”(hŒ**Parameters**”h]”j‘)�”}”(hj.!h]”hŒ Parameters”…”�”}”(hj0!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj,!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M hj(!ubjÓ)�”}”(hhh]”jØ)�”}”(hŒA``struct padata_instance *pinst`` Parent padata_instance object. ”h]”(jÞ)�”}”(hŒ!``struct padata_instance *pinst``”h]”j‘)�”}”(hjM!h]”hŒstruct padata_instance *pinst”…”�”}”(hjO!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjK!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´MhjG!ubjø)�”}”(hhh]”hþ)�”}”(hŒParent padata_instance object.”h]”hŒParent padata_instance object.”…”�”}”(hjf!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jb!h´Mhjc!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjG!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jb!h´MhjD!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÒhj(!ubhþ)�”}”(hŒ **Return**”h]”j‘)�”}”(hjˆ!h]”hŒReturn”…”�”}”(hjŠ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj†!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M hj(!ubhþ)�”}”(hŒ#new shell on success, NULL on error”h]”hŒ#new shell on success, NULL on error”…”�”}”(hjž!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M hj(!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubjè)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jôŒpadata_free_shell (C function)”Œc.padata_free_shell”hNt”auh1jçhjÖh²hh³Nh´Nubjù)�”}”(hhh]”(jþ)�”}”(hŒ0void padata_free_shell (struct padata_shell *ps)”h]”j)�”}”(hŒ/void padata_free_shell(struct padata_shell *ps)”h]”(j])�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÍ!h²hh³Nh´Nubah}”(h]”h ]”jiah"]”h$]”h&]”uh1j\hjÉ!h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M,ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ!h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhjÉ!h²hh³jÛ!h´M,ubj-)�”}”(hŒpadata_free_shell”h]”j3)�”}”(hŒpadata_free_shell”h]”hŒpadata_free_shell”…”�”}”(hjî!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hjê!ubah}”(h]”h ]”(jEjFeh"]”h$]”h&]”hÅhÆuh1j,hjÉ!h²hh³jÛ!h´M,ubj•)�”}”(hŒ(struct padata_shell *ps)”h]”j›)�”}”(hŒstruct padata_shell *ps”h]”(j )�”}”(hj h]”hŒstruct”…”�”}”(hj "h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj"ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj"ubh)�”}”(hhh]”j3)�”}”(hŒ padata_shell”h]”hŒ padata_shell”…”�”}”(hj("h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj%"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j{Œreftype”jÔŒ reftarget”j*"Œmodname”NŒ classname”NjØjÛ)�”}”jÞ]”já)�”}”jÔjð!sbŒc.padata_free_shell”†”asbuh1hhj"ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH"h²hh³Nh´Nubah}”(h]”h ]”j(ah"]”h$]”h&]”uh1jhj"ubjõ)�”}”(hjøh]”hŒ*”…”�”}”(hjV"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jôhj"ubj3)�”}”(hŒps”h]”hŒps”…”�”}”(hjc"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j2hj"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ÆjPˆuh1jjQjRhjÅ!h²hh³jÛ!h´M,ubah}”(h]”jÀ!ah ]”(jVjWeh"]”h$]”h&]”j[ˆj\)j]huh1jýh³jÛ!h´M,hjÂ!h²hubj_)�”}”(hhh]”hþ)�”}”(hŒfree a padata shell”h]”hŒfree a padata shell”…”�”}”(hj�"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M,hjŠ"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j^hjÂ!h²hh³jÛ!h´M,ubeh}”(h]”h ]”(j{Œfunction”eh"]”h$]”h&]”j€j{j�j¥"j‚j¥"jƒ‰j„‰j…‰uh1jøh²hhjÖh³Nh´Nubj‡)�”}”(hŒB**Parameters** ``struct padata_shell *ps`` padata shell to free”h]”(hþ)�”}”(hŒ**Parameters**”h]”j‘)�”}”(hj¯"h]”hŒ Parameters”…”�”}”(hj±"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj­"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M0hj©"ubjÓ)�”}”(hhh]”jØ)�”}”(hŒ0``struct padata_shell *ps`` padata shell to free”h]”(jÞ)�”}”(hŒ``struct padata_shell *ps``”h]”j‘)�”}”(hjÎ"h]”hŒstruct padata_shell *ps”…”�”}”(hjÐ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÌ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M2hjÈ"ubjø)�”}”(hhh]”hþ)�”}”(hŒpadata shell to free”h]”hŒpadata shell to free”…”�”}”(hjç"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/padata:178: ./kernel/padata.c”h´M.hjä"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j÷hjÈ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×h³jã"h´M2hjÅ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÒhj©"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j†hjÖh²hh³Nh´Nubeh}”(h]”Œ interface”ah ]”h"]”Œ interface”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K¯ubeh}”(h]”Œ'the-padata-parallel-execution-mechanism”ah ]”h"]”Œ'the padata parallel execution mechanism”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jB#Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j#j#jfjcjÆjÃjOjLjØjÕjjj^j[jÓjÐj#j#uŒ nametypes”}”(j#‰jf‰jƉjO‰j؉j‰j^‰jÓ‰j#‰uh}”(j#hÊjcjIjÃjZjLjÉjÕjRjjÛj[jjÐjij#jÖjöjÿj†j‹jÈjÍjC jH j… jŠ j j" jÑjÖjljqjOjTjhjmjéjîjjjojÿjj©j®j j jÀ!jÅ!uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.