€•˜Œ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/workqueue”Œ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/workqueue”Œ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/workqueue”Œ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/workqueue”Œ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/workqueue”Œ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/workqueue”Œ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/workqueue”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ Workqueue”h]”hŒ Workqueue”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ@/var/lib/git/docbuild/linux/Documentation/core-api/workqueue.rst”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ŒSeptember, 2010”h]”hŒ paragraph”“”)�”}”(hhéh]”hŒSeptember, 2010”…”�”}”(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²hubhÑ)�”}”(hhh]”(hÖ)�”}”(hŒAuthor”h]”hŒAuthor”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjh³hÊh´Kubhæ)�”}”(hŒTejun Heo ”h]”hì)�”}”(hjh]”(hŒ Tejun Heo <”…”�”}”(hjh²hh³Nh´NubhŒ reference”“”)�”}”(hŒ tj@kernel.org”h]”hŒ tj@kernel.org”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:tj@kernel.org”uh1j"hjubhŒ>”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1håhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÐh³hÊh´KhhÍh²hubhÑ)�”}”(hhh]”(hÖ)�”}”(hŒAuthor”h]”hŒAuthor”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjJh³hÊh´Kubhæ)�”}”(hŒ'Florian Mickler ”h]”hì)�”}”(hŒ%Florian Mickler ”h]”(hŒFlorian Mickler <”…”�”}”(hj_h²hh³Nh´Nubj#)�”}”(hŒflorian@mickler.org”h]”hŒflorian@mickler.org”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:florian@mickler.org”uh1j"hj_ubhŒ>”…”�”}”(hj_h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Khj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1håhjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÐh³hÊh´KhhÍh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ Introduction”h]”hŒ Introduction”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj“h²hh³hÊh´K ubhì)�”}”(hŒ�There are many cases where an asynchronous process execution context is needed and the workqueue (wq) API is the most commonly used mechanism for such cases.”h]”hŒ�There are many cases where an asynchronous process execution context is needed and the workqueue (wq) API is the most commonly used mechanism for such cases.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K hj“h²hubhì)�”}”(hŒÿWhen such an asynchronous execution context is needed, a work item describing which function to execute is put on a queue. An independent thread serves as the asynchronous execution context. The queue is called workqueue and the thread is called worker.”h]”hŒÿWhen such an asynchronous execution context is needed, a work item describing which function to execute is put on a queue. An independent thread serves as the asynchronous execution context. The queue is called workqueue and the thread is called worker.”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Khj“h²hubhì)�”}”(hXWhile there are work items on the workqueue the worker executes the functions associated with the work items one after the other. When there is no work item left on the workqueue the worker becomes idle. When a new work item gets queued, the worker begins executing again.”h]”hXWhile there are work items on the workqueue the worker executes the functions associated with the work items one after the other. When there is no work item left on the workqueue the worker becomes idle. When a new work item gets queued, the worker begins executing again.”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Khj“h²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hµhh·h²hh³hÊh´K ubh¶)�”}”(hhh]”(h»)�”}”(hŒ"Why Concurrency Managed Workqueue?”h]”hŒ"Why Concurrency Managed Workqueue?”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÖh²hh³hÊh´Kubhì)�”}”(hXŸIn the original wq implementation, a multi threaded (MT) wq had one worker thread per CPU and a single threaded (ST) wq had one worker thread system-wide. A single MT wq needed to keep around the same number of workers as the number of CPUs. The kernel grew a lot of MT wq users over the years and with the number of CPU cores continuously rising, some systems saturated the default 32k PID space just booting up.”h]”hXŸIn the original wq implementation, a multi threaded (MT) wq had one worker thread per CPU and a single threaded (ST) wq had one worker thread system-wide. A single MT wq needed to keep around the same number of workers as the number of CPUs. The kernel grew a lot of MT wq users over the years and with the number of CPU cores continuously rising, some systems saturated the default 32k PID space just booting up.”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KhjÖh²hubhì)�”}”(hXåAlthough MT wq wasted a lot of resource, the level of concurrency provided was unsatisfactory. The limitation was common to both ST and MT wq albeit less severe on MT. Each wq maintained its own separate worker pool. An MT wq could provide only one execution context per CPU while an ST wq one for the whole system. Work items had to compete for those very limited execution contexts leading to various problems including proneness to deadlocks around the single execution context.”h]”hXåAlthough MT wq wasted a lot of resource, the level of concurrency provided was unsatisfactory. The limitation was common to both ST and MT wq albeit less severe on MT. Each wq maintained its own separate worker pool. An MT wq could provide only one execution context per CPU while an ST wq one for the whole system. Work items had to compete for those very limited execution contexts leading to various problems including proneness to deadlocks around the single execution context.”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K'hjÖh²hubhì)�”}”(hX°The tension between the provided level of concurrency and resource usage also forced its users to make unnecessary tradeoffs like libata choosing to use ST wq for polling PIOs and accepting an unnecessary limitation that no two polling PIOs can progress at the same time. As MT wq don't provide much better concurrency, users which require higher level of concurrency, like async or fscache, had to implement their own thread pool.”h]”hX²The tension between the provided level of concurrency and resource usage also forced its users to make unnecessary tradeoffs like libata choosing to use ST wq for polling PIOs and accepting an unnecessary limitation that no two polling PIOs can progress at the same time. As MT wq don’t provide much better concurrency, users which require higher level of concurrency, like async or fscache, had to implement their own thread pool.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K/hjÖh²hubhì)�”}”(hŒcConcurrency Managed Workqueue (cmwq) is a reimplementation of wq with focus on the following goals.”h]”hŒcConcurrency Managed Workqueue (cmwq) is a reimplementation of wq with focus on the following goals.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K7hjÖh²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ8Maintain compatibility with the original workqueue API. ”h]”hì)�”}”(hŒ7Maintain compatibility with the original workqueue API.”h]”hŒ7Maintain compatibility with the original workqueue API.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K:hj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj!h²hh³hÊh´Nubj%)�”}”(hŒˆUse per-CPU unified worker pools shared by all wq to provide flexible level of concurrency on demand without wasting a lot of resource. ”h]”hì)�”}”(hŒ‡Use per-CPU unified worker pools shared by all wq to provide flexible level of concurrency on demand without wasting a lot of resource.”h]”hŒ‡Use per-CPU unified worker pools shared by all wq to provide flexible level of concurrency on demand without wasting a lot of resource.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj!h²hh³hÊh´Nubj%)�”}”(hŒ{Automatically regulate worker pool and level of concurrency so that the API users don't need to worry about such details. ”h]”hì)�”}”(hŒyAutomatically regulate worker pool and level of concurrency so that the API users don't need to worry about such details.”h]”hŒ{Automatically regulate worker pool and level of concurrency so that the API users don’t need to worry about such details.”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K@hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj!h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jh³hÊh´K:hjÖh²hubeh}”(h]”Œ!why-concurrency-managed-workqueue”ah ]”h"]”Œ"why concurrency managed workqueue?”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ The Design”h]”hŒ The Design”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj~h²hh³hÊh´KEubhì)�”}”(hŒiIn order to ease the asynchronous execution of functions a new abstraction, the work item, is introduced.”h]”hŒiIn order to ease the asynchronous execution of functions a new abstraction, the work item, is introduced.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KGhj~h²hubhì)�”}”(hXA work item is a simple struct that holds a pointer to the function that is to be executed asynchronously. Whenever a driver or subsystem wants a function to be executed asynchronously it has to set up a work item pointing to that function and queue that work item on a workqueue.”h]”hXA work item is a simple struct that holds a pointer to the function that is to be executed asynchronously. Whenever a driver or subsystem wants a function to be executed asynchronously it has to set up a work item pointing to that function and queue that work item on a workqueue.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KJhj~h²hubhì)�”}”(hŒKA work item can be executed in either a thread or the BH (softirq) context.”h]”hŒKA work item can be executed in either a thread or the BH (softirq) context.”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KPhj~h²hubhì)�”}”(hŒéFor threaded workqueues, special purpose threads, called [k]workers, execute the functions off of the queue, one after the other. If no work is queued, the worker threads become idle. These worker threads are managed in worker-pools.”h]”hŒéFor threaded workqueues, special purpose threads, called [k]workers, execute the functions off of the queue, one after the other. If no work is queued, the worker threads become idle. These worker threads are managed in worker-pools.”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KRhj~h²hubhì)�”}”(hŒËThe cmwq design differentiates between the user-facing workqueues that subsystems and drivers queue work items on and the backend mechanism which manages worker-pools and processes the queued work items.”h]”hŒËThe cmwq design differentiates between the user-facing workqueues that subsystems and drivers queue work items on and the backend mechanism which manages worker-pools and processes the queued work items.”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KWhj~h²hubhì)�”}”(hŒîThere are two worker-pools, one for normal work items and the other for high priority ones, for each possible CPU and some extra worker-pools to serve work items queued on unbound workqueues - the number of these backing pools is dynamic.”h]”hŒîThere are two worker-pools, one for normal work items and the other for high priority ones, for each possible CPU and some extra worker-pools to serve work items queued on unbound workqueues - the number of these backing pools is dynamic.”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K[hj~h²hubhì)�”}”(hX=BH workqueues use the same framework. However, as there can only be one concurrent execution context, there's no need to worry about concurrency. Each per-CPU BH worker pool contains only one pseudo worker which represents the BH execution context. A BH workqueue can be considered a convenience interface to softirq.”h]”hX?BH workqueues use the same framework. However, as there can only be one concurrent execution context, there’s no need to worry about concurrency. Each per-CPU BH worker pool contains only one pseudo worker which represents the BH execution context. A BH workqueue can be considered a convenience interface to softirq.”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K`hj~h²hubhì)�”}”(hX©Subsystems and drivers can create and queue work items through special workqueue API functions as they see fit. They can influence some aspects of the way the work items are executed by setting flags on the workqueue they are putting the work item on. These flags include things like CPU locality, concurrency limits, priority and more. To get a detailed overview refer to the API description of ``alloc_workqueue()`` below.”h]”(hX�Subsystems and drivers can create and queue work items through special workqueue API functions as they see fit. They can influence some aspects of the way the work items are executed by setting flags on the workqueue they are putting the work item on. These flags include things like CPU locality, concurrency limits, priority and more. To get a detailed overview refer to the API description of ”…”�”}”(hjñh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``alloc_workqueue()``”h]”hŒalloc_workqueue()”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjñubhŒ below.”…”�”}”(hjñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Kfhj~h²hubhì)�”}”(hX�When a work item is queued to a workqueue, the target worker-pool is determined according to the queue parameters and workqueue attributes and appended on the shared worklist of the worker-pool. For example, unless specifically overridden, a work item of a bound workqueue will be queued on the worklist of either normal or highpri worker-pool that is associated to the CPU the issuer is running on.”h]”hX�When a work item is queued to a workqueue, the target worker-pool is determined according to the queue parameters and workqueue attributes and appended on the shared worklist of the worker-pool. For example, unless specifically overridden, a work item of a bound workqueue will be queued on the worklist of either normal or highpri worker-pool that is associated to the CPU the issuer is running on.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Knhj~h²hubhì)�”}”(hX#For any thread pool implementation, managing the concurrency level (how many execution contexts are active) is an important issue. cmwq tries to keep the concurrency at a minimal but sufficient level. Minimal to save resources and sufficient in that the system is used at its full capacity.”h]”hX#For any thread pool implementation, managing the concurrency level (how many execution contexts are active) is an important issue. cmwq tries to keep the concurrency at a minimal but sufficient level. Minimal to save resources and sufficient in that the system is used at its full capacity.”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Kuhj~h²hubhì)�”}”(hXEach worker-pool bound to an actual CPU implements concurrency management by hooking into the scheduler. The worker-pool is notified whenever an active worker wakes up or sleeps and keeps track of the number of the currently runnable workers. Generally, work items are not expected to hog a CPU and consume many cycles. That means maintaining just enough concurrency to prevent work processing from stalling should be optimal. As long as there are one or more runnable workers on the CPU, the worker-pool doesn't start execution of a new work, but, when the last running worker goes to sleep, it immediately schedules a new worker so that the CPU doesn't sit idle while there are pending work items. This allows using a minimal number of workers without losing execution bandwidth.”h]”hXEach worker-pool bound to an actual CPU implements concurrency management by hooking into the scheduler. The worker-pool is notified whenever an active worker wakes up or sleeps and keeps track of the number of the currently runnable workers. Generally, work items are not expected to hog a CPU and consume many cycles. That means maintaining just enough concurrency to prevent work processing from stalling should be optimal. As long as there are one or more runnable workers on the CPU, the worker-pool doesn’t start execution of a new work, but, when the last running worker goes to sleep, it immediately schedules a new worker so that the CPU doesn’t sit idle while there are pending work items. This allows using a minimal number of workers without losing execution bandwidth.”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K{hj~h²hubhì)�”}”(hŒ�Keeping idle workers around doesn't cost other than the memory space for kthreads, so cmwq holds onto idle ones for a while before killing them.”h]”hŒ’Keeping idle workers around doesn’t cost other than the memory space for kthreads, so cmwq holds onto idle ones for a while before killing them.”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Kˆhj~h²hubhì)�”}”(hX­For unbound workqueues, the number of backing pools is dynamic. Unbound workqueue can be assigned custom attributes using ``apply_workqueue_attrs()`` and workqueue will automatically create backing worker pools matching the attributes. The responsibility of regulating concurrency level is on the users. There is also a flag to mark a bound wq to ignore the concurrency management. Please refer to the API section for details.”h]”(hŒzFor unbound workqueues, the number of backing pools is dynamic. Unbound workqueue can be assigned custom attributes using ”…”�”}”(hjKh²hh³Nh´Nubjú)�”}”(hŒ``apply_workqueue_attrs()``”h]”hŒapply_workqueue_attrs()”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjKubhX and workqueue will automatically create backing worker pools matching the attributes. The responsibility of regulating concurrency level is on the users. There is also a flag to mark a bound wq to ignore the concurrency management. Please refer to the API section for details.”…”�”}”(hjKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KŒhj~h²hubhì)�”}”(hXÁForward progress guarantee relies on that workers can be created when more execution contexts are necessary, which in turn is guaranteed through the use of rescue workers. All work items which might be used on code paths that handle memory reclaim are required to be queued on wq's that have a rescue-worker reserved for execution under memory pressure. Else it is possible that the worker-pool deadlocks waiting for execution contexts to free up.”h]”hXÃForward progress guarantee relies on that workers can be created when more execution contexts are necessary, which in turn is guaranteed through the use of rescue workers. All work items which might be used on code paths that handle memory reclaim are required to be queued on wq’s that have a rescue-worker reserved for execution under memory pressure. Else it is possible that the worker-pool deadlocks waiting for execution contexts to free up.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K”hj~h²hubeh}”(h]”Œ the-design”ah ]”h"]”Œ the design”ah$]”h&]”uh1hµhh·h²hh³hÊh´KEubh¶)�”}”(hhh]”(h»)�”}”(hŒ'Application Programming Interface (API)”h]”hŒ'Application Programming Interface (API)”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj�h²hh³hÊh´Kžubhì)�”}”(hX;``alloc_workqueue()`` allocates a wq. The original ``create_*workqueue()`` functions are deprecated and scheduled for removal. ``alloc_workqueue()`` takes three arguments - ``@name``, ``@flags`` and ``@max_active``. ``@name`` is the name of the wq and also used as the name of the rescuer thread if there is one.”h]”(jú)�”}”(hŒ``alloc_workqueue()``”h]”hŒalloc_workqueue()”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj’ubhŒ allocates a wq. The original ”…”�”}”(hj’h²hh³Nh´Nubjú)�”}”(hŒ``create_*workqueue()``”h]”hŒcreate_*workqueue()”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj’ubhŒ6 functions are deprecated and scheduled for removal. ”…”�”}”(hj’h²hh³Nh´Nubjú)�”}”(hŒ``alloc_workqueue()``”h]”hŒalloc_workqueue()”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj’ubhŒ takes three arguments - ”…”�”}”(hj’h²hh³Nh´Nubjú)�”}”(hŒ ``@name``”h]”hŒ@name”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj’ubhŒ, ”…”�”}”(hj’h²hh³Nh´Nubjú)�”}”(hŒ ``@flags``”h]”hŒ@flags”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj’ubhŒ and ”…”�”}”(hj’h²hh³Nh´Nubjú)�”}”(hŒ``@max_active``”h]”hŒ @max_active”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj’ubhŒ. ”…”�”}”(hj’h²hh³Nh´Nubjú)�”}”(hŒ ``@name``”h]”hŒ@name”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj’ubhŒW is the name of the wq and also used as the name of the rescuer thread if there is one.”…”�”}”(hj’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K hj�h²hubhì)�”}”(hŒñA wq no longer manages execution resources but serves as a domain for forward progress guarantee, flush and work item attributes. ``@flags`` and ``@max_active`` control how work items are assigned execution resources, scheduled and executed.”h]”(hŒ‚A wq no longer manages execution resources but serves as a domain for forward progress guarantee, flush and work item attributes. ”…”�”}”(hjh²hh³Nh´Nubjú)�”}”(hŒ ``@flags``”h]”hŒ@flags”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjubhŒ and ”…”�”}”(hjh²hh³Nh´Nubjú)�”}”(hŒ``@max_active``”h]”hŒ @max_active”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjubhŒQ control how work items are assigned execution resources, scheduled and executed.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K¦hj�h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ ``flags``”h]”jú)�”}”(hjQh]”hŒflags”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjLh²hh³hÊh´K­ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hX¥``WQ_BH`` BH workqueues can be considered a convenience interface to softirq. BH workqueues are always per-CPU and all BH work items are executed in the queueing CPU's softirq context in the queueing order. All BH workqueues must have 0 ``max_active`` and ``WQ_HIGHPRI`` is the only allowed additional flag. BH work items cannot sleep. All other features such as delayed queueing, flushing and canceling are supported. ”h]”(hŒterm”“”)�”}”(hŒ ``WQ_BH``”h]”jú)�”}”(hjuh]”hŒWQ_BH”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´K¸hjmubhŒ definition”“”)�”}”(hhh]”(hì)�”}”(hŒÄBH workqueues can be considered a convenience interface to softirq. BH workqueues are always per-CPU and all BH work items are executed in the queueing CPU's softirq context in the queueing order.”h]”hŒÆBH workqueues can be considered a convenience interface to softirq. BH workqueues are always per-CPU and all BH work items are executed in the queueing CPU’s softirq context in the queueing order.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K°hjŒubhì)�”}”(hŒdAll BH workqueues must have 0 ``max_active`` and ``WQ_HIGHPRI`` is the only allowed additional flag.”h]”(hŒAll BH workqueues must have 0 ”…”�”}”(hj�h²hh³Nh´Nubjú)�”}”(hŒ``max_active``”h]”hŒ max_active”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj�ubhŒ and ”…”�”}”(hj�h²hh³Nh´Nubjú)�”}”(hŒ``WQ_HIGHPRI``”h]”hŒ WQ_HIGHPRI”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj�ubhŒ% is the only allowed additional flag.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K´hjŒubhì)�”}”(hŒnBH work items cannot sleep. All other features such as delayed queueing, flushing and canceling are supported.”h]”hŒnBH work items cannot sleep. All other features such as delayed queueing, flushing and canceling are supported.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K·hjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´K¸hjhubjl)�”}”(hŒ»``WQ_PERCPU`` Work items queued to a per-cpu wq are bound to a specific CPU. This flag is the right choice when cpu locality is important. This flag is the complement of ``WQ_UNBOUND``. ”h]”(jr)�”}”(hŒ ``WQ_PERCPU``”h]”jú)�”}”(hjïh]”hŒ WQ_PERCPU”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´K¾hjéubj‹)�”}”(hhh]”(hì)�”}”(hŒ|Work items queued to a per-cpu wq are bound to a specific CPU. This flag is the right choice when cpu locality is important.”h]”hŒ|Work items queued to a per-cpu wq are bound to a specific CPU. This flag is the right choice when cpu locality is important.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K»hjubhì)�”}”(hŒ.This flag is the complement of ``WQ_UNBOUND``.”h]”(hŒThis flag is the complement of ”…”�”}”(hjh²hh³Nh´Nubjú)�”}”(hŒ``WQ_UNBOUND``”h]”hŒ WQ_UNBOUND”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K¾hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjéubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´K¾hjhh²hubjl)�”}”(hXÉ``WQ_UNBOUND`` Work items queued to an unbound wq are served by the special worker-pools which host workers which are not bound to any specific CPU. This makes the wq behave as a simple execution context provider without concurrency management. The unbound worker-pools try to start execution of work items as soon as possible. Unbound wq sacrifices locality but is useful for the following cases. * Wide fluctuation in the concurrency level requirement is expected and using bound wq may end up creating large number of mostly unused workers across different CPUs as the issuer hops through different CPUs. * Long running CPU intensive workloads which can be better managed by the system scheduler. ”h]”(jr)�”}”(hŒ``WQ_UNBOUND``”h]”jú)�”}”(hjGh]”hŒ WQ_UNBOUND”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´KÏhjAubj‹)�”}”(hhh]”(hì)�”}”(hX�Work items queued to an unbound wq are served by the special worker-pools which host workers which are not bound to any specific CPU. This makes the wq behave as a simple execution context provider without concurrency management. The unbound worker-pools try to start execution of work items as soon as possible. Unbound wq sacrifices locality but is useful for the following cases.”h]”hX�Work items queued to an unbound wq are served by the special worker-pools which host workers which are not bound to any specific CPU. This makes the wq behave as a simple execution context provider without concurrency management. The unbound worker-pools try to start execution of work items as soon as possible. Unbound wq sacrifices locality but is useful for the following cases.”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÁhj\ubj )�”}”(hhh]”(j%)�”}”(hŒÐWide fluctuation in the concurrency level requirement is expected and using bound wq may end up creating large number of mostly unused workers across different CPUs as the issuer hops through different CPUs. ”h]”hì)�”}”(hŒÏWide fluctuation in the concurrency level requirement is expected and using bound wq may end up creating large number of mostly unused workers across different CPUs as the issuer hops through different CPUs.”h]”hŒÏWide fluctuation in the concurrency level requirement is expected and using bound wq may end up creating large number of mostly unused workers across different CPUs as the issuer hops through different CPUs.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÉhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjmubj%)�”}”(hŒZLong running CPU intensive workloads which can be better managed by the system scheduler. ”h]”hì)�”}”(hŒYLong running CPU intensive workloads which can be better managed by the system scheduler.”h]”hŒYLong running CPU intensive workloads which can be better managed by the system scheduler.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÎhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjmubeh}”(h]”h ]”h"]”h$]”h&]”jtjuuh1jh³hÊh´KÉhj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´KÏhjhh²hubjl)�”}”(hŒ¹``WQ_FREEZABLE`` A freezable wq participates in the freeze phase of the system suspend operations. Work items on the wq are drained and no new work item starts execution until thawed. ”h]”(jr)�”}”(hŒ``WQ_FREEZABLE``”h]”jú)�”}”(hj¸h]”hŒ WQ_FREEZABLE”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´KÔhj²ubj‹)�”}”(hhh]”hì)�”}”(hŒ§A freezable wq participates in the freeze phase of the system suspend operations. Work items on the wq are drained and no new work item starts execution until thawed.”h]”hŒ§A freezable wq participates in the freeze phase of the system suspend operations. Work items on the wq are drained and no new work item starts execution until thawed.”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÒhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´KÔhjhh²hubjl)�”}”(hŒÃ``WQ_MEM_RECLAIM`` All wq which might be used in the memory reclaim paths **MUST** have this flag set. The wq is guaranteed to have at least one execution context regardless of memory pressure. ”h]”(jr)�”}”(hŒ``WQ_MEM_RECLAIM``”h]”jú)�”}”(hjðh]”hŒWQ_MEM_RECLAIM”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´KÙhjêubj‹)�”}”(hhh]”hì)�”}”(hŒ¯All wq which might be used in the memory reclaim paths **MUST** have this flag set. The wq is guaranteed to have at least one execution context regardless of memory pressure.”h]”(hŒ7All wq which might be used in the memory reclaim paths ”…”�”}”(hjh²hh³Nh´NubhŒstrong”“”)�”}”(hŒ**MUST**”h]”hŒMUST”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒp have this flag set. The wq is guaranteed to have at least one execution context regardless of memory pressure.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K×hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´KÙhjhh²hubjl)�”}”(hXa``WQ_HIGHPRI`` Work items of a highpri wq are queued to the highpri worker-pool of the target cpu. Highpri worker-pools are served by worker threads with elevated nice level. Note that normal and highpri worker-pools don't interact with each other. Each maintains its separate pool of workers and implements concurrency management among its workers. ”h]”(jr)�”}”(hŒ``WQ_HIGHPRI``”h]”jú)�”}”(hj<h]”hŒ WQ_HIGHPRI”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´Kâhj6ubj‹)�”}”(hhh]”(hì)�”}”(hŒ Work items of a highpri wq are queued to the highpri worker-pool of the target cpu. Highpri worker-pools are served by worker threads with elevated nice level.”h]”hŒ Work items of a highpri wq are queued to the highpri worker-pool of the target cpu. Highpri worker-pools are served by worker threads with elevated nice level.”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÜhjQubhì)�”}”(hŒ¯Note that normal and highpri worker-pools don't interact with each other. Each maintains its separate pool of workers and implements concurrency management among its workers.”h]”hŒ±Note that normal and highpri worker-pools don’t interact with each other. Each maintains its separate pool of workers and implements concurrency management among its workers.”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KàhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´Kâhjhh²hubjl)�”}”(hX�``WQ_CPU_INTENSIVE`` Work items of a CPU intensive wq do not contribute to the concurrency level. In other words, runnable CPU intensive work items will not prevent other work items in the same worker-pool from starting execution. This is useful for bound work items which are expected to hog CPU cycles so that their execution is regulated by the system scheduler. Although CPU intensive work items don't contribute to the concurrency level, start of their executions is still regulated by the concurrency management and runnable non-CPU-intensive work items can delay execution of CPU intensive work items. This flag is meaningless for unbound wq. ”h]”(jr)�”}”(hŒ``WQ_CPU_INTENSIVE``”h]”jú)�”}”(hj‚h]”hŒWQ_CPU_INTENSIVE”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´Kóhj|ubj‹)�”}”(hhh]”(hì)�”}”(hXZWork items of a CPU intensive wq do not contribute to the concurrency level. In other words, runnable CPU intensive work items will not prevent other work items in the same worker-pool from starting execution. This is useful for bound work items which are expected to hog CPU cycles so that their execution is regulated by the system scheduler.”h]”hXZWork items of a CPU intensive wq do not contribute to the concurrency level. In other words, runnable CPU intensive work items will not prevent other work items in the same worker-pool from starting execution. This is useful for bound work items which are expected to hog CPU cycles so that their execution is regulated by the system scheduler.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Kåhj—ubhì)�”}”(hŒòAlthough CPU intensive work items don't contribute to the concurrency level, start of their executions is still regulated by the concurrency management and runnable non-CPU-intensive work items can delay execution of CPU intensive work items.”h]”hŒôAlthough CPU intensive work items don’t contribute to the concurrency level, start of their executions is still regulated by the concurrency management and runnable non-CPU-intensive work items can delay execution of CPU intensive work items.”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Kìhj—ubhì)�”}”(hŒ(This flag is meaningless for unbound wq.”h]”hŒ(This flag is meaningless for unbound wq.”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Kòhj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´Kóhjhh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjLh²hh³hÊh´Nubeh}”(h]”Œflags”ah ]”h"]”Œflags”ah$]”h&]”uh1hµhj�h²hh³hÊh´K­ubh¶)�”}”(hhh]”(h»)�”}”(hŒ``max_active``”h]”jú)�”}”(hjãh]”hŒ max_active”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÞh²hh³hÊh´Köubhì)�”}”(hX1``@max_active`` determines the maximum number of execution contexts per CPU which can be assigned to the work items of a wq. For example, with ``@max_active`` of 16, at most 16 work items of the wq can be executing at the same time per CPU. This is always a per-CPU attribute, even for unbound workqueues.”h]”(jú)�”}”(hŒ``@max_active``”h]”hŒ @max_active”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjøubhŒ€ determines the maximum number of execution contexts per CPU which can be assigned to the work items of a wq. For example, with ”…”�”}”(hjøh²hh³Nh´Nubjú)�”}”(hŒ``@max_active``”h]”hŒ @max_active”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjøubhŒ“ of 16, at most 16 work items of the wq can be executing at the same time per CPU. This is always a per-CPU attribute, even for unbound workqueues.”…”�”}”(hjøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KøhjÞh²hubhì)�”}”(hŒçThe maximum limit for ``@max_active`` is 2048 and the default value used when 0 is specified is 1024. These values are chosen sufficiently high such that they are not the limiting factor while providing protection in runaway cases.”h]”(hŒThe maximum limit for ”…”�”}”(hj&h²hh³Nh´Nubjú)�”}”(hŒ``@max_active``”h]”hŒ @max_active”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj&ubhŒÂ is 2048 and the default value used when 0 is specified is 1024. These values are chosen sufficiently high such that they are not the limiting factor while providing protection in runaway cases.”…”�”}”(hj&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KþhjÞh²hubhì)�”}”(hXThe number of active work items of a wq is usually regulated by the users of the wq, more specifically, by how many work items the users may queue at the same time. Unless there is a specific need for throttling the number of active work items, specifying '0' is recommended.”h]”hXThe number of active work items of a wq is usually regulated by the users of the wq, more specifically, by how many work items the users may queue at the same time. Unless there is a specific need for throttling the number of active work items, specifying ‘0’ is recommended.”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MhjÞh²hubhì)�”}”(hX=Some users depend on strict execution ordering where only one work item is in flight at any given time and the work items are processed in queueing order. While the combination of ``@max_active`` of 1 and ``WQ_UNBOUND`` used to achieve this behavior, this is no longer the case. Use alloc_ordered_workqueue() instead.”h]”(hŒ´Some users depend on strict execution ordering where only one work item is in flight at any given time and the work items are processed in queueing order. While the combination of ”…”�”}”(hjTh²hh³Nh´Nubjú)�”}”(hŒ``@max_active``”h]”hŒ @max_active”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjTubhŒ of 1 and ”…”�”}”(hjTh²hh³Nh´Nubjú)�”}”(hŒ``WQ_UNBOUND``”h]”hŒ WQ_UNBOUND”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjTubhŒb used to achieve this behavior, this is no longer the case. Use alloc_ordered_workqueue() instead.”…”�”}”(hjTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M hjÞh²hubeh}”(h]”Œ max-active”ah ]”h"]”Œ max_active”ah$]”h&]”uh1hµhj�h²hh³hÊh´Köubeh}”(h]”Œ%application-programming-interface-api”ah ]”h"]”Œ'application programming interface (api)”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kžubh¶)�”}”(hhh]”(h»)�”}”(hŒExample Execution Scenarios”h]”hŒExample Execution Scenarios”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj–h²hh³hÊh´Mubhì)�”}”(hŒkThe following example execution scenarios try to illustrate how cmwq behave under different configurations.”h]”hŒkThe following example execution scenarios try to illustrate how cmwq behave under different configurations.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhj–h²hubhŒ block_quote”“”)�”}”(hŒÍWork items w0, w1, w2 are queued to a bound wq q0 on the same CPU. w0 burns CPU for 5ms then sleeps for 10ms then burns CPU for 5ms again before finishing. w1 and w2 burn CPU for 5ms then sleep for 10ms. ”h]”hì)�”}”(hŒÌWork items w0, w1, w2 are queued to a bound wq q0 on the same CPU. w0 burns CPU for 5ms then sleeps for 10ms then burns CPU for 5ms again before finishing. w1 and w2 burn CPU for 5ms then sleep for 10ms.”h]”hŒÌWork items w0, w1, w2 are queued to a bound wq q0 on the same CPU. w0 burns CPU for 5ms then sleeps for 10ms then burns CPU for 5ms again before finishing. w1 and w2 burn CPU for 5ms then sleep for 10ms.”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jµh³hÊh´Mhj–h²hubhì)�”}”(hŒÅIgnoring all other tasks, works and processing overhead, and assuming simple FIFO scheduling, the following is one highly simplified version of possible sequences of events with the original wq. ::”h]”hŒÂIgnoring all other tasks, works and processing overhead, and assuming simple FIFO scheduling, the following is one highly simplified version of possible sequences of events with the original wq.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhj–h²hubhŒ literal_block”“”)�”}”(hXhTIME IN MSECS EVENT 0 w0 starts and burns CPU 5 w0 sleeps 15 w0 wakes up and burns CPU 20 w0 finishes 20 w1 starts and burns CPU 25 w1 sleeps 35 w1 wakes up and finishes 35 w2 starts and burns CPU 40 w2 sleeps 50 w2 wakes up and finishes”h]”hXhTIME IN MSECS EVENT 0 w0 starts and burns CPU 5 w0 sleeps 15 w0 wakes up and burns CPU 20 w0 finishes 20 w1 starts and burns CPU 25 w1 sleeps 35 w1 wakes up and finishes 35 w2 starts and burns CPU 40 w2 sleeps 50 w2 wakes up and finishes”…”�”}”hjßsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jÝh³hÊh´Mhj–h²hubhì)�”}”(hŒ+And with cmwq with ``@max_active`` >= 3, ::”h]”(hŒAnd with cmwq with ”…”�”}”(hjïh²hh³Nh´Nubjú)�”}”(hŒ``@max_active``”h]”hŒ @max_active”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjïubhŒ >= 3,”…”�”}”(hjïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M+hj–h²hubjÞ)�”}”(hXhTIME IN MSECS EVENT 0 w0 starts and burns CPU 5 w0 sleeps 5 w1 starts and burns CPU 10 w1 sleeps 10 w2 starts and burns CPU 15 w2 sleeps 15 w0 wakes up and burns CPU 20 w0 finishes 20 w1 wakes up and finishes 25 w2 wakes up and finishes”h]”hXhTIME IN MSECS EVENT 0 w0 starts and burns CPU 5 w0 sleeps 5 w1 starts and burns CPU 10 w1 sleeps 10 w2 starts and burns CPU 15 w2 sleeps 15 w0 wakes up and burns CPU 20 w0 finishes 20 w1 wakes up and finishes 25 w2 wakes up and finishes”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1jÝh³hÊh´M-hj–h²hubhì)�”}”(hŒIf ``@max_active`` == 2, ::”h]”(hŒIf ”…”�”}”(hjh²hh³Nh´Nubjú)�”}”(hŒ``@max_active``”h]”hŒ @max_active”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjubhŒ == 2,”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M9hj–h²hubjÞ)�”}”(hXhTIME IN MSECS EVENT 0 w0 starts and burns CPU 5 w0 sleeps 5 w1 starts and burns CPU 10 w1 sleeps 15 w0 wakes up and burns CPU 20 w0 finishes 20 w1 wakes up and finishes 20 w2 starts and burns CPU 25 w2 sleeps 35 w2 wakes up and finishes”h]”hXhTIME IN MSECS EVENT 0 w0 starts and burns CPU 5 w0 sleeps 5 w1 starts and burns CPU 10 w1 sleeps 15 w0 wakes up and burns CPU 20 w0 finishes 20 w1 wakes up and finishes 20 w2 starts and burns CPU 25 w2 sleeps 35 w2 wakes up and finishes”…”�”}”hj=sbah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1jÝh³hÊh´M;hj–h²hubhì)�”}”(hŒbNow, let's assume w1 and w2 are queued to a different wq q1 which has ``WQ_CPU_INTENSIVE`` set, ::”h]”(hŒHNow, let’s assume w1 and w2 are queued to a different wq q1 which has ”…”�”}”(hjKh²hh³Nh´Nubjú)�”}”(hŒ``WQ_CPU_INTENSIVE``”h]”hŒWQ_CPU_INTENSIVE”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjKubhŒ set,”…”�”}”(hjKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MGhj–h²hubjÞ)�”}”(hXFTIME IN MSECS EVENT 0 w0 starts and burns CPU 5 w0 sleeps 5 w1 and w2 start and burn CPU 10 w1 sleeps 15 w2 sleeps 15 w0 wakes up and burns CPU 20 w0 finishes 20 w1 wakes up and finishes 25 w2 wakes up and finishes”h]”hXFTIME IN MSECS EVENT 0 w0 starts and burns CPU 5 w0 sleeps 5 w1 and w2 start and burn CPU 10 w1 sleeps 15 w2 sleeps 15 w0 wakes up and burns CPU 20 w0 finishes 20 w1 wakes up and finishes 25 w2 wakes up and finishes”…”�”}”hjksbah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1jÝh³hÊh´MJhj–h²hubeh}”(h]”Œexample-execution-scenarios”ah ]”h"]”Œexample execution scenarios”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mubh¶)�”}”(hhh]”(h»)�”}”(hŒ Guidelines”h]”hŒ Guidelines”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj�h²hh³hÊh´MWubj )�”}”(hhh]”(j%)�”}”(hXMDo not forget to use ``WQ_MEM_RECLAIM`` if a wq may process work items which are used during memory reclaim. Each wq with ``WQ_MEM_RECLAIM`` set has an execution context reserved for it. If there is dependency among multiple work items used during memory reclaim, they should be queued to separate wq each with ``WQ_MEM_RECLAIM``. ”h]”hì)�”}”(hXLDo not forget to use ``WQ_MEM_RECLAIM`` if a wq may process work items which are used during memory reclaim. Each wq with ``WQ_MEM_RECLAIM`` set has an execution context reserved for it. If there is dependency among multiple work items used during memory reclaim, they should be queued to separate wq each with ``WQ_MEM_RECLAIM``.”h]”(hŒDo not forget to use ”…”�”}”(hj™h²hh³Nh´Nubjú)�”}”(hŒ``WQ_MEM_RECLAIM``”h]”hŒWQ_MEM_RECLAIM”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj™ubhŒT if a wq may process work items which are used during memory reclaim. Each wq with ”…”�”}”(hj™h²hh³Nh´Nubjú)�”}”(hŒ``WQ_MEM_RECLAIM``”h]”hŒWQ_MEM_RECLAIM”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj™ubhŒ¬ set has an execution context reserved for it. If there is dependency among multiple work items used during memory reclaim, they should be queued to separate wq each with ”…”�”}”(hj™h²hh³Nh´Nubjú)�”}”(hŒ``WQ_MEM_RECLAIM``”h]”hŒWQ_MEM_RECLAIM”…”�”}”(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³hÊh´MYhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj’h²hh³hÊh´Nubj%)�”}”(hŒCUnless strict ordering is required, there is no need to use ST wq. ”h]”hì)�”}”(hŒBUnless strict ordering is required, there is no need to use ST wq.”h]”hŒBUnless strict ordering is required, there is no need to use ST wq.”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M`hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj’h²hh³hÊh´Nubj%)�”}”(hŒ›Unless there is a specific need, using 0 for @max_active is recommended. In most use cases, concurrency level usually stays well under the default limit. ”h]”hì)�”}”(hŒšUnless there is a specific need, using 0 for @max_active is recommended. In most use cases, concurrency level usually stays well under the default limit.”h]”hŒšUnless there is a specific need, using 0 for @max_active is recommended. In most use cases, concurrency level usually stays well under the default limit.”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mbhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj’h²hh³hÊh´Nubj%)�”}”(hXƒA wq serves as a domain for forward progress guarantee (``WQ_MEM_RECLAIM``), flush and work item attributes. Work items which are not involved in memory reclaim and don't need to be flushed as a part of a group of work items, and don't require any special attribute, can use one of the system wq. There is no difference in execution characteristics between using a dedicated wq and a system wq. Note: If something may generate more than @max_active outstanding work items (do stress test your producers), it may saturate a system wq and potentially lead to deadlock. It should utilize its own dedicated workqueue rather than the system wq. ”h]”(hì)�”}”(hXŒA wq serves as a domain for forward progress guarantee (``WQ_MEM_RECLAIM``), flush and work item attributes. Work items which are not involved in memory reclaim and don't need to be flushed as a part of a group of work items, and don't require any special attribute, can use one of the system wq. There is no difference in execution characteristics between using a dedicated wq and a system wq.”h]”(hŒ8A wq serves as a domain for forward progress guarantee (”…”�”}”(hj h²hh³Nh´Nubjú)�”}”(hŒ``WQ_MEM_RECLAIM``”h]”hŒWQ_MEM_RECLAIM”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj ubhXF), flush and work item attributes. Work items which are not involved in memory reclaim and don’t need to be flushed as a part of a group of work items, and don’t require any special attribute, can use one of the system wq. There is no difference in execution characteristics between using a dedicated wq and a system wq.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mfhj ubhì)�”}”(hŒôNote: If something may generate more than @max_active outstanding work items (do stress test your producers), it may saturate a system wq and potentially lead to deadlock. It should utilize its own dedicated workqueue rather than the system wq.”h]”hŒôNote: If something may generate more than @max_active outstanding work items (do stress test your producers), it may saturate a system wq and potentially lead to deadlock. It should utilize its own dedicated workqueue rather than the system wq.”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mnhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j$hj’h²hh³hÊh´Nubj%)�”}”(hŒÀUnless work items are expected to consume a huge amount of CPU cycles, using a bound wq is usually beneficial due to the increased level of locality in wq operations and work item execution. ”h]”hì)�”}”(hŒ¾Unless work items are expected to consume a huge amount of CPU cycles, using a bound wq is usually beneficial due to the increased level of locality in wq operations and work item execution.”h]”hŒ¾Unless work items are expected to consume a huge amount of CPU cycles, using a bound wq is usually beneficial due to the increased level of locality in wq operations and work item execution.”…”�”}”(hjO h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MshjK ubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hj’h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jtjuuh1jh³hÊh´MYhj�h²hubeh}”(h]”Œ guidelines”ah ]”h"]”Œ guidelines”ah$]”h&]”uh1hµhh·h²hh³hÊh´MWubh¶)�”}”(hhh]”(h»)�”}”(hŒAffinity Scopes”h]”hŒAffinity Scopes”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjq h²hh³hÊh´Myubhì)�”}”(hXÛAn unbound workqueue groups CPUs according to its affinity scope to improve cache locality. For example, if a workqueue is using the default affinity scope of "cache_shard", it will group CPUs into sub-LLC shards. A work item queued on the workqueue will be assigned to a worker on one of the CPUs within the same shard as the issuing CPU. Once started, the worker may or may not be allowed to move outside the scope depending on the ``affinity_strict`` setting of the scope.”h]”(hX¶An unbound workqueue groups CPUs according to its affinity scope to improve cache locality. For example, if a workqueue is using the default affinity scope of “cache_shardâ€�, it will group CPUs into sub-LLC shards. A work item queued on the workqueue will be assigned to a worker on one of the CPUs within the same shard as the issuing CPU. Once started, the worker may or may not be allowed to move outside the scope depending on the ”…”�”}”(hj‚ h²hh³Nh´Nubjú)�”}”(hŒ``affinity_strict``”h]”hŒaffinity_strict”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj‚ ubhŒ setting of the scope.”…”�”}”(hj‚ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M{hjq h²hubhì)�”}”(hŒ;Workqueue currently supports the following affinity scopes.”h]”hŒ;Workqueue currently supports the following affinity scopes.”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mƒhjq h²hubjg)�”}”(hhh]”(jl)�”}”(hŒƒ``default`` Use the scope in module parameter ``workqueue.default_affinity_scope`` which is always set to one of the scopes below. ”h]”(jr)�”}”(hŒ ``default``”h]”jú)�”}”(hj¹ h]”hŒdefault”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj· ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´M‡hj³ ubj‹)�”}”(hhh]”hì)�”}”(hŒvUse the scope in module parameter ``workqueue.default_affinity_scope`` which is always set to one of the scopes below.”h]”(hŒ"Use the scope in module parameter ”…”�”}”(hjÑ h²hh³Nh´Nubjú)�”}”(hŒ$``workqueue.default_affinity_scope``”h]”hŒ workqueue.default_affinity_scope”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÑ ubhŒ0 which is always set to one of the scopes below.”…”�”}”(hjÑ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M†hjÎ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj³ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´M‡hj° ubjl)�”}”(hŒÁ``cpu`` CPUs are not grouped. A work item issued on one CPU is processed by a worker on the same CPU. This makes unbound workqueues behave as per-cpu workqueues without concurrency management. ”h]”(jr)�”}”(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&]”uh1jqh³hÊh´MŒhjý ubj‹)�”}”(hhh]”hì)�”}”(hŒ¸CPUs are not grouped. A work item issued on one CPU is processed by a worker on the same CPU. This makes unbound workqueues behave as per-cpu workqueues without concurrency management.”h]”hŒ¸CPUs are not grouped. A work item issued on one CPU is processed by a worker on the same CPU. This makes unbound workqueues behave as per-cpu workqueues without concurrency management.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MŠhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjý ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´MŒhj° h²hubjl)�”}”(hŒ’``smt`` CPUs are grouped according to SMT boundaries. This usually means that the logical threads of each physical CPU core are grouped together. ”h]”(jr)�”}”(hŒ``smt``”h]”jú)�”}”(hj; h]”hŒsmt”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj9 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´M�hj5 ubj‹)�”}”(hhh]”hì)�”}”(hŒ‰CPUs are grouped according to SMT boundaries. This usually means that the logical threads of each physical CPU core are grouped together.”h]”hŒ‰CPUs are grouped according to SMT boundaries. This usually means that the logical threads of each physical CPU core are grouped together.”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M�hjP ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj5 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´M�hj° h²hubjl)�”}”(hŒž``cache`` CPUs are grouped according to cache boundaries. Which specific cache boundary is used is determined by the arch code. L3 is used in a lot of cases. ”h]”(jr)�”}”(hŒ ``cache``”h]”jú)�”}”(hjs h]”hŒcache”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjq ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´M•hjm ubj‹)�”}”(hhh]”hì)�”}”(hŒ“CPUs are grouped according to cache boundaries. Which specific cache boundary is used is determined by the arch code. L3 is used in a lot of cases.”h]”hŒ“CPUs are grouped according to cache boundaries. Which specific cache boundary is used is determined by the arch code. L3 is used in a lot of cases.”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M“hjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjm ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´M•hj° h²hubjl)�”}”(hX``cache_shard`` CPUs are grouped into sub-LLC shards of at most ``wq_cache_shard_size`` cores (default 8, tunable via the ``workqueue.cache_shard_size`` boot parameter). Shards are always split on core (SMT group) boundaries. This is the default affinity scope. ”h]”(jr)�”}”(hŒ``cache_shard``”h]”jú)�”}”(hj« h]”hŒ cache_shard”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj© ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´M›hj¥ ubj‹)�”}”(hhh]”hì)�”}”(hŒõCPUs are grouped into sub-LLC shards of at most ``wq_cache_shard_size`` cores (default 8, tunable via the ``workqueue.cache_shard_size`` boot parameter). Shards are always split on core (SMT group) boundaries. This is the default affinity scope.”h]”(hŒ0CPUs are grouped into sub-LLC shards of at most ”…”�”}”(hjà h²hh³Nh´Nubjú)�”}”(hŒ``wq_cache_shard_size``”h]”hŒwq_cache_shard_size”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjà ubhŒ# cores (default 8, tunable via the ”…”�”}”(hjà h²hh³Nh´Nubjú)�”}”(hŒ``workqueue.cache_shard_size``”h]”hŒworkqueue.cache_shard_size”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjà ubhŒm boot parameter). Shards are always split on core (SMT group) boundaries. This is the default affinity scope.”…”�”}”(hjà h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M˜hjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¥ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´M›hj° h²hubjl)�”}”(hŒ8``numa`` CPUs are grouped according to NUMA boundaries. ”h]”(jr)�”}”(hŒ``numa``”h]”jú)�”}”(hj h]”hŒnuma”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´Mžhj ubj‹)�”}”(hhh]”hì)�”}”(hŒ.CPUs are grouped according to NUMA boundaries.”h]”hŒ.CPUs are grouped according to NUMA boundaries.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mžhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´Mžhj° h²hubjl)�”}”(hŒƒ``system`` All CPUs are put in the same group. Workqueue makes no effort to process a work item on a CPU close to the issuing CPU. ”h]”(jr)�”}”(hŒ ``system``”h]”jú)�”}”(hj? h]”hŒsystem”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj= ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´M¢hj9 ubj‹)�”}”(hhh]”hì)�”}”(hŒwAll CPUs are put in the same group. Workqueue makes no effort to process a work item on a CPU close to the issuing CPU.”h]”hŒwAll CPUs are put in the same group. Workqueue makes no effort to process a work item on a CPU close to the issuing CPU.”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M¡hjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj9 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´M¢hj° h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjq h²hh³hÊh´Nubhì)�”}”(hŒÄThe default affinity scope can be changed with the module parameter ``workqueue.default_affinity_scope`` and a specific workqueue's affinity scope can be changed using ``apply_workqueue_attrs()``.”h]”(hŒDThe default affinity scope can be changed with the module parameter ”…”�”}”(hjw h²hh³Nh´Nubjú)�”}”(hŒ$``workqueue.default_affinity_scope``”h]”hŒ workqueue.default_affinity_scope”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjw ubhŒB and a specific workqueue’s affinity scope can be changed using ”…”�”}”(hjw h²hh³Nh´Nubjú)�”}”(hŒ``apply_workqueue_attrs()``”h]”hŒapply_workqueue_attrs()”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjw ubhŒ.”…”�”}”(hjw h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M¤hjq h²hubhì)�”}”(hŒ¥If ``WQ_SYSFS`` is set, the workqueue will have the following affinity scope related interface files under its ``/sys/devices/virtual/workqueue/WQ_NAME/`` directory.”h]”(hŒIf ”…”�”}”(hj© h²hh³Nh´Nubjú)�”}”(hŒ ``WQ_SYSFS``”h]”hŒWQ_SYSFS”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj© ubhŒ` is set, the workqueue will have the following affinity scope related interface files under its ”…”�”}”(hj© h²hh³Nh´Nubjú)�”}”(hŒ+``/sys/devices/virtual/workqueue/WQ_NAME/``”h]”hŒ'/sys/devices/virtual/workqueue/WQ_NAME/”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj© ubhŒ directory.”…”�”}”(hj© h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M¨hjq h²hubjg)�”}”(hhh]”(jl)�”}”(hŒß``affinity_scope`` Read to see the current affinity scope. Write to change. When default is the current scope, reading this file will also show the current effective scope in parentheses, for example, ``default (cache)``. ”h]”(jr)�”}”(hŒ``affinity_scope``”h]”jú)�”}”(hjä h]”hŒaffinity_scope”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjâ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´M°hjÞ ubj‹)�”}”(hhh]”(hì)�”}”(hŒ8Read to see the current affinity scope. Write to change.”h]”hŒ8Read to see the current affinity scope. Write to change.”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M­hjù ubhì)�”}”(hŒ‘When default is the current scope, reading this file will also show the current effective scope in parentheses, for example, ``default (cache)``.”h]”(hŒ}When default is the current scope, reading this file will also show the current effective scope in parentheses, for example, ”…”�”}”(hj h²hh³Nh´Nubjú)�”}”(hŒ``default (cache)``”h]”hŒdefault (cache)”…”�”}”(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³hÊh´M¯hjù ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÞ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´M°hjÛ ubjl)�”}”(hXõ``affinity_strict`` 0 by default indicating that affinity scopes are not strict. When a work item starts execution, workqueue makes a best-effort attempt to ensure that the worker is inside its affinity scope, which is called repatriation. Once started, the scheduler is free to move the worker anywhere in the system as it sees fit. This enables benefiting from scope locality while still being able to utilize other CPUs if necessary and available. If set to 1, all workers of the scope are guaranteed always to be in the scope. This may be useful when crossing affinity scopes has other implications, for example, in terms of power consumption or workload isolation. Strict NUMA scope can also be used to match the workqueue behavior of older kernels. ”h]”(jr)�”}”(hŒ``affinity_strict``”h]”jú)�”}”(hj< h]”hŒaffinity_strict”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj: ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³hÊh´MÀhj6 ubj‹)�”}”(hhh]”(hì)�”}”(hX®0 by default indicating that affinity scopes are not strict. When a work item starts execution, workqueue makes a best-effort attempt to ensure that the worker is inside its affinity scope, which is called repatriation. Once started, the scheduler is free to move the worker anywhere in the system as it sees fit. This enables benefiting from scope locality while still being able to utilize other CPUs if necessary and available.”h]”hX®0 by default indicating that affinity scopes are not strict. When a work item starts execution, workqueue makes a best-effort attempt to ensure that the worker is inside its affinity scope, which is called repatriation. Once started, the scheduler is free to move the worker anywhere in the system as it sees fit. This enables benefiting from scope locality while still being able to utilize other CPUs if necessary and available.”…”�”•}”(hjT h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M³hjQ ubhì)�”}”(hX/If set to 1, all workers of the scope are guaranteed always to be in the scope. This may be useful when crossing affinity scopes has other implications, for example, in terms of power consumption or workload isolation. Strict NUMA scope can also be used to match the workqueue behavior of older kernels.”h]”hX/If set to 1, all workers of the scope are guaranteed always to be in the scope. This may be useful when crossing affinity scopes has other implications, for example, in terms of power consumption or workload isolation. Strict NUMA scope can also be used to match the workqueue behavior of older kernels.”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M»hjQ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj6 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³hÊh´MÀhjÛ h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjq h²hh³hÊh´Nubeh}”(h]”Œaffinity-scopes”ah ]”h"]”Œaffinity scopes”ah$]”h&]”uh1hµhh·h²hh³hÊh´Myubh¶)�”}”(hhh]”(h»)�”}”(hŒAffinity Scopes and Performance”h]”hŒAffinity Scopes and Performance”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjŠ h²hh³hÊh´MÃubhì)�”}”(hX%It'd be ideal if an unbound workqueue's behavior is optimal for vast majority of use cases without further tuning. Unfortunately, in the current kernel, there exists a pronounced trade-off between locality and utilization necessitating explicit configurations when workqueues are heavily used.”h]”hX)It’d be ideal if an unbound workqueue’s behavior is optimal for vast majority of use cases without further tuning. Unfortunately, in the current kernel, there exists a pronounced trade-off between locality and utilization necessitating explicit configurations when workqueues are heavily used.”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MÅhjŠ h²hubhì)�”}”(hXcHigher locality leads to higher efficiency where more work is performed for the same number of consumed CPU cycles. However, higher locality may also cause lower overall system utilization if the work items are not spread enough across the affinity scopes by the issuers. The following performance testing with dm-crypt clearly illustrates this trade-off.”h]”hXcHigher locality leads to higher efficiency where more work is performed for the same number of consumed CPU cycles. However, higher locality may also cause lower overall system utilization if the work items are not spread enough across the affinity scopes by the issuers. The following performance testing with dm-crypt clearly illustrates this trade-off.”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MÊhjŠ h²hubhì)�”}”(hXThe tests are run on a CPU with 12-cores/24-threads split across four L3 caches (AMD Ryzen 9 3900x). CPU clock boost is turned off for consistency. ``/dev/dm-0`` is a dm-crypt device created on NVME SSD (Samsung 990 PRO) and opened with ``cryptsetup`` with default settings.”h]”(hŒ”The tests are run on a CPU with 12-cores/24-threads split across four L3 caches (AMD Ryzen 9 3900x). CPU clock boost is turned off for consistency. ”…”�”}”(hj· h²hh³Nh´Nubjú)�”}”(hŒ ``/dev/dm-0``”h]”hŒ /dev/dm-0”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj· ubhŒL is a dm-crypt device created on NVME SSD (Samsung 990 PRO) and opened with ”…”�”}”(hj· h²hh³Nh´Nubjú)�”}”(hŒ``cryptsetup``”h]”hŒ cryptsetup”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj· ubhŒ with default settings.”…”�”}”(hj· h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MÐhjŠ h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ=Scenario 1: Enough issuers and work spread across the machine”h]”hŒ=Scenario 1: Enough issuers and work spread across the machine”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjé h²hh³hÊh´M×ubhì)�”}”(hŒThe command used: ::”h]”hŒThe command used:”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MÙhjé h²hubjÞ)�”}”(hŒ¿$ fio --filename=/dev/dm-0 --direct=1 --rw=randrw --bs=32k --ioengine=libaio \ --iodepth=64 --runtime=60 --numjobs=24 --time_based --group_reporting \ --name=iops-test-job --verify=sha512”h]”hŒ¿$ fio --filename=/dev/dm-0 --direct=1 --rw=randrw --bs=32k --ioengine=libaio \ --iodepth=64 --runtime=60 --numjobs=24 --time_based --group_reporting \ --name=iops-test-job --verify=sha512”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1jÝh³hÊh´MÛhjé h²hubhì)�”}”(hX•There are 24 issuers, each issuing 64 IOs concurrently. ``--verify=sha512`` makes ``fio`` generate and read back the content each time which makes execution locality matter between the issuer and ``kcryptd``. The following are the read bandwidths and CPU utilizations depending on different affinity scope settings on ``kcryptd`` measured over five runs. Bandwidths are in MiBps, and CPU util in percents.”h]”(hŒ8There are 24 issuers, each issuing 64 IOs concurrently. ”…”�”}”(hj h²hh³Nh´Nubjú)�”}”(hŒ``--verify=sha512``”h]”hŒ--verify=sha512”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj ubhŒ makes ”…”�”}”(hj h²hh³Nh´Nubjú)�”}”(hŒ``fio``”h]”hŒfio”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj ubhŒk generate and read back the content each time which makes execution locality matter between the issuer and ”…”�”}”(hj h²hh³Nh´Nubjú)�”}”(hŒ ``kcryptd``”h]”hŒkcryptd”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj ubhŒo. The following are the read bandwidths and CPU utilizations depending on different affinity scope settings on ”…”�”}”(hj h²hh³Nh´Nubjú)�”}”(hŒ ``kcryptd``”h]”hŒkcryptd”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj ubhŒL measured over five runs. Bandwidths are in MiBps, and CPU util in percents.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mßhjé h²hubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jv hjs ubjw )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”j� Kuh1jv hjs ubjw )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”j� Kuh1jv hjs ubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hì)�”}”(hŒAffinity”h]”hŒAffinity”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mêhj  ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj› ubjŸ )�”}”(hhh]”hì)�”}”(hŒBandwidth (MiBps)”h]”hŒBandwidth (MiBps)”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mëhj· ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj› ubjŸ )�”}”(hhh]”hì)�”}”(hŒ CPU util (%)”h]”hŒ CPU util (%)”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MìhjÎ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj› ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j™ hj– ubah}”(h]”h ]”h"]”h$]”h&]”uh1j” hjs ubhŒtbody”“”)�”}”(hhh]”(jš )�”}”(hhh]”(jŸ )�”}”(hhh]”hì)�”}”(hŒsystem”h]”hŒsystem”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mîhjù ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hjö ubjŸ )�”}”(hhh]”hì)�”}”(hŒ1159.40 ±1.34”h]”hŒ1159.40 ±1.34”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mïhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hjö ubjŸ )�”}”(hhh]”hì)�”}”(hŒ 99.31 ±0.02”h]”hŒ 99.31 ±0.02”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mðhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hjö ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j™ hjó ubjš )�”}”(hhh]”(jŸ )�”}”(hhh]”hì)�”}”(hŒcache”h]”hŒcache”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MòhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hjDubjŸ )�”}”(hhh]”hì)�”}”(hŒ1166.40 ±0.89”h]”hŒ1166.40 ±0.89”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Móhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hjDubjŸ )�”}”(hhh]”hì)�”}”(hŒ 99.34 ±0.01”h]”hŒ 99.34 ±0.01”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Môhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1j™ hjó ubjš )�”}”(hhh]”(jŸ )�”}”(hhh]”hì)�”}”(hŒcache (strict)”h]”hŒcache (strict)”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Möhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj’ubjŸ )�”}”(hhh]”hì)�”}”(hŒ1166.00 ±0.71”h]”hŒ1166.00 ±0.71”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M÷hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj’ubjŸ )�”}”(hhh]”hì)�”}”(hŒ 99.35 ±0.01”h]”hŒ 99.35 ±0.01”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MøhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j™ hjó ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jñ hjs ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jq hjn ubah}”(h]”h ]”Œcolwidths-given”ah"]”h$]”h&]”uh1jl hjé h²hh³Nh´Nubhì)�”}”(hŒáWith enough issuers spread across the system, there is no downside to "cache", strict or otherwise. All three configurations saturate the whole machine but the cache-affine ones outperform by 0.6% thanks to improved locality.”h]”hŒåWith enough issuers spread across the system, there is no downside to “cacheâ€�, strict or otherwise. All three configurations saturate the whole machine but the cache-affine ones outperform by 0.6% thanks to improved locality.”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Múhjé h²hubeh}”(h]”Œhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j™ hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j” hjCubjò )�”}”(hhh]”(jš )�”}”(hhh]”(jŸ )�”}”(hhh]”hì)�”}”(hŒsystem”h]”hŒsystem”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M@hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj»ubjŸ )�”}”(hhh]”hì)�”}”(hŒ 993.60 ±1.82”h]”hŒ 993.60 ±1.82”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MAhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj»ubjŸ )�”}”(hhh]”hì)�”}”(hŒ 75.49 ±0.06”h]”hŒ 75.49 ±0.06”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MBhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j™ hj¸ubjš )�”}”(hhh]”(jŸ )�”}”(hhh]”hì)�”}”(hŒcache”h]”hŒcache”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MDhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj ubjŸ )�”}”(hhh]”hì)�”}”(hŒ 973.40 ±1.52”h]”hŒ 973.40 ±1.52”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MEhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj ubjŸ )�”}”(hhh]”hì)�”}”(hŒ 74.90 ±0.07”h]”hŒ 74.90 ±0.07”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MFhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j™ hj¸ubjš )�”}”(hhh]”(jŸ )�”}”(hhh]”hì)�”}”(hŒcache (strict)”h]”hŒcache (strict)”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MHhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hjWubjŸ )�”}”(hhh]”hì)�”}”(hŒ 828.20 ±4.49”h]”hŒ 828.20 ±4.49”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MIhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hjWubjŸ )�”}”(hhh]”hì)�”}”(hŒ 66.84 ±0.29”h]”hŒ 66.84 ±0.29”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MJhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j™ hj¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jñ hjCubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jq hj@ubah}”(h]”h ]”jðah"]”h$]”h&]”uh1jl hjóh²hh³Nh´Nubhì)�”}”(hŒ–Now, the tradeoff between locality and utilization is clearer. "cache" shows 2% bandwidth loss compared to "system" and "cache (struct)" whopping 20%.”h]”hŒ¢Now, the tradeoff between locality and utilization is clearer. “cacheâ€� shows 2% bandwidth loss compared to “systemâ€� and “cache (struct)â€� whopping 20%.”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MLhjóh²hubeh}”(h]”Œ9scenario-3-even-fewer-issuers-not-enough-work-to-saturate”ah ]”h"]”Œ;scenario 3: even fewer issuers, not enough work to saturate”ah$]”h&]”uh1hµhjŠ h²hh³hÊh´M,ubh¶)�”}”(hhh]”(h»)�”}”(hŒConclusion and Recommendations”h]”hŒConclusion and Recommendations”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÎh²hh³hÊh´MQubhì)�”}”(hXIn the above experiments, the efficiency advantage of the "cache" affinity scope over "system" is, while consistent and noticeable, small. However, the impact is dependent on the distances between the scopes and may be more pronounced in processors with more complex topologies.”h]”hXIn the above experiments, the efficiency advantage of the “cacheâ€� affinity scope over “systemâ€� is, while consistent and noticeable, small. However, the impact is dependent on the distances between the scopes and may be more pronounced in processors with more complex topologies.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MShjÎh²hubhì)�”}”(hŒùWhile the loss of work-conservation in certain scenarios hurts, it is a lot better than "cache (strict)" and maximizing workqueue utilization is unlikely to be the common case anyway. As such, "cache" is the default affinity scope for unbound pools.”h]”hXWhile the loss of work-conservation in certain scenarios hurts, it is a lot better than “cache (strict)â€� and maximizing workqueue utilization is unlikely to be the common case anyway. As such, “cacheâ€� is the default affinity scope for unbound pools.”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MXhjÎh²hubj )�”}”(hhh]”(j%)�”}”(hŒáAs there is no one option which is great for most cases, workqueue usages that may consume a significant amount of CPU are recommended to configure the workqueues using ``apply_workqueue_attrs()`` and/or enable ``WQ_SYSFS``. ”h]”hì)�”}”(hŒàAs there is no one option which is great for most cases, workqueue usages that may consume a significant amount of CPU are recommended to configure the workqueues using ``apply_workqueue_attrs()`` and/or enable ``WQ_SYSFS``.”h]”(hŒ©As there is no one option which is great for most cases, workqueue usages that may consume a significant amount of CPU are recommended to configure the workqueues using ”…”�”}”(hjh²hh³Nh´Nubjú)�”}”(hŒ``apply_workqueue_attrs()``”h]”hŒapply_workqueue_attrs()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjubhŒ and/or enable ”…”�”}”(hjh²hh³Nh´Nubjú)�”}”(hŒ ``WQ_SYSFS``”h]”hŒWQ_SYSFS”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M]hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjûh²hh³hÊh´Nubj%)�”}”(hŒÔAn unbound workqueue with strict "cpu" affinity scope behaves the same as ``WQ_CPU_INTENSIVE`` per-cpu workqueue. There is no real advanage to the latter and an unbound workqueue provides a lot more flexibility. ”h]”hì)�”}”(hŒÓAn unbound workqueue with strict "cpu" affinity scope behaves the same as ``WQ_CPU_INTENSIVE`` per-cpu workqueue. There is no real advanage to the latter and an unbound workqueue provides a lot more flexibility.”h]”(hŒNAn unbound workqueue with strict “cpuâ€� affinity scope behaves the same as ”…”�”}”(hj>h²hh³Nh´Nubjú)�”}”(hŒ``WQ_CPU_INTENSIVE``”h]”hŒWQ_CPU_INTENSIVE”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj>ubhŒu per-cpu workqueue. There is no real advanage to the latter and an unbound workqueue provides a lot more flexibility.”…”�”}”(hj>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mbhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjûh²hh³hÊh´Nubj%)�”}”(hŒrAffinity scopes are introduced in Linux v6.5. To emulate the previous behavior, use strict "numa" affinity scope. ”h]”hì)�”}”(hŒqAffinity scopes are introduced in Linux v6.5. To emulate the previous behavior, use strict "numa" affinity scope.”h]”hŒuAffinity scopes are introduced in Linux v6.5. To emulate the previous behavior, use strict “numaâ€� affinity scope.”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mfhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjûh²hh³hÊh´Nubj%)�”}”(hXRThe loss of work-conservation in non-strict affinity scopes is likely originating from the scheduler. There is no theoretical reason why the kernel wouldn't be able to do the right thing and maintain work-conservation in most cases. As such, it is possible that future scheduler improvements may make most of these tunables unnecessary. ”h]”hì)�”}”(hXPThe loss of work-conservation in non-strict affinity scopes is likely originating from the scheduler. There is no theoretical reason why the kernel wouldn't be able to do the right thing and maintain work-conservation in most cases. As such, it is possible that future scheduler improvements may make most of these tunables unnecessary.”h]”hXRThe loss of work-conservation in non-strict affinity scopes is likely originating from the scheduler. There is no theoretical reason why the kernel wouldn’t be able to do the right thing and maintain work-conservation in most cases. As such, it is possible that future scheduler improvements may make most of these tunables unnecessary.”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mihj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjûh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jtjuuh1jh³hÊh´M]hjÎh²hubeh}”(h]”Œconclusion-and-recommendations”ah ]”h"]”Œconclusion and recommendations”ah$]”h&]”uh1hµhjŠ h²hh³hÊh´MQubeh}”(h]”Œaffinity-scopes-and-performance”ah ]”h"]”Œaffinity scopes and performance”ah$]”h&]”uh1hµhh·h²hh³hÊh´MÃubh¶)�”}”(hhh]”(h»)�”}”(hŒExamining Configuration”h]”hŒExamining Configuration”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjªh²hh³hÊh´Mqubhì)�”}”(hŒ‚Use tools/workqueue/wq_dump.py to examine unbound CPU affinity configuration, worker pools and how workqueues map to the pools: ::”h]”hŒUse tools/workqueue/wq_dump.py to examine unbound CPU affinity configuration, worker pools and how workqueues map to the pools:”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mshjªh²hubjÞ)�”}”(hXb$ tools/workqueue/wq_dump.py Affinity Scopes =============== wq_unbound_cpumask=0000000f CPU nr_pods 4 pod_cpus [0]=00000001 [1]=00000002 [2]=00000004 [3]=00000008 pod_node [0]=0 [1]=0 [2]=1 [3]=1 cpu_pod [0]=0 [1]=1 [2]=2 [3]=3 SMT nr_pods 4 pod_cpus [0]=00000001 [1]=00000002 [2]=00000004 [3]=00000008 pod_node [0]=0 [1]=0 [2]=1 [3]=1 cpu_pod [0]=0 [1]=1 [2]=2 [3]=3 CACHE (default) nr_pods 2 pod_cpus [0]=00000003 [1]=0000000c pod_node [0]=0 [1]=1 cpu_pod [0]=0 [1]=0 [2]=1 [3]=1 NUMA nr_pods 2 pod_cpus [0]=00000003 [1]=0000000c pod_node [0]=0 [1]=1 cpu_pod [0]=0 [1]=0 [2]=1 [3]=1 SYSTEM nr_pods 1 pod_cpus [0]=0000000f pod_node [0]=-1 cpu_pod [0]=0 [1]=0 [2]=0 [3]=0 Worker Pools ============ pool[00] ref= 1 nice= 0 idle/workers= 4/ 4 cpu= 0 pool[01] ref= 1 nice=-20 idle/workers= 2/ 2 cpu= 0 pool[02] ref= 1 nice= 0 idle/workers= 4/ 4 cpu= 1 pool[03] ref= 1 nice=-20 idle/workers= 2/ 2 cpu= 1 pool[04] ref= 1 nice= 0 idle/workers= 4/ 4 cpu= 2 pool[05] ref= 1 nice=-20 idle/workers= 2/ 2 cpu= 2 pool[06] ref= 1 nice= 0 idle/workers= 3/ 3 cpu= 3 pool[07] ref= 1 nice=-20 idle/workers= 2/ 2 cpu= 3 pool[08] ref=42 nice= 0 idle/workers= 6/ 6 cpus=0000000f pool[09] ref=28 nice= 0 idle/workers= 3/ 3 cpus=00000003 pool[10] ref=28 nice= 0 idle/workers= 17/ 17 cpus=0000000c pool[11] ref= 1 nice=-20 idle/workers= 1/ 1 cpus=0000000f pool[12] ref= 2 nice=-20 idle/workers= 1/ 1 cpus=00000003 pool[13] ref= 2 nice=-20 idle/workers= 1/ 1 cpus=0000000c Workqueue CPU -> pool ===================== [ workqueue \ CPU 0 1 2 3 dfl] events percpu 0 2 4 6 events_highpri percpu 1 3 5 7 events_long percpu 0 2 4 6 events_unbound unbound 9 9 10 10 8 events_freezable percpu 0 2 4 6 events_power_efficient percpu 0 2 4 6 events_freezable_pwr_ef percpu 0 2 4 6 rcu_gp percpu 0 2 4 6 rcu_par_gp percpu 0 2 4 6 slub_flushwq percpu 0 2 4 6 netns ordered 8 8 8 8 8 ...”h]”hXb$ tools/workqueue/wq_dump.py Affinity Scopes =============== wq_unbound_cpumask=0000000f CPU nr_pods 4 pod_cpus [0]=00000001 [1]=00000002 [2]=00000004 [3]=00000008 pod_node [0]=0 [1]=0 [2]=1 [3]=1 cpu_pod [0]=0 [1]=1 [2]=2 [3]=3 SMT nr_pods 4 pod_cpus [0]=00000001 [1]=00000002 [2]=00000004 [3]=00000008 pod_node [0]=0 [1]=0 [2]=1 [3]=1 cpu_pod [0]=0 [1]=1 [2]=2 [3]=3 CACHE (default) nr_pods 2 pod_cpus [0]=00000003 [1]=0000000c pod_node [0]=0 [1]=1 cpu_pod [0]=0 [1]=0 [2]=1 [3]=1 NUMA nr_pods 2 pod_cpus [0]=00000003 [1]=0000000c pod_node [0]=0 [1]=1 cpu_pod [0]=0 [1]=0 [2]=1 [3]=1 SYSTEM nr_pods 1 pod_cpus [0]=0000000f pod_node [0]=-1 cpu_pod [0]=0 [1]=0 [2]=0 [3]=0 Worker Pools ============ pool[00] ref= 1 nice= 0 idle/workers= 4/ 4 cpu= 0 pool[01] ref= 1 nice=-20 idle/workers= 2/ 2 cpu= 0 pool[02] ref= 1 nice= 0 idle/workers= 4/ 4 cpu= 1 pool[03] ref= 1 nice=-20 idle/workers= 2/ 2 cpu= 1 pool[04] ref= 1 nice= 0 idle/workers= 4/ 4 cpu= 2 pool[05] ref= 1 nice=-20 idle/workers= 2/ 2 cpu= 2 pool[06] ref= 1 nice= 0 idle/workers= 3/ 3 cpu= 3 pool[07] ref= 1 nice=-20 idle/workers= 2/ 2 cpu= 3 pool[08] ref=42 nice= 0 idle/workers= 6/ 6 cpus=0000000f pool[09] ref=28 nice= 0 idle/workers= 3/ 3 cpus=00000003 pool[10] ref=28 nice= 0 idle/workers= 17/ 17 cpus=0000000c pool[11] ref= 1 nice=-20 idle/workers= 1/ 1 cpus=0000000f pool[12] ref= 2 nice=-20 idle/workers= 1/ 1 cpus=00000003 pool[13] ref= 2 nice=-20 idle/workers= 1/ 1 cpus=0000000c Workqueue CPU -> pool ===================== [ workqueue \ CPU 0 1 2 3 dfl] events percpu 0 2 4 6 events_highpri percpu 1 3 5 7 events_long percpu 0 2 4 6 events_unbound unbound 9 9 10 10 8 events_freezable percpu 0 2 4 6 events_power_efficient percpu 0 2 4 6 events_freezable_pwr_ef percpu 0 2 4 6 rcu_gp percpu 0 2 4 6 rcu_par_gp percpu 0 2 4 6 slub_flushwq percpu 0 2 4 6 netns ordered 8 8 8 8 8 ...”…”�”}”hjÉsbah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1jÝh³hÊh´Mvhjªh²hubhì)�”}”(hŒ-See the command's help message for more info.”h]”hŒ/See the command’s help message for more info.”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mºhjªh²hubeh}”(h]”Œexamining-configuration”ah ]”h"]”Œexamining configuration”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mqubh¶)�”}”(hhh]”(h»)�”}”(hŒ Monitoring”h]”hŒ Monitoring”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjíh²hh³hÊh´M¾ubhì)�”}”(hŒEUse tools/workqueue/wq_monitor.py to monitor workqueue operations: ::”h]”hŒBUse tools/workqueue/wq_monitor.py to monitor workqueue operations:”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MÀhjíh²hubjÞ)�”}”(hXÞ$ tools/workqueue/wq_monitor.py events total infl CPUtime CPUhog CMW/RPR mayday rescued events 18545 0 6.1 0 5 - - events_highpri 8 0 0.0 0 0 - - events_long 3 0 0.0 0 0 - - events_unbound 38306 0 0.1 - 7 - - events_freezable 0 0 0.0 0 0 - - events_power_efficient 29598 0 0.2 0 0 - - events_freezable_pwr_ef 10 0 0.0 0 0 - - sock_diag_events 0 0 0.0 0 0 - - total infl CPUtime CPUhog CMW/RPR mayday rescued events 18548 0 6.1 0 5 - - events_highpri 8 0 0.0 0 0 - - events_long 3 0 0.0 0 0 - - events_unbound 38322 0 0.1 - 7 - - events_freezable 0 0 0.0 0 0 - - events_power_efficient 29603 0 0.2 0 0 - - events_freezable_pwr_ef 10 0 0.0 0 0 - - sock_diag_events 0 0 0.0 0 0 - - ...”h]”hXÞ$ tools/workqueue/wq_monitor.py events total infl CPUtime CPUhog CMW/RPR mayday rescued events 18545 0 6.1 0 5 - - events_highpri 8 0 0.0 0 0 - - events_long 3 0 0.0 0 0 - - events_unbound 38306 0 0.1 - 7 - - events_freezable 0 0 0.0 0 0 - - events_power_efficient 29598 0 0.2 0 0 - - events_freezable_pwr_ef 10 0 0.0 0 0 - - sock_diag_events 0 0 0.0 0 0 - - total infl CPUtime CPUhog CMW/RPR mayday rescued events 18548 0 6.1 0 5 - - events_highpri 8 0 0.0 0 0 - - events_long 3 0 0.0 0 0 - - events_unbound 38322 0 0.1 - 7 - - events_freezable 0 0 0.0 0 0 - - events_power_efficient 29603 0 0.2 0 0 - - events_freezable_pwr_ef 10 0 0.0 0 0 - - sock_diag_events 0 0 0.0 0 0 - - ...”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1jÝh³hÊh´MÂhjíh²hubhì)�”}”(hŒ-See the command's help message for more info.”h]”hŒ/See the command’s help message for more info.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MÙhjíh²hubeh}”(h]”Œ monitoring”ah ]”h"]”Œ monitoring”ah$]”h&]”uh1hµhh·h²hh³hÊh´M¾ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Debugging”h]”hŒ Debugging”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj0h²hh³hÊh´MÝubhì)�”}”(hŒ’Because the work functions are executed by generic worker threads there are a few tricks needed to shed some light on misbehaving workqueue users.”h]”hŒ’Because the work functions are executed by generic worker threads there are a few tricks needed to shed some light on misbehaving workqueue users.”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mßhj0h²hubhì)�”}”(hŒ1Worker threads show up in the process list as: ::”h]”hŒ.Worker threads show up in the process list as:”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mãhj0h²hubjÞ)�”}”(hX;root 5671 0.0 0.0 0 0 ? S 12:07 0:00 [kworker/0:1] root 5672 0.0 0.0 0 0 ? S 12:07 0:00 [kworker/1:2] root 5673 0.0 0.0 0 0 ? S 12:12 0:00 [kworker/0:0] root 5674 0.0 0.0 0 0 ? S 12:13 0:00 [kworker/1:0]”h]”hX;root 5671 0.0 0.0 0 0 ? S 12:07 0:00 [kworker/0:1] root 5672 0.0 0.0 0 0 ? S 12:07 0:00 [kworker/1:2] root 5673 0.0 0.0 0 0 ? S 12:12 0:00 [kworker/0:0] root 5674 0.0 0.0 0 0 ? S 12:13 0:00 [kworker/1:0]”…”�”}”hj]sbah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1jÝh³hÊh´Måhj0h²hubhì)�”}”(hŒ[If kworkers are going crazy (using too much cpu), there are two types of possible problems:”h]”hŒ[If kworkers are going crazy (using too much cpu), there are two types of possible problems:”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mêhj0h²hubj¶)�”}”(hŒh1. Something being scheduled in rapid succession 2. A single work item that consumes lots of cpu cycles ”h]”hŒenumerated_list”“”)�”}”(hhh]”(j%)�”}”(hŒ-Something being scheduled in rapid succession”h]”hì)�”}”(hj„h]”hŒ-Something being scheduled in rapid succession”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Míhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjubj%)�”}”(hŒ4A single work item that consumes lots of cpu cycles ”h]”hì)�”}”(hŒ3A single work item that consumes lots of cpu cycles”h]”hŒ3A single work item that consumes lots of cpu cycles”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mîhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j}hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jµh³hÊh´Míhj0h²hubhì)�”}”(hŒ.The first one can be tracked using tracing: ::”h]”hŒ+The first one can be tracked using tracing:”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mðhj0h²hubjÞ)�”}”(hŒ‰$ echo workqueue:workqueue_queue_work > /sys/kernel/tracing/set_event $ cat /sys/kernel/tracing/trace_pipe > out.txt (wait a few secs) ^C”h]”hŒ‰$ echo workqueue:workqueue_queue_work > /sys/kernel/tracing/set_event $ cat /sys/kernel/tracing/trace_pipe > out.txt (wait a few secs) ^C”…”�”}”hjÐsbah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1jÝh³hÊh´Mòhj0h²hubhì)�”}”(hŒ�If something is busy looping on work queueing, it would be dominating the output and the offender can be determined with the work item function.”h]”hŒ�If something is busy looping on work queueing, it would be dominating the output and the offender can be determined with the work item function.”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M÷hj0h²hubhì)�”}”(hŒvFor the second type of problems it should be possible to just check the stack trace of the offending worker thread. ::”h]”hŒsFor the second type of problems it should be possible to just check the stack trace of the offending worker thread.”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mûhj0h²hubjÞ)�”}”(hŒ'$ cat /proc/THE_OFFENDING_KWORKER/stack”h]”hŒ'$ cat /proc/THE_OFFENDING_KWORKER/stack”…”�”}”hjúsbah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1jÝh³hÊh´Mþhj0h²hubhì)�”}”(hŒHThe work item's function should be trivially visible in the stack trace.”h]”hŒJThe work item’s function should be trivially visible in the stack trace.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhj0h²hubeh}”(h]”Œ debugging”ah ]”h"]”Œ debugging”ah$]”h&]”uh1hµhh·h²hh³hÊh´MÝubh¶)�”}”(hhh]”(h»)�”}”(hŒNon-reentrance Conditions”h]”hŒNon-reentrance Conditions”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´Mubhì)�”}”(hŒzWorkqueue guarantees that a work item cannot be re-entrant if the following conditions hold after a work item gets queued:”h]”hŒzWorkqueue guarantees that a work item cannot be re-entrant if the following conditions hold after a work item gets queued:”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhjh²hubj¶)�”}”(hŒ‰1. The work function hasn't been changed. 2. No one queues the work item to another workqueue. 3. The work item hasn't been reinitiated. ”h]”j~)�”}”(hhh]”(j%)�”}”(hŒ&The work function hasn't been changed.”h]”hì)�”}”(hjFh]”hŒ(The work function hasn’t been changed.”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjAubj%)�”}”(hŒ1No one queues the work item to another workqueue.”h]”hì)�”}”(hj]h]”hŒ1No one queues the work item to another workqueue.”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M hj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjAubj%)�”}”(hŒ'The work item hasn't been reinitiated. ”h]”hì)�”}”(hŒ&The work item hasn't been reinitiated.”h]”hŒ(The work item hasn’t been reinitiated.”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1j$hjAubeh}”(h]”h ]”h"]”h$]”h&]”j·j¸j¹hjºj»uh1j}hj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jµh³hÊh´M hjh²hubhì)�”}”(hŒ�In other words, if the above conditions hold, the work item is guaranteed to be executed by at most one worker system-wide at any given time.”h]”hŒ�In other words, if the above conditions hold, the work item is guaranteed to be executed by at most one worker system-wide at any given time.”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhjh²hubhì)�”}”(hŒÒNote that requeuing the work item (to the same queue) in the self function doesn't break these conditions, so it's safe to do. Otherwise, caution is required when breaking the conditions inside a work function.”h]”hŒÖNote that requeuing the work item (to the same queue) in the self function doesn’t break these conditions, so it’s safe to do. Otherwise, caution is required when breaking the conditions inside a work function.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhjh²hubeh}”(h]”Œnon-reentrance-conditions”ah ]”h"]”Œnon-reentrance conditions”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mubh¶)�”}”(hhh]”(h»)�”}”(hŒ&Kernel Inline Documentations Reference”h]”hŒ&Kernel Inline Documentations Reference”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjºh²hh³hÊh´MubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œworkqueue_attrs (C struct)”Œc.workqueue_attrs”hNt”auh1jËhjºh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒworkqueue_attrs”h]”hŒdesc_signature_line”“”)�”}”(hŒstruct workqueue_attrs”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jíhjéh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jÿhjéh²hh³jþh´KubhŒ desc_name”“”)�”}”(hŒworkqueue_attrs”h]”hŒ desc_sig_name”“”)�”}”(hjåh]”hŒworkqueue_attrs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”jíjîuh1jhjéh²hh³jþh´Kubeh}”(h]”h ]”h"]”h$]”h&]”jíjîŒ add_permalink”ˆuh1jçŒsphinx_line_type”Œ declarator”hjãh²hh³jþh´Kubah}”(h]”jÚah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jáh³jþh´KhjÞh²hubhŒ desc_content”“”)�”}”(hhh]”hì)�”}”(hŒ"A struct for workqueue attributes.”h]”hŒ"A struct for workqueue attributes.”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K�hjDh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÞh²hh³jþh´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 workqueue_attrs { int nice; cpumask_var_t cpumask; cpumask_var_t __pod_cpumask; bool affn_strict; enum wq_affn_scope affn_scope; bool ordered; }; **Members** ``nice`` nice level ``cpumask`` allowed CPUs Work items in this workqueue are affine to these CPUs and not allowed to execute on other CPUs. A pool serving a workqueue must have the same **cpumask**. ``__pod_cpumask`` internal attribute used to create per-pod pools Internal use only. Per-pod unbound worker pools are used to improve locality. Always a subset of ->cpumask. A workqueue can be associated with multiple worker pools with disjoint **__pod_cpumask**'s. Whether the enforcement of a pool's **__pod_cpumask** is strict depends on **affn_strict**. ``affn_strict`` affinity scope is strict If clear, workqueue will make a best-effort attempt at starting the worker inside **__pod_cpumask** but the scheduler is free to migrate it outside. If set, workers are only allowed to run inside **__pod_cpumask**. ``affn_scope`` unbound CPU affinity scope CPU pods are used to improve execution locality of unbound work items. There are multiple pod types, one for each wq_affn_scope, and every CPU in the system belongs to one pod in every pod type. CPUs that belong to the same pod share the worker pool. For example, selecting ``WQ_AFFN_NUMA`` makes the workqueue use a separate worker pool for each NUMA node. ``ordered`` work items must be executed one by one in queueing order”h]”(hì)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjpubhŒ:”…”�”}”(hjph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K”hjlubjÞ)�”}”(hŒ°struct workqueue_attrs { int nice; cpumask_var_t cpumask; cpumask_var_t __pod_cpumask; bool affn_strict; enum wq_affn_scope affn_scope; bool ordered; };”h]”hŒ°struct workqueue_attrs { int nice; cpumask_var_t cpumask; cpumask_var_t __pod_cpumask; bool affn_strict; enum wq_affn_scope affn_scope; bool ordered; };”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1jÝh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K–hjlubhì)�”}”(hŒ **Members**”h]”j)�”}”(hjžh]”hŒMembers”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´KŸhjlubjg)�”}”(hhh]”(jl)�”}”(hŒ``nice`` nice level ”h]”(jr)�”}”(hŒ``nice``”h]”jú)�”}”(hj½h]”hŒnice”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K—hj·ubj‹)�”}”(hhh]”hì)�”}”(hŒ nice level”h]”hŒ nice level”…”�”}”(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&]”uh1jkh³jÒh´K—hj´ubjl)�”}”(hŒµ``cpumask`` allowed CPUs Work items in this workqueue are affine to these CPUs and not allowed to execute on other CPUs. A pool serving a workqueue must have the same **cpumask**. ”h]”(jr)�”}”(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&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K hjðubj‹)�”}”(hhh]”(hì)�”}”(hŒ allowed CPUs”h]”hŒ allowed CPUs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Kœhj ubhì)�”}”(hŒšWork items in this workqueue are affine to these CPUs and not allowed to execute on other CPUs. A pool serving a workqueue must have the same **cpumask**.”h]”(hŒŽWork items in this workqueue are affine to these CPUs and not allowed to execute on other CPUs. A pool serving a workqueue must have the same ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Kžhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j h´K hj´ubjl)�”}”(hXh``__pod_cpumask`` internal attribute used to create per-pod pools Internal use only. Per-pod unbound worker pools are used to improve locality. Always a subset of ->cpumask. A workqueue can be associated with multiple worker pools with disjoint **__pod_cpumask**'s. Whether the enforcement of a pool's **__pod_cpumask** is strict depends on **affn_strict**. ”h]”(jr)�”}”(hŒ``__pod_cpumask``”h]”jú)�”}”(hjQh]”hŒ __pod_cpumask”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K¬hjKubj‹)�”}”(hhh]”(hì)�”}”(hŒ/internal attribute used to create per-pod pools”h]”hŒ/internal attribute used to create per-pod pools”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K¥hjgubhì)�”}”(hŒInternal use only.”h]”hŒInternal use only.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K§hjgubhì)�”}”(hXPer-pod unbound worker pools are used to improve locality. Always a subset of ->cpumask. A workqueue can be associated with multiple worker pools with disjoint **__pod_cpumask**'s. Whether the enforcement of a pool's **__pod_cpumask** is strict depends on **affn_strict**.”h]”(hŒ Per-pod unbound worker pools are used to improve locality. Always a subset of ->cpumask. A workqueue can be associated with multiple worker pools with disjoint ”…”�”}”(hjˆh²hh³Nh´Nubj)�”}”(hŒ**__pod_cpumask**”h]”hŒ __pod_cpumask”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆubhŒ,’s. Whether the enforcement of a pool’s ”…”�”}”(hjˆh²hh³Nh´Nubj)�”}”(hŒ**__pod_cpumask**”h]”hŒ __pod_cpumask”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆubhŒ is strict depends on ”…”�”}”(hjˆh²hh³Nh´Nubj)�”}”(hŒ**affn_strict**”h]”hŒ affn_strict”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆubhŒ.”…”�”}”(hjˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K©hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jfh´K¬hj´ubjl)�”}”(hX``affn_strict`` affinity scope is strict If clear, workqueue will make a best-effort attempt at starting the worker inside **__pod_cpumask** but the scheduler is free to migrate it outside. If set, workers are only allowed to run inside **__pod_cpumask**. ”h]”(jr)�”}”(hŒ``affn_strict``”h]”jú)�”}”(hjßh]”hŒ affn_strict”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K·hjÙubj‹)�”}”(hhh]”(hì)�”}”(hŒaffinity scope is strict”h]”hŒaffinity scope is strict”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K±hjõubhì)�”}”(hŒ”If clear, workqueue will make a best-effort attempt at starting the worker inside **__pod_cpumask** but the scheduler is free to migrate it outside.”h]”(hŒRIf clear, workqueue will make a best-effort attempt at starting the worker inside ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ**__pod_cpumask**”h]”hŒ __pod_cpumask”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ1 but the scheduler is free to migrate it outside.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K³hjõubhì)�”}”(hŒAIf set, workers are only allowed to run inside **__pod_cpumask**.”h]”(hŒ/If set, workers are only allowed to run inside ”…”�”}”(hj(h²hh³Nh´Nubj)�”}”(hŒ**__pod_cpumask**”h]”hŒ __pod_cpumask”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj(ubhŒ.”…”�”}”(hj(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jôh´K·hjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jôh´K·hj´ubjl)�”}”(hX‘``affn_scope`` unbound CPU affinity scope CPU pods are used to improve execution locality of unbound work items. There are multiple pod types, one for each wq_affn_scope, and every CPU in the system belongs to one pod in every pod type. CPUs that belong to the same pod share the worker pool. For example, selecting ``WQ_AFFN_NUMA`` makes the workqueue use a separate worker pool for each NUMA node. ”h]”(jr)�”}”(hŒ``affn_scope``”h]”jú)�”}”(hjZh]”hŒ affn_scope”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´KÌhjTubj‹)�”}”(hhh]”(hì)�”}”(hŒunbound CPU affinity scope”h]”hŒunbound CPU affinity scope”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´KÅhjpubhì)�”}”(hXeCPU pods are used to improve execution locality of unbound work items. There are multiple pod types, one for each wq_affn_scope, and every CPU in the system belongs to one pod in every pod type. CPUs that belong to the same pod share the worker pool. For example, selecting ``WQ_AFFN_NUMA`` makes the workqueue use a separate worker pool for each NUMA node.”h]”(hXCPU pods are used to improve execution locality of unbound work items. There are multiple pod types, one for each wq_affn_scope, and every CPU in the system belongs to one pod in every pod type. CPUs that belong to the same pod share the worker pool. For example, selecting ”…”�”}”(hj‚h²hh³Nh´Nubjú)�”}”(hŒ``WQ_AFFN_NUMA``”h]”hŒ WQ_AFFN_NUMA”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj‚ubhŒC makes the workqueue use a separate worker pool for each NUMA node.”…”�”}”(hj‚h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´KÇhjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³joh´KÌhj´ubjl)�”}”(hŒD``ordered`` work items must be executed one by one in queueing order”h]”(jr)�”}”(hŒ ``ordered``”h]”jú)�”}”(hjµh]”hŒordered”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´KÐhj¯ubj‹)�”}”(hhh]”hì)�”}”(hŒ8work items must be executed one by one in queueing order”h]”hŒ8work items must be executed one by one in queueing order”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´KÑhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÊh´KÐhj´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjlubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´Nubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjøh]”hŒ Description”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´KÔhjºh²hubhì)�”}”(hŒ>This can be used to change attributes of an unbound workqueue.”h]”hŒ>This can be used to change attributes of an unbound workqueue.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´K‘hjºh²hubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒwork_pending (C macro)”Œc.work_pending”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ work_pending”h]”jè)�”}”(hŒ work_pending”h]”j)�”}”(hŒ work_pending”h]”j)�”}”(hj0h]”hŒ work_pending”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj6ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj2h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Maubah}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj.h²hh³jMh´Maubah}”(h]”j)ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jMh´Mahj+h²hubjC)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jBhj+h²hh³jMh´Maubeh}”(h]”h ]”(j_Œmacro”eh"]”h$]”h&]”jdj_jejfjfjfjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubhì)�”}”(hŒ``work_pending (work)``”h]”jú)�”}”(hjlh]”hŒwork_pending (work)”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mchjºh²hubj¶)�”}”(hŒ2Find out whether a work item is currently pending ”h]”hì)�”}”(hŒ1Find out whether a work item is currently pending”h]”hŒ1Find out whether a work item is currently pending”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mahj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jµh³j”h´Mahjºh²hubjk)�”}”(hŒ4**Parameters** ``work`` The work item in question”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¡h]”hŒ Parameters”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mehj›ubjg)�”}”(hhh]”jl)�”}”(hŒ"``work`` The work item in question”h]”(jr)�”}”(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&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mghjºubj‹)�”}”(hhh]”hì)�”}”(hŒThe work item in question”h]”hŒThe work item in question”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MbhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÕh´Mghj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj›ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒdelayed_work_pending (C macro)”Œc.delayed_work_pending”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒdelayed_work_pending”h]”jè)�”}”(hŒdelayed_work_pending”h]”j)�”}”(hŒdelayed_work_pending”h]”j)�”}”(hjh]”hŒdelayed_work_pending”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhubah}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjh²hh³j1h´Mhubah}”(h]”j ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j1h´Mhhjh²hubjC)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jBhjh²hh³j1h´Mhubeh}”(h]”h ]”(j_Œmacro”eh"]”h$]”h&]”jdj_jejJjfjJjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubhì)�”}”(hŒ``delayed_work_pending (w)``”h]”jú)�”}”(hjPh]”hŒdelayed_work_pending (w)”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mjhjºh²hubj¶)�”}”(hŒ limits the number of in-flight work items for each CPU. e.g. ”…”�”}”(hjãh²hh³Nh´Nubj)�”}”(hŒ**max_active**”h]”hŒ max_active”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjãubhŒW of 1 indicates that each CPU can be executing at most one work item for the workqueue.”…”�”}”(hjãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mçhj´ubhì)�”}”(hŒãFor unbound workqueues, **max_active** limits the number of in-flight work items for the whole system. e.g. **max_active** of 16 indicates that there can be at most 16 work items executing for the workqueue in the whole system.”h]”(hŒFor unbound workqueues, ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ**max_active**”h]”hŒ max_active”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒF limits the number of in-flight work items for the whole system. e.g. ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ**max_active**”h]”hŒ max_active”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒi of 16 indicates that there can be at most 16 work items executing for the workqueue in the whole system.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mëhj´ubhì)�”}”(hŒíAs sharing the same active counter for an unbound workqueue across multiple NUMA nodes can be expensive, **max_active** is distributed to each NUMA node according to the proportion of the number of online CPUs and enforced independently.”h]”(hŒiAs sharing the same active counter for an unbound workqueue across multiple NUMA nodes can be expensive, ”…”�”}”(hjIh²hh³Nh´Nubj)�”}”(hŒ**max_active**”h]”hŒ max_active”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubhŒv is distributed to each NUMA node according to the proportion of the number of online CPUs and enforced independently.”…”�”}”(hjIh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mïhj´ubhì)�”}”(hXDepending on online CPU distribution, a node may end up with per-node max_active which is significantly lower than **max_active**, which can lead to deadlocks if the per-node concurrency limit is lower than the maximum number of interdependent work items for the workqueue.”h]”(hŒsDepending on online CPU distribution, a node may end up with per-node max_active which is significantly lower than ”…”�”}”(hjjh²hh³Nh´Nubj)�”}”(hŒ**max_active**”h]”hŒ max_active”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjubhŒ�, which can lead to deadlocks if the per-node concurrency limit is lower than the maximum number of interdependent work items for the workqueue.”…”�”}”(hjjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Môhj´ubhì)�”}”(hX0To guarantee forward progress regardless of online CPU distribution, the concurrency limit on every node is guaranteed to be equal to or greater than min_active which is set to min(**max_active**, ``WQ_DFL_MIN_ACTIVE``). This means that the sum of per-node max_active's may be larger than **max_active**.”h]”(hŒµTo guarantee forward progress regardless of online CPU distribution, the concurrency limit on every node is guaranteed to be equal to or greater than min_active which is set to min(”…”�”}”(hj‹h²hh³Nh´Nubj)�”}”(hŒ**max_active**”h]”hŒ max_active”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹ubhŒ, ”…”�”}”(hj‹h²hh³Nh´Nubjú)�”}”(hŒ``WQ_DFL_MIN_ACTIVE``”h]”hŒWQ_DFL_MIN_ACTIVE”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj‹ubhŒI). This means that the sum of per-node max_active’s may be larger than ”…”�”}”(hj‹h²hh³Nh´Nubj)�”}”(hŒ**max_active**”h]”hŒ max_active”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹ubhŒ.”…”�”}”(hj‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mùhj´ubhì)�”}”(hŒbFor detailed information on ``WQ_``\* flags, please refer to Documentation/core-api/workqueue.rst.”h]”(hŒFor detailed information on ”…”�”}”(hjÐh²hh³Nh´Nubjú)�”}”(hŒ``WQ_``”h]”hŒWQ_”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÐubhŒ?* flags, please refer to Documentation/core-api/workqueue.rst.”…”�”}”(hjÐh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mþhj´ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjóh]”hŒReturn”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj´ubhì)�”}”(hŒCPointer to the allocated workqueue on success, ``NULL`` on failure.”h]”(hŒ/Pointer to the allocated workqueue on success, ”…”�”}”(hj h²hh³Nh´Nubjú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj ubhŒ on failure.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ!devm_alloc_workqueue (C function)”Œc.devm_alloc_workqueue”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ}struct workqueue_struct * devm_alloc_workqueue (struct device *dev, const char *fmt, unsigned int flags, int max_active, ...)”h]”jè)�”}”(hŒ{struct workqueue_struct *devm_alloc_workqueue(struct device *dev, const char *fmt, unsigned int flags, int max_active, ...)”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjFh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjFh²hh³jWh´M ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jkŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œdevm_alloc_workqueue”sbŒc.devm_alloc_workqueue”†”asbuh1hhjFh²hh³jWh´M ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjFh²hh³jWh´M ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjFh²hh³jWh´M ubj)�”}”(hŒdevm_alloc_workqueue”h]”j)�”}”(hj‡h]”hŒdevm_alloc_workqueue”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¥ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjFh²hh³jWh´M ubj|)�”}”(hŒN(struct device *dev, const char *fmt, unsigned int flags, int max_active, ...)”h]”(j‚)�”}”(hŒstruct device *dev”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjÀubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÀubh)�”}”(hhh]”j)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjßubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jäŒmodname”NŒ classname”Nj7j:)�”}”j=]”j…Œc.devm_alloc_workqueue”†”asbuh1hhjÀubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÀubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÀubj)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÀubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¼ubj‚)�”}”(hŒconst char *fmt”h]”(jî)�”}”(hj‰h]”hŒconst”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj0 ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj0 ubj¤)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjO h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj0 ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj0 ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj0 ubj)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj0 ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¼ubj‚)�”}”(hŒunsigned int flags”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj� ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj� ubj¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj� ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj� ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj� ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¼ubj‚)�”}”(hŒint max_active”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÞ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÞ ubj)�”}”(hŒ max_active”h]”hŒ max_active”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÞ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¼ubj‚)�”}”(hŒ...”h]”jU)�”}”(hjph]”hŒ...”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj!ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¼ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjFh²hh³jWh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjBh²hh³jWh´M ubah}”(h]”j=ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jWh´M hj?h²hubjC)�”}”(hhh]”hì)�”}”(hŒ%Resource-managed allocate a workqueue”h]”hŒ%Resource-managed allocate a workqueue”…”�”}”(hj@!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M hj=!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj?h²hh³jWh´M ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejX!jfjX!jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX=**Parameters** ``struct device *dev`` Device to allocate workqueue for ``const char *fmt`` printf format for the name of the workqueue ``unsigned int flags`` WQ_* flags ``int max_active`` max in-flight work items, 0 for default ``...`` args for **fmt** **Description** Resource managed workqueue, see alloc_workqueue() for details. The workqueue will be automatically destroyed on driver detach. Typically this should be used in drivers already relying on devm interafaces. **Return** Pointer to the allocated workqueue on success, ``NULL`` on failure.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjb!h]”hŒ Parameters”…”�”}”(hjd!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj\!ubjg)�”}”(hhh]”(jl)�”}”(hŒ8``struct device *dev`` Device to allocate workqueue for ”h]”(jr)�”}”(hŒ``struct device *dev``”h]”jú)�”}”(hj�!h]”hŒstruct device *dev”…”�”}”(hjƒ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M hj{!ubj‹)�”}”(hhh]”hì)�”}”(hŒ Device to allocate workqueue for”h]”hŒ Device to allocate workqueue for”…”�”}”(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&]”uh1jkh³j–!h´M hjx!ubjl)�”}”(hŒ@``const char *fmt`` printf format for the name of the workqueue ”h]”(jr)�”}”(hŒ``const char *fmt``”h]”jú)�”}”(hjº!h]”hŒconst char *fmt”…”�”}”(hj¼!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¸!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M hj´!ubj‹)�”}”(hhh]”hì)�”}”(hŒ+printf format for the name of the workqueue”h]”hŒ+printf format for the name of the workqueue”…”�”}”(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&]”uh1jkh³jÏ!h´M hjx!ubjl)�”}”(hŒ"``unsigned int flags`` WQ_* flags ”h]”(jr)�”}”(hŒ``unsigned int flags``”h]”jú)�”}”(hjó!h]”hŒunsigned int flags”…”�”}”(hjõ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjñ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M hjí!ubj‹)�”}”(hhh]”hì)�”}”(hŒ WQ_* flags”h]”hŒ WQ_* flags”…”�”}”(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&]”uh1jkh³j"h´M hjx!ubjl)�”}”(hŒ;``int max_active`` max in-flight work items, 0 for default ”h]”(jr)�”}”(hŒ``int max_active``”h]”jú)�”}”(hj,"h]”hŒint max_active”…”�”}”(hj."h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj*"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj&"ubj‹)�”}”(hhh]”hì)�”}”(hŒ'max in-flight work items, 0 for default”h]”hŒ'max in-flight work items, 0 for default”…”�”}”(hjE"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jA"h´MhjB"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj&"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jA"h´Mhjx!ubjl)�”}”(hŒ``...`` args for **fmt** ”h]”(jr)�”}”(hŒ``...``”h]”jú)�”}”(hje"h]”hŒ...”…”�”}”(hjg"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjc"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj_"ubj‹)�”}”(hhh]”hì)�”}”(hŒargs for **fmt**”h]”(hŒ args for ”…”�”}”(hj~"h²hh³Nh´Nubj)�”}”(hŒ**fmt**”h]”hŒfmt”…”�”}”(hj†"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj~"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jz"h´Mhj{"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj_"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jz"h´Mhjx!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj\!ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj®"h]”hŒ Description”…”�”}”(hj°"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj\!ubhì)�”}”(hŒ>Resource managed workqueue, see alloc_workqueue() for details.”h]”hŒ>Resource managed workqueue, see alloc_workqueue() for details.”…”�”}”(hjÄ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj\!ubhì)�”}”(hŒŽThe workqueue will be automatically destroyed on driver detach. Typically this should be used in drivers already relying on devm interafaces.”h]”hŒŽThe workqueue will be automatically destroyed on driver detach. Typically this should be used in drivers already relying on devm interafaces.”…”�”}”(hjÓ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj\!ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjä"h]”hŒReturn”…”�”}”(hjæ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj\!ubhì)�”}”(hŒCPointer to the allocated workqueue on success, ``NULL`` on failure.”h]”(hŒ/Pointer to the allocated workqueue on success, ”…”�”}”(hjú"h²hh³Nh´Nubjú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjú"ubhŒ on failure.”…”�”}”(hjú"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj\!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ(alloc_workqueue_lockdep_map (C function)”Œc.alloc_workqueue_lockdep_map”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ‘struct workqueue_struct * alloc_workqueue_lockdep_map (const char *fmt, unsigned int flags, int max_active, struct lockdep_map *lockdep_map, ...)”h]”jè)�”}”(hŒ�struct workqueue_struct *alloc_workqueue_lockdep_map(const char *fmt, unsigned int flags, int max_active, struct lockdep_map *lockdep_map, ...)”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj;#h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj7#h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M!ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj7#h²hh³jH#h´M!ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjZ#h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjW#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j\#Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œalloc_workqueue_lockdep_map”sbŒc.alloc_workqueue_lockdep_map”†”asbuh1hhj7#h²hh³jH#h´M!ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj7#h²hh³jH#h´M!ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj‰#h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj7#h²hh³jH#h´M!ubj)�”}”(hŒalloc_workqueue_lockdep_map”h]”j)�”}”(hjx#h]”hŒalloc_workqueue_lockdep_map”…”�”}”(hjš#h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj–#ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj7#h²hh³jH#h´M!ubj|)�”}”(hŒ[(const char *fmt, unsigned int flags, int max_active, struct lockdep_map *lockdep_map, ...)”h]”(j‚)�”}”(hŒconst char *fmt”h]”(jî)�”}”(hj‰h]”hŒconst”…”�”}”(hjµ#h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj±#ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj±#ubj¤)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÐ#h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj±#ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj±#ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjì#h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj±#ubj)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hjù#h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj±#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj­#ubj‚)�”}”(hŒunsigned int flags”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj $h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj$ubj¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj.$h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj$ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjJ$h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj­#ubj‚)�”}”(hŒint max_active”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjc$h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj_$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj_$ubj)�”}”(hŒ max_active”h]”hŒ max_active”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj_$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj­#ubj‚)�”}”(hŒstruct lockdep_map *lockdep_map”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj˜$h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj”$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj”$ubh)�”}”(hhh]”j)�”}”(hŒ lockdep_map”h]”hŒ lockdep_map”…”�”}”(hj¶$h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj³$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j¸$Œmodname”NŒ classname”Nj7j:)�”}”j=]”jv#Œc.alloc_workqueue_lockdep_map”†”asbuh1hhj”$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj”$ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjâ$h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj”$ubj)�”}”(hŒ lockdep_map”h]”hŒ lockdep_map”…”�”}”(hjï$h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj”$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj­#ubj‚)�”}”(hŒ...”h]”jU)�”}”(hjph]”hŒ...”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj%ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj­#ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj7#h²hh³jH#h´M!ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj3#h²hh³jH#h´M!ubah}”(h]”j.#ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jH#h´M!hj0#h²hubjC)�”}”(hhh]”hì)�”}”(hŒ2allocate a workqueue with user-defined lockdep_map”h]”hŒ2allocate a workqueue with user-defined lockdep_map”…”�”}”(hj1%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M!hj.%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj0#h²hh³jH#h´M!ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejI%jfjI%jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX&**Parameters** ``const char *fmt`` printf format for the name of the workqueue ``unsigned int flags`` WQ_* flags ``int max_active`` max in-flight work items, 0 for default ``struct lockdep_map *lockdep_map`` user-defined lockdep_map ``...`` args for **fmt** **Description** Same as alloc_workqueue but with the a user-define lockdep_map. Useful for workqueues created with the same purpose and to avoid leaking a lockdep_map on each workqueue creation. **Return** Pointer to the allocated workqueue on success, ``NULL`` on failure.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjS%h]”hŒ Parameters”…”�”}”(hjU%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M%hjM%ubjg)�”}”(hhh]”(jl)�”}”(hŒ@``const char *fmt`` printf format for the name of the workqueue ”h]”(jr)�”}”(hŒ``const char *fmt``”h]”jú)�”}”(hjr%h]”hŒconst char *fmt”…”�”}”(hjt%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjp%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M"hjl%ubj‹)�”}”(hhh]”hì)�”}”(hŒ+printf format for the name of the workqueue”h]”hŒ+printf format for the name of the workqueue”…”�”}”(hj‹%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j‡%h´M"hjˆ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjl%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j‡%h´M"hji%ubjl)�”}”(hŒ"``unsigned int flags`` WQ_* flags ”h]”(jr)�”}”(hŒ``unsigned int flags``”h]”jú)�”}”(hj«%h]”hŒunsigned int flags”…”�”}”(hj­%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj©%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M#hj¥%ubj‹)�”}”(hhh]”hì)�”}”(hŒ WQ_* flags”h]”hŒ WQ_* flags”…”�”}”(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&]”uh1jkh³jÀ%h´M#hji%ubjl)�”}”(hŒ;``int max_active`` max in-flight work items, 0 for default ”h]”(jr)�”}”(hŒ``int max_active``”h]”jú)�”}”(hjä%h]”hŒint max_active”…”�”}”(hjæ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjâ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M$hjÞ%ubj‹)�”}”(hhh]”hì)�”}”(hŒ'max in-flight work items, 0 for default”h]”hŒ'max in-flight work items, 0 for default”…”�”}”(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&]”uh1jkh³jù%h´M$hji%ubjl)�”}”(hŒ=``struct lockdep_map *lockdep_map`` user-defined lockdep_map ”h]”(jr)�”}”(hŒ#``struct lockdep_map *lockdep_map``”h]”jú)�”}”(hj&h]”hŒstruct lockdep_map *lockdep_map”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M%hj&ubj‹)�”}”(hhh]”hì)�”}”(hŒuser-defined lockdep_map”h]”hŒuser-defined lockdep_map”…”�”}”(hj6&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j2&h´M%hj3&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j2&h´M%hji%ubjl)�”}”(hŒ``...`` args for **fmt** ”h]”(jr)�”}”(hŒ``...``”h]”jú)�”}”(hjV&h]”hŒ...”…”�”}”(hjX&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjT&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M&hjP&ubj‹)�”}”(hhh]”hì)�”}”(hŒargs for **fmt**”h]”(hŒ args for ”…”�”}”(hjo&h²hh³Nh´Nubj)�”}”(hŒ**fmt**”h]”hŒfmt”…”�”}”(hjw&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jk&h´M&hjl&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjP&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jk&h´M&hji%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjM%ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjŸ&h]”hŒ Description”…”�”}”(hj¡&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M(hjM%ubhì)�”}”(hŒ²Same as alloc_workqueue but with the a user-define lockdep_map. Useful for workqueues created with the same purpose and to avoid leaking a lockdep_map on each workqueue creation.”h]”hŒ²Same as alloc_workqueue but with the a user-define lockdep_map. Useful for workqueues created with the same purpose and to avoid leaking a lockdep_map on each workqueue creation.”…”�”}”(hjµ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M'hjM%ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjÆ&h]”hŒReturn”…”�”}”(hjÈ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M+hjM%ubhì)�”}”(hŒCPointer to the allocated workqueue on success, ``NULL`` on failure.”h]”(hŒ/Pointer to the allocated workqueue on success, ”…”�”}”(hjÜ&h²hh³Nh´Nubjú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjä&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÜ&ubhŒ on failure.”…”�”}”(hjÜ&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M,hjM%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ-alloc_ordered_workqueue_lockdep_map (C macro)”Œ%c.alloc_ordered_workqueue_lockdep_map”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ#alloc_ordered_workqueue_lockdep_map”h]”jè)�”}”(hŒ#alloc_ordered_workqueue_lockdep_map”h]”j)�”}”(hŒ#alloc_ordered_workqueue_lockdep_map”h]”j)�”}”(hj'h]”hŒ#alloc_ordered_workqueue_lockdep_map”…”�”}”(hj!'h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj'ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj'h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M4ubah}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj'h²hh³j4'h´M4ubah}”(h]”j'ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j4'h´M4hj'h²hubjC)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jBhj'h²hh³j4'h´M4ubeh}”(h]”h ]”(j_Œmacro”eh"]”h$]”h&]”jdj_jejM'jfjM'jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubhì)�”}”(hŒJ``alloc_ordered_workqueue_lockdep_map (fmt, flags, lockdep_map, args...)``”h]”jú)�”}”(hjS'h]”hŒFalloc_ordered_workqueue_lockdep_map (fmt, flags, lockdep_map, args...)”…”�”}”(hjU'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjQ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M6hjºh²hubj¶)�”}”(hŒ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M§hj:,ubjg)�”}”(hhh]”(jl)�”}”(hŒ1``struct workqueue_struct *wq`` workqueue to use ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj_,h]”hŒstruct workqueue_struct *wq”…”�”}”(hja,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj],ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M¤hjY,ubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue to use”h]”hŒworkqueue to use”…”�”}”(hjx,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jt,h´M¤hju,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjY,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jt,h´M¤hjV,ubjl)�”}”(hŒ+``struct work_struct *work`` work to queue ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hj˜,h]”hŒstruct work_struct *work”…”�”}”(hjš,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj–,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M¥hj’,ubj‹)�”}”(hhh]”hì)�”}”(hŒ work to queue”h]”hŒ work to queue”…”�”}”(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&]”uh1jkh³j­,h´M¥hjV,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj:,ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÓ,h]”hŒ Description”…”�”}”(hjÕ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M§hj:,ubhì)�”}”(hŒIReturns ``false`` if **work** was already on a queue, ``true`` otherwise.”h]”(hŒReturns ”…”�”}”(hjé,h²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjñ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjé,ubhŒ if ”…”�”}”(hjé,h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjé,ubhŒ was already on a queue, ”…”�”}”(hjé,h²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjé,ubhŒ otherwise.”…”�”}”(hjé,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M¦hj:,ubhì)�”}”(hŒoWe queue the work to the CPU on which it was submitted, but if the CPU dies it can be processed by another CPU.”h]”hŒoWe queue the work to the CPU on which it was submitted, but if the CPU dies it can be processed by another CPU.”…”�”}”(hj.-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M¨hj:,ubhì)�”}”(hŒæMemory-ordering properties: If it returns ``true``, guarantees that all stores preceding the call to queue_work() in the program order will be visible from the CPU which will execute **work** by the time such work executes, e.g.,”h]”(hŒ+Memory-ordering properties: If it returns ”…”�”}”(hj=-h²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjE-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj=-ubhŒ…, guarantees that all stores preceding the call to queue_work() in the program order will be visible from the CPU which will execute ”…”�”}”(hj=-h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjW-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=-ubhŒ& by the time such work executes, e.g.,”…”�”}”(hj=-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M«hj:,ubhì)�”}”(hŒ{ x is initially 0 }”h]”hŒ{ x is initially 0 }”…”�”}”(hjp-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M¯hj:,ubj¶)�”}”(hŒ£CPU0 CPU1 WRITE_ONCE(x, 1); [ **work** is being executed ] r0 = queue_work(wq, work); r1 = READ_ONCE(x); ”h]”(hì)�”}”(hŒ'CPU0 CPU1”h]”hŒ'CPU0 CPU1”…”�”}”(hjƒ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M±hj-ubhì)�”}”(hŒyWRITE_ONCE(x, 1); [ **work** is being executed ] r0 = queue_work(wq, work); r1 = READ_ONCE(x);”h]”(hŒ%WRITE_ONCE(x, 1); [ ”…”�”}”(hj’-h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjš-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’-ubhŒL is being executed ] r0 = queue_work(wq, work); r1 = READ_ONCE(x);”…”�”}”(hj’-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M³hj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³j‘-h´M±hj:,ubhì)�”}”(hŒForbids: r0 == true && r1 == 0”h]”hŒForbids: r0 == true && r1 == 0”…”�”}”(hj¹-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M¶hj:,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒqueue_delayed_work (C function)”Œc.queue_delayed_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒfbool queue_delayed_work (struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)”h]”jè)�”}”(hŒebool queue_delayed_work(struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjè-h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjä-h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÀubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö-h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjä-h²hh³jõ-h´MÀubj)�”}”(hŒqueue_delayed_work”h]”j)�”}”(hŒqueue_delayed_work”h]”hŒqueue_delayed_work”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj.ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjä-h²hh³jõ-h´MÀubj|)�”}”(hŒN(struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)”h]”(j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj$.h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj .ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj .ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjB.h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj?.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jD.Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j .sbŒc.queue_delayed_work”†”asbuh1hhj .ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj .ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjp.h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj .ubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hj}.h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj .ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj.ubj‚)�”}”(hŒstruct delayed_work *dwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj–.h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj’.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj’.ubh)�”}”(hhh]”j)�”}”(hŒ delayed_work”h]”hŒ delayed_work”…”�”}”(hj´.h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj±.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j¶.Œmodname”NŒ classname”Nj7j:)�”}”j=]”j^.Œc.queue_delayed_work”†”asbuh1hhj’.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj’.ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjà.h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj’.ubj)�”}”(hŒdwork”h]”hŒdwork”…”�”}”(hjí.h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj’.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj.ubj‚)�”}”(hŒunsigned long delay”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj/ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj/ubj¤)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj"/h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj/ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0/h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj/ubj)�”}”(hŒdelay”h]”hŒdelay”…”�”}”(hj>/h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj.ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjä-h²hh³jõ-h´MÀubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjà-h²hh³jõ-h´MÀubah}”(h]”jÛ-ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jõ-h´MÀhjÝ-h²hubjC)�”}”(hhh]”hì)�”}”(hŒ%queue work on a workqueue after delay”h]”hŒ%queue work on a workqueue after delay”…”�”}”(hjh/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÀhje/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÝ-h²hh³jõ-h´MÀubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej€/jfj€/jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX**Parameters** ``struct workqueue_struct *wq`` workqueue to use ``struct delayed_work *dwork`` delayable work to queue ``unsigned long delay`` number of jiffies to wait before queueing **Description** Equivalent to queue_delayed_work_on() but tries to use the local CPU.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjŠ/h]”hŒ Parameters”…”�”}”(hjŒ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÄhj„/ubjg)�”}”(hhh]”(jl)�”}”(hŒ1``struct workqueue_struct *wq`` workqueue to use ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj©/h]”hŒstruct workqueue_struct *wq”…”�”}”(hj«/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj§/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÁhj£/ubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue to use”h]”hŒworkqueue 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&]”uh1jkh³j¾/h´MÁhj /ubjl)�”}”(hŒ7``struct delayed_work *dwork`` delayable work to queue ”h]”(jr)�”}”(hŒ``struct delayed_work *dwork``”h]”jú)�”}”(hjâ/h]”hŒstruct delayed_work *dwork”…”�”}”(hjä/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjà/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÂhjÜ/ubj‹)�”}”(hhh]”hì)�”}”(hŒdelayable work to queue”h]”hŒdelayable work to queue”…”�”}”(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&]”uh1jkh³j÷/h´MÂhj /ubjl)�”}”(hŒB``unsigned long delay`` number of jiffies to wait before queueing ”h]”(jr)�”}”(hŒ``unsigned long delay``”h]”jú)�”}”(hj0h]”hŒunsigned long delay”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÃhj0ubj‹)�”}”(hhh]”hì)�”}”(hŒ)number of jiffies to wait before queueing”h]”hŒ)number of jiffies to wait before queueing”…”�”}”(hj40h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j00h´MÃhj10ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j00h´MÃhj /ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj„/ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjV0h]”hŒ Description”…”�”}”(hjX0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjT0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÅhj„/ubhì)�”}”(hŒEEquivalent to queue_delayed_work_on() but tries to use the local CPU.”h]”hŒEEquivalent to queue_delayed_work_on() but tries to use the local CPU.”…”�”•}”(hjl0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÄhj„/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒmod_delayed_work (C function)”Œc.mod_delayed_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒdbool mod_delayed_work (struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)”h]”jè)�”}”(hŒcbool mod_delayed_work(struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj›0h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj—0h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÏubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj—0h²hh³j¨0h´MÏubj)�”}”(hŒmod_delayed_work”h]”j)�”}”(hŒmod_delayed_work”h]”hŒmod_delayed_work”…”�”}”(hj»0h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj·0ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj—0h²hh³j¨0h´MÏubj|)�”}”(hŒN(struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)”h]”(j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj×0h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjÓ0ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÓ0ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjõ0h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjò0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j÷0Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j½0sbŒc.mod_delayed_work”†”asbuh1hhjÓ0ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÓ0ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj#1h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÓ0ubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hj01h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÓ0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÏ0ubj‚)�”}”(hŒstruct delayed_work *dwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjI1h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjE1ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjE1ubh)�”}”(hhh]”j)�”}”(hŒ delayed_work”h]”hŒ delayed_work”…”�”}”(hjg1h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjd1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”ji1Œmodname”NŒ classname”Nj7j:)�”}”j=]”j1Œc.mod_delayed_work”†”asbuh1hhjE1ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjE1ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj“1h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjE1ubj)�”}”(hŒdwork”h]”hŒdwork”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjE1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÏ0ubj‚)�”}”(hŒunsigned long delay”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¹1h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjµ1ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjµ1ubj¤)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÕ1h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjµ1ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjµ1ubj)�”}”(hŒdelay”h]”hŒdelay”…”�”}”(hjñ1h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjµ1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÏ0ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj—0h²hh³j¨0h´MÏubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj“0h²hh³j¨0h´MÏubah}”(h]”jŽ0ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j¨0h´MÏhj�0h²hubjC)�”}”(hhh]”hì)�”}”(hŒ'modify delay of or queue a delayed work”h]”hŒ'modify delay of or queue a delayed work”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÏhj2h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj�0h²hh³j¨0h´MÏubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej32jfj32jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒí**Parameters** ``struct workqueue_struct *wq`` workqueue to use ``struct delayed_work *dwork`` work to queue ``unsigned long delay`` number of jiffies to wait before queueing **Description** mod_delayed_work_on() on local CPU.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj=2h]”hŒ Parameters”…”�”}”(hj?2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÓhj72ubjg)�”}”(hhh]”(jl)�”}”(hŒ1``struct workqueue_struct *wq`` workqueue to use ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj\2h]”hŒstruct workqueue_struct *wq”…”�”}”(hj^2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjZ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÐhjV2ubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue to use”h]”hŒworkqueue to use”…”�”}”(hju2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jq2h´MÐhjr2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjV2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jq2h´MÐhjS2ubjl)�”}”(hŒ-``struct delayed_work *dwork`` work to queue ”h]”(jr)�”}”(hŒ``struct delayed_work *dwork``”h]”jú)�”}”(hj•2h]”hŒstruct delayed_work *dwork”…”�”}”(hj—2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj“2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÑhj�2ubj‹)�”}”(hhh]”hì)�”}”(hŒ work to queue”h]”hŒ work to queue”…”�”}”(hj®2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jª2h´MÑhj«2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj�2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jª2h´MÑhjS2ubjl)�”}”(hŒB``unsigned long delay`` number of jiffies to wait before queueing ”h]”(jr)�”}”(hŒ``unsigned long delay``”h]”jú)�”}”(hjÎ2h]”hŒunsigned long delay”…”�”}”(hjÐ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÌ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÒhjÈ2ubj‹)�”}”(hhh]”hì)�”}”(hŒ)number of jiffies to wait before queueing”h]”hŒ)number of jiffies to wait before queueing”…”�”}”(hjç2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jã2h´MÒhjä2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÈ2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jã2h´MÒhjS2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj72ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj 3h]”hŒ Description”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÔhj72ubhì)�”}”(hŒ#mod_delayed_work_on() on local CPU.”h]”hŒ#mod_delayed_work_on() on local CPU.”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÓhj72ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒschedule_work_on (C function)”Œc.schedule_work_on”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ9bool schedule_work_on (int cpu, struct work_struct *work)”h]”jè)�”}”(hŒ8bool schedule_work_on(int cpu, struct work_struct *work)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjN3h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjJ3h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÞubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjJ3h²hh³j[3h´MÞubj)�”}”(hŒschedule_work_on”h]”j)�”}”(hŒschedule_work_on”h]”hŒschedule_work_on”…”�”}”(hjn3h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjj3ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjJ3h²hh³j[3h´MÞubj|)�”}”(hŒ#(int cpu, struct work_struct *work)”h]”(j‚)�”}”(hŒint cpu”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjŠ3h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj†3ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj†3ubj)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj¦3h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj†3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj‚3ubj‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¿3h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj»3ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj»3ubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjÝ3h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÚ3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jß3Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jp3sbŒc.schedule_work_on”†”asbuh1hhj»3ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj»3ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj»3ubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj»3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj‚3ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjJ3h²hh³j[3h´MÞubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjF3h²hh³j[3h´MÞubah}”(h]”jA3ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j[3h´MÞhjC3h²hubjC)�”}”(hhh]”hì)�”}”(hŒput work task on a specific cpu”h]”hŒput work task on a specific cpu”…”�”}”(hjB4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MÞhj?4h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjC3h²hh³j[3h´MÞubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejZ4jfjZ4jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒœ**Parameters** ``int cpu`` cpu to put the work task on ``struct work_struct *work`` job to be done **Description** This puts a job on a specific cpu”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjd4h]”hŒ Parameters”…”�”}”(hjf4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjb4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mâhj^4ubjg)�”}”(hhh]”(jl)�”}”(hŒ(``int cpu`` cpu to put the work task on ”h]”(jr)�”}”(hŒ ``int cpu``”h]”jú)�”}”(hjƒ4h]”hŒint cpu”…”�”}”(hj…4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj�4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mßhj}4ubj‹)�”}”(hhh]”hì)�”}”(hŒcpu to put the work task on”h]”hŒcpu to put the work task on”…”�”}”(hjœ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j˜4h´Mßhj™4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj}4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j˜4h´Mßhjz4ubjl)�”}”(hŒ,``struct work_struct *work`` job to be done ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hj¼4h]”hŒstruct work_struct *work”…”�”}”(hj¾4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjº4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Màhj¶4ubj‹)�”}”(hhh]”hì)�”}”(hŒjob to be done”h]”hŒjob to be done”…”�”}”(hjÕ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÑ4h´MàhjÒ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¶4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÑ4h´Màhjz4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj^4ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj÷4h]”hŒ Description”…”�”}”(hjù4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mâhj^4ubhì)�”}”(hŒ!This puts a job on a specific cpu”h]”hŒ!This puts a job on a specific cpu”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Máhj^4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒschedule_work (C function)”Œc.schedule_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ-bool schedule_work (struct work_struct *work)”h]”jè)�”}”(hŒ,bool schedule_work(struct work_struct *work)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj<5h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj85h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mêubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj85h²hh³jI5h´Mêubj)�”}”(hŒ schedule_work”h]”j)�”}”(hŒ schedule_work”h]”hŒ schedule_work”…”�”}”(hj\5h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjX5ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj85h²hh³jI5h´Mêubj|)�”}”(hŒ(struct work_struct *work)”h]”j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjx5h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjt5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjt5ubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hj–5h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj“5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j˜5Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j^5sbŒc.schedule_work”†”asbuh1hhjt5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjt5ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÄ5h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjt5ubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjÑ5h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjt5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjp5ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj85h²hh³jI5h´Mêubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj45h²hh³jI5h´Mêubah}”(h]”j/5ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jI5h´Mêhj15h²hubjC)�”}”(hhh]”hì)�”}”(hŒ"put work task in per-CPU workqueue”h]”hŒ"put work task in per-CPU workqueue”…”�”}”(hjû5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mêhjø5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj15h²hh³jI5h´Mêubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej6jfj6jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX²**Parameters** ``struct work_struct *work`` job to be done **Description** Returns ``false`` if **work** was already on the system per-CPU workqueue and ``true`` otherwise. This puts a job in the system per-CPU workqueue if it was not already queued and leaves it in the same position on the system per-CPU workqueue otherwise. Shares the same memory-ordering properties of queue_work(), cf. the DocBook header of queue_work().”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj6h]”hŒ Parameters”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mîhj6ubjg)�”}”(hhh]”jl)�”}”(hŒ,``struct work_struct *work`` job to be done ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hj<6h]”hŒstruct work_struct *work”…”�”}”(hj>6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj:6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mëhj66ubj‹)�”}”(hhh]”hì)�”}”(hŒjob to be done”h]”hŒjob to be done”…”�”}”(hjU6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jQ6h´MëhjR6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj66ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jQ6h´Mëhj36ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj6ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjw6h]”hŒ Description”…”�”}”(hjy6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Míhj6ubhì)�”}”(hŒaReturns ``false`` if **work** was already on the system per-CPU workqueue and ``true`` otherwise.”h]”(hŒReturns ”…”�”}”(hj�6h²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj•6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj�6ubhŒ if ”…”�”}”(hj�6h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj§6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�6ubhŒ1 was already on the system per-CPU workqueue and ”…”�”}”(hj�6h²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj¹6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj�6ubhŒ otherwise.”…”�”}”(hj�6h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mìhj6ubhì)�”}”(hŒšThis puts a job in the system per-CPU workqueue if it was not already queued and leaves it in the same position on the system per-CPU workqueue otherwise.”h]”hŒšThis puts a job in the system per-CPU workqueue if it was not already queued and leaves it in the same position on the system per-CPU workqueue otherwise.”…”�”}”(hjÒ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mïhj6ubhì)�”}”(hŒcShares the same memory-ordering properties of queue_work(), cf. the DocBook header of queue_work().”h]”hŒcShares the same memory-ordering properties of queue_work(), cf. the DocBook header of queue_work().”…”�”}”(hjá6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Móhj6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ"enable_and_queue_work (C function)”Œc.enable_and_queue_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒRbool enable_and_queue_work (struct workqueue_struct *wq, struct work_struct *work)”h]”jè)�”}”(hŒQbool enable_and_queue_work(struct workqueue_struct *wq, struct work_struct *work)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj 7h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mýubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj 7h²hh³j7h´Mýubj)�”}”(hŒenable_and_queue_work”h]”j)�”}”(hŒenable_and_queue_work”h]”hŒenable_and_queue_work”…”�”}”(hj07h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj,7ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj 7h²hh³j7h´Mýubj|)�”}”(hŒ7(struct workqueue_struct *wq, struct work_struct *work)”h]”(j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjL7h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjH7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY7h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjH7ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjj7h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjg7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jl7Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j27sbŒc.enable_and_queue_work”†”asbuh1hhjH7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ7h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjH7ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj˜7h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjH7ubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hj¥7h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjH7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjD7ubj‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¾7h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjº7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË7h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjº7ubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjÜ7h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÙ7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÞ7Œmodname”NŒ classname”Nj7j:)�”}”j=]”j†7Œc.enable_and_queue_work”†”asbuh1hhjº7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú7h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjº7ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjº7ubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjº7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjD7ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj 7h²hh³j7h´Mýubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj7h²hh³j7h´Mýubah}”(h]”j7ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j7h´Mýhj7h²hubjC)�”}”(hhh]”hì)�”}”(hŒ4Enable and queue a work item on a specific workqueue”h]”hŒ4Enable and queue a work item on a specific workqueue”…”�”}”(hj?8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mýhj<8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj7h²hh³j7h´Mýubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejW8jfjW8jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX **Parameters** ``struct workqueue_struct *wq`` The target workqueue ``struct work_struct *work`` The work item to be enabled and queued **Description** This function combines the operations of enable_work() and queue_work(), providing a convenient way to enable and queue a work item in a single call. It invokes enable_work() on **work** and then queues it if the disable depth reached 0. Returns ``true`` if the disable depth reached 0 and **work** is queued, and ``false`` otherwise. Note that **work** is always queued when disable depth reaches zero. If the desired behavior is queueing only if certain events took place while **work** is disabled, the user should implement the necessary state tracking and perform explicit conditional queueing after enable_work().”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hja8h]”hŒ Parameters”…”�”}”(hjc8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj[8ubjg)�”}”(hhh]”(jl)�”}”(hŒ5``struct workqueue_struct *wq`` The target workqueue ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj€8h]”hŒstruct workqueue_struct *wq”…”�”}”(hj‚8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj~8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mþhjz8ubj‹)�”}”(hhh]”hì)�”}”(hŒThe target workqueue”h]”hŒThe target workqueue”…”�”}”(hj™8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j•8h´Mþhj–8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjz8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j•8h´Mþhjw8ubjl)�”}”(hŒD``struct work_struct *work`` The work item to be enabled and queued ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hj¹8h]”hŒstruct work_struct *work”…”�”}”(hj»8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj·8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mÿhj³8ubj‹)�”}”(hhh]”hì)�”}”(hŒ&The work item to be enabled and queued”h]”hŒ&The work item to be enabled and queued”…”�”}”(hjÒ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÎ8h´MÿhjÏ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj³8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÎ8h´Mÿhjw8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj[8ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjô8h]”hŒ Description”…”�”}”(hjö8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjò8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj[8ubhì)�”}”(hXNThis function combines the operations of enable_work() and queue_work(), providing a convenient way to enable and queue a work item in a single call. It invokes enable_work() on **work** and then queues it if the disable depth reached 0. Returns ``true`` if the disable depth reached 0 and **work** is queued, and ``false`` otherwise.”h]”(hŒ²This function combines the operations of enable_work() and queue_work(), providing a convenient way to enable and queue a work item in a single call. It invokes enable_work() on ”…”�”}”(hj 9h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj 9ubhŒ< and then queues it if the disable depth reached 0. Returns ”…”�”}”(hj 9h²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj$9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj 9ubhŒ$ if the disable depth reached 0 and ”…”�”}”(hj 9h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj69h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj 9ubhŒ is queued, and ”…”�”}”(hj 9h²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjH9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj 9ubhŒ otherwise.”…”�”}”(hj 9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj[8ubhì)�”}”(hXNote that **work** is always queued when disable depth reaches zero. If the desired behavior is queueing only if certain events took place while **work** is disabled, the user should implement the necessary state tracking and perform explicit conditional queueing after enable_work().”h]”(hŒ Note that ”…”�”}”(hja9h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hji9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhja9ubhŒ is always queued when disable depth reaches zero. If the desired behavior is queueing only if certain events took place while ”…”�”}”(hja9h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj{9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhja9ubhŒƒ is disabled, the user should implement the necessary state tracking and perform explicit conditional queueing after enable_work().”…”�”}”(hja9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´Mhj[8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ%schedule_delayed_work_on (C function)”Œc.schedule_delayed_work_on”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒXbool schedule_delayed_work_on (int cpu, struct delayed_work *dwork, unsigned long delay)”h]”jè)�”}”(hŒWbool schedule_delayed_work_on(int cpu, struct delayed_work *dwork, unsigned long delay)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj´9h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj°9h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj°9h²hh³jÁ9h´M@ubj)�”}”(hŒschedule_delayed_work_on”h]”j)�”}”(hŒschedule_delayed_work_on”h]”hŒschedule_delayed_work_on”…”�”}”(hjÔ9h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÐ9ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj°9h²hh³jÁ9h´M@ubj|)�”}”(hŒ:(int cpu, struct delayed_work *dwork, unsigned long delay)”h]”(j‚)�”}”(hŒint cpu”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjð9h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjì9ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjì9ubj)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj :h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjì9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjè9ubj‚)�”}”(hŒstruct delayed_work *dwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj%:h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj!:ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2:h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj!:ubh)�”}”(hhh]”j)�”}”(hŒ delayed_work”h]”hŒ delayed_work”…”�”}”(hjC:h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj@:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jE:Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jÖ9sbŒc.schedule_delayed_work_on”†”asbuh1hhj!:ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc:h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj!:ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjq:h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj!:ubj)�”}”(hŒdwork”h]”hŒdwork”…”�”}”(hj~:h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj!:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjè9ubj‚)�”}”(hŒunsigned long delay”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj—:h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj“:ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥:h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj“:ubj¤)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj³:h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj“:ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ:h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj“:ubj)�”}”(hŒdelay”h]”hŒdelay”…”�”}”(hjÏ:h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj“:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjè9ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj°9h²hh³jÁ9h´M@ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj¬9h²hh³jÁ9h´M@ubah}”(h]”j§9ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÁ9h´M@hj©9h²hubjC)�”}”(hhh]”hì)�”}”(hŒ2queue work in per-CPU workqueue on CPU after delay”h]”hŒ2queue work in per-CPU workqueue on CPU after delay”…”�”}”(hjù:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´M@hjö:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj©9h²hh³jÁ9h´M@ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej;jfj;jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX**Parameters** ``int cpu`` cpu to use ``struct delayed_work *dwork`` job to be done ``unsigned long delay`` number of jiffies to wait **Description** After waiting for a given time this puts a job in the system per-CPU workqueue on the specified CPU.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj;h]”hŒ Parameters”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MDhj;ubjg)�”}”(hhh]”(jl)�”}”(hŒ``int cpu`` cpu to use ”h]”(jr)�”}”(hŒ ``int cpu``”h]”jú)�”}”(hj:;h]”hŒint cpu”…”�”}”(hj<;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj8;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MAhj4;ubj‹)�”}”(hhh]”hì)�”}”(hŒ cpu to use”h]”hŒ cpu to use”…”�”}”(hjS;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jO;h´MAhjP;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj4;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jO;h´MAhj1;ubjl)�”}”(hŒ.``struct delayed_work *dwork`` job to be done ”h]”(jr)�”}”(hŒ``struct delayed_work *dwork``”h]”jú)�”}”(hjs;h]”hŒstruct delayed_work *dwork”…”�”}”(hju;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjq;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MBhjm;ubj‹)�”}”(hhh]”hì)�”}”(hŒjob to be done”h]”hŒjob to be done”…”�”}”(hjŒ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jˆ;h´MBhj‰;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjm;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jˆ;h´MBhj1;ubjl)�”}”(hŒ2``unsigned long delay`` number of jiffies to wait ”h]”(jr)�”}”(hŒ``unsigned long delay``”h]”jú)�”}”(hj¬;h]”hŒunsigned long delay”…”�”}”(hj®;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjª;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MChj¦;ubj‹)�”}”(hhh]”hì)�”}”(hŒnumber of jiffies to wait”h]”hŒnumber of jiffies to wait”…”�”}”(hjÅ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÁ;h´MChjÂ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¦;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÁ;h´MChj1;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj;ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjç;h]”hŒ Description”…”�”}”(hjé;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjå;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MEhj;ubhì)�”}”(hŒdAfter waiting for a given time this puts a job in the system per-CPU workqueue on the specified CPU.”h]”hŒdAfter waiting for a given time this puts a job in the system per-CPU workqueue on the specified CPU.”…”�”}”(hjý;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MDhj;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ"schedule_delayed_work (C function)”Œc.schedule_delayed_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒLbool schedule_delayed_work (struct delayed_work *dwork, unsigned long delay)”h]”jè)�”}”(hŒKbool schedule_delayed_work(struct delayed_work *dwork, unsigned long delay)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj,<h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj(<h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MOubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:<h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj(<h²hh³j9<h´MOubj)�”}”(hŒschedule_delayed_work”h]”j)�”}”(hŒschedule_delayed_work”h]”hŒschedule_delayed_work”…”�”}”(hjL<h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjH<ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj(<h²hh³j9<h´MOubj|)�”}”(hŒ1(struct delayed_work *dwork, unsigned long delay)”h]”(j‚)�”}”(hŒstruct delayed_work *dwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjh<h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjd<ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju<h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjd<ubh)�”}”(hhh]”j)�”}”(hŒ delayed_work”h]”hŒ delayed_work”…”�”}”(hj†<h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjƒ<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jˆ<Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jN<sbŒc.schedule_delayed_work”†”asbuh1hhjd<ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦<h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjd<ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj´<h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjd<ubj)�”}”(hŒdwork”h]”hŒdwork”…”�”}”(hjÁ<h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjd<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj`<ubj‚)�”}”(hŒunsigned long delay”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÚ<h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÖ<ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè<h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÖ<ubj¤)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjö<h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÖ<ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÖ<ubj)�”}”(hŒdelay”h]”hŒdelay”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÖ<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj`<ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj(<h²hh³j9<h´MOubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj$<h²hh³j9<h´MOubah}”(h]”j<ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j9<h´MOhj!<h²hubjC)�”}”(hhh]”hì)�”}”(hŒ.put work task in per-CPU workqueue after delay”h]”hŒ.put work task in per-CPU workqueue after delay”…”�”}”(hj<=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MOhj9=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj!<h²hh³j9<h´MOubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejT=jfjT=jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒó**Parameters** ``struct delayed_work *dwork`` job to be done ``unsigned long delay`` number of jiffies to wait or 0 for immediate execution **Description** After waiting for a given time this puts a job in the system per-CPU workqueue.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj^=h]”hŒ Parameters”…”�”}”(hj`=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MShjX=ubjg)�”}”(hhh]”(jl)�”}”(hŒ.``struct delayed_work *dwork`` job to be done ”h]”(jr)�”}”(hŒ``struct delayed_work *dwork``”h]”jú)�”}”(hj}=h]”hŒstruct delayed_work *dwork”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj{=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MPhjw=ubj‹)�”}”(hhh]”hì)�”}”(hŒjob to be done”h]”hŒjob to be done”…”�”}”(hj–=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j’=h´MPhj“=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjw=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j’=h´MPhjt=ubjl)�”}”(hŒO``unsigned long delay`` number of jiffies to wait or 0 for immediate execution ”h]”(jr)�”}”(hŒ``unsigned long delay``”h]”jú)�”}”(hj¶=h]”hŒunsigned long delay”…”�”}”(hj¸=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj´=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MQhj°=ubj‹)�”}”(hhh]”hì)�”}”(hŒ6number of jiffies to wait or 0 for immediate execution”h]”hŒ6number of jiffies to wait or 0 for immediate execution”…”�”}”(hjÏ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jË=h´MQhjÌ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj°=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jË=h´MQhjt=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjX=ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjñ=h]”hŒ Description”…”�”}”(hjó=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjï=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MShjX=ubhì)�”}”(hŒOAfter waiting for a given time this puts a job in the system per-CPU workqueue.”h]”hŒOAfter waiting for a given time this puts a job in the system per-CPU workqueue.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:793: ./include/linux/workqueue.h”h´MRhjX=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒfor_each_pool (C macro)”Œc.for_each_pool”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ for_each_pool”h]”jè)�”}”(hŒ for_each_pool”h]”j)�”}”(hŒ for_each_pool”h]”j)�”}”(hj0>h]”hŒ for_each_pool”…”�”}”(hj:>h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj6>ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj2>h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M?ubah}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj.>h²hh³jM>h´M?ubah}”(h]”j)>ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jM>h´M?hj+>h²hubjC)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jBhj+>h²hh³jM>h´M?ubeh}”(h]”h ]”(j_Œmacro”eh"]”h$]”h&]”jdj_jejf>jfjf>jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubhì)�”}”(hŒ``for_each_pool (pool, pi)``”h]”jú)�”}”(hjl>h]”hŒfor_each_pool (pool, pi)”…”�”}”(hjn>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MAhjºh²hubj¶)�”}”(hŒ/iterate through all worker_pools in the system ”h]”hì)�”}”(hŒ.iterate through all worker_pools in the system”h]”hŒ.iterate through all worker_pools in the system”…”�”}”(hj†>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M?hj‚>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jµh³j”>h´M?hjºh²hubjk)�”}”(hXz**Parameters** ``pool`` iteration cursor ``pi`` integer used for iteration **Description** This must be called either with wq_pool_mutex held or RCU read locked. If the pool needs to be used beyond the locking in effect, the caller is responsible for guaranteeing that the pool stays online. The if/else clause exists only for the lockdep assertion and can be ignored.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¡>h]”hŒ Parameters”…”�”}”(hj£>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MChj›>ubjg)�”}”(hhh]”(jl)�”}”(hŒ``pool`` iteration cursor ”h]”(jr)�”}”(hŒ``pool``”h]”jú)�”}”(hjÀ>h]”hŒpool”…”�”}”(hjÂ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¾>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M@hjº>ubj‹)�”}”(hhh]”hì)�”}”(hŒiteration cursor”h]”hŒiteration cursor”…”�”}”(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&]”uh1jkh³jÕ>h´M@hj·>ubjl)�”}”(hŒ"``pi`` integer used for iteration ”h]”(jr)�”}”(hŒ``pi``”h]”jú)�”}”(hjù>h]”hŒpi”…”�”}”(hjû>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj÷>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MAhjó>ubj‹)�”}”(hhh]”hì)�”}”(hŒinteger used for iteration”h]”hŒinteger used for iteration”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j?h´MAhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjó>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j?h´MAhj·>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj›>ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj4?h]”hŒ Description”…”�”}”(hj6?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MChj›>ubhì)�”}”(hŒÉThis must be called either with wq_pool_mutex held or RCU read locked. If the pool needs to be used beyond the locking in effect, the caller is responsible for guaranteeing that the pool stays online.”h]”hŒÉThis must be called either with wq_pool_mutex held or RCU read locked. If the pool needs to be used beyond the locking in effect, the caller is responsible for guaranteeing that the pool stays online.”…”�”}”(hjJ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MBhj›>ubhì)�”}”(hŒLThe if/else clause exists only for the lockdep assertion and can be ignored.”h]”hŒLThe if/else clause exists only for the lockdep assertion and can be ignored.”…”�”}”(hjY?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MFhj›>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒfor_each_pool_worker (C macro)”Œc.for_each_pool_worker”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒfor_each_pool_worker”h]”jè)�”}”(hŒfor_each_pool_worker”h]”j)�”}”(hŒfor_each_pool_worker”h]”j)�”}”(hj‚?h]”hŒfor_each_pool_worker”…”�”}”(hjŒ?h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjˆ?ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj„?h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MPubah}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj€?h²hh³jŸ?h´MPubah}”(h]”j{?ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jŸ?h´MPhj}?h²hubjC)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jBhj}?h²hh³jŸ?h´MPubeh}”(h]”h ]”(j_Œmacro”eh"]”h$]”h&]”jdj_jej¸?jfj¸?jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubhì)�”}”(hŒ'``for_each_pool_worker (worker, pool)``”h]”jú)�”}”(hj¾?h]”hŒ#for_each_pool_worker (worker, pool)”…”�”}”(hjÀ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¼?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MRhjºh²hubj¶)�”}”(hŒ-iterate through all workers of a worker_pool ”h]”hì)�”}”(hŒ,iterate through all workers of a worker_pool”h]”hŒ,iterate through all workers of a worker_pool”…”�”}”(hjØ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MPhjÔ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jæ?h´MPhjºh²hubjk)�”}”(hŒê**Parameters** ``worker`` iteration cursor ``pool`` worker_pool to iterate workers of **Description** This must be called with wq_pool_attach_mutex. The if/else clause exists only for the lockdep assertion and can be ignored.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjó?h]”hŒ Parameters”…”�”}”(hjõ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MThjí?ubjg)�”}”(hhh]”(jl)�”}”(hŒ``worker`` iteration cursor ”h]”(jr)�”}”(hŒ ``worker``”h]”jú)�”}”(hj@h]”hŒworker”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MQhj @ubj‹)�”}”(hhh]”hì)�”}”(hŒiteration cursor”h]”hŒiteration cursor”…”�”}”(hj+@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j'@h´MQhj(@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj @ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j'@h´MQhj @ubjl)�”}”(hŒ+``pool`` worker_pool to iterate workers of ”h]”(jr)�”}”(hŒ``pool``”h]”jú)�”}”(hjK@h]”hŒpool”…”�”}”(hjM@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjI@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MRhjE@ubj‹)�”}”(hhh]”hì)�”}”(hŒ!worker_pool to iterate workers of”h]”hŒ!worker_pool to iterate workers of”…”�”}”(hjd@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j`@h´MRhja@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjE@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j`@h´MRhj @ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjí?ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj†@h]”hŒ Description”…”�”}”(hjˆ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MThjí?ubhì)�”}”(hŒ.This must be called with wq_pool_attach_mutex.”h]”hŒ.This must be called with wq_pool_attach_mutex.”…”�”}”(hjœ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MShjí?ubhì)�”}”(hŒLThe if/else clause exists only for the lockdep assertion and can be ignored.”h]”hŒLThe if/else clause exists only for the lockdep assertion and can be ignored.”…”�”}”(hj«@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MUhjí?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒfor_each_pwq (C macro)”Œc.for_each_pwq”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ for_each_pwq”h]”jè)�”}”(hŒ for_each_pwq”h]”j)�”}”(hŒ for_each_pwq”h]”j)�”}”(hjÔ@h]”hŒ for_each_pwq”…”�”}”(hjÞ@h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÚ@ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÖ@h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M_ubah}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÒ@h²hh³jñ@h´M_ubah}”(h]”jÍ@ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jñ@h´M_hjÏ@h²hubjC)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÏ@h²hh³jñ@h´M_ubeh}”(h]”h ]”(j_Œmacro”eh"]”h$]”h&]”jdj_jej Ajfj Ajg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubhì)�”}”(hŒ``for_each_pwq (pwq, wq)``”h]”jú)�”}”(hjAh]”hŒfor_each_pwq (pwq, wq)”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mahjºh²hubj¶)�”}”(hŒ?iterate through all pool_workqueues of the specified workqueue ”h]”hì)�”}”(hŒ>iterate through all pool_workqueues of the specified workqueue”h]”hŒ>iterate through all pool_workqueues of the specified workqueue”…”�”}”(hj*Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M_hj&Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jµh³j8Ah´M_hjºh²hubjk)�”}”(hXl**Parameters** ``pwq`` iteration cursor ``wq`` the target workqueue **Description** This must be called either with wq->mutex held or RCU read locked. If the pwq needs to be used beyond the locking in effect, the caller is responsible for guaranteeing that the pwq stays online. The if/else clause exists only for the lockdep assertion and can be ignored.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjEAh]”hŒ Parameters”…”�”}”(hjGAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCAubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mchj?Aubjg)�”}”(hhh]”(jl)�”}”(hŒ``pwq`` iteration cursor ”h]”(jr)�”}”(hŒ``pwq``”h]”jú)�”}”(hjdAh]”hŒpwq”…”�”}”(hjfAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjbAubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M`hj^Aubj‹)�”}”(hhh]”hì)�”}”(hŒiteration cursor”h]”hŒiteration cursor”…”�”}”(hj}Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jyAh´M`hjzAubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj^Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jyAh´M`hj[Aubjl)�”}”(hŒ``wq`` the target workqueue ”h]”(jr)�”}”(hŒ``wq``”h]”jú)�”}”(hj�Ah]”hŒwq”…”�”}”(hjŸAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj›Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mahj—Aubj‹)�”}”(hhh]”hì)�”}”(hŒthe target workqueue”h]”hŒthe target workqueue”…”�”}”(hj¶Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j²Ah´Mahj³Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj—Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j²Ah´Mahj[Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj?Aubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjØAh]”hŒ Description”…”�”}”(hjÚAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖAubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mchj?Aubhì)�”}”(hŒÂThis must be called either with wq->mutex held or RCU read locked. If the pwq needs to be used beyond the locking in effect, the caller is responsible for guaranteeing that the pwq stays online.”h]”hŒÂThis must be called either with wq->mutex held or RCU read locked. If the pwq needs to be used beyond the locking in effect, the caller is responsible for guaranteeing that the pwq stays online.”…”�”}”(hjîAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mbhj?Aubhì)�”}”(hŒLThe if/else clause exists only for the lockdep assertion and can be ignored.”h]”hŒLThe if/else clause exists only for the lockdep assertion and can be ignored.”…”�”}”(hjýAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mfhj?Aubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ"worker_pool_assign_id (C function)”Œc.worker_pool_assign_id”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ4int worker_pool_assign_id (struct worker_pool *pool)”h]”jè)�”}”(hŒ3int worker_pool_assign_id(struct worker_pool *pool)”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj,Bh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj(Bh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÐubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;Bh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj(Bh²hh³j:Bh´MÐubj)�”}”(hŒworker_pool_assign_id”h]”j)�”}”(hŒworker_pool_assign_id”h]”hŒworker_pool_assign_id”…”�”}”(hjMBh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjIBubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj(Bh²hh³j:Bh´MÐubj|)�”}”(hŒ(struct worker_pool *pool)”h]”j‚)�”}”(hŒstruct worker_pool *pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjiBh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjeBubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvBh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjeBubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hj‡Bh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj„Bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j‰BŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jOBsbŒc.worker_pool_assign_id”†”asbuh1hhjeBubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Bh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjeBubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjµBh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjeBubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjÂBh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjeBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjaBubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj(Bh²hh³j:Bh´MÐubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj$Bh²hh³j:Bh´MÐubah}”(h]”jBah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j:Bh´MÐhj!Bh²hubjC)�”}”(hhh]”hì)�”}”(hŒ%allocate ID and assign it to **pool**”h]”(hŒallocate ID and assign it to ”…”�”}”(hjìBh²hh³Nh´Nubj)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjôBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjìBubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÐhjéBh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj!Bh²hh³j:Bh´MÐubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejCjfjCjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒÄ**Parameters** ``struct worker_pool *pool`` the pool pointer of interest **Description** Returns 0 if ID in [0, WORK_OFFQ_POOL_NONE) is allocated and assigned successfully, -errno on failure.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjCh]”hŒ Parameters”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÔhjCubjg)�”}”(hhh]”jl)�”}”(hŒ:``struct worker_pool *pool`` the pool pointer of interest ”h]”(jr)�”}”(hŒ``struct worker_pool *pool``”h]”jú)�”}”(hj;Ch]”hŒstruct worker_pool *pool”…”�”}”(hj=Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj9Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÑhj5Cubj‹)�”}”(hhh]”hì)�”}”(hŒthe pool pointer of interest”h]”hŒthe pool pointer of interest”…”�”}”(hjTCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jPCh´MÑhjQCubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj5Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jPCh´MÑhj2Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjCubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjvCh]”hŒ Description”…”�”}”(hjxCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtCubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÓhjCubhì)�”}”(hŒfReturns 0 if ID in [0, WORK_OFFQ_POOL_NONE) is allocated and assigned successfully, -errno on failure.”h]”hŒfReturns 0 if ID in [0, WORK_OFFQ_POOL_NONE) is allocated and assigned successfully, -errno on failure.”…”�”}”(hjŒCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÒhjCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ&unbound_effective_cpumask (C function)”Œc.unbound_effective_cpumask”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒHstruct cpumask * unbound_effective_cpumask (struct workqueue_struct *wq)”h]”jè)�”}”(hŒFstruct cpumask *unbound_effective_cpumask(struct workqueue_struct *wq)”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj»Ch²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj·Ch²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M÷ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉCh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj·Ch²hh³jÈCh´M÷ubh)�”}”(hhh]”j)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjÚCh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj×Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÜCŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œunbound_effective_cpumask”sbŒc.unbound_effective_cpumask”†”asbuh1hhj·Ch²hh³jÈCh´M÷ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûCh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj·Ch²hh³jÈCh´M÷ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj·Ch²hh³jÈCh´M÷ubj)�”}”(hŒunbound_effective_cpumask”h]”j)�”}”(hjøCh]”hŒunbound_effective_cpumask”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjDubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj·Ch²hh³jÈCh´M÷ubj|)�”}”(hŒ(struct workqueue_struct *wq)”h]”j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj5Dh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj1Dubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBDh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj1Dubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjSDh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjPDubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jUDŒmodname”NŒ classname”Nj7j:)�”}”j=]”jöCŒc.unbound_effective_cpumask”†”asbuh1hhj1Dubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqDh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj1DubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj1Dubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hjŒDh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj1Dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj-Dubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj·Ch²hh³jÈCh´M÷ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj³Ch²hh³jÈCh´M÷ubah}”(h]”j®Cah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÈCh´M÷hj°Ch²hubjC)�”}”(hhh]”hì)�”}”(hŒ)effective cpumask of an unbound workqueue”h]”hŒ)effective cpumask of an unbound workqueue”…”�”}”(hj¶Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M÷hj³Dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj°Ch²hh³jÈCh´M÷ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejÎDjfjÎDjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX8**Parameters** ``struct workqueue_struct *wq`` workqueue of interest **Description** **wq->attrs->cpumask** contains the cpumask requested by the user which is masked with wq_unbound_cpumask to determine the effective cpumask. The default pwq is always mapped to the pool with the current effective cpumask.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjØDh]”hŒ Parameters”…”�”}”(hjÚDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖDubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MûhjÒDubjg)�”}”(hhh]”jl)�”}”(hŒ6``struct workqueue_struct *wq`` workqueue of interest ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj÷Dh]”hŒstruct workqueue_struct *wq”…”�”}”(hjùDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjõDubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MøhjñDubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue of interest”h]”hŒworkqueue of interest”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j Eh´Møhj Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjñDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j Eh´MøhjîDubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjÒDubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj2Eh]”hŒ Description”…”�”}”(hj4Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0Eubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MúhjÒDubhì)�”}”(hŒÞ**wq->attrs->cpumask** contains the cpumask requested by the user which is masked with wq_unbound_cpumask to determine the effective cpumask. The default pwq is always mapped to the pool with the current effective cpumask.”h]”(j)�”}”(hŒ**wq->attrs->cpumask**”h]”hŒwq->attrs->cpumask”…”�”}”(hjLEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHEubhŒÈ contains the cpumask requested by the user which is masked with wq_unbound_cpumask to determine the effective cpumask. The default pwq is always mapped to the pool with the current effective cpumask.”…”�”}”(hjHEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MùhjÒDubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒget_work_pool (C function)”•çŒc.get_work_pool”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ=struct worker_pool * get_work_pool (struct work_struct *work)”h]”jè)�”}”(hŒ;struct worker_pool *get_work_pool(struct work_struct *work)”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj…Eh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj�Eh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Muubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Eh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj�Eh²hh³j’Eh´Muubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hj¤Eh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¡Eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j¦EŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œ get_work_pool”sbŒc.get_work_pool”†”asbuh1hhj�Eh²hh³j’Eh´Muubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅEh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj�Eh²hh³j’Eh´MuubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÓEh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj�Eh²hh³j’Eh´Muubj)�”}”(hŒ get_work_pool”h]”j)�”}”(hjÂEh]”hŒ get_work_pool”…”�”}”(hjäEh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjàEubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj�Eh²hh³j’Eh´Muubj|)�”}”(hŒ(struct work_struct *work)”h]”j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÿEh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjûEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Fh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjûEubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jFŒmodname”NŒ classname”Nj7j:)�”}”j=]”jÀEŒc.get_work_pool”†”asbuh1hhjûEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;Fh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjûEubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjIFh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjûEubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjVFh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjûEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj÷Eubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj�Eh²hh³j’Eh´Muubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj}Eh²hh³j’Eh´Muubah}”(h]”jxEah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j’Eh´MuhjzEh²hubjC)�”}”(hhh]”hì)�”}”(hŒ7return the worker_pool a given work was associated with”h]”hŒ7return the worker_pool a given work was associated with”…”�”}”(hj€Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Muhj}Fh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjzEh²hh³j’Eh´Muubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej˜Fjfj˜Fjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXi**Parameters** ``struct work_struct *work`` the work item of interest **Description** Pools are created and destroyed under wq_pool_mutex, and allows read access under RCU read lock. As such, this function should be called under wq_pool_mutex or inside of a rcu_read_lock() region. All fields of the returned pool are accessible as long as the above mentioned locking is in effect. If the returned pool needs to be used beyond the critical section, the caller is responsible for ensuring the returned pool is and stays online. **Return** The worker_pool **work** was last associated with. ``NULL`` if none.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¢Fh]”hŒ Parameters”…”�”}”(hj¤Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Fubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MyhjœFubjg)�”}”(hhh]”jl)�”}”(hŒ7``struct work_struct *work`` the work item of interest ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hjÁFh]”hŒstruct work_struct *work”…”�”}”(hjÃFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¿Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mvhj»Fubj‹)�”}”(hhh]”hì)�”}”(hŒthe work item of interest”h]”hŒthe work item of interest”…”�”}”(hjÚFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÖFh´Mvhj×Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj»Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÖFh´Mvhj¸Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjœFubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjüFh]”hŒ Description”…”�”}”(hjþFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjúFubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MxhjœFubhì)�”}”(hŒÄPools are created and destroyed under wq_pool_mutex, and allows read access under RCU read lock. As such, this function should be called under wq_pool_mutex or inside of a rcu_read_lock() region.”h]”hŒÄPools are created and destroyed under wq_pool_mutex, and allows read access under RCU read lock. As such, this function should be called under wq_pool_mutex or inside of a rcu_read_lock() region.”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MwhjœFubhì)�”}”(hŒõAll fields of the returned pool are accessible as long as the above mentioned locking is in effect. If the returned pool needs to be used beyond the critical section, the caller is responsible for ensuring the returned pool is and stays online.”h]”hŒõAll fields of the returned pool are accessible as long as the above mentioned locking is in effect. If the returned pool needs to be used beyond the critical section, the caller is responsible for ensuring the returned pool is and stays online.”…”�”}”(hj!Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M{hjœFubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj2Gh]”hŒReturn”…”�”}”(hj4Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0Gubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M€hjœFubhì)�”}”(hŒEThe worker_pool **work** was last associated with. ``NULL`` if none.”h]”(hŒThe worker_pool ”…”�”}”(hjHGh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjPGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHGubhŒ was last associated with. ”…”�”}”(hjHGh²hh³Nh´Nubjú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjbGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjHGubhŒ if none.”…”�”}”(hjHGh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hjœFubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒworker_set_flags (C function)”Œc.worker_set_flags”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒAvoid worker_set_flags (struct worker *worker, unsigned int flags)”h]”jè)�”}”(hŒ@void worker_set_flags(struct worker *worker, unsigned int flags)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj›Gh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj—Gh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÚubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªGh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj—Gh²hh³j©Gh´MÚubj)�”}”(hŒworker_set_flags”h]”j)�”}”(hŒworker_set_flags”h]”hŒworker_set_flags”…”�”}”(hj¼Gh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¸Gubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj—Gh²hh³j©Gh´MÚubj|)�”}”(hŒ+(struct worker *worker, unsigned int flags)”h]”(j‚)�”}”(hŒstruct worker *worker”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjØGh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjÔGubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåGh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÔGubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hjöGh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjóGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jøGŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j¾GsbŒc.worker_set_flags”†”asbuh1hhjÔGubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÔGubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj$Hh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÔGubj)�”}”(hŒworker”h]”hŒworker”…”�”}”(hj1Hh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÔGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÐGubj‚)�”}”(hŒunsigned int flags”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjJHh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjFHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXHh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjFHubj¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjfHh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjFHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtHh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjFHubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj‚Hh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjFHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÐGubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj—Gh²hh³j©Gh´MÚubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj“Gh²hh³j©Gh´MÚubah}”(h]”jŽGah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j©Gh´MÚhj�Gh²hubjC)�”}”(hhh]”hì)�”}”(hŒ2set worker flags and adjust nr_running accordingly”h]”hŒ2set worker flags and adjust nr_running accordingly”…”�”}”(hj¬Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÚhj©Hh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj�Gh²hh³j©Gh´MÚubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejÄHjfjÄHjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ¯**Parameters** ``struct worker *worker`` self ``unsigned int flags`` flags to set **Description** Set **flags** in **worker->flags** and adjust nr_running accordingly.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÎHh]”hŒ Parameters”…”�”}”(hjÐHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌHubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÞhjÈHubjg)�”}”(hhh]”(jl)�”}”(hŒ``struct worker *worker`` self ”h]”(jr)�”}”(hŒ``struct worker *worker``”h]”jú)�”}”(hjíHh]”hŒstruct worker *worker”…”�”}”(hjïHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjëHubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÛhjçHubj‹)�”}”(hhh]”hì)�”}”(hŒself”h]”hŒself”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jIh´MÛhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjçHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jIh´MÛhjäHubjl)�”}”(hŒ$``unsigned int flags`` flags to set ”h]”(jr)�”}”(hŒ``unsigned int flags``”h]”jú)�”}”(hj&Ih]”hŒunsigned int flags”…”�”}”(hj(Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj$Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÜhj Iubj‹)�”}”(hhh]”hì)�”}”(hŒ flags to set”h]”hŒ flags to set”…”�”}”(hj?Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j;Ih´MÜhjflags** and adjust nr_running accordingly.”h]”(hŒSet ”…”�”}”(hjwIh²hh³Nh´Nubj)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjwIubhŒ in ”…”�”}”(hjwIh²hh³Nh´Nubj)�”}”(hŒ**worker->flags**”h]”hŒ worker->flags”…”�”}”(hj‘Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjwIubhŒ# and adjust nr_running accordingly.”…”�”}”(hjwIh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÝhjÈHubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒworker_clr_flags (C function)”Œc.worker_clr_flags”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒAvoid worker_clr_flags (struct worker *worker, unsigned int flags)”h]”jè)�”}”(hŒ@void worker_clr_flags(struct worker *worker, unsigned int flags)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÊIh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÆIh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mðubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙIh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÆIh²hh³jØIh´Mðubj)�”}”(hŒworker_clr_flags”h]”j)�”}”(hŒworker_clr_flags”h]”hŒworker_clr_flags”…”�”}”(hjëIh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjçIubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÆIh²hh³jØIh´Mðubj|)�”}”(hŒ+(struct worker *worker, unsigned int flags)”h]”(j‚)�”}”(hŒstruct worker *worker”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjJubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjJubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hj%Jh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj"Jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j'JŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jíIsbŒc.worker_clr_flags”†”asbuh1hhjJubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEJh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjJubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjSJh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjJubj)�”}”(hŒworker”h]”hŒworker”…”�”}”(hj`Jh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÿIubj‚)�”}”(hŒunsigned int flags”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjyJh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjuJubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡Jh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjuJubj¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj•Jh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjuJubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£Jh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjuJubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj±Jh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjuJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÿIubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÆIh²hh³jØIh´Mðubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÂIh²hh³jØIh´Mðubah}”(h]”j½Iah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jØIh´Mðhj¿Ih²hubjC)�”}”(hhh]”hì)�”}”(hŒ4clear worker flags and adjust nr_running accordingly”h]”hŒ4clear worker flags and adjust nr_running accordingly”…”�”}”(hjÛJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MðhjØJh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj¿Ih²hh³jØIh´Mðubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejóJjfjóJjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ³**Parameters** ``struct worker *worker`` self ``unsigned int flags`` flags to clear **Description** Clear **flags** in **worker->flags** and adjust nr_running accordingly.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjýJh]”hŒ Parameters”…”�”}”(hjÿJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûJubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Môhj÷Jubjg)�”}”(hhh]”(jl)�”}”(hŒ``struct worker *worker`` self ”h]”(jr)�”}”(hŒ``struct worker *worker``”h]”jú)�”}”(hjKh]”hŒstruct worker *worker”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MñhjKubj‹)�”}”(hhh]”hì)�”}”(hŒself”h]”hŒself”…”�”}”(hj5Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j1Kh´Mñhj2Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j1Kh´MñhjKubjl)�”}”(hŒ&``unsigned int flags`` flags to clear ”h]”(jr)�”}”(hŒ``unsigned int flags``”h]”jú)�”}”(hjUKh]”hŒunsigned int flags”…”�”}”(hjWKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjSKubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MòhjOKubj‹)�”}”(hhh]”hì)�”}”(hŒflags to clear”h]”hŒflags to clear”…”�”}”(hjnKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jjKh´MòhjkKubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjOKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jjKh´MòhjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj÷Jubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj�Kh]”hŒ Description”…”�”}”(hj’Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽKubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Môhj÷Jubhì)�”}”(hŒGClear **flags** in **worker->flags** and adjust nr_running accordingly.”h]”(hŒClear ”…”�”}”(hj¦Kh²hh³Nh´Nubj)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj®Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦KubhŒ in ”…”�”}”(hj¦Kh²hh³Nh´Nubj)�”}”(hŒ**worker->flags**”h]”hŒ worker->flags”…”�”}”(hjÀKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦KubhŒ# and adjust nr_running accordingly.”…”�”}”(hj¦Kh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Móhj÷Jubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒworker_enter_idle (C function)”Œc.worker_enter_idle”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ.void worker_enter_idle (struct worker *worker)”h]”jè)�”}”(hŒ-void worker_enter_idle(struct worker *worker)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjùKh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjõKh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjõKh²hh³jLh´Mubj)�”}”(hŒworker_enter_idle”h]”j)�”}”(hŒworker_enter_idle”h]”hŒworker_enter_idle”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjLubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjõKh²hh³jLh´Mubj|)�”}”(hŒ(struct worker *worker)”h]”j‚)�”}”(hŒstruct worker *worker”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj6Lh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj2Lubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCLh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj2Lubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hjTLh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjQLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jVLŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jLsbŒc.worker_enter_idle”†”asbuh1hhj2Lubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtLh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj2LubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj‚Lh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj2Lubj)�”}”(hŒworker”h]”hŒworker”…”�”}”(hj�Lh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj2Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj.Lubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjõKh²hh³jLh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjñKh²hh³jLh´Mubah}”(h]”jìKah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jLh´MhjîKh²hubjC)�”}”(hhh]”hì)�”}”(hŒenter idle state”h]”hŒenter idle state”…”�”}”(hj¹Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj¶Lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjîKh²hh³jLh´Mubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejÑLjfjÑLjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒØ**Parameters** ``struct worker *worker`` worker which is entering idle state **Description** **worker** is entering idle state. Update stats and idle timer if necessary. LOCKING: raw_spin_lock_irq(pool->lock).”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÛLh]”hŒ Parameters”…”�”}”(hjÝLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙLubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjÕLubjg)�”}”(hhh]”jl)�”}”(hŒ>``struct worker *worker`` worker which is entering idle state ”h]”(jr)�”}”(hŒ``struct worker *worker``”h]”jú)�”}”(hjúLh]”hŒstruct worker *worker”…”�”}”(hjüLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjøLubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjôLubj‹)�”}”(hhh]”hì)�”}”(hŒ#worker which is entering idle state”h]”hŒ#worker which is entering idle state”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jMh´MhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjôLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jMh´MhjñLubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjÕLubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj5Mh]”hŒ Description”…”�”}”(hj7Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3Mubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjÕLubhì)�”}”(hŒM**worker** is entering idle state. Update stats and idle timer if necessary.”h]”(j)�”}”(hŒ **worker**”h]”hŒworker”…”�”}”(hjOMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKMubhŒC is entering idle state. Update stats and idle timer if necessary.”…”�”}”(hjKMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjÕLubhì)�”}”(hŒ'LOCKING: raw_spin_lock_irq(pool->lock).”h]”hŒ'LOCKING: raw_spin_lock_irq(pool->lock).”…”�”}”(hjhMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjÕLubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒworker_leave_idle (C function)”Œc.worker_leave_idle”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ.void worker_leave_idle (struct worker *worker)”h]”jè)�”}”(hŒ-void worker_leave_idle(struct worker *worker)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj—Mh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj“Mh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦Mh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj“Mh²hh³j¥Mh´M5ubj)�”}”(hŒworker_leave_idle”h]”j)�”}”(hŒworker_leave_idle”h]”hŒworker_leave_idle”…”�”}”(hj¸Mh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj´Mubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj“Mh²hh³j¥Mh´M5ubj|)�”}”(hŒ(struct worker *worker)”h]”j‚)�”}”(hŒstruct worker *worker”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÔMh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjÐMubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáMh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÐMubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hjòMh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjïMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jôMŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jºMsbŒc.worker_leave_idle”†”asbuh1hhjÐMubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÐMubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj Nh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÐMubj)�”}”(hŒworker”h]”hŒworker”…”�”}”(hj-Nh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÐMubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÌMubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj“Mh²hh³j¥Mh´M5ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj�Mh²hh³j¥Mh´M5ubah}”(h]”jŠMah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j¥Mh´M5hjŒMh²hubjC)�”}”(hhh]”hì)�”}”(hŒleave idle state”h]”hŒleave idle state”…”�”}”(hjWNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M5hjTNh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjŒMh²hh³j¥Mh´M5ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejoNjfjoNjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒº**Parameters** ``struct worker *worker`` worker which is leaving idle state **Description** **worker** is leaving idle state. Update stats. LOCKING: raw_spin_lock_irq(pool->lock).”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjyNh]”hŒ Parameters”…”�”}”(hj{Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjwNubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M9hjsNubjg)�”}”(hhh]”jl)�”}”(hŒ=``struct worker *worker`` worker which is leaving idle state ”h]”(jr)�”}”(hŒ``struct worker *worker``”h]”jú)�”}”(hj˜Nh]”hŒstruct worker *worker”…”�”}”(hjšNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj–Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M6hj’Nubj‹)�”}”(hhh]”hì)�”}”(hŒ"worker which is leaving idle state”h]”hŒ"worker which is leaving idle state”…”�”}”(hj±Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j­Nh´M6hj®Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj’Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j­Nh´M6hj�Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjsNubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÓNh]”hŒ Description”…”�”}”(hjÕNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑNubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M8hjsNubhì)�”}”(hŒ0**worker** is leaving idle state. Update stats.”h]”(j)�”}”(hŒ **worker**”h]”hŒworker”…”�”}”(hjíNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjéNubhŒ& is leaving idle state. Update stats.”…”�”}”(hjéNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M7hjsNubhì)�”}”(hŒ'LOCKING: raw_spin_lock_irq(pool->lock).”h]”hŒ'LOCKING: raw_spin_lock_irq(pool->lock).”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M9hjsNubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ'find_worker_executing_work (C function)”Œc.find_worker_executing_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ_struct worker * find_worker_executing_work (struct worker_pool *pool, struct work_struct *work)”h]”jè)�”}”(hŒ]struct worker *find_worker_executing_work(struct worker_pool *pool, struct work_struct *work)”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj5Oh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj1Oh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MIubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCOh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj1Oh²hh³jBOh´MIubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hjTOh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjQOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jVOŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œfind_worker_executing_work”sbŒc.find_worker_executing_work”†”asbuh1hhj1Oh²hh³jBOh´MIubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuOh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj1Oh²hh³jBOh´MIubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjƒOh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj1Oh²hh³jBOh´MIubj)�”}”(hŒfind_worker_executing_work”h]”j)�”}”(hjrOh]”hŒfind_worker_executing_work”…”�”}”(hj”Oh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj�Oubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj1Oh²hh³jBOh´MIubj|)�”}”(hŒ4(struct worker_pool *pool, struct work_struct *work)”h]”(j‚)�”}”(hŒstruct worker_pool *pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¯Oh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj«Oubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Oh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj«Oubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hjÍOh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÊOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÏOŒmodname”NŒ classname”Nj7j:)�”}”j=]”jpOŒc.find_worker_executing_work”†”asbuh1hhj«Oubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëOh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj«OubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjùOh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj«Oubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj«Oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj§Oubj‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjPubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,Ph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjPubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hj=Ph²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj:Pubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j?PŒmodname”NŒ classname”Nj7j:)�”}”j=]”jpOŒc.find_worker_executing_work”†”asbuh1hhjPubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Ph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjPubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjiPh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjPubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjvPh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjPubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj§Oubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj1Oh²hh³jBOh´MIubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj-Oh²hh³jBOh´MIubah}”(h]”j(Oah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jBOh´MIhj*Oh²hubjC)�”}”(hhh]”hì)�”}”(hŒ%find worker which is executing a work”h]”hŒ%find worker which is executing a work”…”�”}”(hj Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MIhj�Ph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj*Oh²hh³jBOh´MIubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej¸Pjfj¸Pjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX½**Parameters** ``struct worker_pool *pool`` pool of interest ``struct work_struct *work`` work to find worker for **Description** Find a worker which is executing **work** on **pool** by searching **pool->busy_hash** which is keyed by the address of **work**. For a worker to match, its current execution should match the address of **work** and its work function. This is to avoid unwanted dependency between unrelated work executions through a work item being recycled while still being executed. This is a bit tricky. A work item may be freed once its execution starts and nothing prevents the freed area from being recycled for another work item. If the same work item address ends up being reused before the original execution finishes, workqueue will identify the recycled work item as currently executing and make it wait until the current execution finishes, introducing an unwanted dependency. This function checks the work item address and work function to avoid false positives. Note that this isn't complete as one may construct a work function which can introduce dependency onto itself through a recycled work item. Well, if somebody wants to shoot oneself in the foot that badly, there's only so much we can do, and if such deadlock actually occurs, it should be easy to locate the culprit work function. **Context** raw_spin_lock_irq(pool->lock). **Return** Pointer to worker which is executing **work** if found, ``NULL`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÂPh]”hŒ Parameters”…”�”}”(hjÄPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀPubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MMhj¼Pubjg)�”}”(hhh]”(jl)�”}”(hŒ.``struct worker_pool *pool`` pool of interest ”h]”(jr)�”}”(hŒ``struct worker_pool *pool``”h]”jú)�”}”(hjáPh]”hŒstruct worker_pool *pool”…”�”}”(hjãPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjßPubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MJhjÛPubj‹)�”}”(hhh]”hì)�”}”(hŒpool of interest”h]”hŒpool of interest”…”�”}”(hjúPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jöPh´MJhj÷Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÛPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jöPh´MJhjØPubjl)�”}”(hŒ5``struct work_struct *work`` work to find worker for ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hjQh]”hŒstruct work_struct *work”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MKhjQubj‹)�”}”(hhh]”hì)�”}”(hŒwork to find worker for”h]”hŒwork to find worker for”…”�”}”(hj3Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j/Qh´MKhj0Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j/Qh´MKhjØPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj¼Pubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjUQh]”hŒ Description”…”�”}”(hjWQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSQubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MMhj¼Pubhì)�”}”(hXrFind a worker which is executing **work** on **pool** by searching **pool->busy_hash** which is keyed by the address of **work**. For a worker to match, its current execution should match the address of **work** and its work function. This is to avoid unwanted dependency between unrelated work executions through a work item being recycled while still being executed.”h]”(hŒ!Find a worker which is executing ”…”�”}”(hjkQh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjsQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkQubhŒ on ”…”�”}”(hjkQh²hh³Nh´Nubj)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hj…Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkQubhŒ by searching ”…”�”}”(hjkQh²hh³Nh´Nubj)�”}”(hŒ**pool->busy_hash**”h]”hŒpool->busy_hash”…”�”}”(hj—Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkQubhŒ" which is keyed by the address of ”…”�”}”(hjkQh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj©Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkQubhŒL. For a worker to match, its current execution should match the address of ”…”�”}”(hjkQh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj»Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkQubhŒž and its work function. This is to avoid unwanted dependency between unrelated work executions through a work item being recycled while still being executed.”…”�”}”(hjkQh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MLhj¼Pubhì)�”}”(hX•This is a bit tricky. A work item may be freed once its execution starts and nothing prevents the freed area from being recycled for another work item. If the same work item address ends up being reused before the original execution finishes, workqueue will identify the recycled work item as currently executing and make it wait until the current execution finishes, introducing an unwanted dependency.”h]”hX•This is a bit tricky. A work item may be freed once its execution starts and nothing prevents the freed area from being recycled for another work item. If the same work item address ends up being reused before the original execution finishes, workqueue will identify the recycled work item as currently executing and make it wait until the current execution finishes, introducing an unwanted dependency.”…”�”}”(hjÔQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MShj¼Pubhì)�”}”(hX¢This function checks the work item address and work function to avoid false positives. Note that this isn't complete as one may construct a work function which can introduce dependency onto itself through a recycled work item. Well, if somebody wants to shoot oneself in the foot that badly, there's only so much we can do, and if such deadlock actually occurs, it should be easy to locate the culprit work function.”h]”hX¦This function checks the work item address and work function to avoid false positives. Note that this isn’t complete as one may construct a work function which can introduce dependency onto itself through a recycled work item. Well, if somebody wants to shoot oneself in the foot that badly, there’s only so much we can do, and if such deadlock actually occurs, it should be easy to locate the culprit work function.”…”�”}”(hjãQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MZhj¼Pubhì)�”}”(hŒ **Context**”h]”j)�”}”(hjôQh]”hŒContext”…”�”}”(hjöQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòQubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mahj¼Pubhì)�”}”(hŒraw_spin_lock_irq(pool->lock).”h]”hŒraw_spin_lock_irq(pool->lock).”…”�”}”(hj Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mbhj¼Pubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjRh]”hŒReturn”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mdhj¼Pubhì)�”}”(hŒKPointer to worker which is executing **work** if found, ``NULL`` otherwise.”h]”(hŒ%Pointer to worker which is executing ”…”�”}”(hj1Rh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj9Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1RubhŒ if found, ”…”�”}”(hj1Rh²hh³Nh´Nubjú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjKRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj1RubhŒ otherwise.”…”�”}”(hj1Rh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mehj¼Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒmove_linked_works (C function)”Œc.move_linked_works”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒevoid move_linked_works (struct work_struct *work, struct list_head *head, struct work_struct **nextp)”h]”jè)�”}”(hŒdvoid move_linked_works(struct work_struct *work, struct list_head *head, struct work_struct **nextp)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj„Rh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj€Rh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M~ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Rh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj€Rh²hh³j’Rh´M~ubj)�”}”(hŒmove_linked_works”h]”j)�”}”(hŒmove_linked_works”h]”hŒmove_linked_works”…”�”}”(hj¥Rh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¡Rubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj€Rh²hh³j’Rh´M~ubj|)�”}”(hŒN(struct work_struct *work, struct list_head *head, struct work_struct **nextp)”h]”(j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÁRh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj½Rubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎRh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj½Rubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjßRh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÜRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jáRŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j§RsbŒc.move_linked_works”†”asbuh1hhj½Rubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿRh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj½RubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj Sh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj½Rubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj½Rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¹Rubj‚)�”}”(hŒstruct list_head *head”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj3Sh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj/Subj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@Sh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj/Subh)�”}”(hhh]”j)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjQSh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjNSubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jSSŒmodname”NŒ classname”Nj7j:)�”}”j=]”jûRŒc.move_linked_works”†”asbuh1hhj/Subj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoSh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj/SubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj}Sh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj/Subj)�”}”(hŒhead”h]”hŒhead”…”�”}”(hjŠSh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj/Subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¹Rubj‚)�”}”(hŒstruct work_struct **nextp”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj£Sh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjŸSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Sh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjŸSubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjÁSh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¾Subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÃSŒmodname”NŒ classname”Nj7j:)�”}”j=]”jûRŒc.move_linked_works”†”asbuh1hhjŸSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßSh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjŸSubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjíSh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjŸSubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjúSh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjŸSubj)�”}”(hŒnextp”h]”hŒnextp”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjŸSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¹Rubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj€Rh²hh³j’Rh´M~ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj|Rh²hh³j’Rh´M~ubah}”(h]”jwRah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j’Rh´M~hjyRh²hubjC)�”}”(hhh]”hì)�”}”(hŒmove linked works to a list”h]”hŒmove linked works to a list”…”�”}”(hj1Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M~hj.Th²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjyRh²hh³j’Rh´M~ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejITjfjITjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX **Parameters** ``struct work_struct *work`` start of series of works to be scheduled ``struct list_head *head`` target list to append **work** to ``struct work_struct **nextp`` out parameter for nested worklist walking **Description** Schedule linked works starting from **work** to **head**. Work series to be scheduled starts at **work** and includes any consecutive work with WORK_STRUCT_LINKED set in its predecessor. See assign_work() for details on **nextp**. **Context** raw_spin_lock_irq(pool->lock).”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjSTh]”hŒ Parameters”…”�”}”(hjUTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQTubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‚hjMTubjg)�”}”(hhh]”(jl)�”}”(hŒF``struct work_struct *work`` start of series of works to be scheduled ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hjrTh]”hŒstruct work_struct *work”…”�”}”(hjtTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjpTubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjlTubj‹)�”}”(hhh]”hì)�”}”(hŒ(start of series of works to be scheduled”h]”hŒ(start of series of works to be scheduled”…”�”}”(hj‹Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j‡Th´MhjˆTubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjlTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j‡Th´MhjiTubjl)�”}”(hŒ=``struct list_head *head`` target list to append **work** to ”h]”(jr)�”}”(hŒ``struct list_head *head``”h]”jú)�”}”(hj«Th]”hŒstruct list_head *head”…”�”}”(hj­Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj©Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M€hj¥Tubj‹)�”}”(hhh]”hì)�”}”(hŒ!target list to append **work** to”h]”(hŒtarget list to append ”…”�”}”(hjÄTh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjÌTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄTubhŒ to”…”�”}”(hjÄTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÀTh´M€hjÁTubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¥Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÀTh´M€hjiTubjl)�”}”(hŒI``struct work_struct **nextp`` out parameter for nested worklist walking ”h]”(jr)�”}”(hŒ``struct work_struct **nextp``”h]”jú)�”}”(hjöTh]”hŒstruct work_struct **nextp”…”�”}”(hjøTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjôTubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hjðTubj‹)�”}”(hhh]”hì)�”}”(hŒ)out parameter for nested worklist walking”h]”hŒ)out parameter for nested worklist walking”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j Uh´M�hj Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjðTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j Uh´M�hjiTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjMTubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj1Uh]”hŒ Description”…”�”}”(hj3Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/Uubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MƒhjMTubhì)�”}”(hŒæSchedule linked works starting from **work** to **head**. Work series to be scheduled starts at **work** and includes any consecutive work with WORK_STRUCT_LINKED set in its predecessor. See assign_work() for details on **nextp**.”h]”(hŒ$Schedule linked works starting from ”…”�”}”(hjGUh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjOUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjGUubhŒ to ”…”�”}”(hjGUh²hh³Nh´Nubj)�”}”(hŒ**head**”h]”hŒhead”…”�”}”(hjaUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjGUubhŒ(. Work series to be scheduled starts at ”…”�”}”(hjGUh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjsUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjGUubhŒt and includes any consecutive work with WORK_STRUCT_LINKED set in its predecessor. See assign_work() for details on ”…”�”}”(hjGUh²hh³Nh´Nubj)�”}”(hŒ **nextp**”h]”hŒnextp”…”�”}”(hj…Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjGUubhŒ.”…”�”}”(hjGUh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‚hjMTubhì)�”}”(hŒ **Context**”h]”j)�”}”(hj Uh]”hŒContext”…”�”}”(hj¢Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjžUubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‡hjMTubhì)�”}”(hŒraw_spin_lock_irq(pool->lock).”h]”hŒraw_spin_lock_irq(pool->lock).”…”�”}”(hj¶Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MˆhjMTubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒassign_work (C function)”Œ c.assign_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ^bool assign_work (struct work_struct *work, struct worker *worker, struct work_struct **nextp)”h]”jè)�”}”(hŒ]bool assign_work(struct work_struct *work, struct worker *worker, struct work_struct **nextp)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjåUh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjáUh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¤ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóUh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjáUh²hh³jòUh´M¤ubj)�”}”(hŒ assign_work”h]”j)�”}”(hŒ assign_work”h]”hŒ assign_work”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjVubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjáUh²hh³jòUh´M¤ubj|)�”}”(hŒM(struct work_struct *work, struct worker *worker, struct work_struct **nextp)”h]”(j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj!Vh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjVubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Vh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjVubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hj?Vh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjXubj‹)�”}”(hhh]”hì)�”}”(hŒ)out parameter for nested worklist walking”h]”hŒ)out parameter for nested worklist walking”…”�”}”(hj]Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jYXh´M§hjZXubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj>Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jYXh´M§hjÉWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj­Wubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjXh]”hŒ Description”…”�”}”(hj�Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}Xubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M©hj­Wubhì)�”}”(hŒ™Assign **work** and its linked work items to **worker**. If **work** is already being executed by another worker in the same pool, it'll be punted there.”h]”(hŒAssign ”…”�”}”(hj•Xh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj�Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•XubhŒ and its linked work items to ”…”�”}”(hj•Xh²hh³Nh´Nubj)�”}”(hŒ **worker**”h]”hŒworker”…”�”}”(hj¯Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•XubhŒ. If ”…”�”}”(hj•Xh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjÁXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•XubhŒW is already being executed by another worker in the same pool, it’ll be punted there.”…”�”}”(hj•Xh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¨hj­Wubhì)�”}”(hŒ¦If **nextp** is not NULL, it's updated to point to the next work of the last scheduled work. This allows assign_work() to be nested inside list_for_each_entry_safe().”h]”(hŒIf ”…”�”}”(hjÚXh²hh³Nh´Nubj)�”}”(hŒ **nextp**”h]”hŒnextp”…”�”}”(hjâXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚXubhŒœ is not NULL, it’s updated to point to the next work of the last scheduled work. This allows assign_work() to be nested inside list_for_each_entry_safe().”…”�”}”(hjÚXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M«hj­Wubhì)�”}”(hŒŽReturns ``true`` if **work** was successfully assigned to **worker**. ``false`` if **work** was punted to another worker already executing it.”h]”(hŒReturns ”…”�”}”(hjûXh²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjûXubhŒ if ”…”�”}”(hjûXh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûXubhŒ was successfully assigned to ”…”�”}”(hjûXh²hh³Nh´Nubj)�”}”(hŒ **worker**”h]”hŒworker”…”�”}”(hj'Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûXubhŒ. ”…”�”}”(hjûXh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj9Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjûXubhŒ if ”…”�”}”hjûXsbj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjKYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûXubhŒ3 was punted to another worker already executing it.”…”�”}”(hjûXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¯hj­Wubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒkick_pool_pick (C function)”Œc.kick_pool_pick”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒJbool kick_pool_pick (struct worker_pool *pool, struct task_struct **wakep)”h]”jè)�”}”(hŒIbool kick_pool_pick(struct worker_pool *pool, struct task_struct **wakep)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj„Yh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj€Yh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mïubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’Yh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj€Yh²hh³j‘Yh´Mïubj)�”}”(hŒkick_pool_pick”h]”j)�”}”(hŒkick_pool_pick”h]”hŒkick_pool_pick”…”�”}”(hj¤Yh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj Yubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj€Yh²hh³j‘Yh´Mïubj|)�”}”(hŒ6(struct worker_pool *pool, struct task_struct **wakep)”h]”(j‚)�”}”(hŒstruct worker_pool *pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÀYh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj¼Yubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍYh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¼Yubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hjÞYh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÛYubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jàYŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j¦YsbŒc.kick_pool_pick”†”asbuh1hhj¼Yubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþYh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¼YubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj Zh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj¼Yubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¼Yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¸Yubj‚)�”}”(hŒstruct task_struct **wakep”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj2Zh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj.Zubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?Zh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj.Zubh)�”}”(hhh]”j)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjPZh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjMZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jRZŒmodname”NŒ classname”Nj7j:)�”}”j=]”júYŒc.kick_pool_pick”†”asbuh1hhj.Zubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnZh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj.ZubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj|Zh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj.ZubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj‰Zh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj.Zubj)�”}”(hŒwakep”h]”hŒwakep”…”�”}”(hj–Zh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj.Zubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¸Yubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj€Yh²hh³j‘Yh´Mïubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj|Yh²hh³j‘Yh´Mïubah}”(h]”jwYah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j‘Yh´MïhjyYh²hubjC)�”}”(hhh]”hì)�”}”(hŒ3select an idle worker to kick, deferring the wakeup”h]”hŒ3select an idle worker to kick, deferring the wakeup”…”�”}”(hjÀZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mïhj½Zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjyYh²hh³j‘Yh´Mïubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejØZjfjØZjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX)**Parameters** ``struct worker_pool *pool`` pool to kick ``struct task_struct **wakep`` out-param, set to the task to wake after pool->lock is dropped **Description** Like kick_pool() but, for a regular (non-BH) pool, returns the picked worker's task via **wakep** instead of waking it, so the caller can issue the wakeup after dropping pool->lock (the wakeup takes rq->lock). Worker selection, wake_cpu setup and the BH kick still happen under the lock. Returns whether a worker was selected or kicked. Must be called with **pool->lock** held.”•h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjâZh]”hŒ Parameters”…”�”}”(hjäZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàZubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MóhjÜZubjg)�”}”(hhh]”(jl)�”}”(hŒ*``struct worker_pool *pool`` pool to kick ”h]”(jr)�”}”(hŒ``struct worker_pool *pool``”h]”jú)�”}”(hj[h]”hŒstruct worker_pool *pool”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÿZubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MðhjûZubj‹)�”}”(hhh]”hì)�”}”(hŒ pool to kick”h]”hŒ pool to kick”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j[h´Mðhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjûZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j[h´MðhjøZubjl)�”}”(hŒ^``struct task_struct **wakep`` out-param, set to the task to wake after pool->lock is dropped ”h]”(jr)�”}”(hŒ``struct task_struct **wakep``”h]”jú)�”}”(hj:[h]”hŒstruct task_struct **wakep”…”�”}”(hj<[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj8[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mñhj4[ubj‹)�”}”(hhh]”hì)�”}”(hŒ>out-param, set to the task to wake after pool->lock is dropped”h]”hŒ>out-param, set to the task to wake after pool->lock is dropped”…”�”}”(hjS[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jO[h´MñhjP[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj4[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jO[h´MñhjøZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjÜZubhì)�”}”(hŒ**Description**”h]”j)�”}”(hju[h]”hŒ Description”…”�”}”(hjw[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjs[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MóhjÜZubhì)�”}”(hXPLike kick_pool() but, for a regular (non-BH) pool, returns the picked worker's task via **wakep** instead of waking it, so the caller can issue the wakeup after dropping pool->lock (the wakeup takes rq->lock). Worker selection, wake_cpu setup and the BH kick still happen under the lock. Returns whether a worker was selected or kicked.”h]”(hŒZLike kick_pool() but, for a regular (non-BH) pool, returns the picked worker’s task via ”…”�”}”(hj‹[h²hh³Nh´Nubj)�”}”(hŒ **wakep**”h]”hŒwakep”…”�”}”(hj“[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹[ubhŒï instead of waking it, so the caller can issue the wakeup after dropping pool->lock (the wakeup takes rq->lock). Worker selection, wake_cpu setup and the BH kick still happen under the lock. Returns whether a worker was selected or kicked.”…”�”}”(hj‹[h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MòhjÜZubhì)�”}”(hŒ(Must be called with **pool->lock** held.”h]”(hŒMust be called with ”…”�”}”(hj¬[h²hh³Nh´Nubj)�”}”(hŒ**pool->lock**”h]”hŒ pool->lock”…”�”}”(hj´[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬[ubhŒ held.”…”�”}”(hj¬[h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MøhjÜZubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒkick_pool (C function)”Œ c.kick_pool”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ)bool kick_pool (struct worker_pool *pool)”h]”jè)�”}”(hŒ(bool kick_pool(struct worker_pool *pool)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjí[h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjé[h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M4ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû[h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjé[h²hh³jú[h´M4ubj)�”}”(hŒ kick_pool”h]”j)�”}”(hŒ kick_pool”h]”hŒ kick_pool”…”�”}”(hj \h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj \ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjé[h²hh³jú[h´M4ubj|)�”}”(hŒ(struct worker_pool *pool)”h]”j‚)�”}”(hŒstruct worker_pool *pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj)\h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj%\ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6\h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj%\ubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hjG\h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjD\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jI\Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j\sbŒ c.kick_pool”†”asbuh1hhj%\ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg\h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj%\ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hju\h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj%\ubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj‚\h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj%\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj!\ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjé[h²hh³jú[h´M4ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjå[h²hh³jú[h´M4ubah}”(h]”jà[ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jú[h´M4hjâ[h²hubjC)�”}”(hhh]”hì)�”}”(hŒ#wake up an idle worker if necessary”h]”hŒ#wake up an idle worker if necessary”…”�”}”(hj¬\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M4hj©\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjâ[h²hh³jú[h´M4ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejÄ\jfjÄ\jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ·**Parameters** ``struct worker_pool *pool`` pool to kick **Description** **pool** may have pending work items. Wake up worker if necessary. Returns whether a worker was woken up.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÎ\h]”hŒ Parameters”…”�”}”(hjÐ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M8hjÈ\ubjg)�”}”(hhh]”jl)�”}”(hŒ*``struct worker_pool *pool`` pool to kick ”h]”(jr)�”}”(hŒ``struct worker_pool *pool``”h]”jú)�”}”(hjí\h]”hŒstruct worker_pool *pool”…”�”}”(hjï\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjë\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M5hjç\ubj‹)�”}”(hhh]”hì)�”}”(hŒ pool to kick”h]”hŒ pool to kick”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j]h´M5hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjç\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j]h´M5hjä\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjÈ\ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj(]h]”hŒ Description”…”�”}”(hj*]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj&]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M7hjÈ\ubhì)�”}”(hŒi**pool** may have pending work items. Wake up worker if necessary. Returns whether a worker was woken up.”h]”(j)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjB]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>]ubhŒa may have pending work items. Wake up worker if necessary. Returns whether a worker was woken up.”…”�”}”(hj>]h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M6hjÈ\ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒwq_worker_running (C function)”Œc.wq_worker_running”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ1void wq_worker_running (struct task_struct *task)”h]”jè)�”}”(hŒ0void wq_worker_running(struct task_struct *task)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj{]h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjw]h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¥ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ]h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjw]h²hh³j‰]h´M¥ubj)�”}”(hŒwq_worker_running”h]”j)�”}”(hŒwq_worker_running”h]”hŒwq_worker_running”…”�”}”(hjœ]h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj˜]ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjw]h²hh³j‰]h´M¥ubj|)�”}”(hŒ(struct task_struct *task)”h]”j‚)�”}”(hŒstruct task_struct *task”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¸]h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj´]ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ]h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj´]ubh)�”}”(hhh]”j)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjÖ]h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÓ]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jØ]Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jž]sbŒc.wq_worker_running”†”asbuh1hhj´]ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö]h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj´]ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj´]ubj)�”}”(hŒtask”h]”hŒtask”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj´]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj°]ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjw]h²hh³j‰]h´M¥ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjs]h²hh³j‰]h´M¥ubah}”(h]”jn]ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j‰]h´M¥hjp]h²hubjC)�”}”(hhh]”hì)�”}”(hŒa worker is running again”h]”hŒa worker is running again”…”�”}”(hj;^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¥hj8^h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjp]h²hh³j‰]h´M¥ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejS^jfjS^jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ�**Parameters** ``struct task_struct *task`` task waking up **Description** This function is called when a worker returns from schedule()”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj]^h]”hŒ Parameters”…”�”}”(hj_^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M©hjW^ubjg)�”}”(hhh]”jl)�”}”(hŒ,``struct task_struct *task`` task waking up ”h]”(jr)�”}”(hŒ``struct task_struct *task``”h]”jú)�”}”(hj|^h]”hŒstruct task_struct *task”…”�”}”(hj~^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjz^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¦hjv^ubj‹)�”}”(hhh]”hì)�”}”(hŒtask waking up”h]”hŒtask waking up”…”�”}”(hj•^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j‘^h´M¦hj’^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjv^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j‘^h´M¦hjs^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjW^ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj·^h]”hŒ Description”…”�”}”(hj¹^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¨hjW^ubhì)�”}”(hŒ=This function is called when a worker returns from schedule()”h]”hŒ=This function is called when a worker returns from schedule()”…”�”}”(hjÍ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M§hjW^ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒwq_worker_sleeping (C function)”Œc.wq_worker_sleeping”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ2void wq_worker_sleeping (struct task_struct *task)”h]”jè)�”}”(hŒ1void wq_worker_sleeping(struct task_struct *task)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjü^h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjø^h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÆubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj _h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjø^h²hh³j _h´MÆubj)�”}”(hŒwq_worker_sleeping”h]”j)�”}”(hŒwq_worker_sleeping”h]”hŒwq_worker_sleeping”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj_ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjø^h²hh³j _h´MÆubj|)�”}”(hŒ(struct task_struct *task)”h]”j‚)�”}”(hŒstruct task_struct *task”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj9_h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj5_ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF_h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj5_ubh)�”}”(hhh]”j)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjW_h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjT_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jY_Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j_sbŒc.wq_worker_sleeping”†”asbuh1hhj5_ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw_h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj5_ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj…_h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj5_ubj)�”}”(hŒtask”h]”hŒtask”…”�”}”(hj’_h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj5_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj1_ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjø^h²hh³j _h´MÆubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjô^h²hh³j _h´MÆubah}”(h]”jï^ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j _h´MÆhjñ^h²hubjC)�”}”(hhh]”hì)�”}”(hŒa worker is going to sleep”h]”hŒa worker is going to sleep”…”�”}”(hj¼_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÆhj¹_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjñ^h²hh³j _h´MÆubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejÔ_jfjÔ_jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ¢**Parameters** ``struct task_struct *task`` task going to sleep **Description** This function is called from schedule() when a busy worker is going to sleep.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÞ_h]”hŒ Parameters”…”�”}”(hjà_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÊhjØ_ubjg)�”}”(hhh]”jl)�”}”(hŒ1``struct task_struct *task`` task going to sleep ”h]”(jr)�”}”(hŒ``struct task_struct *task``”h]”jú)�”}”(hjý_h]”hŒstruct task_struct *task”…”�”}”(hjÿ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjû_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÇhj÷_ubj‹)�”}”(hhh]”hì)�”}”(hŒtask going to sleep”h]”hŒtask going to sleep”…”�”}”(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&]”uh1jkh³j`h´MÇhjô_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjØ_ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj8`h]”hŒ Description”…”�”}”(hj:`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÉhjØ_ubhì)�”}”(hŒMThis function is called from schedule() when a busy worker is going to sleep.”h]”hŒMThis function is called from schedule() when a busy worker is going to sleep.”…”�”}”(hjN`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÈhjØ_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒwq_worker_tick (C function)”Œc.wq_worker_tick”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ.void wq_worker_tick (struct task_struct *task)”h]”jè)�”}”(hŒ-void wq_worker_tick(struct task_struct *task)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj}`h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjy`h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Môubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ`h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjy`h²hh³j‹`h´Môubj)�”}”(hŒwq_worker_tick”h]”j)�”}”(hŒwq_worker_tick”h]”hŒwq_worker_tick”…”�”}”(hjž`h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjš`ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjy`h²hh³j‹`h´Môubj|)�”}”(hŒ(struct task_struct *task)”h]”j‚)�”}”(hŒstruct task_struct *task”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjº`h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj¶`ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ`h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¶`ubh)�”}”(hhh]”j)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjØ`h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÕ`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÚ`Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j `sbŒc.wq_worker_tick”†”asbuh1hhj¶`ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø`h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¶`ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj¶`ubj)�”}”(hŒtask”h]”hŒtask”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¶`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj²`ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjy`h²hh³j‹`h´Môubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hju`h²hh³j‹`h´Môubah}”(h]”jp`ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j‹`h´Môhjr`h²hubjC)�”}”(hhh]”hì)�”}”(hŒ4a scheduler tick occurred while a kworker is running”h]”hŒ4a scheduler tick occurred while a kworker is running”…”�”}”(hj=ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Môhj:ah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjr`h²hh³j‹`h´Môubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejUajfjUajg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒä**Parameters** ``struct task_struct *task`` task currently running **Description** Called from sched_tick(). We're in the IRQ context and the current worker's fields which follow the 'K' locking rule can be accessed safely.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj_ah]”hŒ Parameters”…”�”}”(hjaah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj]aubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MøhjYaubjg)�”}”(hhh]”jl)�”}”(hŒ4``struct task_struct *task`` task currently running ”h]”(jr)�”}”(hŒ``struct task_struct *task``”h]”jú)�”}”(hj~ah]”hŒstruct task_struct *task”…”�”}”(hj€ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj|aubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mõhjxaubj‹)�”}”(hhh]”hì)�”}”(hŒtask currently running”h]”hŒtask currently running”…”�”}”(hj—ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j“ah´Mõhj”aubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjxaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j“ah´Mõhjuaubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjYaubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj¹ah]”hŒ Description”…”�”}”(hj»ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·aubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M÷hjYaubhì)�”}”(hŒŒCalled from sched_tick(). We're in the IRQ context and the current worker's fields which follow the 'K' locking rule can be accessed safely.”h]”hŒ”Called from sched_tick(). We’re in the IRQ context and the current worker’s fields which follow the ‘K’ locking rule can be accessed safely.”…”�”}”(hjÏah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MöhjYaubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ wq_worker_last_func (C function)”Œc.wq_worker_last_func”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ:work_func_t wq_worker_last_func (struct task_struct *task)”h]”jè)�”}”(hŒ9work_func_t wq_worker_last_func(struct task_struct *task)”h]”(h)�”}”(hhh]”j)�”}”(hŒ work_func_t”h]”hŒ work_func_t”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjþaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jbŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œwq_worker_last_func”sbŒc.wq_worker_last_func”†”asbuh1hhjúah²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M*ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#bh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjúah²hh³j"bh´M*ubj)�”}”(hŒwq_worker_last_func”h]”j)�”}”(hjbh]”hŒwq_worker_last_func”…”�”}”(hj5bh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj1bubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjúah²hh³j"bh´M*ubj|)�”}”(hŒ(struct task_struct *task)”h]”j‚)�”}”(hŒstruct task_struct *task”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjPbh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjLbubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]bh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjLbubh)�”}”(hhh]”j)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjnbh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjkbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jpbŒmodname”NŒ classname”Nj7j:)�”}”j=]”jbŒc.wq_worker_last_func”†”asbuh1hhjLbubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒbh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjLbubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjšbh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjLbubj)�”}”(hŒtask”h]”hŒtask”…”�”}”(hj§bh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjLbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjHbubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjúah²hh³j"bh´M*ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjöah²hh³j"bh´M*ubah}”(h]”jñaah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j"bh´M*hjóah²hubjC)�”}”(hhh]”hì)�”}”(hŒ$retrieve worker's last work function”h]”hŒ&retrieve worker’s last work function”…”�”}”(hjÑbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M*hjÎbh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjóah²hh³j"bh´M*ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejébjfjébjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXx**Parameters** ``struct task_struct *task`` Task to retrieve last work function of. **Description** Determine the last function a worker executed. This is called from the scheduler to get a worker's last known identity. This function is called during schedule() when a kworker is going to sleep. It's used by psi to identify aggregation workers during dequeuing, to allow periodic aggregation to shut-off when that worker is the last task in the system or cgroup to go to sleep. As this function doesn't involve any workqueue-related locking, it only returns stable values when called from inside the scheduler's queuing and dequeuing paths, when **task**, which must be a kworker, is guaranteed to not be processing any works. **Context** raw_spin_lock_irq(rq->lock) **Return** The last work function ``current`` executed as a worker, NULL if it hasn't executed any work yet.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjóbh]”hŒ Parameters”…”�”}”(hjõbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñbubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M.hjíbubjg)�”}”(hhh]”jl)�”}”(hŒE``struct task_struct *task`` Task to retrieve last work function of. ”h]”(jr)�”}”(hŒ``struct task_struct *task``”h]”jú)�”}”(hjch]”hŒstruct task_struct *task”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M+hj cubj‹)�”}”(hhh]”hì)�”}”(hŒ'Task to retrieve last work function of.”h]”hŒ'Task to retrieve last work function of.”…”�”}”(hj+ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j'ch´M+hj(cubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j'ch´M+hj cubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjíbubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjMch]”hŒ Description”…”�”}”(hjOch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKcubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M-hjíbubhì)�”}”(hŒwDetermine the last function a worker executed. This is called from the scheduler to get a worker's last known identity.”h]”hŒyDetermine the last function a worker executed. This is called from the scheduler to get a worker’s last known identity.”…”�”}”(hjcch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M,hjíbubhì)�”}”(hXThis function is called during schedule() when a kworker is going to sleep. It's used by psi to identify aggregation workers during dequeuing, to allow periodic aggregation to shut-off when that worker is the last task in the system or cgroup to go to sleep.”h]”hXThis function is called during schedule() when a kworker is going to sleep. It’s used by psi to identify aggregation workers during dequeuing, to allow periodic aggregation to shut-off when that worker is the last task in the system or cgroup to go to sleep.”…”�”}”(hjrch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M0hjíbubhì)�”}”(hŒøAs this function doesn't involve any workqueue-related locking, it only returns stable values when called from inside the scheduler's queuing and dequeuing paths, when **task**, which must be a kworker, is guaranteed to not be processing any works.”h]”(hŒ¬As this function doesn’t involve any workqueue-related locking, it only returns stable values when called from inside the scheduler’s queuing and dequeuing paths, when ”…”�”}”(hj�ch²hh³Nh´Nubj)�”}”(hŒ**task**”h]”hŒtask”…”�”}”(hj‰ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�cubhŒH, which must be a kworker, is guaranteed to not be processing any works.”…”�”}”(hj�ch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M5hjíbubhì)�”}”(hŒ **Context**”h]”j)�”}”(hj¤ch]”hŒContext”…”�”}”(hj¦ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢cubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M:hjíbubhì)�”}”(hŒraw_spin_lock_irq(rq->lock)”h]”hŒraw_spin_lock_irq(rq->lock)”…”�”}”(hjºch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M0hjíbubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjËch]”hŒReturn”…”�”}”(hjÍch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉcubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M2hjíbubhì)�”}”(hŒaThe last work function ``current`` executed as a worker, NULL if it hasn't executed any work yet.”h]”(hŒThe last work function ”…”�”}”(hjách²hh³Nh´Nubjú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hjéch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjácubhŒA executed as a worker, NULL if it hasn’t executed any work yet.”…”�”}”(hjách²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M=hjíbubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒwq_node_nr_active (C function)”Œc.wq_node_nr_active”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒTstruct wq_node_nr_active * wq_node_nr_active (struct workqueue_struct *wq, int node)”h]”jè)�”}”(hŒRstruct wq_node_nr_active *wq_node_nr_active(struct workqueue_struct *wq, int node)”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj"dh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjdh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MOubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0dh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjdh²hh³j/dh´MOubh)�”}”(hhh]”j)�”}”(hŒwq_node_nr_active”h]”hŒwq_node_nr_active”…”�”}”(hjAdh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj>dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jCdŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œwq_node_nr_active”sbŒc.wq_node_nr_active”†”asbuh1hhjdh²hh³j/dh´MOubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbdh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjdh²hh³j/dh´MOubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjpdh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjdh²hh³j/dh´MOubj)�”}”(hŒwq_node_nr_active”h]”j)�”}”(hj_dh]”hŒwq_node_nr_active”…”�”}”(hj�dh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj}dubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjdh²hh³j/dh´MOubj|)�”}”(hŒ'(struct workqueue_struct *wq, int node)”h]”(j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjœdh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj˜dubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©dh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj˜dubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjºdh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj·dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j¼dŒmodname”NŒ classname”Nj7j:)�”}”j=]”j]dŒc.wq_node_nr_active”†”asbuh1hhj˜dubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØdh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj˜dubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjædh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj˜dubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hjódh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj˜dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj”dubj‚)�”}”(hŒint node”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj eh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjeubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjeubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hj(eh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj”dubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjdh²hh³j/dh´MOubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjdh²hh³j/dh´MOubah}”(h]”jdah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j/dh´MOhjdh²hubjC)�”}”(hhh]”hì)�”}”(hŒ"Determine wq_node_nr_active to use”h]”hŒ"Determine wq_node_nr_active to use”…”�”}”(hjReh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MOhjOeh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjdh²hh³j/dh´MOubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejjejfjjejg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXG**Parameters** ``struct workqueue_struct *wq`` workqueue of interest ``int node`` NUMA node, can be ``NUMA_NO_NODE`` **Description** Determine wq_node_nr_active to use for **wq** on **node**. **wq** must be unbound. - node_nr_active[nr_node_ids] if **node** is ``NUMA_NO_NODE``. - Otherwise, node_nr_active[**node**].”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjteh]”hŒ Parameters”…”�”}”(hjveh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjreubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MShjneubjg)�”}”(hhh]”(jl)�”}”(hŒ6``struct workqueue_struct *wq`` workqueue of interest ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj“eh]”hŒstruct workqueue_struct *wq”…”�”}”(hj•eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj‘eubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MPhj�eubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue of interest”h]”hŒworkqueue of interest”…”�”}”(hj¬eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¨eh´MPhj©eubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj�eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j¨eh´MPhjŠeubjl)�”}”(hŒ0``int node`` NUMA node, can be ``NUMA_NO_NODE`` ”h]”(jr)�”}”(hŒ ``int node``”h]”jú)�”}”(hjÌeh]”hŒint node”…”�”}”(hjÎeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÊeubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MQhjÆeubj‹)�”}”(hhh]”hì)�”}”(hŒ"NUMA node, can be ``NUMA_NO_NODE``”h]”(hŒNUMA node, can be ”…”�”}”(hjåeh²hh³Nh´Nubjú)�”}”(hŒ``NUMA_NO_NODE``”h]”hŒ NUMA_NO_NODE”…”�”}”(hjíeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjåeubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jáeh´MQhjâeubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÆeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jáeh´MQhjŠeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjneubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjfh]”hŒ Description”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MShjneubhì)�”}”(hŒRDetermine wq_node_nr_active to use for **wq** on **node**. **wq** must be unbound.”h]”(hŒ'Determine wq_node_nr_active to use for ”…”�”}”(hj+fh²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hj3fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+fubhŒ on ”…”�”}”(hj+fh²hh³Nh´Nubj)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjEfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+fubhŒ. ”…”�”}”(hj+fh²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hjWfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+fubhŒ must be unbound.”…”�”}”(hj+fh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MRhjneubj )�”}”(hhh]”(j%)�”}”(hŒ=node_nr_active[nr_node_ids] if **node** is ``NUMA_NO_NODE``. ”h]”hì)�”}”(hŒgh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj:gubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKgh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj:gubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hj\gh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjYgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j^gŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j$gsbŒc.wq_update_node_max_active”†”asbuh1hhj:gubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|gh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj:gubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjŠgh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj:gubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hj—gh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj:gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj6gubj‚)�”}”(hŒ int off_cpu”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj°gh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj¬gubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾gh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¬gubj)�”}”(hŒoff_cpu”h]”hŒoff_cpu”…”�”}”(hjÌgh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¬gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj6gubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjýfh²hh³jgh´Mfubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjùfh²hh³jgh´Mfubah}”(h]”jôfah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jgh´Mfhjöfh²hubjC)�”}”(hhh]”hì)�”}”(hŒ"Update per-node max_actives to use”h]”hŒ"Update per-node max_actives to use”…”�”}”(hjögh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mfhjógh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjöfh²hh³jgh´Mfubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejhjfjhjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX{**Parameters** ``struct workqueue_struct *wq`` workqueue to update ``int off_cpu`` CPU that's going down, -1 if a CPU is not going down **Description** Update **wq->node_nr_active**[]->max. **wq** must be unbound. max_active is distributed among nodes according to the proportions of numbers of online cpus. The result is always between **wq->min_active** and max_active.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjhh]”hŒ Parameters”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mjhjhubjg)�”}”(hhh]”(jl)�”}”(hŒ4``struct workqueue_struct *wq`` workqueue to update ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj7hh]”hŒstruct workqueue_struct *wq”…”�”}”(hj9hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj5hubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mghj1hubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue to update”h]”hŒworkqueue to update”…”�”}”(hjPhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jLhh´MghjMhubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj1hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jLhh´Mghj.hubjl)�”}”(hŒE``int off_cpu`` CPU that's going down, -1 if a CPU is not going down ”h]”(jr)�”}”(hŒ``int off_cpu``”h]”jú)�”}”(hjphh]”hŒ int off_cpu”…”�”}”(hjrhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjnhubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhhjjhubj‹)�”}”(hhh]”hì)�”}”(hŒ4CPU that's going down, -1 if a CPU is not going down”h]”hŒ6CPU that’s going down, -1 if a CPU is not going down”…”�”}”(hj‰hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j…hh´Mhhj†hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j…hh´Mhhj.hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjhubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj«hh]”hŒ Description”…”�”}”(hj­hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©hubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mjhjhubhì)�”}”(hŒÛUpdate **wq->node_nr_active**[]->max. **wq** must be unbound. max_active is distributed among nodes according to the proportions of numbers of online cpus. The result is always between **wq->min_active** and max_active.”h]”(hŒUpdate ”…”�”}”(hjÁhh²hh³Nh´Nubj)�”}”(hŒ%**wq->node_nr_active**[]->max. **wq**”h]”hŒ!wq->node_nr_active**[]->max. **wq”…”�”}”(hjÉhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁhubhŒ� must be unbound. max_active is distributed among nodes according to the proportions of numbers of online cpus. The result is always between ”…”�”}”(hjÁhh²hh³Nh´Nubj)�”}”(hŒ**wq->min_active**”h]”hŒwq->min_active”…”�”}”(hjÛhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁhubhŒ and max_active.”…”�”}”(hjÁhh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mihjhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒget_pwq (C function)”Œ c.get_pwq”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ)void get_pwq (struct pool_workqueue *pwq)”h]”jè)�”}”(hŒ(void get_pwq(struct pool_workqueue *pwq)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjih²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mšubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#ih²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjih²hh³j"ih´Mšubj)�”}”(hŒget_pwq”h]”j)�”}”(hŒget_pwq”h]”hŒget_pwq”…”�”}”(hj5ih²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj1iubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjih²hh³j"ih´Mšubj|)�”}”(hŒ(struct pool_workqueue *pwq)”h]”j‚)�”}”(hŒstruct pool_workqueue *pwq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjQih²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjMiubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^ih²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjMiubh)�”}”(hhh]”j)�”}”(hŒpool_workqueue”h]”hŒpool_workqueue”…”�”}”(hjoih²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjliubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jqiŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j7isbŒ c.get_pwq”†”asbuh1hhjMiubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ih²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjMiubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj�ih²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjMiubj)�”}”(hŒpwq”h]”hŒpwq”…”�”}”(hjªih²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjMiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjIiubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjih²hh³j"ih´Mšubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj ih²hh³j"ih´Mšubah}”(h]”jiah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j"ih´Mšhj ih²hubjC)�”}”(hhh]”hì)�”}”(hŒ6get an extra reference on the specified pool_workqueue”h]”hŒ6get an extra reference on the specified pool_workqueue”…”�”}”(hjÔih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MšhjÑih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj ih²hh³j"ih´Mšubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejìijfjìijg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒä**Parameters** ``struct pool_workqueue *pwq`` pool_workqueue to get **Description** Obtain an extra reference on **pwq**. The caller should guarantee that **pwq** has positive refcnt and be holding the matching pool->lock.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjöih]”hŒ Parameters”…”�”}”(hjøih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôiubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mžhjðiubjg)�”}”(hhh]”jl)�”}”(hŒ5``struct pool_workqueue *pwq`` pool_workqueue to get ”h]”(jr)�”}”(hŒ``struct pool_workqueue *pwq``”h]”jú)�”}”(hjjh]”hŒstruct pool_workqueue *pwq”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M›hjjubj‹)�”}”(hhh]”hì)�”}”(hŒpool_workqueue to get”h]”hŒpool_workqueue to get”…”�”}”(hj.jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j*jh´M›hj+jubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j*jh´M›hj jubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjðiubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjPjh]”hŒ Description”…”�”}”(hjRjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNjubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hjðiubhì)�”}”(hŒ‹Obtain an extra reference on **pwq**. The caller should guarantee that **pwq** has positive refcnt and be holding the matching pool->lock.”h]”(hŒObtain an extra reference on ”…”�”}”(hjfjh²hh³Nh´Nubj)�”}”(hŒ**pwq**”h]”hŒpwq”…”�”}”(hjnjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfjubhŒ$. The caller should guarantee that ”…”�”}”(hjfjh²hh³Nh´Nubj)�”}”(hŒ**pwq**”h]”hŒpwq”…”�”}”(hj€jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfjubhŒ< has positive refcnt and be holding the matching pool->lock.”…”�”}”(hjfjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mœhjðiubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒput_pwq (C function)”Œ c.put_pwq”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ)void put_pwq (struct pool_workqueue *pwq)”h]”jè)�”}”(hŒ(void put_pwq(struct pool_workqueue *pwq)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¹jh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjµjh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¨ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjµjh²hh³jÇjh´M¨ubj)�”}”(hŒput_pwq”h]”j)�”}”(hŒput_pwq”h]”hŒput_pwq”…”�”}”(hjÚjh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÖjubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjµjh²hh³jÇjh´M¨ubj|)�”}”(hŒ(struct pool_workqueue *pwq)”h]”j‚)�”}”(hŒstruct pool_workqueue *pwq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjöjh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjòjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjòjubh)�”}”(hhh]”j)�”}”(hŒpool_workqueue”h]”hŒpool_workqueue”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jkŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jÜjsbŒ c.put_pwq”†”asbuh1hhjòjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4kh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjòjubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjBkh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjòjubj)�”}”(hŒpwq”h]”hŒpwq”…”�”}”(hjOkh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjòjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjîjubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjµjh²hh³jÇjh´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj±jh²hh³jÇjh´M¨ubah}”(h]”j¬jah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÇjh´M¨hj®jh²hubjC)�”}”(hhh]”hì)�”}”(hŒput a pool_workqueue reference”h]”hŒput a pool_workqueue reference”…”�”}”(hjykh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¨hjvkh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj®jh²hh³jÇjh´M¨ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej‘kjfj‘kjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒã**Parameters** ``struct pool_workqueue *pwq`` pool_workqueue to put **Description** Drop a reference of **pwq**. If its refcnt reaches zero, schedule its destruction. The caller should be holding the matching pool->lock.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj›kh]”hŒ Parameters”…”�”}”(hj�kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™kubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¬hj•kubjg)�”}”(hhh]”jl)�”}”(hŒ5``struct pool_workqueue *pwq`` pool_workqueue to put ”h]”(jr)�”}”(hŒ``struct pool_workqueue *pwq``”h]”jú)�”}”(hjºkh]”hŒstruct pool_workqueue *pwq”…”�”}”(hj¼kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¸kubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M©hj´kubj‹)�”}”(hhh]”hì)�”}”(hŒpool_workqueue to put”h]”hŒpool_workqueue to put”…”�”}”(hjÓkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÏkh´M©hjÐkubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj´kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÏkh´M©hj±kubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj•kubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjõkh]”hŒ Description”…”�”}”(hj÷kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjókubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M«hj•kubhì)�”}”(hŒŠDrop a reference of **pwq**. If its refcnt reaches zero, schedule its destruction. The caller should be holding the matching pool->lock.”h]”(hŒDrop a reference of ”…”�”}”(hj lh²hh³Nh´Nubj)�”}”(hŒ**pwq**”h]”hŒpwq”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj lubhŒo. If its refcnt reaches zero, schedule its destruction. The caller should be holding the matching pool->lock.”…”�”}”(hj lh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mªhj•kubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒput_pwq_unlocked (C function)”Œc.put_pwq_unlocked”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ2void put_pwq_unlocked (struct pool_workqueue *pwq)”h]”jè)�”}”(hŒ1void put_pwq_unlocked(struct pool_workqueue *pwq)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjLlh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjHlh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M»ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[lh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjHlh²hh³jZlh´M»ubj)�”}”(hŒput_pwq_unlocked”h]”j)�”}”(hŒput_pwq_unlocked”h]”hŒput_pwq_unlocked”…”�”}”(hjmlh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjilubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjHlh²hh³jZlh´M»ubj|)�”}”(hŒ(struct pool_workqueue *pwq)”h]”j‚)�”}”(hŒstruct pool_workqueue *pwq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj‰lh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj…lubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–lh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj…lubh)�”}”(hhh]”j)�”}”(hŒpool_workqueue”h]”hŒpool_workqueue”…”�”}”(hj§lh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¤lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j©lŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jolsbŒc.put_pwq_unlocked”†”asbuh1hhj…lubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇlh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj…lubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÕlh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj…lubj)�”}”(hŒpwq”h]”hŒpwq”…”�”}”(hjâlh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj…lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj�lubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjHlh²hh³jZlh´M»ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjDlh²hh³jZlh´M»ubah}”(h]”j?lah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jZlh´M»hjAlh²hubjC)�”}”(hhh]”hì)�”}”(hŒ+put_pwq() with surrounding pool lock/unlock”h]”hŒ+put_pwq() with surrounding pool lock/unlock”…”�”}”(hj mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M»hj mh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjAlh²hh³jZlh´M»ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej$mjfj$mjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ¯**Parameters** ``struct pool_workqueue *pwq`` pool_workqueue to put (can be ``NULL``) **Description** put_pwq() with locking. This function also allows ``NULL`` **pwq**.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj.mh]”hŒ Parameters”…”�”}”(hj0mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,mubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¿hj(mubjg)�”}”(hhh]”jl)�”}”(hŒG``struct pool_workqueue *pwq`` pool_workqueue to put (can be ``NULL``) ”h]”(jr)�”}”(hŒ``struct pool_workqueue *pwq``”h]”jú)�”}”(hjMmh]”hŒstruct pool_workqueue *pwq”…”�”}”(hjOmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjKmubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¼hjGmubj‹)�”}”(hhh]”hì)�”}”(hŒ'pool_workqueue to put (can be ``NULL``)”h]”(hŒpool_workqueue to put (can be ”…”�”}”(hjfmh²hh³Nh´Nubjú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjnmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjfmubhŒ)”…”�”}”(hjfmh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jbmh´M¼hjcmubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjGmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jbmh´M¼hjDmubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj(mubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjšmh]”hŒ Description”…”�”}”(hjœmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj˜mubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¾hj(mubhì)�”}”(hŒDput_pwq() with locking. This function also allows ``NULL`` **pwq**.”h]”(hŒ3put_pwq() with locking. This function also allows ”…”�”}”(hj°mh²hh³Nh´Nubjú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj¸mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj°mubhŒ ”…”�”}”(hj°mh²hh³Nh´Nubj)�”}”(hŒ**pwq**”h]”hŒpwq”…”�”}”(hjÊmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°mubhŒ.”…”�”}”(hj°mh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M½hj(mubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ!pwq_tryinc_nr_active (C function)”Œc.pwq_tryinc_nr_active”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒAbool pwq_tryinc_nr_active (struct pool_workqueue *pwq, bool fill)”h]”jè)�”}”(hŒ@bool pwq_tryinc_nr_active(struct pool_workqueue *pwq, bool fill)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÿmh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Míubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÿmh²hh³jnh´Míubj)�”}”(hŒpwq_tryinc_nr_active”h]”j)�”}”(hŒpwq_tryinc_nr_active”h]”hŒpwq_tryinc_nr_active”…”�”}”(hj#nh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjnubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÿmh²hh³jnh´Míubj|)�”}”(hŒ'(struct pool_workqueue *pwq, bool fill)”h]”(j‚)�”}”(hŒstruct pool_workqueue *pwq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj?nh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj;nubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLnh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj;nubh)�”}”(hhh]”j)�”}”(hŒpool_workqueue”h]”hŒpool_workqueue”…”�”}”(hj]nh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjZnubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j_nŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j%nsbŒc.pwq_tryinc_nr_active”†”asbuh1hhj;nubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}nh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj;nubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj‹nh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj;nubj)�”}”(hŒpwq”h]”hŒpwq”…”�”}”(hj˜nh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj;nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj7nubj‚)�”}”(hŒ bool fill”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj±nh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj­nubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾nh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj­nubj)�”}”(hŒfill”h]”hŒfill”…”�”}”(hjÌnh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj­nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj7nubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÿmh²hh³jnh´Míubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjûmh²hh³jnh´Míubah}”(h]”jömah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jnh´Míhjømh²hubjC)�”}”(hhh]”hì)�”}”(hŒ$Try to increment nr_active for a pwq”h]”hŒ$Try to increment nr_active for a pwq”…”�”}”(hjönh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Míhjónh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjømh²hh³jnh´Míubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejojfjojg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX-**Parameters** ``struct pool_workqueue *pwq`` pool_workqueue of interest ``bool fill`` max_active may have increased, try to increase concurrency level **Description** Try to increment nr_active for **pwq**. Returns ``true`` if an nr_active count is successfully obtained. ``false`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjoh]”hŒ Parameters”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mñhjoubjg)�”}”(hhh]”(jl)�”}”(hŒ:``struct pool_workqueue *pwq`` pool_workqueue of interest ”h]”(jr)�”}”(hŒ``struct pool_workqueue *pwq``”h]”jú)�”}”(hj7oh]”hŒstruct pool_workqueue *pwq”…”�”}”(hj9oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj5oubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mîhj1oubj‹)�”}”(hhh]”hì)�”}”(hŒpool_workqueue of interest”h]”hŒpool_workqueue of interest”…”�”}”(hjPoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jLoh´MîhjMoubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj1oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jLoh´Mîhj.oubjl)�”}”(hŒO``bool fill`` max_active may have increased, try to increase concurrency level ”h]”(jr)�”}”(hŒ ``bool fill``”h]”jú)�”}”(hjpoh]”hŒ bool fill”…”�”}”(hjroh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjnoubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mïhjjoubj‹)�”}”(hhh]”hì)�”}”(hŒ@max_active may have increased, try to increase concurrency level”h]”hŒ@max_active may have increased, try to increase concurrency level”…”�”}”(hj‰oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j…oh´Mïhj†oubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j…oh´Mïhj.oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjoubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj«oh]”hŒ Description”…”�”}”(hj­oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©oubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mñhjoubhì)�”}”(hŒ}Try to increment nr_active for **pwq**. Returns ``true`` if an nr_active count is successfully obtained. ``false`` otherwise.”h]”(hŒTry to increment nr_active for ”…”�”}”(hjÁoh²hh³Nh´Nubj)�”}”(hŒ**pwq**”h]”hŒpwq”…”�”}”(hjÉoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁoubhŒ . Returns ”…”�”}”(hjÁoh²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjÛoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÁoubhŒ1 if an nr_active count is successfully obtained. ”…”�”}”(hjÁoh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjíoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÁoubhŒ otherwise.”…”�”}”(hjÁoh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mðhjoubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ(pwq_activate_first_inactive (C function)”Œc.pwq_activate_first_inactive”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒHbool pwq_activate_first_inactive (struct pool_workqueue *pwq, bool fill)”h]”jè)�”}”(hŒGbool pwq_activate_first_inactive(struct pool_workqueue *pwq, bool fill)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj&ph²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj"ph²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M=ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4ph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$•R]”h&]”uh1jÿhj"ph²hh³j3ph´M=ubj)�”}”(hŒpwq_activate_first_inactive”h]”j)�”}”(hŒpwq_activate_first_inactive”h]”hŒpwq_activate_first_inactive”…”�”}”(hjFph²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjBpubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj"ph²hh³j3ph´M=ubj|)�”}”(hŒ'(struct pool_workqueue *pwq, bool fill)”h]”(j‚)�”}”(hŒstruct pool_workqueue *pwq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjbph²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj^pubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj^pubh)�”}”(hhh]”j)�”}”(hŒpool_workqueue”h]”hŒpool_workqueue”…”�”}”(hj€ph²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj}pubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j‚pŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jHpsbŒc.pwq_activate_first_inactive”†”asbuh1hhj^pubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj^pubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj®ph²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj^pubj)�”}”(hŒpwq”h]”hŒpwq”…”�”}”(hj»ph²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj^pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjZpubj‚)�”}”(hŒ bool fill”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjÔph²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÐpubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÐpubj)�”}”(hŒfill”h]”hŒfill”…”�”}”(hjïph²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÐpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjZpubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj"ph²hh³j3ph´M=ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjph²hh³j3ph´M=ubah}”(h]”jpah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j3ph´M=hjph²hubjC)�”}”(hhh]”hì)�”}”(hŒ.Activate the first inactive work item on a pwq”h]”hŒ.Activate the first inactive work item on a pwq”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M=hjqh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjph²hh³j3ph´M=ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej1qjfj1qjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX™**Parameters** ``struct pool_workqueue *pwq`` pool_workqueue of interest ``bool fill`` max_active may have increased, try to increase concurrency level **Description** Activate the first inactive work item of **pwq** if available and allowed by max_active limit. Returns ``true`` if an inactive work item has been activated. ``false`` if no inactive work item is found or max_active limit is reached.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj;qh]”hŒ Parameters”…”�”}”(hj=qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9qubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MAhj5qubjg)�”}”(hhh]”(jl)�”}”(hŒ:``struct pool_workqueue *pwq`` pool_workqueue of interest ”h]”(jr)�”}”(hŒ``struct pool_workqueue *pwq``”h]”jú)�”}”(hjZqh]”hŒstruct pool_workqueue *pwq”…”�”}”(hj\qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjXqubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M>hjTqubj‹)�”}”(hhh]”hì)�”}”(hŒpool_workqueue of interest”h]”hŒpool_workqueue of interest”…”�”}”(hjsqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³joqh´M>hjpqubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjTqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³joqh´M>hjQqubjl)�”}”(hŒO``bool fill`` max_active may have increased, try to increase concurrency level ”h]”(jr)�”}”(hŒ ``bool fill``”h]”jú)�”}”(hj“qh]”hŒ bool fill”…”�”}”(hj•qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj‘qubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M?hj�qubj‹)�”}”(hhh]”hì)�”}”(hŒ@max_active may have increased, try to increase concurrency level”h]”hŒ@max_active may have increased, try to increase concurrency level”…”�”}”(hj¬qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¨qh´M?hj©qubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj�qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j¨qh´M?hjQqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj5qubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÎqh]”hŒ Description”…”�”}”(hjÐqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌqubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MAhj5qubhì)�”}”(hŒ^Activate the first inactive work item of **pwq** if available and allowed by max_active limit.”h]”(hŒ)Activate the first inactive work item of ”…”�”}”(hjäqh²hh³Nh´Nubj)�”}”(hŒ**pwq**”h]”hŒpwq”…”�”}”(hjìqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäqubhŒ. if available and allowed by max_active limit.”…”�”}”(hjäqh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M@hj5qubhì)�”}”(hŒ‰Returns ``true`` if an inactive work item has been activated. ``false`` if no inactive work item is found or max_active limit is reached.”h]”(hŒReturns ”…”�”}”(hjrh²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjrubhŒ. if an inactive work item has been activated. ”…”�”}”(hjrh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjrubhŒB if no inactive work item is found or max_active limit is reached.”…”�”}”(hjrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MChj5qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒunplug_oldest_pwq (C function)”Œc.unplug_oldest_pwq”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ4void unplug_oldest_pwq (struct workqueue_struct *wq)”h]”jè)�”}”(hŒ3void unplug_oldest_pwq(struct workqueue_struct *wq)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjXrh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjTrh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MVubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgrh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjTrh²hh³jfrh´MVubj)�”}”(hŒunplug_oldest_pwq”h]”j)�”}”(hŒunplug_oldest_pwq”h]”hŒunplug_oldest_pwq”…”�”}”(hjyrh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjurubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjTrh²hh³jfrh´MVubj|)�”}”(hŒ(struct workqueue_struct *wq)”h]”j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj•rh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj‘rubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢rh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj‘rubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hj³rh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj°rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jµrŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j{rsbŒc.unplug_oldest_pwq”†”asbuh1hhj‘rubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓrh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj‘rubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjárh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj‘rubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hjîrh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj‘rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj�rubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjTrh²hh³jfrh´MVubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjPrh²hh³jfrh´MVubah}”(h]”jKrah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jfrh´MVhjMrh²hubjC)�”}”(hhh]”hì)�”}”(hŒ unplug the oldest pool_workqueue”h]”hŒ unplug the oldest pool_workqueue”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MVhjsh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjMrh²hh³jfrh´MVubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej0sjfj0sjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX!**Parameters** ``struct workqueue_struct *wq`` workqueue_struct where its oldest pwq is to be unplugged **Description** This function should only be called for ordered workqueues where only the oldest pwq is unplugged, the others are plugged to suspend execution to ensure proper work item ordering:: dfl_pwq --------------+ [P] - plugged | v pwqs -> A -> B [P] -> C [P] (newest) | | | 1 3 5 | | | 2 4 6 When the oldest pwq is drained and removed, this function should be called to unplug the next oldest one to start its work item execution. Note that pwq's are linked into wq->pwqs with the oldest first, so the first one in the list is the oldest.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj:sh]”hŒ Parameters”…”�”}”(hj A -> B [P] -> C [P] (newest) | | | 1 3 5 | | | 2 4 6”h]”hŒÞdfl_pwq --------------+ [P] - plugged | v pwqs -> A -> B [P] -> C [P] (newest) | | | 1 3 5 | | | 2 4 6”…”�”}”hj¹ssbah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1jÝh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M\hj4subhì)�”}”(hŒöWhen the oldest pwq is drained and removed, this function should be called to unplug the next oldest one to start its work item execution. Note that pwq's are linked into wq->pwqs with the oldest first, so the first one in the list is the oldest.”h]”hŒøWhen the oldest pwq is drained and removed, this function should be called to unplug the next oldest one to start its work item execution. Note that pwq’s are linked into wq->pwqs with the oldest first, so the first one in the list is the oldest.”…”�”}”(hjÈsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mehj4subeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ&node_activate_pending_pwq (C function)”Œc.node_activate_pending_pwq”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ_void node_activate_pending_pwq (struct wq_node_nr_active *nna, struct worker_pool *caller_pool)”h]”jè)�”}”(hŒ^void node_activate_pending_pwq(struct wq_node_nr_active *nna, struct worker_pool *caller_pool)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj÷sh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjósh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MŠubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjósh²hh³jth´MŠubj)�”}”(hŒnode_activate_pending_pwq”h]”j)�”}”(hŒnode_activate_pending_pwq”h]”hŒnode_activate_pending_pwq”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjtubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjósh²hh³jth´MŠubj|)�”}”(hŒ@(struct wq_node_nr_active *nna, struct worker_pool *caller_pool)”h]”(j‚)�”}”(hŒstruct wq_node_nr_active *nna”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj4th²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj0tubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAth²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj0tubh)�”}”(hhh]”j)�”}”(hŒwq_node_nr_active”h]”hŒwq_node_nr_active”…”�”}”(hjRth²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjOtubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jTtŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jtsbŒc.node_activate_pending_pwq”†”asbuh1hhj0tubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrth²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj0tubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj€th²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj0tubj)�”}”(hŒnna”h]”hŒnna”…”�”}”(hj�th²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj0tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj,tubj‚)�”}”(hŒstruct worker_pool *caller_pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¦th²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj¢tubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³th²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¢tubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hjÄth²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÁtubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÆtŒmodname”NŒ classname”Nj7j:)�”}”j=]”jntŒc.node_activate_pending_pwq”†”asbuh1hhj¢tubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâth²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¢tubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjðth²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj¢tubj)�”}”(hŒ caller_pool”h]”hŒ caller_pool”…”�”}”(hjýth²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¢tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj,tubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjósh²hh³jth´MŠubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjïsh²hh³jth´MŠubah}”(h]”jêsah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jth´MŠhjìsh²hubjC)�”}”(hhh]”hì)�”}”(hŒ-Activate a pending pwq on a wq_node_nr_active”h]”hŒ-Activate a pending pwq on a wq_node_nr_active”…”�”}”(hj'uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MŠhj$uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjìsh²hh³jth´MŠubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej?ujfj?ujg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXT**Parameters** ``struct wq_node_nr_active *nna`` wq_node_nr_active to activate a pending pwq for ``struct worker_pool *caller_pool`` worker_pool the caller is locking **Description** Activate a pwq in **nna->pending_pwqs**. Called with **caller_pool** locked. **caller_pool** may be unlocked and relocked to lock other worker_pools.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjIuh]”hŒ Parameters”…”�”}”(hjKuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjGuubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MŽhjCuubjg)�”}”(hhh]”(jl)�”}”(hŒR``struct wq_node_nr_active *nna`` wq_node_nr_active to activate a pending pwq for ”h]”(jr)�”}”(hŒ!``struct wq_node_nr_active *nna``”h]”jú)�”}”(hjhuh]”hŒstruct wq_node_nr_active *nna”…”�”}”(hjjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjfuubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‹hjbuubj‹)�”}”(hhh]”hì)�”}”(hŒ/wq_node_nr_active to activate a pending pwq for”h]”hŒ/wq_node_nr_active to activate a pending pwq for”…”�”}”(hj�uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j}uh´M‹hj~uubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjbuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j}uh´M‹hj_uubjl)�”}”(hŒF``struct worker_pool *caller_pool`` worker_pool the caller is locking ”h]”(jr)�”}”(hŒ#``struct worker_pool *caller_pool``”h]”jú)�”}”(hj¡uh]”hŒstruct worker_pool *caller_pool”…”�”}”(hj£uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjŸuubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MŒhj›uubj‹)�”}”(hhh]”hì)�”}”(hŒ!worker_pool the caller is locking”h]”hŒ!worker_pool the caller is locking”…”�”}”(hjºuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¶uh´MŒhj·uubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj›uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j¶uh´MŒhj_uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjCuubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÜuh]”hŒ Description”…”�”}”(hjÞuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚuubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MŽhjCuubhì)�”}”(hŒ•Activate a pwq in **nna->pending_pwqs**. Called with **caller_pool** locked. **caller_pool** may be unlocked and relocked to lock other worker_pools.”h]”(hŒActivate a pwq in ”…”�”}”(hjòuh²hh³Nh´Nubj)�”}”(hŒ**nna->pending_pwqs**”h]”hŒnna->pending_pwqs”…”�”}”(hjúuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòuubhŒ. Called with ”…”�”}”(hjòuh²hh³Nh´Nubj)�”}”(hŒ**caller_pool**”h]”hŒ caller_pool”…”�”}”(hj vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòuubhŒ locked. ”…”�”}”(hjòuh²hh³Nh´Nubj)�”}”(hŒ**caller_pool**”h]”hŒ caller_pool”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòuubhŒ9 may be unlocked and relocked to lock other worker_pools.”…”�”}”(hjòuh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hjCuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒpwq_dec_nr_active (C function)”Œc.pwq_dec_nr_active”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ3void pwq_dec_nr_active (struct pool_workqueue *pwq)”h]”jè)�”}”(hŒ2void pwq_dec_nr_active(struct pool_workqueue *pwq)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjWvh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjSvh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÛubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfvh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjSvh²hh³jevh´MÛubj)�”}”(hŒpwq_dec_nr_active”h]”j)�”}”(hŒpwq_dec_nr_active”h]”hŒpwq_dec_nr_active”…”�”}”(hjxvh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjtvubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjSvh²hh³jevh´MÛubj|)�”}”(hŒ(struct pool_workqueue *pwq)”h]”j‚)�”}”(hŒstruct pool_workqueue *pwq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj”vh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj�vubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡vh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj�vubh)�”}”(hhh]”j)�”}”(hŒpool_workqueue”h]”hŒpool_workqueue”…”�”}”(hj²vh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¯vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j´vŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jzvsbŒc.pwq_dec_nr_active”†”asbuh1hhj�vubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒvh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj�vubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjàvh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj�vubj)�”}”(hŒpwq”h]”hŒpwq”…”�”}”(hjívh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj�vubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjŒvubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjSvh²hh³jevh´MÛubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjOvh²hh³jevh´MÛubah}”(h]”jJvah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jevh´MÛhjLvh²hubjC)�”}”(hhh]”hì)�”}”(hŒRetire an active count”h]”hŒRetire an active count”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÛhjwh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjLvh²hh³jevh´MÛubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej/wjfj/wjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒý**Parameters** ``struct pool_workqueue *pwq`` pool_workqueue of interest **Description** Decrement **pwq**'s nr_active and try to activate the first inactive work item. For unbound workqueues, this function may temporarily drop **pwq->pool->lock**.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj9wh]”hŒ Parameters”…”�”}”(hj;wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7wubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mßhj3wubjg)�”}”(hhh]”jl)�”}”(hŒ:``struct pool_workqueue *pwq`` pool_workqueue of interest ”h]”(jr)�”}”(hŒ``struct pool_workqueue *pwq``”h]”jú)�”}”(hjXwh]”hŒstruct pool_workqueue *pwq”…”�”}”(hjZwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjVwubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÜhjRwubj‹)�”}”(hhh]”hì)�”}”(hŒpool_workqueue of interest”h]”hŒpool_workqueue of interest”…”�”}”(hjqwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jmwh´MÜhjnwubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjRwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jmwh´MÜhjOwubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj3wubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj“wh]”hŒ Description”…”�”}”(hj•wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘wubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÞhj3wubhì)�”}”(hŒŸDecrement **pwq**'s nr_active and try to activate the first inactive work item. For unbound workqueues, this function may temporarily drop **pwq->pool->lock**.”h]”(hŒ Decrement ”…”�”}”(hj©wh²hh³Nh´Nubj)�”}”(hŒ**pwq**”h]”hŒpwq”…”�”}”(hj±wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©wubhŒ|’s nr_active and try to activate the first inactive work item. For unbound workqueues, this function may temporarily drop ”…”�”}”(hj©wh²hh³Nh´Nubj)�”}”(hŒ**pwq->pool->lock**”h]”hŒpwq->pool->lock”…”�”}”(hjÃwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©wubhŒ.”…”�”}”(hj©wh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÝhj3wubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ!pwq_dec_nr_in_flight (C function)”Œc.pwq_dec_nr_in_flight”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒOvoid pwq_dec_nr_in_flight (struct pool_workqueue *pwq, unsigned long work_data)”h]”jè)�”}”(hŒNvoid pwq_dec_nr_in_flight(struct pool_workqueue *pwq, unsigned long work_data)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjüwh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjøwh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj xh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjøwh²hh³j xh´Mubj)�”}”(hŒpwq_dec_nr_in_flight”h]”j)�”}”(hŒpwq_dec_nr_in_flight”h]”hŒpwq_dec_nr_in_flight”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjxubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjøwh²hh³j xh´Mubj|)�”}”(hŒ5(struct pool_workqueue *pwq, unsigned long work_data)”h]”(j‚)�”}”(hŒstruct pool_workqueue *pwq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj9xh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj5xubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFxh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj5xubh)�”}”(hhh]”j)�”}”(hŒpool_workqueue”h]”hŒpool_workqueue”…”�”}”(hjWxh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjTxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jYxŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jxsbŒc.pwq_dec_nr_in_flight”†”asbuh1hhj5xubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwxh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj5xubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj…xh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj5xubj)�”}”(hŒpwq”h]”hŒpwq”…”�”}”(hj’xh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj5xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj1xubj‚)�”}”(hŒunsigned long work_data”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj«xh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj§xubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹xh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj§xubj¤)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÇxh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj§xubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕxh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj§xubj)�”}”(hŒ work_data”h]”hŒ work_data”…”�”}”(hjãxh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj§xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj1xubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjøwh²hh³j xh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjôwh²hh³j xh´Mubah}”(h]”jïwah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j xh´Mhjñwh²hubjC)�”}”(hhh]”hì)�”}”(hŒdecrement pwq's nr_in_flight”h]”hŒdecrement pwq’s nr_in_flight”…”�”}”(hj yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj yh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjñwh²hh³j xh´Mubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej%yjfj%yjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXÿ**Parameters** ``struct pool_workqueue *pwq`` pwq of interest ``unsigned long work_data`` work_data of work which left the queue **Description** A work either has completed or is removed from pending queue, decrement nr_in_flight of its pwq and handle workqueue flushing. **NOTE** For unbound workqueues, this function may temporarily drop **pwq->pool->lock** and thus should be called after all other state updates for the in-flight work item is complete. **Context** raw_spin_lock_irq(pool->lock).”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj/yh]”hŒ Parameters”…”�”}”(hj1yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-yubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj)yubjg)�”}”(hhh]”(jl)�”}”(hŒ/``struct pool_workqueue *pwq`` pwq of interest ”h]”(jr)�”}”(hŒ``struct pool_workqueue *pwq``”h]”jú)�”}”(hjNyh]”hŒstruct pool_workqueue *pwq”…”�”}”(hjPyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjLyubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjHyubj‹)�”}”(hhh]”hì)�”}”(hŒpwq of interest”h]”hŒpwq of interest”…”�”}”(hjgyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jcyh´Mhjdyubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjHyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jcyh´MhjEyubjl)�”}”(hŒC``unsigned long work_data`` work_data of work which left the queue ”h]”(jr)�”}”(hŒ``unsigned long work_data``”h]”jú)�”}”(hj‡yh]”hŒunsigned long work_data”…”�”}”(hj‰yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj…yubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj�yubj‹)�”}”(hhh]”hì)�”}”(hŒ&work_data of work which left the queue”h]”hŒ&work_data of work which left the queue”…”�”}”(hj yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jœyh´Mhj�yubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj�yubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jœyh´MhjEyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj)yubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÂyh]”hŒ Description”…”�”}”(hjÄyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀyubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj)yubhì)�”}”(hŒ~A work either has completed or is removed from pending queue, decrement nr_in_flight of its pwq and handle workqueue flushing.”h]”hŒ~A work either has completed or is removed from pending queue, decrement nr_in_flight of its pwq and handle workqueue flushing.”…”�”}”(hjØyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj)yubhì)�”}”(hŒ**NOTE**”h]”j)�”}”(hjéyh]”hŒNOTE”…”�”}”(hjëyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjçyubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj)yubhì)�”}”(hŒ¯For unbound workqueues, this function may temporarily drop **pwq->pool->lock** and thus should be called after all other state updates for the in-flight work item is complete.”h]”(hŒ;For unbound workqueues, this function may temporarily drop ”…”�”}”(hjÿyh²hh³Nh´Nubj)�”}”(hŒ**pwq->pool->lock**”h]”hŒpwq->pool->lock”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿyubhŒa and thus should be called after all other state updates for the in-flight work item is complete.”…”�”}”(hjÿyh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj)yubhì)�”}”(hŒ **Context**”h]”j)�”}”(hj"zh]”hŒContext”…”�”}”(hj$zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj zubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj)yubhì)�”}”(hŒraw_spin_lock_irq(pool->lock).”h]”hŒraw_spin_lock_irq(pool->lock).”…”�”}”(hj8zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj)yubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ try_to_grab_pending (C function)”Œc.try_to_grab_pending”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒXint try_to_grab_pending (struct work_struct *work, u32 cflags, unsigned long *irq_flags)”h]”jè)�”}”(hŒWint try_to_grab_pending(struct work_struct *work, u32 cflags, unsigned long *irq_flags)”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjgzh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjczh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M=ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvzh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjczh²hh³juzh´M=ubj)�”}”(hŒtry_to_grab_pending”h]”j)�”}”(hŒtry_to_grab_pending”h]”hŒtry_to_grab_pending”…”�”}”(hjˆzh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj„zubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjczh²hh³juzh´M=ubj|)�”}”(hŒ@(struct work_struct *work, u32 cflags, unsigned long *irq_flags)”h]”(j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¤zh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj zubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±zh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj zubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjÂzh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¿zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÄzŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jŠzsbŒc.try_to_grab_pending”†”asbuh1hhj zubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâzh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj zubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjðzh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj zubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjýzh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj zubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjœzubj‚)�”}”(hŒ u32 cflags”h]”(h)�”}”(hhh]”j)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j{Œmodname”NŒ classname”Nj7j:)�”}”j=]”jÞzŒc.try_to_grab_pending”†”asbuh1hhj{ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7{h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj{ubj)�”}”(hŒcflags”h]”hŒcflags”…”�”}”(hjE{h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjœzubj‚)�”}”(hŒunsigned long *irq_flags”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj^{h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjZ{ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl{h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjZ{ubj¤)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjz{h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjZ{ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ{h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjZ{ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj–{h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjZ{ubj)�”}”(hŒ irq_flags”h]”hŒ irq_flags”…”�”}”(hj£{h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjZ{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjœzubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjczh²hh³juzh´M=ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj_zh²hh³juzh´M=ubah}”(h]”jZzah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³juzh´M=hj\zh²hubjC)�”}”(hhh]”hì)�”}”(hŒ-steal work item from worklist and disable irq”h]”hŒ-steal work item from worklist and disable irq”…”�”}”(hjÍ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M=hjÊ{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj\zh²hh³juzh´M=ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejå{jfjå{jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX�**Parameters** ``struct work_struct *work`` work item to steal ``u32 cflags`` ``WORK_CANCEL_`` flags ``unsigned long *irq_flags`` place to store irq state **Description** Try to grab PENDING bit of **work**. This function can handle **work** in any stable state - idle, on timer or on worklist. ======== ================================================================ 1 if **work** was pending and we successfully stole PENDING 0 if **work** was idle and we claimed PENDING -EAGAIN if PENDING couldn't be grabbed at the moment, safe to busy-retry ======== ================================================================ **Note** On >= 0 return, the caller owns **work**'s PENDING bit. To avoid getting interrupted while holding PENDING and **work** off queue, irq must be disabled on entry. This, combined with delayed_work->timer being irqsafe, ensures that we return -EAGAIN for finite short period of time. On successful return, >= 0, irq is disabled and the caller is responsible for releasing it using local_irq_restore(***irq_flags**). This function is safe to call from any context including IRQ handler.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjï{h]”hŒ Parameters”…”�”}”(hjñ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjí{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MAhjé{ubjg)�”}”(hhh]”(jl)�”}”(hŒ0``struct work_struct *work`` work item to steal ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hj|h]”hŒstruct work_struct *work”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj |ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M>hj|ubj‹)�”}”(hhh]”hì)�”}”(hŒwork item to steal”h]”hŒwork item to steal”…”�”}”(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&]”uh1jkh³j#|h´M>hj|ubjl)�”}”(hŒ&``u32 cflags`` ``WORK_CANCEL_`` flags ”h]”(jr)�”}”(hŒ``u32 cflags``”h]”jú)�”}”(hjG|h]”hŒ u32 cflags”…”�”}”(hjI|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjE|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M?hjA|ubj‹)�”}”(hhh]”hì)�”}”(hŒ``WORK_CANCEL_`` flags”h]”(jú)�”}”(hŒ``WORK_CANCEL_``”h]”hŒ WORK_CANCEL_”…”�”}”(hjd|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj`|ubhŒ flags”…”�”}”(hj`|h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j\|h´M?hj]|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjA|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j\|h´M?hj|ubjl)�”}”(hŒ6``unsigned long *irq_flags`` place to store irq state ”h]”(jr)�”}”(hŒ``unsigned long *irq_flags``”h]”jú)�”}”(hjŽ|h]”hŒunsigned long *irq_flags”…”�”}”(hj�|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjŒ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M@hjˆ|ubj‹)�”}”(hhh]”hì)�”}”(hŒplace to store irq state”h]”hŒplace to store irq state”…”�”}”(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&]”uh1jkh³j£|h´M@hj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjé{ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÉ|h]”hŒ Description”…”�”}”(hjË|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MBhjé{ubhì)�”}”(hŒ|Try to grab PENDING bit of **work**. This function can handle **work** in any stable state - idle, on timer or on worklist.”h]”(hŒTry to grab PENDING bit of ”…”�”}”(hjß|h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjç|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjß|ubhŒ. This function can handle ”…”�”}”(hjß|h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjù|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjß|ubhŒ5 in any stable state - idle, on timer or on worklist.”…”�”}”(hjß|h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MAhjé{ubj¶)�”}”(hXe======== ================================================================ 1 if **work** was pending and we successfully stole PENDING 0 if **work** was idle and we claimed PENDING -EAGAIN if PENDING couldn't be grabbed at the moment, safe to busy-retry ======== ================================================================ ”h]”jm )�”}”(hhh]”jr )�”}”(hhh]”(jw )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jv hj}ubjw )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K@uh1jv hj}ubjò )�”}”(hhh]”(jš )�”}”(hhh]”(jŸ )�”}”(hhh]”hì)�”}”(hŒ1”h]”hŒ1”…”�”}”(hj9}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MFhj6}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj3}ubjŸ )�”}”(hhh]”hì)�”}”(hŒ9if **work** was pending and we successfully stole PENDING”h]”(hŒif ”…”�”}”(hjQ}h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjY}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ}ubhŒ. was pending and we successfully stole PENDING”…”�”}”(hjQ}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jG}h´MFhjN}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj3}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j™ hj0}ubjš )�”}”(hhh]”(jŸ )�”}”(hhh]”hì)�”}”(hŒ0”h]”hŒ0”…”�”}”(hjƒ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MGhj€}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj}}ubjŸ )�”}”(hhh]”hì)�”}”(hŒ+if **work** was idle and we claimed PENDING”h]”(hŒif ”…”�”}”(hj›}h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj£}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›}ubhŒ was idle and we claimed PENDING”…”�”}”(hj›}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j‘}h´MGhj˜}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hj}}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j™ hj0}ubjš )�”}”(hhh]”(jŸ )�”}”(hhh]”hì)�”}”(hŒ-EAGAIN”h]”hŒ-EAGAIN”…”�”}”(hjÍ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MHhjÊ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hjÇ}ubjŸ )�”}”(hhh]”hì)�”}”(hŒ@if PENDING couldn't be grabbed at the moment, safe to busy-retry”h]”hŒBif PENDING couldn’t be grabbed at the moment, safe to busy-retry”…”�”}”(hjå}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÛ}h´MHhjâ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jž hjÇ}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j™ hj0}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jñ hj}ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jq hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jl hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jµh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MEhjé{ubhì)�”}”(hŒ**Note**”h]”j)�”}”(hj~h]”hŒNote”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MKhjé{ubhì)�”}”(hXOn >= 0 return, the caller owns **work**'s PENDING bit. To avoid getting interrupted while holding PENDING and **work** off queue, irq must be disabled on entry. This, combined with delayed_work->timer being irqsafe, ensures that we return -EAGAIN for finite short period of time.”h]”(hŒ On >= 0 return, the caller owns ”…”�”}”(hj1~h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj9~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1~ubhŒJ’s PENDING bit. To avoid getting interrupted while holding PENDING and ”…”�”}”(hj1~h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjK~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1~ubhŒ¢ off queue, irq must be disabled on entry. This, combined with delayed_work->timer being irqsafe, ensures that we return -EAGAIN for finite short period of time.”…”�”}”(hj1~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MMhjé{ubhì)�”}”(hŒƒOn successful return, >= 0, irq is disabled and the caller is responsible for releasing it using local_irq_restore(***irq_flags**).”h]”(hŒsOn successful return, >= 0, irq is disabled and the caller is responsible for releasing it using local_irq_restore(”…”�”}”(hjd~h²hh³Nh´Nubj)�”}”(hŒ***irq_flags**”h]”hŒ *irq_flags”…”�”}”(hjl~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjd~ubhŒ).”…”�”}”(hjd~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MRhjé{ubhì)�”}”(hŒEThis function is safe to call from any context including IRQ handler.”h]”hŒEThis function is safe to call from any context including IRQ handler.”…”�”}”(hj…~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MUhjé{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒwork_grab_pending (C function)”Œc.work_grab_pending”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒWbool work_grab_pending (struct work_struct *work, u32 cflags, unsigned long *irq_flags)”h]”jè)�”}”(hŒVbool work_grab_pending(struct work_struct *work, u32 cflags, unsigned long *irq_flags)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj´~h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj°~h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M²ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ~h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj°~h²hh³jÁ~h´M²ubj)�”}”(hŒwork_grab_pending”h]”j)�”}”(hŒwork_grab_pending”h]”hŒwork_grab_pending”…”�”}”(hjÔ~h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÐ~ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj°~h²hh³jÁ~h´M²ubj|)�”}”(hŒ@(struct work_struct *work, u32 cflags, unsigned long *irq_flags)”h]”(j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjð~h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjì~ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý~h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjì~ubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jÖ~sbŒc.work_grab_pending”†”asbuh1hhjì~ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjì~ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjì~ubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjì~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjè~ubj‚)�”}”(hŒ u32 cflags”h]”(h)�”}”(hhh]”j)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jgŒmodname”NŒ classname”Nj7j:)�”}”j=]”j*Œc.work_grab_pending”†”asbuh1hhj^ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj^ubj)�”}”(hŒcflags”h]”hŒcflags”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjè~ubj‚)�”}”(hŒunsigned long *irq_flags”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj¦ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¦ubj¤)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj¦ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¦ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj¦ubj)�”}”(hŒ irq_flags”h]”hŒ irq_flags”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjè~ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj°~h²hh³jÁ~h´M²ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj¬~h²hh³jÁ~h´M²ubah}”(h]”j§~ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÁ~h´M²hj©~h²hubjC)�”}”(hhh]”hì)�”}”(hŒ-steal work item from worklist and disable irq”h]”hŒ-steal work item from worklist and disable irq”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M²hj€h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj©~h²hh³jÁ~h´M²ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej1€jfj1€jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX**Parameters** ``struct work_struct *work`` work item to steal ``u32 cflags`` ``WORK_CANCEL_`` flags ``unsigned long *irq_flags`` place to store IRQ state **Description** Grab PENDING bit of **work**. **work** can be in any stable state - idle, on timer or on worklist. Can be called from any context. IRQ is disabled on return with IRQ state stored in ***irq_flags**. The caller is responsible for re-enabling it using local_irq_restore(). Returns ``true`` if **work** was pending. ``false`` if idle.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj;€h]”hŒ Parameters”…”�”}”(hj=€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¶hj5€ubjg)�”}”(hhh]”(jl)�”}”(hŒ0``struct work_struct *work`` work item to steal ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hjZ€h]”hŒstruct work_struct *work”…”�”}”(hj\€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjX€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M³hjT€ubj‹)�”}”(hhh]”hì)�”}”(hŒwork item to steal”h]”hŒwork item to steal”…”�”}”(hjs€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jo€h´M³hjp€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjT€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jo€h´M³hjQ€ubjl)�”}”(hŒ&``u32 cflags`` ``WORK_CANCEL_`` flags ”h]”(jr)�”}”(hŒ``u32 cflags``”h]”jú)�”}”(hj“€h]”hŒ u32 cflags”…”�”}”(hj•€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj‘€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M´hj�€ubj‹)�”}”(hhh]”hì)�”}”(hŒ``WORK_CANCEL_`` flags”h]”(jú)�”}”(hŒ``WORK_CANCEL_``”h]”hŒ WORK_CANCEL_”…”�”}”(hj°€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¬€ubhŒ flags”…”�”}”(hj¬€h²hh³Nh´Nubeh}”(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&]”uh1jkh³j¨€h´M´hjQ€ubjl)�”}”(hŒ6``unsigned long *irq_flags`` place to store IRQ state ”h]”(jr)�”}”(hŒ``unsigned long *irq_flags``”h]”jú)�”}”(hjÚ€h]”hŒunsigned long *irq_flags”…”�”}”(hjÜ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjØ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MµhjÔ€ubj‹)�”}”(hhh]”hì)�”}”(hŒplace to store IRQ state”h]”hŒplace to store IRQ state”…”�”}”(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&]”uh1jkh³jï€h´MµhjQ€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj5€ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj�h]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M·hj5€ubhì)�”}”(hŒbGrab PENDING bit of **work**. **work** can be in any stable state - idle, on timer or on worklist.”h]”(hŒGrab PENDING bit of ”…”�”}”(hj+�h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj3�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+�ubhŒ. ”…”�”}”(hj+�h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjE�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+�ubhŒ< can be in any stable state - idle, on timer or on worklist.”…”�”}”(hj+�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¶hj5€ubhì)�”}”(hŒªCan be called from any context. IRQ is disabled on return with IRQ state stored in ***irq_flags**. The caller is responsible for re-enabling it using local_irq_restore().”h]”(hŒSCan be called from any context. IRQ is disabled on return with IRQ state stored in ”…”�”}”(hj^�h²hh³Nh´Nubj)�”}”(hŒ***irq_flags**”h]”hŒ *irq_flags”…”�”}”(hjf�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^�ubhŒI. The caller is responsible for re-enabling it using local_irq_restore().”…”�”}”(hj^�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¹hj5€ubhì)�”}”(hŒlock).”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj÷ƒh]”hŒ Parameters”…”�”}”(hjùƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÒhjñƒubjg)�”}”(hhh]”(jl)�”}”(hŒ7``struct pool_workqueue *pwq`` pwq **work** belongs to ”h]”(jr)�”}”(hŒ``struct pool_workqueue *pwq``”h]”jú)�”}”(hj„h]”hŒstruct pool_workqueue *pwq”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÏhj„ubj‹)�”}”(hhh]”hì)�”}”(hŒpwq **work** belongs to”h]”(hŒpwq ”…”�”}”(hj/„h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj7„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/„ubhŒ belongs to”…”�”}”(hj/„h²hh³Nh´Nubeh}”(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&]”uh1jkh³j+„h´MÏhj „ubjl)�”}”(hŒ,``struct work_struct *work`` work to insert ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hja„h]”hŒstruct work_struct *work”…”�”}”(hjc„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj_„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÐhj[„ubj‹)�”}”(hhh]”hì)�”}”(hŒwork to insert”h]”hŒwork to insert”…”�”}”(hjz„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jv„h´MÐhjw„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj[„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jv„h´MÐhj „ubjl)�”}”(hŒ+``struct list_head *head`` insertion point ”h]”(jr)�”}”(hŒ``struct list_head *head``”h]”jú)�”}”(hjš„h]”hŒstruct list_head *head”…”�”}”(hjœ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj˜„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÑhj”„ubj‹)�”}”(hhh]”hì)�”}”(hŒinsertion point”h]”hŒinsertion point”…”�”}”(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&]”uh1jkh³j¯„h´MÑhj „ubjl)�”}”(hŒ>``unsigned int extra_flags`` extra WORK_STRUCT_* flags to set ”h]”(jr)�”}”(hŒ``unsigned int extra_flags``”h]”jú)�”}”(hjÓ„h]”hŒunsigned int extra_flags”…”�”}”(hjÕ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÑ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÒhjÍ„ubj‹)�”}”(hhh]”hì)�”}”(hŒ extra WORK_STRUCT_* flags to set”h]”hŒ extra WORK_STRUCT_* flags to set”…”�”}”(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&]”uh1jkh³jè„h´MÒhj „ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjñƒubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj…h]”hŒ Description”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj …ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÔhjñƒubhì)�”}”(hŒgInsert **work** which belongs to **pwq** after **head**. **extra_flags** is or'd to work_struct flags.”h]”(hŒInsert ”…”�”}”(hj$…h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj,…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$…ubhŒ which belongs to ”…”�”}”(hj$…h²hh³Nh´Nubj)�”}”(hŒ**pwq**”h]”hŒpwq”…”�”}”(hj>…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$…ubhŒ after ”…”�”}”(hj$…h²hh³Nh´Nubj)�”}”(hŒ**head**”h]”hŒhead”…”�”}”(hjP…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$…ubhŒ. ”…”�”}”(hj$…h²hh³Nh´Nubj)�”}”(hŒ**extra_flags**”h]”hŒ extra_flags”…”�”}”(hjb…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$…ubhŒ is or’d to work_struct flags.”…”�”}”(hj$…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”•zh´MÓhjñƒubhì)�”}”(hŒ **Context**”h]”j)�”}”(hj}…h]”hŒContext”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÖhjñƒubhì)�”}”(hŒraw_spin_lock_irq(pool->lock).”h]”hŒraw_spin_lock_irq(pool->lock).”…”�”}”(hj“…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M×hjñƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒqueue_work_on (C function)”Œc.queue_work_on”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒSbool queue_work_on (int cpu, struct workqueue_struct *wq, struct work_struct *work)”h]”jè)�”}”(hŒRbool queue_work_on(int cpu, struct workqueue_struct *wq, struct work_struct *work)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjÂ…h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj¾…h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M® ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ…h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¾…h²hh³jÏ…h´M® ubj)�”}”(hŒ queue_work_on”h]”j)�”}”(hŒ queue_work_on”h]”hŒ queue_work_on”…”�”}”(hjâ…h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÞ…ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj¾…h²hh³jÏ…h´M® ubj|)�”}”(hŒ@(int cpu, struct workqueue_struct *wq, struct work_struct *work)”h]”(j‚)�”}”(hŒint cpu”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjþ…h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjú…ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj †h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjú…ubj)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjú…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjö…ubj‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj3†h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj/†ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj/†ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjQ†h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjN†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jS†Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jä…sbŒc.queue_work_on”†”asbuh1hhj/†ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj/†ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj/†ubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hjŒ†h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj/†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjö…ubj‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¥†h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj¡†ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¡†ubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÀ†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jņŒmodname”NŒ classname”Nj7j:)�”}”j=]”jm†Œc.queue_work_on”†”asbuh1hhj¡†ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¡†ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjï†h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj¡†ubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjü†h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¡†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjö…ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj¾…h²hh³jÏ…h´M® ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjº…h²hh³jÏ…h´M® ubah}”(h]”jµ…ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÏ…h´M® hj·…h²hubjC)�”}”(hhh]”hì)�”}”(hŒqueue work on specific cpu”h]”hŒqueue work on specific cpu”…”�”}”(hj&‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M® hj#‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj·…h²hh³jÏ…h´M® ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej>‡jfj>‡jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX**Parameters** ``int cpu`` CPU number to execute work on ``struct workqueue_struct *wq`` workqueue to use ``struct work_struct *work`` work to queue **Description** We queue the work to a specific CPU, the caller must ensure it can't go away. Callers that fail to ensure that the specified CPU cannot go away will execute on a randomly chosen CPU. But note well that callers specifying a CPU that never has been online will get a splat. **Return** ``false`` if **work** was already on a queue, ``true`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjH‡h]”hŒ Parameters”…”�”}”(hjJ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjF‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M² hjB‡ubjg)�”}”(hhh]”(jl)�”}”(hŒ*``int cpu`` CPU number to execute work on ”h]”(jr)�”}”(hŒ ``int cpu``”h]”jú)�”}”(hjg‡h]”hŒint cpu”…”�”}”(hji‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhje‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¯ hja‡ubj‹)�”}”(hhh]”hì)�”}”(hŒCPU number to execute work on”h]”hŒCPU number to execute work on”…”�”}”(hj€‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j|‡h´M¯ hj}‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhja‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j|‡h´M¯ hj^‡ubjl)�”}”(hŒ1``struct workqueue_struct *wq`` workqueue to use ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj ‡h]”hŒstruct workqueue_struct *wq”…”�”}”(hj¢‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjž‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M° hjš‡ubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue to use”h]”hŒworkqueue 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&]”uh1jkh³jµ‡h´M° hj^‡ubjl)�”}”(hŒ+``struct work_struct *work`` work to queue ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hjÙ‡h]”hŒstruct work_struct *work”…”�”}”(hjÛ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjׇubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M± hjÓ‡ubj‹)�”}”(hhh]”hì)�”}”(hŒ work to queue”h]”hŒ work to queue”…”�”}”(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&]”uh1jkh³jî‡h´M± hj^‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjB‡ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjˆh]”hŒ Description”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M³ hjB‡ubhì)�”}”(hXWe queue the work to a specific CPU, the caller must ensure it can't go away. Callers that fail to ensure that the specified CPU cannot go away will execute on a randomly chosen CPU. But note well that callers specifying a CPU that never has been online will get a splat.”h]”hXWe queue the work to a specific CPU, the caller must ensure it can’t go away. Callers that fail to ensure that the specified CPU cannot go away will execute on a randomly chosen CPU. But note well that callers specifying a CPU that never has been online will get a splat.”…”�”}”(hj*ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M² hjB‡ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj;ˆh]”hŒReturn”…”�”}”(hj=ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¸ hjB‡ubhì)�”}”(hŒA``false`` if **work** was already on a queue, ``true`` otherwise.”h]”(jú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjUˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjQˆubhŒ if ”…”�”}”(hjQˆh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjgˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQˆubhŒ was already on a queue, ”…”�”}”(hjQˆh²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjyˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjQˆubhŒ otherwise.”…”�”}”(hjQˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¹ hjB‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ!select_numa_node_cpu (C function)”Œc.select_numa_node_cpu”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ#int select_numa_node_cpu (int node)”h]”jè)�”}”(hŒ"int select_numa_node_cpu(int node)”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj²ˆh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj®ˆh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÏ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁˆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj®ˆh²hh³jÀˆh´MÏ ubj)�”}”(hŒselect_numa_node_cpu”h]”j)�”}”(hŒselect_numa_node_cpu”h]”hŒselect_numa_node_cpu”…”�”}”(hjÓˆh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjψubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj®ˆh²hh³jÀˆh´MÏ ubj|)�”}”(hŒ (int node)”h]”j‚)�”}”(hŒint node”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjïˆh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjëˆubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýˆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjëˆubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hj ‰h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjëˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjçˆubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj®ˆh²hh³jÀˆh´MÏ ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjªˆh²hh³jÀˆh´MÏ ubah}”(h]”j¥ˆah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÀˆh´MÏ hj§ˆh²hubjC)�”}”(hhh]”hì)�”}”(hŒSelect a CPU based on NUMA node”h]”hŒSelect a CPU based on NUMA node”…”�”}”(hj5‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÏ hj2‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj§ˆh²hh³jÀˆh´MÏ ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejM‰jfjM‰jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX\**Parameters** ``int node`` NUMA node ID that we want to select a CPU from **Description** This function will attempt to find a "random" cpu available on a given node. If there are no CPUs available on the given node it will return WORK_CPU_UNBOUND indicating that we should just schedule to any available CPU if we need to schedule this work.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjW‰h]”hŒ Parameters”…”�”}”(hjY‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjU‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÓ hjQ‰ubjg)�”}”(hhh]”jl)�”}”(hŒ<``int node`` NUMA node ID that we want to select a CPU from ”h]”(jr)�”}”(hŒ ``int node``”h]”jú)�”}”(hjv‰h]”hŒint node”…”�”}”(hjx‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjt‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÐ hjp‰ubj‹)�”}”(hhh]”hì)�”}”(hŒ.NUMA node ID that we want to select a CPU from”h]”hŒ.NUMA node ID that we want to select a CPU from”…”�”}”(hj�‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j‹‰h´MÐ hjŒ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjp‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j‹‰h´MÐ hjm‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjQ‰ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj±‰h]”hŒ Description”…”�”}”(hj³‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÒ hjQ‰ubhì)�”}”(hŒüThis function will attempt to find a "random" cpu available on a given node. If there are no CPUs available on the given node it will return WORK_CPU_UNBOUND indicating that we should just schedule to any available CPU if we need to schedule this work.”h]”hXThis function will attempt to find a “randomâ€� cpu available on a given node. If there are no CPUs available on the given node it will return WORK_CPU_UNBOUND indicating that we should just schedule to any available CPU if we need to schedule this work.”…”�”}”(hjljh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÑ hjQ‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒqueue_work_node (C function)”Œc.queue_work_node”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒVbool queue_work_node (int node, struct workqueue_struct *wq, struct work_struct *work)”h]”jè)�”}”(hŒUbool queue_work_node(int node, struct workqueue_struct *wq, struct work_struct *work)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjö‰h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjò‰h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mì ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjò‰h²hh³jŠh´Mì ubj)�”}”(hŒqueue_work_node”h]”j)�”}”(hŒqueue_work_node”h]”hŒqueue_work_node”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjŠubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjò‰h²hh³jŠh´Mì ubj|)�”}”(hŒA(int node, struct workqueue_struct *wq, struct work_struct *work)”h]”(j‚)�”}”(hŒint node”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj2Šh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj.Šubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@Šh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj.Šubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hjNŠh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj.Šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj*Šubj‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjgŠh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjcŠubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtŠh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjcŠubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hj…Šh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj‚Šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j‡ŠŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jŠsbŒc.queue_work_node”†”asbuh1hhjcŠubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Šh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjcŠubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj³Šh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjcŠubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hjÀŠh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjcŠubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj*Šubj‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÙŠh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjÕŠubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæŠh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÕŠubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hj÷Šh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjôŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jùŠŒmodname”NŒ classname”Nj7j:)�”}”j=]”j¡ŠŒc.queue_work_node”†”asbuh1hhjÕŠubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÕŠubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj#‹h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÕŠubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hj0‹h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÕŠubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj*Šubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjò‰h²hh³jŠh´Mì ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjî‰h²hh³jŠh´Mì ubah}”(h]”jé‰ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jŠh´Mì hjë‰h²hubjC)�”}”(hhh]”hì)�”}”(hŒ2queue work on a "random" cpu for a given NUMA node”h]”hŒ6queue work on a “randomâ€� cpu for a given NUMA node”…”�”}”(hjZ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mì hjW‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjë‰h²hh³jŠh´Mì ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejr‹jfjr‹jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXH**Parameters** ``int node`` NUMA node that we are targeting the work for ``struct workqueue_struct *wq`` workqueue to use ``struct work_struct *work`` work to queue **Description** We queue the work to a "random" CPU within a given NUMA node. The basic idea here is to provide a way to somehow associate work with a given NUMA node. This function will only make a best effort attempt at getting this onto the right NUMA node. If no node is requested or the requested node is offline then we just fall back to standard queue_work behavior. Currently the "random" CPU ends up being the first available CPU in the intersection of cpu_online_mask and the cpumask of the node, unless we are running on the node. In that case we just use the current CPU. **Return** ``false`` if **work** was already on a queue, ``true`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj|‹h]”hŒ Parameters”…”�”}”(hj~‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjz‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mð hjv‹ubjg)�”}”(hhh]”(jl)�”}”(hŒ:``int node`` NUMA node that we are targeting the work for ”h]”(jr)�”}”(hŒ ``int node``”h]”jú)�”}”(hj›‹h]”hŒint node”…”�”}”(hj�‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj™‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mí hj•‹ubj‹)�”}”(hhh]”hì)�”}”(hŒ,NUMA node that we are targeting the work for”h]”hŒ,NUMA node that we are targeting the work for”…”�”}”(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&]”uh1jkh³j°‹h´Mí hj’‹ubjl)�”}”(hŒ1``struct workqueue_struct *wq`` workqueue to use ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hjÔ‹h]”hŒstruct workqueue_struct *wq”…”�”}”(hjÖ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÒ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mî hj΋ubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue to use”h]”hŒworkqueue 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&]”uh1jkh³jé‹h´Mî hj’‹ubjl)�”}”(hŒ+``struct work_struct *work`` work to queue ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hj Œh]”hŒstruct work_struct *work”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj Œubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mï hjŒubj‹)�”}”(hhh]”hì)�”}”(hŒ work to queue”h]”hŒ work to queue”…”�”}”(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&]”uh1jkh³j"Œh´Mï hj’‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjv‹ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjHŒh]”hŒ Description”…”�”}”(hjJŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFŒubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mñ hjv‹ubhì)�”}”(hŒ—We queue the work to a "random" CPU within a given NUMA node. The basic idea here is to provide a way to somehow associate work with a given NUMA node.”h]”hŒ›We queue the work to a “randomâ€� CPU within a given NUMA node. The basic idea here is to provide a way to somehow associate work with a given NUMA node.”…”�”}”(hj^Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mð hjv‹ubhì)�”}”(hŒÍThis function will only make a best effort attempt at getting this onto the right NUMA node. If no node is requested or the requested node is offline then we just fall back to standard queue_work behavior.”h]”hŒÍThis function will only make a best effort attempt at getting this onto the right NUMA node. If no node is requested or the requested node is offline then we just fall back to standard queue_work behavior.”…”�”}”(hjmŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mô hjv‹ubhì)�”}”(hŒÑCurrently the "random" CPU ends up being the first available CPU in the intersection of cpu_online_mask and the cpumask of the node, unless we are running on the node. In that case we just use the current CPU.”h]”hŒÕCurrently the “randomâ€� CPU ends up being the first available CPU in the intersection of cpu_online_mask and the cpumask of the node, unless we are running on the node. In that case we just use the current CPU.”…”�”}”(hj|Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mø hjv‹ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj�Œh]”hŒReturn”…”�”}”(hj�Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹Œubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mü hjv‹ubhì)�”}”(hŒA``false`` if **work** was already on a queue, ``true`` otherwise.”h]”(jú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj§Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj£ŒubhŒ if ”…”�”}”(hj£Œh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj¹Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£ŒubhŒ was already on a queue, ”…”�”}”(hj£Œh²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjËŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj£ŒubhŒ otherwise.”…”�”}”(hj£Œh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mý hjv‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ"queue_delayed_work_on (C function)”Œc.queue_delayed_work_on”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒrbool queue_delayed_work_on (int cpu, struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)”h]”jè)�”}”(hŒqbool queue_delayed_work_on(int cpu, struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj�h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MQ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj�h²hh³j�h´MQ ubj)�”}”(hŒqueue_delayed_work_on”h]”j)�”}”(hŒqueue_delayed_work_on”h]”hŒqueue_delayed_work_on”…”�”}”(hj$�h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj �ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj�h²hh³j�h´MQ ubj|)�”}”(hŒW(int cpu, struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)”h]”(j‚)�”}”(hŒint cpu”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj@�h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj<�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj<�ubj)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj\�h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj<�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj8�ubj‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hju�h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjq�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjq�ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hj“�h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj��ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j•�Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j&�sbŒc.queue_delayed_work_on”†”asbuh1hhjq�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjq�ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÁ�h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjq�ubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hjÎ�h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjq�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj8�ubj‚)�”}”(hŒstruct delayed_work *dwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjç�h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjã�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjã�ubh)�”}”(hhh]”j)�”}”(hŒ delayed_work”h]”hŒ delayed_work”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jŽŒmodname”NŒ classname”Nj7j:)�”}”j=]”j¯�Œc.queue_delayed_work_on”†”asbuh1hhjã�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Žh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjã�ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj1Žh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjã�ubj)�”}”(hŒdwork”h]”hŒdwork”…”�”}”(hj>Žh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjã�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj8�ubj‚)�”}”(hŒunsigned long delay”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjWŽh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjSŽubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeŽh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjSŽubj¤)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjsŽh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjSŽubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Žh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjSŽubj)�”}”(hŒdelay”h]”hŒdelay”…”�”}”(hj�Žh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjSŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj8�ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj�h²hh³j�h´MQ ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjüŒh²hh³j�h´MQ ubah}”(h]”j÷Œah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j�h´MQ hjùŒh²hubjC)�”}”(hhh]”hì)�”}”(hŒ&queue work on specific CPU after delay”h]”hŒ&queue work on specific CPU after delay”…”�”}”(hj¹Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MQ hj¶Žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjùŒh²hh³j�h´MQ ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejÑŽjfjÑŽjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXÍ**Parameters** ``int cpu`` CPU number to execute work on ``struct workqueue_struct *wq`` workqueue to use ``struct delayed_work *dwork`` work to queue ``unsigned long delay`` number of jiffies to wait before queueing **Description** We queue the delayed_work to a specific CPU, for non-zero delays the caller must ensure it is online and can't go away. Callers that fail to ensure this, may get **dwork->timer** queued to an offlined CPU and this will prevent queueing of **dwork->work** unless the offlined CPU becomes online again. **Return** ``false`` if **work** was already on a queue, ``true`` otherwise. If **delay** is zero and **dwork** is idle, it will be scheduled for immediate execution.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÛŽh]”hŒ Parameters”…”�”}”(hjÝŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙŽubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MU hjÕŽubjg)�”}”(hhh]”(jl)�”}”(hŒ*``int cpu`` CPU number to execute work on ”h]”(jr)�”}”(hŒ ``int cpu``”h]”jú)�”}”(hjúŽh]”hŒint cpu”…”�”}”(hjüŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjøŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MR hjôŽubj‹)�”}”(hhh]”hì)�”}”(hŒCPU number to execute work on”h]”hŒCPU number to execute work on”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j�h´MR hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjôŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j�h´MR hjñŽubjl)�”}”(hŒ1``struct workqueue_struct *wq`` workqueue to use ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj3�h]”hŒstruct workqueue_struct *wq”…”�”}”(hj5�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj1�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MS hj-�ubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue to use”h]”hŒworkqueue to use”…”�”}”(hjL�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jH�h´MS hjI�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj-�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jH�h´MS hjñŽubjl)�”}”(hŒ-``struct delayed_work *dwork`` work to queue ”h]”(jr)�”}”(hŒ``struct delayed_work *dwork``”h]”jú)�”}”(hjl�h]”hŒstruct delayed_work *dwork”…”�”}”(hjn�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MT hjf�ubj‹)�”}”(hhh]”hì)�”}”(hŒ work to queue”h]”hŒ work to queue”…”�”}”(hj…�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j��h´MT hj‚�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjf�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j��h´MT hjñŽubjl)�”}”(hŒB``unsigned long delay`` number of jiffies to wait before queueing ”h]”(jr)�”}”(hŒ``unsigned long delay``”h]”jú)�”}”(hj¥�h]”hŒunsigned long delay”…”�”}”(hj§�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj£�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MU hjŸ�ubj‹)�”}”(hhh]”hì)�”}”(hŒ)number of jiffies to wait before queueing”h]”hŒ)number of jiffies to wait before queueing”…”�”}”(hj¾�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jº�h´MU hj»�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjŸ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jº�h´MU hjñŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjÕŽubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjà�h]”hŒ Description”…”�”}”(hjâ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MW hjÕŽubhì)�”}”(hX,We queue the delayed_work to a specific CPU, for non-zero delays the caller must ensure it is online and can't go away. Callers that fail to ensure this, may get **dwork->timer** queued to an offlined CPU and this will prevent queueing of **dwork->work** unless the offlined CPU becomes online again.”h]”(hŒ¤We queue the delayed_work to a specific CPU, for non-zero delays the caller must ensure it is online and can’t go away. Callers that fail to ensure this, may get ”…”�”}”(hjö�h²hh³Nh´Nubj)�”}”(hŒ**dwork->timer**”h]”hŒ dwork->timer”…”�”}”(hjþ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjö�ubhŒ= queued to an offlined CPU and this will prevent queueing of ”…”�”}”(hjö�h²hh³Nh´Nubj)�”}”(hŒ**dwork->work**”h]”hŒ dwork->work”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjö�ubhŒ. unless the offlined CPU becomes online again.”…”�”}”(hjö�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MV hjÕŽubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj+�h]”hŒReturn”…”�”}”(hj-�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M\ hjÕŽubhì)�”}”(hŒœ``false`` if **work** was already on a queue, ``true`` otherwise. If **delay** is zero and **dwork** is idle, it will be scheduled for immediate execution.”h]”(jú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjE�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjA�ubhŒ if ”…”�”}”(hjA�h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjW�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjA�ubhŒ was already on a queue, ”…”�”}”(hjA�h²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hji�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjA�ubhŒ otherwise. If ”…”�”}”(hjA�h²hh³Nh´Nubj)�”}”(hŒ **delay**”h]”hŒdelay”…”�”}”(hj{�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjA�ubhŒ is zero and ”…”�”}”(hjA�h²hh³Nh´Nubj)�”}”(hŒ **dwork**”h]”hŒdwork”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjA�ubhŒ7 is idle, it will be scheduled for immediate execution.”…”�”}”(hjA�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M] hjÕŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ mod_delayed_work_on (C function)”Œc.mod_delayed_work_on”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒpbool mod_delayed_work_on (int cpu, struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)”h]”jè)�”}”(hŒobool mod_delayed_work_on(int cpu, struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjÆ�h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÂ�h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mw ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÂ�h²hh³jÓ�h´Mw ubj)�”}”(hŒmod_delayed_work_on”h]”j)�”}”(hŒmod_delayed_work_on”h]”hŒmod_delayed_work_on”…”�”}”(hjæ�h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjâ�ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÂ�h²hh³jÓ�h´Mw ubj|)�”}”(hŒW(int cpu, struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)”h]”(j‚)�”}”(hŒint cpu”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjþ�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjþ�ubj)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjþ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjú�ubj‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj7‘h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj3‘ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD‘h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj3‘ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjU‘h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjR‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jW‘Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jè�sbŒc.mod_delayed_work_on”†”asbuh1hhj3‘ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju‘h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj3‘ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjƒ‘h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj3‘ubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hj�‘h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj3‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjú�ubj‚)�”}”(hŒstruct delayed_work *dwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj©‘h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj¥‘ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶‘h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¥‘ubh)�”}”(hhh]”j)�”}”(hŒ delayed_work”h]”hŒ delayed_work”…”�”}”(hjÇ‘h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÄ‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÉ‘Œmodname”NŒ classname”Nj7j:)�”}”j=]”jq‘Œc.mod_delayed_work_on”†”asbuh1hhj¥‘ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå‘h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¥‘ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjó‘h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj¥‘ubj)�”}”(hŒdwork”h]”hŒdwork”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¥‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjú�ubj‚)�”}”(hŒunsigned long delay”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj’ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'’h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj’ubj¤)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj5’h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj’ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC’h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj’ubj)�”}”(hŒdelay”h]”hŒdelay”…”�”}”(hjQ’h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjú�ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÂ�h²hh³jÓ�h´Mw ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj¾�h²hh³jÓ�h´Mw ubah}”(h]”j¹�ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÓ�h´Mw hj»�h²hubjC)�”}”(hhh]”hì)�”}”(hŒ7modify delay of or queue a delayed work on specific CPU”h]”hŒ7modify delay of or queue a delayed work on specific CPU”…”�”}”(hj{’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mw hjx’h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj»�h²hh³jÓ�h´Mw ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej“’jfj“’jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXÌ**Parameters** ``int cpu`` CPU number to execute work on ``struct workqueue_struct *wq`` workqueue to use ``struct delayed_work *dwork`` work to queue ``unsigned long delay`` number of jiffies to wait before queueing **Description** If **dwork** is idle, equivalent to queue_delayed_work_on(); otherwise, modify **dwork**'s timer so that it expires after **delay**. If **delay** is zero, **work** is guaranteed to be scheduled immediately regardless of its current state. This function is safe to call from any context including IRQ handler. See try_to_grab_pending() for details. **Return** ``false`` if **dwork** was idle and queued, ``true`` if **dwork** was pending and its timer was modified.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj�’h]”hŒ Parameters”…”�”}”(hjŸ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M{ hj—’ubjg)�”}”(hhh]”(jl)�”}”(hŒ*``int cpu`` CPU number to execute work on ”h]”(jr)�”}”(hŒ ``int cpu``”h]”jú)�”}”(hj¼’h]”hŒint cpu”…”�”}”(hj¾’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjº’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mx hj¶’ubj‹)�”}”(hhh]”hì)�”}”(hŒCPU number to execute work on”h]”hŒCPU number to execute work on”…”�”}”(hjÕ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÑ’h´Mx hjÒ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¶’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÑ’h´Mx hj³’ubjl)�”}”(hŒ1``struct workqueue_struct *wq`` workqueue to use ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hjõ’h]”hŒstruct workqueue_struct *wq”…”�”}”(hj÷’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjó’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´My hjï’ubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue to use”h]”hŒworkqueue to use”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j “h´My hj “ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjï’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j “h´My hj³’ubjl)�”}”(hŒ-``struct delayed_work *dwork`` work to queue ”h]”(jr)�”}”(hŒ``struct delayed_work *dwork``”h]”jú)�”}”(hj.“h]”hŒstruct delayed_work *dwork”…”�”}”(hj0“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj,“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mz hj(“ubj‹)�”}”(hhh]”hì)�”}”(hŒ work to queue”h]”hŒ work to queue”…”�”}”(hjG“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jC“h´Mz hjD“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj(“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jC“h´Mz hj³’ubjl)�”}”(hŒB``unsigned long delay`` number of jiffies to wait before queueing ”h]”(jr)�”}”(hŒ``unsigned long delay``”h]”jú)�”}”(hjg“h]”hŒunsigned long delay”…”�”}”(hji“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhje“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M{ hja“ubj‹)�”}”(hhh]”hì)�”}”(hŒ)number of jiffies to wait before queueing”h]”hŒ)number of jiffies to wait before queueing”…”�”}”(hj€“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j|“h´M{ hj}“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhja“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j|“h´M{ hj³’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj—’ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj¢“h]”hŒ Description”…”�”}”(hj¤“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj “ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M} hj—’ubhì)�”}”(hŒïIf **dwork** is idle, equivalent to queue_delayed_work_on(); otherwise, modify **dwork**'s timer so that it expires after **delay**. If **delay** is zero, **work** is guaranteed to be scheduled immediately regardless of its current state.”h]”(hŒIf ”…”�”}”(hj¸“h²hh³Nh´Nubj)�”}”(hŒ **dwork**”h]”hŒdwork”…”�”}”(hjÀ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸“ubhŒC is idle, equivalent to queue_delayed_work_on(); otherwise, modify ”…”�”}”(hj¸“h²hh³Nh´Nubj)�”}”(hŒ **dwork**”h]”hŒdwork”…”�”}”(hjÒ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸“ubhŒ$’s timer so that it expires after ”…”�”}”(hj¸“h²hh³Nh´Nubj)�”}”(hŒ **delay**”h]”hŒdelay”…”�”}”(hjä“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸“ubhŒ. If ”…”�”}”(hj¸“h²hh³Nh´Nubj)�”}”(hŒ **delay**”h]”hŒdelay”…”�”}”(hjö“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸“ubhŒ is zero, ”…”�”}”(hj¸“h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸“ubhŒK is guaranteed to be scheduled immediately regardless of its current state.”…”�”}”(hj¸“h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M| hj—’ubhì)�”}”(hŒlThis function is safe to call from any context including IRQ handler. See try_to_grab_pending() for details.”h]”hŒlThis function is safe to call from any context including IRQ handler. See try_to_grab_pending() for details.”…”�”}”(hj!”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‚ hj—’ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj2”h]”hŒReturn”…”�”}”(hj4”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M… hj—’ubhì)�”}”(hŒi``false`` if **dwork** was idle and queued, ``true`` if **dwork** was pending and its timer was modified.”h]”(jú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjL”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjH”ubhŒ if ”…”�”}”(hjH”h²hh³Nh´Nubj)�”}”(hŒ **dwork**”h]”hŒdwork”…”�”}”(hj^”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjH”ubhŒ was idle and queued, ”…”�”}”(hjH”h²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjp”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjH”ubhŒ if ”…”�”}”hjH”sbj)�”}”(hŒ **dwork**”h]”hŒdwork”…”�”}”(hj‚”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjH”ubhŒ( was pending and its timer was modified.”…”�”}”(hjH”h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‚ hj—’ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒqueue_rcu_work (C function)”Œc.queue_rcu_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒIbool queue_rcu_work (struct workqueue_struct *wq, struct rcu_work *rwork)”h]”jè)�”}”(hŒHbool queue_rcu_work(struct workqueue_struct *wq, struct rcu_work *rwork)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj»”h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj·”h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M£ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ”h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj·”h²hh³jÈ”h´M£ ubj)�”}”(hŒqueue_rcu_work”h]”j)�”}”(hŒqueue_rcu_work”h]”hŒqueue_rcu_work”…”�”}”(hjÛ”h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj×”ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj·”h²hh³jÈ”h´M£ ubj|)�”}”(hŒ5(struct workqueue_struct *wq, struct rcu_work *rwork)”h]”(j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj÷”h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjó”ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjó”ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j•Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jÝ”sbŒc.queue_rcu_work”†”asbuh1hhjó”ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5•h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjó”ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjC•h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjó”ubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hjP•h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjó”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjï”ubj‚)�”}”(hŒstruct rcu_work *rwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hji•h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhje•ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv•h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhje•ubh)�”}”(hhh]”j)�”}”(hŒrcu_work”h]”hŒrcu_work”…”�”}”(hj‡•h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj„•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j‰•Œmodname”NŒ classname”Nj7j:)�”}”j=]”j1•Œc.queue_rcu_work”†”asbuh1hhje•ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥•h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhje•ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj³•h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThje•ubj)�”}”(hŒrwork”h]”hŒrwork”…”�”}”(hjÀ•h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhje•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjï”ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj·”h²hh³jÈ”h´M£ ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj³”h²hh³jÈ”h´M£ ubah}”(h]”j®”ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÈ”h´M£ hj°”h²hubjC)�”}”(hhh]”hì)�”}”(hŒ#queue work after a RCU grace period”h]”hŒ#queue work after a RCU grace period”…”�”}”(hjê•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M£ hjç•h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj°”h²hh³jÈ”h´M£ ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej–jfj–jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX•**Parameters** ``struct workqueue_struct *wq`` workqueue to use ``struct rcu_work *rwork`` work to queue **Return** ``false`` if **rwork** was already pending, ``true`` otherwise. Note that a full RCU grace period is guaranteed only after a ``true`` return. While **rwork** is guaranteed to be executed after a ``false`` return, the execution may happen before a full RCU grace period has passed.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj –h]”hŒ Parameters”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj –ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M§ hj–ubjg)�”}”(hhh]”(jl)�”}”(hŒ1``struct workqueue_struct *wq`` workqueue to use ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj+–h]”hŒstruct workqueue_struct *wq”…”�”}”(hj-–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj)–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¤ hj%–ubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue to use”h]”hŒworkqueue to use”…”�”}”(hjD–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j@–h´M¤ hjA–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj%–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j@–h´M¤ hj"–ubjl)�”}”(hŒ)``struct rcu_work *rwork`` work to queue ”h]”(jr)�”}”(hŒ``struct rcu_work *rwork``”h]”jú)�”}”(hjd–h]”hŒstruct rcu_work *rwork”…”�”}”(hjf–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjb–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¥ hj^–ubj‹)�”}”(hhh]”hì)�”}”(hŒ work to queue”h]”hŒ work to queue”…”�”}”(hj}–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jy–h´M¥ hjz–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj^–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jy–h´M¥ hj"–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj–ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjŸ–h]”hŒReturn”…”�”}”(hj¡–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M§ hj–ubhì)�”}”(hX``false`` if **rwork** was already pending, ``true`` otherwise. Note that a full RCU grace period is guaranteed only after a ``true`` return. While **rwork** is guaranteed to be executed after a ``false`` return, the execution may happen before a full RCU grace period has passed.”h]”(jú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj¹–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjµ–ubhŒ if ”…”�”}”(hjµ–h²hh³Nh´Nubj)�”}”(hŒ **rwork**”h]”hŒrwork”…”�”}”(hjË–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµ–ubhŒ was already pending, ”…”�”}”(hjµ–h²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjÝ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjµ–ubhŒJ otherwise. Note that a full RCU grace period is guaranteed only after a ”…”�”}”(hjµ–h²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjï–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjµ–ubhŒ return. While ”…”�”}”(hjµ–h²hh³Nh´Nubj)�”}”(hŒ **rwork**”h]”hŒrwork”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµ–ubhŒ& is guaranteed to be executed after a ”…”�”}”(hjµ–h²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjµ–ubhŒL return, the execution may happen before a full RCU grace period has passed.”…”�”}”(hjµ–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M§ hj–ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ"worker_attach_to_pool (C function)”Œc.worker_attach_to_pool”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒLvoid worker_attach_to_pool (struct worker *worker, struct worker_pool *pool)”h]”jè)�”}”(hŒKvoid worker_attach_to_pool(struct worker *worker, struct worker_pool *pool)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjL—h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjH—h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M× ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjH—h²hh³jZ—h´M× ubj)�”}”(hŒworker_attach_to_pool”h]”j)�”}”(hŒworker_attach_to_pool”h]”hŒworker_attach_to_pool”…”�”}”(hjm—h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhji—ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjH—h²hh³jZ—h´M× ubj|)�”}”(hŒ1(struct worker *worker, struct worker_pool *pool)”h]”(j‚)�”}”(hŒstruct worker *worker”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj‰—h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj…—ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj…—ubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hj§—h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¤—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j©—Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jo—sbŒc.worker_attach_to_pool”†”asbuh1hhj…—ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj…—ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÕ—h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj…—ubj)�”}”(hŒworker”h]”hŒworker”…”�”}”(hjâ—h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj…—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj�—ubj‚)�”}”(hŒstruct worker_pool *pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjû—h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj÷—ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj÷—ubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j˜Œmodname”NŒ classname”Nj7j:)�”}”j=]”j׌c.worker_attach_to_pool”†”asbuh1hhj÷—ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7˜h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj÷—ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjE˜h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj÷—ubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjR˜h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj÷—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj�—ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjH—h²hh³jZ—h´M× ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjD—h²hh³jZ—h´M× ubah}”(h]”j?—ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jZ—h´M× hjA—h²hubjC)�”}”(hhh]”hì)�”}”(hŒattach a worker to a pool”h]”hŒattach a worker to a pool”…”�”}”(hj|˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M× hjy˜h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjA—h²hh³jZ—h´M× ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej”˜jfj”˜jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX(**Parameters** ``struct worker *worker`` worker to be attached ``struct worker_pool *pool`` the target pool **Description** Attach **worker** to **pool**. Once attached, the ``WORKER_UNBOUND`` flag and cpu-binding of **worker** are kept coordinated with the pool across cpu-[un]hotplugs.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjž˜h]”hŒ Parameters”…”�”}”(hj ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjœ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÛ hj˜˜ubjg)�”}”(hhh]”(jl)�”}”(hŒ0``struct worker *worker`` worker to be attached ”h]”(jr)�”}”(hŒ``struct worker *worker``”h]”jú)�”}”(hj½˜h]”hŒstruct worker *worker”…”�”}”(hj¿˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj»˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MØ hj·˜ubj‹)�”}”(hhh]”hì)�”}”(hŒworker to be attached”h]”hŒworker to be attached”…”�”}”(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&]”uh1jkh³jÒ˜h´MØ hj´˜ubjl)�”}”(hŒ-``struct worker_pool *pool`` the target pool ”h]”(jr)�”}”(hŒ``struct worker_pool *pool``”h]”jú)�”}”(hjö˜h]”hŒstruct worker_pool *pool”…”�”}”(hjø˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjô˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÙ hjð˜ubj‹)�”}”(hhh]”hì)�”}”(hŒthe target pool”h]”hŒthe target pool”…”�”}”(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&]”uh1jkh³j ™h´MÙ hj´˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj˜˜ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj1™h]”hŒ Description”…”�”}”(hj3™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÛ hj˜˜ubhì)�”}”(hŒ¤Attach **worker** to **pool**. Once attached, the ``WORKER_UNBOUND`` flag and cpu-binding of **worker** are kept coordinated with the pool across cpu-[un]hotplugs.”h]”(hŒAttach ”…”�”}”(hjG™h²hh³Nh´Nubj)�”}”(hŒ **worker**”h]”hŒworker”…”�”}”(hjO™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG™ubhŒ to ”…”�”}”(hjG™h²hh³Nh´Nubj)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hja™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG™ubhŒ. Once attached, the ”…”�”}”(hjG™h²hh³Nh´Nubjú)�”}”(hŒ``WORKER_UNBOUND``”h]”hŒWORKER_UNBOUND”…”�”}”(hjs™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjG™ubhŒ flag and cpu-binding of ”…”�”}”(hjG™h²hh³Nh´Nubj)�”}”(hŒ **worker**”h]”hŒworker”…”�”}”(hj…™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG™ubhŒ< are kept coordinated with the pool across cpu-[un]hotplugs.”…”�”}”(hjG™h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÚ hj˜˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ$worker_detach_from_pool (C function)”Œc.worker_detach_from_pool”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ4void worker_detach_from_pool (struct worker *worker)”h]”jè)�”}”(hŒ3void worker_detach_from_pool(struct worker *worker)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¾™h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjº™h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ™h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjº™h²hh³jÌ™h´M ubj)�”}”(hŒworker_detach_from_pool”h]”j)�”}”(hŒworker_detach_from_pool”h]”hŒworker_detach_from_pool”…”�”}”(hjß™h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÛ™ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjº™h²hh³jÌ™h´M ubj|)�”}”(hŒ(struct worker *worker)”h]”j‚)�”}”(hŒstruct worker *worker”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjû™h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj÷™ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj÷™ubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jšŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3já™sbŒc.worker_detach_from_pool”†”asbuh1hhj÷™ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9šh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj÷™ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjGšh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj÷™ubj)�”}”(hŒworker”h]”hŒworker”…”�”}”(hjTšh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj÷™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjó™ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjº™h²hh³jÌ™h´M ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj¶™h²hh³jÌ™h´M ubah}”(h]”j±™ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÌ™h´M hj³™h²hubjC)�”}”(hhh]”hì)�”}”(hŒdetach a worker from its pool”h]”hŒdetach a worker from its pool”…”�”}”(hj~šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hj{šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj³™h²hh³jÌ™h´M ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej–šjfj–šjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX**Parameters** ``struct worker *worker`` worker which is attached to its pool **Description** Undo the attaching which had been done in worker_attach_to_pool(). The caller worker shouldn't access to the pool after detached except it has other reference to the pool.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj šh]”hŒ Parameters”…”�”}”(hj¢šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjžšubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hjššubjg)�”}”(hhh]”jl)�”}”(hŒ?``struct worker *worker`` worker which is attached to its pool ”h]”(jr)�”}”(hŒ``struct worker *worker``”h]”jú)�”}”(hj¿šh]”hŒstruct worker *worker”…”�”}”(hjÁšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj½šubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hj¹šubj‹)�”}”(hhh]”hì)�”}”(hŒ$worker which is attached to its pool”h]”hŒ$worker which is attached to its pool”…”�”}”(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&]”uh1jkh³jÔšh´M hj¶šubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjššubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjúšh]”hŒ Description”…”�”}”(hjüšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjøšubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hjššubhì)�”}”(hŒ¬Undo the attaching which had been done in worker_attach_to_pool(). The caller worker shouldn't access to the pool after detached except it has other reference to the pool.”h]”hŒ®Undo the attaching which had been done in worker_attach_to_pool(). The caller worker shouldn’t access to the pool after detached except it has other reference to the pool.”…”�”•}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hjššubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒcreate_worker (C function)”Œc.create_worker”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ8struct worker * create_worker (struct worker_pool *pool)”h]”jè)�”}”(hŒ6struct worker *create_worker(struct worker_pool *pool)”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj?›h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj;›h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M: ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM›h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj;›h²hh³jL›h´M: ubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hj^›h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj[›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j`›Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œ create_worker”sbŒc.create_worker”†”asbuh1hhj;›h²hh³jL›h´M: ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj;›h²hh³jL›h´M: ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj�›h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj;›h²hh³jL›h´M: ubj)�”}”(hŒ create_worker”h]”j)�”}”(hj|›h]”hŒ create_worker”…”�”}”(hjž›h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjš›ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj;›h²hh³jL›h´M: ubj|)�”}”(hŒ(struct worker_pool *pool)”h]”j‚)�”}”(hŒstruct worker_pool *pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¹›h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjµ›ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ›h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjµ›ubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hj×›h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÔ›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÙ›Œmodname”NŒ classname”Nj7j:)�”}”j=]”jz›Œc.create_worker”†”asbuh1hhjµ›ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ›h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjµ›ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjµ›ubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjµ›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj±›ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj;›h²hh³jL›h´M: ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj7›h²hh³jL›h´M: ubah}”(h]”j2›ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jL›h´M: hj4›h²hubjC)�”}”(hhh]”hì)�”}”(hŒcreate a new workqueue worker”h]”hŒcreate a new workqueue worker”…”�”}”(hj:œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M: hj7œh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj4›h²hh³jL›h´M: ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejRœjfjRœjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX **Parameters** ``struct worker_pool *pool`` pool the new worker will belong to **Description** Create and start a new worker which is attached to **pool**. **Context** Might sleep. Does GFP_KERNEL allocations. **Return** Pointer to the newly created worker.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj\œh]”hŒ Parameters”…”�”}”(hj^œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZœubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M> hjVœubjg)�”}”(hhh]”jl)�”}”(hŒ@``struct worker_pool *pool`` pool the new worker will belong to ”h]”(jr)�”}”(hŒ``struct worker_pool *pool``”h]”jú)�”}”(hj{œh]”hŒstruct worker_pool *pool”…”�”}”(hj}œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjyœubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M; hjuœubj‹)�”}”(hhh]”hì)�”}”(hŒ"pool the new worker will belong to”h]”hŒ"pool the new worker will belong to”…”�”}”(hj”œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j�œh´M; hj‘œubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjuœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j�œh´M; hjrœubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjVœubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj¶œh]”hŒ Description”…”�”}”(hj¸œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´œubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M= hjVœubhì)�”}”(hŒ hjVœubhì)�”}”(hŒ*Might sleep. Does GFP_KERNEL allocations.”h]”hŒ*Might sleep. Does GFP_KERNEL allocations.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M? hjVœubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj�h]”hŒReturn”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MA hjVœubhì)�”}”(hŒ$Pointer to the newly created worker.”h]”hŒ$Pointer to the newly created worker.”…”�”}”(hj,�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MB hjVœubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒset_worker_dying (C function)”Œc.set_worker_dying”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒEvoid set_worker_dying (struct worker *worker, struct list_head *list)”h]”jè)�”}”(hŒDvoid set_worker_dying(struct worker *worker, struct list_head *list)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj[�h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjW�h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mž ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjW�h²hh³ji�h´Mž ubj)�”}”(hŒset_worker_dying”h]”j)�”}”(hŒset_worker_dying”h]”hŒset_worker_dying”…”�”}”(hj|�h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjx�ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjW�h²hh³ji�h´Mž ubj|)�”}”(hŒ/(struct worker *worker, struct list_head *list)”h]”(j‚)�”}”(hŒstruct worker *worker”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj˜�h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj”�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj”�ubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hj¶�h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj³�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j¸�Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j~�sbŒc.set_worker_dying”†”asbuh1hhj”�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj”�ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjä�h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj”�ubj)�”}”(hŒworker”h]”hŒworker”…”�”}”(hjñ�h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj”�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj��ubj‚)�”}”(hŒstruct list_head *list”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj žh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjžubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjžubh)�”}”(hhh]”j)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hj(žh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj%žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j*žŒmodname”NŒ classname”Nj7j:)�”}”j=]”jÒ�Œc.set_worker_dying”†”asbuh1hhjžubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFžh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjžubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjTžh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjžubj)�”}”(hŒlist”h]”hŒlist”…”�”}”(hjažh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj��ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjW�h²hh³ji�h´Mž ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjS�h²hh³ji�h´Mž ubah}”(h]”jN�ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³ji�h´Mž hjP�h²hubjC)�”}”(hhh]”hì)�”}”(hŒTag a worker for destruction”h]”hŒTag a worker for destruction”…”�”}”(hj‹žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mž hjˆžh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjP�h²hh³ji�h´Mž ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej£žjfj£žjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX=**Parameters** ``struct worker *worker`` worker to be destroyed ``struct list_head *list`` transfer worker away from its pool->idle_list and into list **Description** Tag **worker** for destruction and adjust **pool** stats accordingly. The worker should be idle. **Context** raw_spin_lock_irq(pool->lock).”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj­žh]”hŒ Parameters”…”�”}”(hj¯žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«žubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¢ hj§žubjg)�”}”(hhh]”(jl)�”}”(hŒ1``struct worker *worker`` worker to be destroyed ”h]”(jr)�”}”(hŒ``struct worker *worker``”h]”jú)�”}”(hjÌžh]”hŒstruct worker *worker”…”�”}”(hjΞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÊžubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MŸ hjÆžubj‹)�”}”(hhh]”hì)�”}”(hŒworker to be destroyed”h]”hŒworker to be destroyed”…”�”}”(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&]”uh1jkh³jážh´MŸ hjÞubjl)�”}”(hŒW``struct list_head *list`` transfer worker away from its pool->idle_list and into list ”h]”(jr)�”}”(hŒ``struct list_head *list``”h]”jú)�”}”(hjŸh]”hŒstruct list_head *list”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M  hjÿžubj‹)�”}”(hhh]”hì)�”}”(hŒ;transfer worker away from its pool->idle_list and into list”h]”hŒ;transfer worker away from its pool->idle_list and into list”…”�”}”(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&]”uh1jkh³jŸh´M  hjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj§žubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj@Ÿh]”hŒ Description”…”�”}”(hjBŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¢ hj§žubhì)�”}”(hŒaTag **worker** for destruction and adjust **pool** stats accordingly. The worker should be idle.”h]”(hŒTag ”…”�”}”(hjVŸh²hh³Nh´Nubj)�”}”(hŒ **worker**”h]”hŒworker”…”�”}”(hj^Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjVŸubhŒ for destruction and adjust ”…”�”}”(hjVŸh²hh³Nh´Nubj)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjpŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjVŸubhŒ/ stats accordingly. The worker should be idle.”…”�”}”(hjVŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¡ hj§žubhì)�”}”(hŒ **Context**”h]”j)�”}”(hj‹Ÿh]”hŒContext”…”�”}”(hj�Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‰Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¤ hj§žubhì)�”}”(hŒraw_spin_lock_irq(pool->lock).”h]”hŒraw_spin_lock_irq(pool->lock).”…”�”}”(hj¡Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¥ hj§žubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ idle_worker_timeout (C function)”Œc.idle_worker_timeout”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ/void idle_worker_timeout (struct timer_list *t)”h]”jè)�”}”(hŒ.void idle_worker_timeout(struct timer_list *t)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjПh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÌŸh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÈ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjߟh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÌŸh²hh³jÞŸh´MÈ ubj)�”}”(hŒidle_worker_timeout”h]”j)�”}”(hŒidle_worker_timeout”h]”hŒidle_worker_timeout”…”�”}”(hjñŸh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjíŸubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÌŸh²hh³jÞŸh´MÈ ubj|)�”}”(hŒ(struct timer_list *t)”h]”j‚)�”}”(hŒstruct timer_list *t”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj  ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj  ubh)�”}”(hhh]”j)�”}”(hŒ timer_list”h]”hŒ timer_list”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj( ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j- Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jóŸsbŒc.idle_worker_timeout”†”asbuh1hhj  ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj  ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj  ubj)�”}”(hŒt”h]”hŒt”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj  ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÌŸh²hh³jÞŸh´MÈ ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÈŸh²hh³jÞŸh´MÈ ubah}”(h]”jßah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÞŸh´MÈ hjÅŸh²hubjC)�”}”(hhh]”hì)�”}”(hŒ.check if some idle workers can now be deleted.”h]”hŒ.check if some idle workers can now be deleted.”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÈ hj� h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÅŸh²hh³jÞŸh´MÈ ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej¨ jfj¨ jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX¿**Parameters** ``struct timer_list *t`` The pool's idle_timer that just expired **Description** The timer is armed in worker_enter_idle(). Note that it isn't disarmed in worker_leave_idle(), as a worker flicking between idle and active while its pool is at the too_many_workers() tipping point would cause too much timer housekeeping overhead. Since IDLE_WORKER_TIMEOUT is long enough, we just let it expire and re-evaluate things from there.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj² h]”hŒ Parameters”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÌ hj¬ ubjg)�”}”(hhh]”jl)�”}”(hŒA``struct timer_list *t`` The pool's idle_timer that just expired ”h]”(jr)�”}”(hŒ``struct timer_list *t``”h]”jú)�”}”(hjÑ h]”hŒstruct timer_list *t”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÏ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÉ hjË ubj‹)�”}”(hhh]”hì)�”}”(hŒ'The pool's idle_timer that just expired”h]”hŒ)The pool’s idle_timer that just expired”…”�”}”(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&]”uh1jkh³jæ h´MÉ hjÈ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj¬ ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj ¡h]”hŒ Description”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MË hj¬ ubhì)�”}”(hXZThe timer is armed in worker_enter_idle(). Note that it isn't disarmed in worker_leave_idle(), as a worker flicking between idle and active while its pool is at the too_many_workers() tipping point would cause too much timer housekeeping overhead. Since IDLE_WORKER_TIMEOUT is long enough, we just let it expire and re-evaluate things from there.”h]”hX\The timer is armed in worker_enter_idle(). Note that it isn’t disarmed in worker_leave_idle(), as a worker flicking between idle and active while its pool is at the too_many_workers() tipping point would cause too much timer housekeeping overhead. Since IDLE_WORKER_TIMEOUT is long enough, we just let it expire and re-evaluate things from there.”…”�”}”(hj"¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÊ hj¬ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒidle_cull_fn (C function)”Œc.idle_cull_fn”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ,void idle_cull_fn (struct work_struct *work)”h]”jè)�”}”(hŒ+void idle_cull_fn(struct work_struct *work)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjQ¡h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjM¡h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mî ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`¡h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjM¡h²hh³j_¡h´Mî ubj)�”}”(hŒ idle_cull_fn”h]”j)�”}”(hŒ idle_cull_fn”h]”hŒ idle_cull_fn”…”�”}”(hjr¡h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjn¡ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjM¡h²hh³j_¡h´Mî ubj|)�”}”(hŒ(struct work_struct *work)”h]”j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjŽ¡h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjŠ¡ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›¡h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjŠ¡ubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hj¬¡h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj©¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j®¡Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jt¡sbŒc.idle_cull_fn”†”asbuh1hhjŠ¡ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ¡h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjŠ¡ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÚ¡h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjŠ¡ubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjç¡h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjŠ¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj†¡ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjM¡h²hh³j_¡h´Mî ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjI¡h²hh³j_¡h´Mî ubah}”(h]”jD¡ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j_¡h´Mî hjF¡h²hubjC)�”}”(hhh]”hì)�”}”(hŒ.cull workers that have been idle for too long.”h]”hŒ.cull workers that have been idle for too long.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mî hj¢h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjF¡h²hh³j_¡h´Mî ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej)¢jfj)¢jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXº**Parameters** ``struct work_struct *work`` the pool's work for handling these idle workers **Description** This goes through a pool's idle workers and gets rid of those that have been idle for at least IDLE_WORKER_TIMEOUT seconds. We don't want to disturb isolated CPUs because of a pcpu kworker being culled, so this also resets worker affinity. This requires a sleepable context, hence the split between timer callback and work item.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj3¢h]”hŒ Parameters”…”�”}”(hj5¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mò hj-¢ubjg)�”}”(hhh]”jl)�”}”(hŒM``struct work_struct *work`` the pool's work for handling these idle workers ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hjR¢h]”hŒstruct work_struct *work”…”�”}”(hjT¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjP¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mï hjL¢ubj‹)�”}”(hhh]”hì)�”}”(hŒ/the pool's work for handling these idle workers”h]”hŒ1the pool’s work for handling these idle workers”…”�”}”(hjk¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jg¢h´Mï hjh¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjL¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jg¢h´Mï hjI¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj-¢ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj�¢h]”hŒ Description”…”�”}”(hj�¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mñ hj-¢ubhì)�”}”(hŒ{This goes through a pool's idle workers and gets rid of those that have been idle for at least IDLE_WORKER_TIMEOUT seconds.”h]”hŒ}This goes through a pool’s idle workers and gets rid of those that have been idle for at least IDLE_WORKER_TIMEOUT seconds.”…”�”}”(hj£¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mð hj-¢ubhì)�”}”(hŒÌWe don't want to disturb isolated CPUs because of a pcpu kworker being culled, so this also resets worker affinity. This requires a sleepable context, hence the split between timer callback and work item.”h]”hŒÎWe don’t want to disturb isolated CPUs because of a pcpu kworker being culled, so this also resets worker affinity. This requires a sleepable context, hence the split between timer callback and work item.”…”�”}”(hj²¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mó hj-¢ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ maybe_create_worker (C function)”Œc.maybe_create_worker”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ3void maybe_create_worker (struct worker_pool *pool)”h]”jè)�”}”(hŒ2void maybe_create_worker(struct worker_pool *pool)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjá¢h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÝ¢h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MM ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð¢h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÝ¢h²hh³jï¢h´MM ubj)�”}”(hŒmaybe_create_worker”h]”j)�”}”(hŒmaybe_create_worker”h]”hŒmaybe_create_worker”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjþ¢ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÝ¢h²hh³jï¢h´MM ubj|)�”}”(hŒ(struct worker_pool *pool)”h]”j‚)�”}”(hŒstruct worker_pool *pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj£ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+£h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj£ubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hj<£h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj9£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j>£Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j£sbŒc.maybe_create_worker”†”asbuh1hhj£ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\£h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj£ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjj£h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj£ubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjw£h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj£ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÝ¢h²hh³jï¢h´MM ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÙ¢h²hh³jï¢h´MM ubah}”(h]”jÔ¢ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jï¢h´MM hjÖ¢h²hubjC)�”}”(hhh]”hì)�”}”(hŒ create a new worker if necessary”h]”hŒ create a new worker if necessary”…”�”}”(hj¡£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MM hjž£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÖ¢h²hh³jï¢h´MM ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej¹£jfj¹£jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX…**Parameters** ``struct worker_pool *pool`` pool to create a new worker for **Description** Create a new worker for **pool** if necessary. **pool** is guaranteed to have at least one idle worker on return from this function. If creating a new worker takes longer than MAYDAY_INTERVAL, mayday is sent to all rescuers with works scheduled on **pool** to resolve possible allocation deadlock. On return, need_to_create_worker() is guaranteed to be ``false`` and may_start_working() ``true``. LOCKING: raw_spin_lock_irq(pool->lock) which may be released and regrabbed multiple times. Does GFP_KERNEL allocations. Called only from manager.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjãh]”hŒ Parameters”…”�”}”(hjÅ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MQ hj½£ubjg)�”}”(hhh]”jl)�”}”(hŒ=``struct worker_pool *pool`` pool to create a new worker for ”h]”(jr)�”}”(hŒ``struct worker_pool *pool``”h]”jú)�”}”(hjâ£h]”hŒstruct worker_pool *pool”…”�”}”(hjä£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjà£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MN hjÜ£ubj‹)�”}”(hhh]”hì)�”}”(hŒpool to create a new worker for”h]”hŒpool to create a new worker for”…”�”}”(hjû£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j÷£h´MN hjø£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÜ£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j÷£h´MN hjÙ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj½£ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj¤h]”hŒ Description”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MP hj½£ubhì)�”}”(hX+Create a new worker for **pool** if necessary. **pool** is guaranteed to have at least one idle worker on return from this function. If creating a new worker takes longer than MAYDAY_INTERVAL, mayday is sent to all rescuers with works scheduled on **pool** to resolve possible allocation deadlock.”h]”(hŒCreate a new worker for ”…”�”}”(hj3¤h²hh³Nh´Nubj)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hj;¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3¤ubhŒ if necessary. ”…”�”}”(hj3¤h²hh³Nh´Nubj)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjM¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3¤ubhŒÂ is guaranteed to have at least one idle worker on return from this function. If creating a new worker takes longer than MAYDAY_INTERVAL, mayday is sent to all rescuers with works scheduled on ”…”�”}”(hj3¤h²hh³Nh´Nubj)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hj_¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3¤ubhŒ) to resolve possible allocation deadlock.”…”�”}”(hj3¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MO hj½£ubhì)�”}”(hŒbOn return, need_to_create_worker() is guaranteed to be ``false`` and may_start_working() ``true``.”h]”(hŒ7On return, need_to_create_worker() is guaranteed to be ”…”�”}”(hjx¤h²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj€¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjx¤ubhŒ and may_start_working() ”…”�”}”(hjx¤h²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj’¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjx¤ubhŒ.”…”�”}”(hjx¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MU hj½£ubhì)�”}”(hŒ“LOCKING: raw_spin_lock_irq(pool->lock) which may be released and regrabbed multiple times. Does GFP_KERNEL allocations. Called only from manager.”h]”hŒ“LOCKING: raw_spin_lock_irq(pool->lock) which may be released and regrabbed multiple times. Does GFP_KERNEL allocations. Called only from manager.”…”�”}”(hj«¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MX hj½£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒmanage_workers (C function)”Œc.manage_workers”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ+bool manage_workers (struct worker *worker)”h]”jè)�”}”(hŒ*bool manage_workers(struct worker *worker)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjÚ¤h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÖ¤h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M  ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè¤h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÖ¤h²hh³jç¤h´M  ubj)�”}”(hŒmanage_workers”h]”j)�”}”(hŒmanage_workers”h]”hŒmanage_workers”…”�”}”(hjú¤h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjö¤ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÖ¤h²hh³jç¤h´M  ubj|)�”}”(hŒ(struct worker *worker)”h]”j‚)�”}”(hŒstruct worker *worker”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj¥ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#¥h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¥ubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hj4¥h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj1¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j6¥Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jü¤sbŒc.manage_workers”†”asbuh1hhj¥ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT¥h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¥ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjb¥h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj¥ubj)�”}”(hŒworker”h]”hŒworker”…”�”}”(hjo¥h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¥ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÖ¤h²hh³jç¤h´M  ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÒ¤h²hh³jç¤h´M  ubah}”(h]”jͤah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jç¤h´M  hjϤh²hubjC)�”}”(hhh]”hì)�”}”(hŒmanage worker pool”h]”hŒmanage worker pool”…”�”}”(hj™¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M  hj–¥h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjϤh²hh³jç¤h´M  ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej±¥jfj±¥jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX)**Parameters** ``struct worker *worker`` self **Description** Assume the manager role and manage the worker pool **worker** belongs to. At any given time, there can be only zero or one manager per pool. The exclusion is handled automatically by this function. The caller can safely start processing works on false return. On true return, it's guaranteed that need_to_create_worker() is false and may_start_working() is true. **Context** raw_spin_lock_irq(pool->lock) which may be released and regrabbed multiple times. Does GFP_KERNEL allocations. **Return** ``false`` if the pool doesn't need management and the caller can safely start processing works, ``true`` if management function was performed and the conditions that the caller verified before calling the function may no longer be true.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj»¥h]”hŒ Parameters”…”�”}”(hj½¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¤ hjµ¥ubjg)�”}”(hhh]”jl)�”}”(hŒ``struct worker *worker`` self ”h]”(jr)�”}”(hŒ``struct worker *worker``”h]”jú)�”}”(hjÚ¥h]”hŒstruct worker *worker”…”�”}”(hjÜ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjØ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¡ hjÔ¥ubj‹)�”}”(hhh]”hì)�”}”(hŒself”h]”hŒself”…”�”}”(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&]”uh1jkh³jï¥h´M¡ hjÑ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjµ¥ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj¦h]”hŒ Description”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M£ hjµ¥ubhì)�”}”(hŒÇAssume the manager role and manage the worker pool **worker** belongs to. At any given time, there can be only zero or one manager per pool. The exclusion is handled automatically by this function.”h]”(hŒ3Assume the manager role and manage the worker pool ”…”�”}”(hj+¦h²hh³Nh´Nubj)�”}”(hŒ **worker**”h]”hŒworker”…”�”}”(hj3¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+¦ubhŒŠ belongs to. At any given time, there can be only zero or one manager per pool. The exclusion is handled automatically by this function.”…”�”}”(hj+¦h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¢ hjµ¥ubhì)�”}”(hŒ¥The caller can safely start processing works on false return. On true return, it's guaranteed that need_to_create_worker() is false and may_start_working() is true.”h]”hŒ§The caller can safely start processing works on false return. On true return, it’s guaranteed that need_to_create_worker() is false and may_start_working() is true.”…”�”}”(hjL¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¦ hjµ¥ubhì)�”}”(hŒ **Context**”h]”j)�”}”(hj]¦h]”hŒContext”…”�”}”(hj_¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mª hjµ¥ubhì)�”}”(hŒoraw_spin_lock_irq(pool->lock) which may be released and regrabbed multiple times. Does GFP_KERNEL allocations.”h]”hŒoraw_spin_lock_irq(pool->lock) which may be released and regrabbed multiple times. Does GFP_KERNEL allocations.”…”�”}”(hjs¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M« hjµ¥ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj„¦h]”hŒReturn”…”�”}”(hj†¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M® hjµ¥ubhì)�”}”(hŒì``false`` if the pool doesn't need management and the caller can safely start processing works, ``true`` if management function was performed and the conditions that the caller verified before calling the function may no longer be true.”h]”(jú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjž¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjš¦ubhŒY if the pool doesn’t need management and the caller can safely start processing works, ”…”�”}”(hjš¦h²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj°¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjš¦ubhŒ„ if management function was performed and the conditions that the caller verified before calling the function may no longer be true.”…”�”}”(hjš¦h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¯ hjµ¥ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒprocess_one_work (C function)”Œc.process_one_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒGvoid process_one_work (struct worker *worker, struct work_struct *work)”h]”jè)�”}”(hŒFvoid process_one_work(struct worker *worker, struct work_struct *work)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjé¦h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjå¦h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÈ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø¦h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjå¦h²hh³j÷¦h´MÈ ubj)�”}”(hŒprocess_one_work”h]”j)�”}”(hŒprocess_one_work”h]”hŒprocess_one_work”…”�”}”(hj §h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj§ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjå¦h²hh³j÷¦h´MÈ ubj|)�”}”(hŒ1(struct worker *worker, struct work_struct *work)”h]”(j‚)�”}”(hŒstruct worker *worker”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj&§h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj"§ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3§h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj"§ubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hjD§h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjA§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jF§Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j §sbŒc.process_one_work”†”asbuh1hhj"§ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjd§h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj"§ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjr§h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj"§ubj)�”}”(hŒworker”h]”hŒworker”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj"§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj§ubj‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj˜§h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj”§ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥§h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj”§ubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hj¶§h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj³§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j¸§Œmodname”NŒ classname”Nj7j:)�”}”j=]”j`§Œc.process_one_work”†”asbuh1hhj”§ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ§h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj”§ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjâ§h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj”§ubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjï§h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj”§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj§ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjå¦h²hh³j÷¦h´MÈ ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjá¦h²hh³j÷¦h´MÈ ubah}”(h]”jܦah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j÷¦h´MÈ hjÞ¦h²hubjC)�”}”(hhh]”hì)�”}”(hŒprocess single work”h]”hŒprocess single work”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÈ hj¨h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÞ¦h²hh³j÷¦h´MÈ ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej1¨jfj1¨jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXå**Parameters** ``struct worker *worker`` self ``struct work_struct *work`` work to process **Description** Process **work**. This function contains all the logics necessary to process a single work including synchronization against and interaction with other workers on the same cpu, queueing and flushing. As long as context requirement is met, any worker can call this function to process a work. **Context** raw_spin_lock_irq(pool->lock) which is released and regrabbed.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj;¨h]”hŒ Parameters”…”�”}”(hj=¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÌ hj5¨ubjg)�”}”(hhh]”(jl)�”}”(hŒ``struct worker *worker`` self ”h]”(jr)�”}”(hŒ``struct worker *worker``”h]”jú)�”}”(hjZ¨h]”hŒstruct worker *worker”…”�”}”(hj\¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjX¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÉ hjT¨ubj‹)�”}”(hhh]”hì)�”}”(hŒself”h]”hŒself”…”�”}”(hjs¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jo¨h´MÉ hjp¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjT¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jo¨h´MÉ hjQ¨ubjl)�”}”(hŒ-``struct work_struct *work`` work to process ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hj“¨h]”hŒstruct work_struct *work”…”�”}”(hj•¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj‘¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÊ hj�¨ubj‹)�”}”(hhh]”hì)�”}”(hŒwork to process”h]”hŒwork to process”…”�”}”(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&]”uh1jkh³j¨¨h´MÊ hjQ¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj5¨ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjΨh]”hŒ Description”…”�”}”(hjШh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj̨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÌ hj5¨ubhì)�”}”(hX%Process **work**. This function contains all the logics necessary to process a single work including synchronization against and interaction with other workers on the same cpu, queueing and flushing. As long as context requirement is met, any worker can call this function to process a work.”h]”(hŒProcess ”…”�”}”(hjä¨h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjì¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjä¨ubhX. This function contains all the logics necessary to process a single work including synchronization against and interaction with other workers on the same cpu, queueing and flushing. As long as context requirement is met, any worker can call this function to process a work.”…”�”}”(hjä¨h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MË hj5¨ubhì)�”}”(hŒ **Context**”h]”j)�”}”(hj©h]”hŒContext”…”�”}”(hj ©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÑ hj5¨ubhì)�”}”(hŒ>raw_spin_lock_irq(pool->lock) which is released and regrabbed.”h]”hŒ>raw_spin_lock_irq(pool->lock) which is released and regrabbed.”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÒ hj5¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ$process_scheduled_works (C function)”Œc.process_scheduled_works”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ4void process_scheduled_works (struct worker *worker)”h]”jè)�”}”(hŒ3void process_scheduled_works(struct worker *worker)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjL©h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjH©h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M� ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[©h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjH©h²hh³jZ©h´M� ubj)�”}”(hŒprocess_scheduled_works”h]”j)�”}”(hŒprocess_scheduled_works”h]”hŒprocess_scheduled_works”…”�”}”(hjm©h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhji©ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjH©h²hh³jZ©h´M� ubj|)�”}”(hŒ(struct worker *worker)”h]”j‚)�”}”(hŒstruct worker *worker”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj‰©h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj…©ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–©h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj…©ubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hj§©h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¤©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j©©Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jo©sbŒc.process_scheduled_works”†”asbuh1hhj…©ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ©h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj…©ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÕ©h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj…©ubj)�”}”(hŒworker”h]”hŒworker”…”�”}”(hjâ©h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj…©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj�©ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjH©h²hh³jZ©h´M� ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjD©h²hh³jZ©h´M� ubah}”(h]”j?©ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jZ©h´M� hjA©h²hubjC)�”}”(hhh]”hì)�”}”(hŒprocess scheduled works”h]”hŒprocess scheduled works”…”�”}”(hj ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M� hj ªh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjA©h²hh³jZ©h´M� ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej$ªjfj$ªjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXQ**Parameters** ``struct worker *worker`` self **Description** Process all scheduled works. Please note that the scheduled list may change while processing a work, so this function repeatedly fetches a work from the top and executes it. **Context** raw_spin_lock_irq(pool->lock) which may be released and regrabbed multiple times.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj.ªh]”hŒ Parameters”…”�”}”(hj0ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,ªubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M… hj(ªubjg)�”}”(hhh]”jl)�”}”(hŒ``struct worker *worker`` self ”h]”(jr)�”}”(hŒ``struct worker *worker``”h]”jú)�”}”(hjMªh]”hŒstruct worker *worker”…”�”}”(hjOªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjKªubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‚ hjGªubj‹)�”}”(hhh]”hì)�”}”(hŒself”h]”hŒself”…”�”}”(hjfªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jbªh´M‚ hjcªubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjGªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jbªh´M‚ hjDªubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj(ªubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjˆªh]”hŒ Description”…”�”}”(hjŠªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†ªubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M„ hj(ªubhì)�”}”(hŒ®Process all scheduled works. Please note that the scheduled list may change while processing a work, so this function repeatedly fetches a work from the top and executes it.”h]”hŒ®Process all scheduled works. Please note that the scheduled list may change while processing a work, so this function repeatedly fetches a work from the top and executes it.”…”�”}”(hjžªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mƒ hj(ªubhì)�”}”(hŒ **Context**”h]”j)�”}”(hj¯ªh]”hŒContext”…”�”}”(hj±ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ªubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‡ hj(ªubhì)�”}”(hŒQraw_spin_lock_irq(pool->lock) which may be released and regrabbed multiple times.”h]”hŒQraw_spin_lock_irq(pool->lock) which may be released and regrabbed multiple times.”…”�”}”(hjŪh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mˆ hj(ªubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒworker_thread (C function)”Œc.worker_thread”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ"int worker_thread (void *__worker)”h]”jè)�”}”(hŒ!int worker_thread(void *__worker)”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjôªh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjðªh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¦ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjðªh²hh³j«h´M¦ ubj)�”}”(hŒ worker_thread”h]”j)�”}”(hŒ worker_thread”h]”hŒ worker_thread”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj«ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjðªh²hh³j«h´M¦ ubj|)�”}”(hŒ(void *__worker)”h]”j‚)�”}”(hŒvoid *__worker”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj1«h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj-«ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?«h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj-«ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjM«h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj-«ubj)�”}”(hŒ__worker”h]”hŒ__worker”…”�”}”(hjZ«h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj-«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj)«ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjðªh²hh³j«h´M¦ ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjìªh²hh³j«h´M¦ ubah}”(h]”jçªah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j«h´M¦ hjéªh²hubjC)�”}”(hhh]”hì)�”}”(hŒthe worker thread function”h]”hŒthe worker thread function”…”�”}”(hj„«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¦ hj�«h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjéªh²hh³j«h´M¦ ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejœ«jfjœ«jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXˆ**Parameters** ``void *__worker`` self **Description** The worker thread function. All workers belong to a worker_pool - either a per-cpu one or dynamic unbound one. These workers process all work items regardless of their specific target workqueue. The only exception is work items which belong to workqueues with a rescuer which will be explained in rescuer_thread(). **Return** 0”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¦«h]”hŒ Parameters”…”�”}”(hj¨«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mª hj «ubjg)�”}”(hhh]”jl)�”}”(hŒ``void *__worker`` self ”h]”(jr)�”}”(hŒ``void *__worker``”h]”jú)�”}”(hjÅ«h]”hŒvoid *__worker”…”�”}”(hjÇ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M§ hj¿«ubj‹)�”}”(hhh]”hì)�”}”(hŒself”h]”hŒself”…”�”}”(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&]”uh1jkh³jÚ«h´M§ hj¼«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj «ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj¬h]”hŒ Description”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M© hj «ubhì)�”}”(hX=The worker thread function. All workers belong to a worker_pool - either a per-cpu one or dynamic unbound one. These workers process all work items regardless of their specific target workqueue. The only exception is work items which belong to workqueues with a rescuer which will be explained in rescuer_thread().”h]”hX=The worker thread function. All workers belong to a worker_pool - either a per-cpu one or dynamic unbound one. These workers process all work items regardless of their specific target workqueue. The only exception is work items which belong to workqueues with a rescuer which will be explained in rescuer_thread().”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¨ hj «ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj'¬h]”hŒReturn”…”�”}”(hj)¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M® hj «ubhì)�”}”(hj…}h]”hŒ0”…”�”}”(hj=¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¯ hj «ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒrescuer_thread (C function)”Œc.rescuer_thread”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ$int rescuer_thread (void *__rescuer)”h]”jè)�”}”(hŒ#int rescuer_thread(void *__rescuer)”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjk¬h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjg¬h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M4ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz¬h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjg¬h²hh³jy¬h´M4ubj)�”}”(hŒrescuer_thread”h]”j)�”}”(hŒrescuer_thread”h]”hŒrescuer_thread”…”�”}”(hjŒ¬h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjˆ¬ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjg¬h²hh³jy¬h´M4ubj|)�”}”(hŒ(void *__rescuer)”h]”j‚)�”}”(hŒvoid *__rescuer”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¨¬h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj¤¬ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶¬h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¤¬ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjĬh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj¤¬ubj)�”}”(hŒ __rescuer”h]”hŒ __rescuer”…”�”}”(hjѬh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¤¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj ¬ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjg¬h²hh³jy¬h´M4ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjc¬h²hh³jy¬h´M4ubah}”(h]”j^¬ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jy¬h´M4hj`¬h²hubjC)�”}”(hhh]”hì)�”}”(hŒthe rescuer thread function”h]”hŒthe rescuer thread function”…”�”}”(hjû¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M4hjø¬h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj`¬h²hh³jy¬h´M4ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej­jfj­jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX¹**Parameters** ``void *__rescuer`` self **Description** Workqueue rescuer thread function. There's one rescuer for each workqueue which has WQ_MEM_RECLAIM set. Regular work processing on a pool may block trying to create a new worker which uses GFP_KERNEL allocation which has slight chance of developing into deadlock if some works currently on the same queue need to be processed to satisfy the GFP_KERNEL allocation. This is the problem rescuer solves. When such condition is possible, the pool summons rescuers of all workqueues which have works queued on the pool and let them process those works so that forward progress can be guaranteed. This should happen rarely. **Return** 0”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj­h]”hŒ Parameters”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M8hj­ubjg)�”}”(hhh]”jl)�”}”(hŒ``void *__rescuer`` self ”h]”(jr)�”}”(hŒ``void *__rescuer``”h]”jú)�”}”(hj<­h]”hŒvoid *__rescuer”…”�”}”(hj>­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj:­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M5hj6­ubj‹)�”}”(hhh]”hì)�”}”(hŒself”h]”hŒself”…”�”}”(hjU­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jQ­h´M5hjR­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj6­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jQ­h´M5hj3­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj­ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjw­h]”hŒ Description”…”�”}”(hjy­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M7hj­ubhì)�”}”(hŒhWorkqueue rescuer thread function. There's one rescuer for each workqueue which has WQ_MEM_RECLAIM set.”h]”hŒjWorkqueue rescuer thread function. There’s one rescuer for each workqueue which has WQ_MEM_RECLAIM set.”…”�”}”(hj�­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M6hj­ubhì)�”}”(hX(Regular work processing on a pool may block trying to create a new worker which uses GFP_KERNEL allocation which has slight chance of developing into deadlock if some works currently on the same queue need to be processed to satisfy the GFP_KERNEL allocation. This is the problem rescuer solves.”h]”hX(Regular work processing on a pool may block trying to create a new worker which uses GFP_KERNEL allocation which has slight chance of developing into deadlock if some works currently on the same queue need to be processed to satisfy the GFP_KERNEL allocation. This is the problem rescuer solves.”…”�”}”(hjœ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M9hj­ubhì)�”}”(hŒ½When such condition is possible, the pool summons rescuers of all workqueues which have works queued on the pool and let them process those works so that forward progress can be guaranteed.”h]”hŒ½When such condition is possible, the pool summons rescuers of all workqueues which have works queued on the pool and let them process those works so that forward progress can be guaranteed.”…”�”}”(hj«­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M?hj­ubhì)�”}”(hŒThis should happen rarely.”h]”hŒThis should happen rarely.”…”�”}”(hjº­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MChj­ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjË­h]”hŒReturn”…”�”}”(hjÍ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MEhj­ubhì)�”}”(hj…}h]”hŒ0”…”�”}”(hjá­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MFhj­ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ#check_flush_dependency (C function)”Œc.check_flush_dependency”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒsvoid check_flush_dependency (struct workqueue_struct *target_wq, struct work_struct *target_work, bool from_cancel)”h]”jè)�”}”(hŒrvoid check_flush_dependency(struct workqueue_struct *target_wq, struct work_struct *target_work, bool from_cancel)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj ®h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj ®h²hh³j®h´M5ubj)�”}”(hŒcheck_flush_dependency”h]”j)�”}”(hŒcheck_flush_dependency”h]”hŒcheck_flush_dependency”…”�”}”(hj0®h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj,®ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj ®h²hh³j®h´M5ubj|)�”}”(hŒW(struct workqueue_struct *target_wq, struct work_struct *target_work, bool from_cancel)”h]”(j‚)�”}”(hŒ"struct workqueue_struct *target_wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjL®h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjH®ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY®h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjH®ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjj®h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjg®ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jl®Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j2®sbŒc.check_flush_dependency”†”asbuh1hhjH®ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ®h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjH®ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj˜®h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjH®ubj)�”}”(hŒ target_wq”h]”hŒ target_wq”…”�”}”(hj¥®h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjH®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjD®ubj‚)�”}”(hŒstruct work_struct *target_work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¾®h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjº®ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË®h²hh³•4Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjº®ubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjÜ®h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÙ®ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÞ®Œmodname”NŒ classname”Nj7j:)�”}”j=]”j†®Œc.check_flush_dependency”†”asbuh1hhjº®ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú®h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjº®ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjº®ubj)�”}”(hŒ target_work”h]”hŒ target_work”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjº®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjD®ubj‚)�”}”(hŒbool from_cancel”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj.¯h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj*¯ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;¯h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj*¯ubj)�”}”(hŒ from_cancel”h]”hŒ from_cancel”…”�”}”(hjI¯h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj*¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjD®ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj ®h²hh³j®h´M5ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj®h²hh³j®h´M5ubah}”(h]”j®ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j®h´M5hj®h²hubjC)�”}”(hhh]”hì)�”}”(hŒ!check for flush dependency sanity”h]”hŒ!check for flush dependency sanity”…”�”}”(hjs¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M5hjp¯h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj®h²hh³j®h´M5ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej‹¯jfj‹¯jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX´**Parameters** ``struct workqueue_struct *target_wq`` workqueue being flushed ``struct work_struct *target_work`` work item being flushed (NULL for workqueue flushes) ``bool from_cancel`` are we called from the work cancel path **Description** ``current`` is trying to flush the whole **target_wq** or **target_work** on it. If this is not the cancel path (which implies work being flushed is either already running, or will not be at all), check if **target_wq** doesn't have ``WQ_MEM_RECLAIM`` and verify that ``current`` is not reclaiming memory or running on a workqueue which doesn't have ``WQ_MEM_RECLAIM`` as that can break forward- progress guarantee leading to a deadlock.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj•¯h]”hŒ Parameters”…”�”}”(hj—¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M9hj�¯ubjg)�”}”(hhh]”(jl)�”}”(hŒ?``struct workqueue_struct *target_wq`` workqueue being flushed ”h]”(jr)�”}”(hŒ&``struct workqueue_struct *target_wq``”h]”jú)�”}”(hj´¯h]”hŒ"struct workqueue_struct *target_wq”…”�”}”(hj¶¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj²¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M6hj®¯ubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue being flushed”h]”hŒworkqueue being flushed”…”�”}”(hjͯh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jɯh´M6hjʯubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj®¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jɯh´M6hj«¯ubjl)�”}”(hŒY``struct work_struct *target_work`` work item being flushed (NULL for workqueue flushes) ”h]”(jr)�”}”(hŒ#``struct work_struct *target_work``”h]”jú)�”}”(hjí¯h]”hŒstruct work_struct *target_work”…”�”}”(hjï¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjë¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M7hjç¯ubj‹)�”}”(hhh]”hì)�”}”(hŒ4work item being flushed (NULL for workqueue flushes)”h]”hŒ4work item being flushed (NULL for workqueue flushes)”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j°h´M7hj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjç¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j°h´M7hj«¯ubjl)�”}”(hŒ=``bool from_cancel`` are we called from the work cancel path ”h]”(jr)�”}”(hŒ``bool from_cancel``”h]”jú)�”}”(hj&°h]”hŒbool from_cancel”…”�”}”(hj(°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj$°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M8hj °ubj‹)�”}”(hhh]”hì)�”}”(hŒ'are we called from the work cancel path”h]”hŒ'are we called from the work cancel path”…”�”}”(hj?°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j;°h´M8hj<°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj °ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j;°h´M8hj«¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj�¯ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hja°h]”hŒ Description”…”�”}”(hjc°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M:hj�¯ubhì)�”}”(hXµ``current`` is trying to flush the whole **target_wq** or **target_work** on it. If this is not the cancel path (which implies work being flushed is either already running, or will not be at all), check if **target_wq** doesn't have ``WQ_MEM_RECLAIM`` and verify that ``current`` is not reclaiming memory or running on a workqueue which doesn't have ``WQ_MEM_RECLAIM`` as that can break forward- progress guarantee leading to a deadlock.”h]”(jú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hj{°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjw°ubhŒ is trying to flush the whole ”…”�”}”(hjw°h²hh³Nh´Nubj)�”}”(hŒ **target_wq**”h]”hŒ target_wq”…”�”}”(hj�°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjw°ubhŒ or ”…”�”}”(hjw°h²hh³Nh´Nubj)�”}”(hŒ**target_work**”h]”hŒ target_work”…”�”}”(hjŸ°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjw°ubhŒ… on it. If this is not the cancel path (which implies work being flushed is either already running, or will not be at all), check if ”…”�”}”(hjw°h²hh³Nh´Nubj)�”}”(hŒ **target_wq**”h]”hŒ target_wq”…”�”}”(hj±°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjw°ubhŒ doesn’t have ”…”�”}”(hjw°h²hh³Nh´Nubjú)�”}”(hŒ``WQ_MEM_RECLAIM``”h]”hŒWQ_MEM_RECLAIM”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjw°ubhŒ and verify that ”…”�”}”(hjw°h²hh³Nh´Nubjú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hjÕ°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjw°ubhŒI is not reclaiming memory or running on a workqueue which doesn’t have ”…”�”}”(hjw°h²hh³Nh´Nubjú)�”}”(hŒ``WQ_MEM_RECLAIM``”h]”hŒWQ_MEM_RECLAIM”…”�”}”(hjç°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjw°ubhŒE as that can break forward- progress guarantee leading to a deadlock.”…”�”}”(hjw°h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M9hj�¯ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒinsert_wq_barrier (C function)”Œc.insert_wq_barrier”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒvoid insert_wq_barrier (struct pool_workqueue *pwq, struct wq_barrier *barr, struct work_struct *target, struct worker *worker)”h]”jè)�”}”(hŒ~void insert_wq_barrier(struct pool_workqueue *pwq, struct wq_barrier *barr, struct work_struct *target, struct worker *worker)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj ±h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj±h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Meubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/±h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj±h²hh³j.±h´Meubj)�”}”(hŒinsert_wq_barrier”h]”j)�”}”(hŒinsert_wq_barrier”h]”hŒinsert_wq_barrier”…”�”}”(hjA±h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj=±ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj±h²hh³j.±h´Meubj|)�”}”(hŒh(struct pool_workqueue *pwq, struct wq_barrier *barr, struct work_struct *target, struct worker *worker)”h]”(j‚)�”}”(hŒstruct pool_workqueue *pwq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj]±h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjY±ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj±h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjY±ubh)�”}”(hhh]”j)�”}”(hŒpool_workqueue”h]”hŒpool_workqueue”…”�”}”(hj{±h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjx±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j}±Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jC±sbŒc.insert_wq_barrier”†”asbuh1hhjY±ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›±h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjY±ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj©±h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjY±ubj)�”}”(hŒpwq”h]”hŒpwq”…”�”}”(hj¶±h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjY±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjU±ubj‚)�”}”(hŒstruct wq_barrier *barr”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjϱh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj˱ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjܱh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj˱ubh)�”}”(hhh]”j)�”}”(hŒ wq_barrier”h]”hŒ wq_barrier”…”�”}”(hjí±h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjê±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jﱌmodname”NŒ classname”Nj7j:)�”}”j=]”j—±Œc.insert_wq_barrier”†”asbuh1hhj˱ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ²h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj˱ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj˱ubj)�”}”(hŒbarr”h]”hŒbarr”…”�”}”(hj&²h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj˱ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjU±ubj‚)�”}”(hŒstruct work_struct *target”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj?²h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj;²ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL²h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj;²ubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hj]²h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjZ²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j_²Œmodname”NŒ classname”Nj7j:)�”}”j=]”j—±Œc.insert_wq_barrier”†”asbuh1hhj;²ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{²h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj;²ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj‰²h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj;²ubj)�”}”(hŒtarget”h]”hŒtarget”…”�”}”(hj–²h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj;²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjU±ubj‚)�”}”(hŒstruct worker *worker”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¯²h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj«²ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼²h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj«²ubh)�”}”(hhh]”j)�”}”(hŒworker”h]”hŒworker”…”�”}”(hjͲh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjʲubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jϲŒmodname”NŒ classname”Nj7j:)�”}”j=]”j—±Œc.insert_wq_barrier”†”asbuh1hhj«²ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë²h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj«²ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjù²h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj«²ubj)�”}”(hŒworker”h]”hŒworker”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj«²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjU±ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj±h²hh³j.±h´Meubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj±h²hh³j.±h´Meubah}”(h]”j±ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j.±h´Mehj±h²hubjC)�”}”(hhh]”hì)�”}”(hŒinsert a barrier work”h]”hŒinsert a barrier work”…”�”}”(hj0³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mehj-³h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj±h²hh³j.±h´Meubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejH³jfjH³jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXç**Parameters** ``struct pool_workqueue *pwq`` pwq to insert barrier into ``struct wq_barrier *barr`` wq_barrier to insert ``struct work_struct *target`` target work to attach **barr** to ``struct worker *worker`` worker currently executing **target**, NULL if **target** is not executing **Description** **barr** is linked to **target** such that **barr** is completed only after **target** finishes execution. Please note that the ordering guarantee is observed only with respect to **target** and on the local cpu. Currently, a queued barrier can't be canceled. This is because try_to_grab_pending() can't determine whether the work to be grabbed is at the head of the queue and thus can't clear LINKED flag of the previous work while there must be a valid next work after a work with LINKED flag set. Note that when **worker** is non-NULL, **target** may be modified underneath us, so we can't reliably determine pwq from **target**. **Context** raw_spin_lock_irq(pool->lock).”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjR³h]”hŒ Parameters”…”�”}”(hjT³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjP³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MihjL³ubjg)�”}”(hhh]”(jl)�”}”(hŒ:``struct pool_workqueue *pwq`` pwq to insert barrier into ”h]”(jr)�”}”(hŒ``struct pool_workqueue *pwq``”h]”jú)�”}”(hjq³h]”hŒstruct pool_workqueue *pwq”…”�”}”(hjs³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjo³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mfhjk³ubj‹)�”}”(hhh]”hì)�”}”(hŒpwq to insert barrier into”h]”hŒpwq to insert barrier into”…”�”}”(hjгh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j†³h´Mfhj‡³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjk³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j†³h´Mfhjh³ubjl)�”}”(hŒ1``struct wq_barrier *barr`` wq_barrier to insert ”h]”(jr)�”}”(hŒ``struct wq_barrier *barr``”h]”jú)�”}”(hjª³h]”hŒstruct wq_barrier *barr”…”�”}”(hj¬³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¨³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mghj¤³ubj‹)�”}”(hhh]”hì)�”}”(hŒwq_barrier to insert”h]”hŒwq_barrier to insert”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¿³h´MghjÀ³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¤³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j¿³h´Mghjh³ubjl)�”}”(hŒA``struct work_struct *target`` target work to attach **barr** to ”h]”(jr)�”}”(hŒ``struct work_struct *target``”h]”jú)�”}”(hjã³h]”hŒstruct work_struct *target”…”�”}”(hjå³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjá³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhhjݳubj‹)�”}”(hhh]”hì)�”}”(hŒ!target work to attach **barr** to”h]”(hŒtarget work to attach ”…”�”}”(hjü³h²hh³Nh´Nubj)�”}”(hŒ**barr**”h]”hŒbarr”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjü³ubhŒ to”…”�”}”(hjü³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jø³h´Mhhjù³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjݳubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jø³h´Mhhjh³ubjl)�”}”(hŒe``struct worker *worker`` worker currently executing **target**, NULL if **target** is not executing ”h]”(jr)�”}”(hŒ``struct worker *worker``”h]”jú)�”}”(hj.´h]”hŒstruct worker *worker”…”�”}”(hj0´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj,´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mihj(´ubj‹)�”}”(hhh]”hì)�”}”(hŒJworker currently executing **target**, NULL if **target** is not executing”h]”(hŒworker currently executing ”…”�”}”(hjG´h²hh³Nh´Nubj)�”}”(hŒ **target**”h]”hŒtarget”…”�”}”(hjO´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG´ubhŒ , NULL if ”…”�”}”(hjG´h²hh³Nh´Nubj)�”}”(hŒ **target**”h]”hŒtarget”…”�”}”(hja´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG´ubhŒ is not executing”…”�”}”(hjG´h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jC´h´MihjD´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj(´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jC´h´Mihjh³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjL³ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj�´h]”hŒ Description”…”�”}”(hj�´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MkhjL³ubhì)�”}”(hŒÕ**barr** is linked to **target** such that **barr** is completed only after **target** finishes execution. Please note that the ordering guarantee is observed only with respect to **target** and on the local cpu.”h]”(j)�”}”(hŒ**barr**”h]”hŒbarr”…”�”}”(hj§´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£´ubhŒ is linked to ”…”�”}”(hj£´h²hh³Nh´Nubj)�”}”(hŒ **target**”h]”hŒtarget”…”�”}”(hj¹´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£´ubhŒ such that ”…”�”}”(hj£´h²hh³Nh´Nubj)�”}”(hŒ**barr**”h]”hŒbarr”…”�”}”(hjË´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£´ubhŒ is completed only after ”…”�”}”(hj£´h²hh³Nh´Nubj)�”}”(hŒ **target**”h]”hŒtarget”…”�”}”(hjÝ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£´ubhŒ_ finishes execution. Please note that the ordering guarantee is observed only with respect to ”…”�”}”(hj£´h²hh³Nh´Nubj)�”}”(hŒ **target**”h]”hŒtarget”…”�”}”(hjï´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£´ubhŒ and on the local cpu.”…”�”}”(hj£´h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MjhjL³ubhì)�”}”(hXCurrently, a queued barrier can't be canceled. This is because try_to_grab_pending() can't determine whether the work to be grabbed is at the head of the queue and thus can't clear LINKED flag of the previous work while there must be a valid next work after a work with LINKED flag set.”h]”hX%Currently, a queued barrier can’t be canceled. This is because try_to_grab_pending() can’t determine whether the work to be grabbed is at the head of the queue and thus can’t clear LINKED flag of the previous work while there must be a valid next work after a work with LINKED flag set.”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MohjL³ubhì)�”}”(hŒ„Note that when **worker** is non-NULL, **target** may be modified underneath us, so we can't reliably determine pwq from **target**.”h]”(hŒNote that when ”…”�”}”(hjµh²hh³Nh´Nubj)�”}”(hŒ **worker**”h]”hŒworker”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµubhŒ is non-NULL, ”…”�”}”(hjµh²hh³Nh´Nubj)�”}”(hŒ **target**”h]”hŒtarget”…”�”}”(hj1µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµubhŒJ may be modified underneath us, so we can’t reliably determine pwq from ”…”�”}”(hjµh²hh³Nh´Nubj)�”}”(hŒ **target**”h]”hŒtarget”…”�”}”(hjCµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµubhŒ.”…”�”}”(hjµh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MuhjL³ubhì)�”}”(hŒ **Context**”h]”j)�”}”(hj^µh]”hŒContext”…”�”}”(hj`µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\µubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MxhjL³ubhì)�”}”(hŒraw_spin_lock_irq(pool->lock).”h]”hŒraw_spin_lock_irq(pool->lock).”…”�”}”(hjtµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MyhjL³ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ&flush_workqueue_prep_pwqs (C function)”Œc.flush_workqueue_prep_pwqs”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ]bool flush_workqueue_prep_pwqs (struct workqueue_struct *wq, int flush_color, int work_color)”h]”jè)�”}”(hŒ\bool flush_workqueue_prep_pwqs(struct workqueue_struct *wq, int flush_color, int work_color)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj£µh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjŸµh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M²ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±µh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjŸµh²hh³j°µh´M²ubj)�”}”(hŒflush_workqueue_prep_pwqs”h]”j)�”}”(hŒflush_workqueue_prep_pwqs”h]”hŒflush_workqueue_prep_pwqs”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¿µubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjŸµh²hh³j°µh´M²ubj|)�”}”(hŒ>(struct workqueue_struct *wq, int flush_color, int work_color)”h]”(j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjßµh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjÛµubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìµh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÛµubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjýµh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjúµubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÿµŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jŵsbŒc.flush_workqueue_prep_pwqs”†”asbuh1hhjÛµubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÛµubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj+¶h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÛµubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hj8¶h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÛµubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj×µubj‚)�”}”(hŒint flush_color”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjQ¶h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjM¶ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_¶h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjM¶ubj)�”}”(hŒ flush_color”h]”hŒ flush_color”…”�”}”(hjm¶h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjM¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj×µubj‚)�”}”(hŒint work_color”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj†¶h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj‚¶ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”¶h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj‚¶ubj)�”}”(hŒ work_color”h]”hŒ work_color”…”�”}”(hj¢¶h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj‚¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj×µubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjŸµh²hh³j°µh´M²ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj›µh²hh³j°µh´M²ubah}”(h]”j–µah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j°µh´M²hj˜µh²hubjC)�”}”(hhh]”hì)�”}”(hŒ#prepare pwqs for workqueue flushing”h]”hŒ#prepare pwqs for workqueue flushing”…”�”}”(hj̶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M²hjɶh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj˜µh²hh³j°µh´M²ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejä¶jfjä¶jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXa**Parameters** ``struct workqueue_struct *wq`` workqueue being flushed ``int flush_color`` new flush color, < 0 for no-op ``int work_color`` new work color, < 0 for no-op **Description** Prepare pwqs for workqueue flushing. If **flush_color** is non-negative, flush_color on all pwqs should be -1. If no pwq has in-flight commands at the specified color, all pwq->flush_color's stay at -1 and ``false`` is returned. If any pwq has in flight commands, its pwq->flush_color is set to **flush_color**, **wq->nr_pwqs_to_flush** is updated accordingly, pwq wakeup logic is armed and ``true`` is returned. The caller should have initialized **wq->first_flusher** prior to calling this function with non-negative **flush_color**. If **flush_color** is negative, no flush color update is done and ``false`` is returned. If **work_color** is non-negative, all pwqs should have the same work_color which is previous to **work_color** and all will be advanced to **work_color**. **Context** mutex_lock(wq->mutex). **Return** ``true`` if **flush_color** >= 0 and there's something to flush. ``false`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjî¶h]”hŒ Parameters”…”�”}”(hjð¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjì¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¶hjè¶ubjg)�”}”(hhh]”(jl)�”}”(hŒ8``struct workqueue_struct *wq`` workqueue being flushed ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj ·h]”hŒstruct workqueue_struct *wq”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M³hj·ubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue being flushed”h]”hŒworkqueue being flushed”…”�”}”(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&]”uh1jkh³j"·h´M³hj·ubjl)�”}”(hŒ3``int flush_color`` new flush color, < 0 for no-op ”h]”(jr)�”}”(hŒ``int flush_color``”h]”jú)�”}”(hjF·h]”hŒint flush_color”…”�”}”(hjH·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjD·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M´hj@·ubj‹)�”}”(hhh]”hì)�”}”(hŒnew flush color, < 0 for no-op”h]”hŒnew flush color, < 0 for no-op”…”�”}”(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&]”uh1jkh³j[·h´M´hj·ubjl)�”}”(hŒ1``int work_color`` new work color, < 0 for no-op ”h]”(jr)�”}”(hŒ``int work_color``”h]”jú)�”}”(hj·h]”hŒint work_color”…”�”}”(hj�·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj}·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mµhjy·ubj‹)�”}”(hhh]”hì)�”}”(hŒnew work color, < 0 for no-op”h]”hŒnew work color, < 0 for no-op”…”�”}”(hj˜·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j”·h´Mµhj•·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjy·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j”·h´Mµhj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjè¶ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjº·h]”hŒ Description”…”�”}”(hj¼·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M·hjè¶ubhì)�”}”(hŒ$Prepare pwqs for workqueue flushing.”h]”hŒ$Prepare pwqs for workqueue flushing.”…”�”}”(hjзh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¶hjè¶ubhì)�”}”(hXyIf **flush_color** is non-negative, flush_color on all pwqs should be -1. If no pwq has in-flight commands at the specified color, all pwq->flush_color's stay at -1 and ``false`` is returned. If any pwq has in flight commands, its pwq->flush_color is set to **flush_color**, **wq->nr_pwqs_to_flush** is updated accordingly, pwq wakeup logic is armed and ``true`` is returned.”h]”(hŒIf ”…”�”}”(hjß·h²hh³Nh´Nubj)�”}”(hŒ**flush_color**”h]”hŒ flush_color”…”�”}”(hjç·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjß·ubhŒš is non-negative, flush_color on all pwqs should be -1. If no pwq has in-flight commands at the specified color, all pwq->flush_color’s stay at -1 and ”…”�”}”(hjß·h²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjù·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjß·ubhŒQ is returned. If any pwq has in flight commands, its pwq->flush_color is set to ”…”�”}”(hjß·h²hh³Nh´Nubj)�”}”(hŒ**flush_color**”h]”hŒ flush_color”…”�”}”(hj ¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjß·ubhŒ, ”…”�”}”(hjß·h²hh³Nh´Nubj)�”}”(hŒ**wq->nr_pwqs_to_flush**”h]”hŒwq->nr_pwqs_to_flush”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjß·ubhŒ7 is updated accordingly, pwq wakeup logic is armed and ”…”�”}”(hjß·h²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj/¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjß·ubhŒ is returned.”…”�”}”(hjß·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¸hjè¶ubhì)�”}”(hŒÔThe caller should have initialized **wq->first_flusher** prior to calling this function with non-negative **flush_color**. If **flush_color** is negative, no flush color update is done and ``false`` is returned.”h]”(hŒ#The caller should have initialized ”…”�”}”(hjH¸h²hh³Nh´Nubj)�”}”(hŒ**wq->first_flusher**”h]”hŒwq->first_flusher”…”�”}”(hjP¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjH¸ubhŒ2 prior to calling this function with non-negative ”…”�”}”(hjH¸h²hh³Nh´Nubj)�”}”(hŒ**flush_color**”h]”hŒ flush_color”…”�”}”(hjb¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjH¸ubhŒ. If ”…”�”}”(hjH¸h²hh³Nh´Nubj)�”}”(hŒ**flush_color**”h]”hŒ flush_color”…”�”}”(hjt¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjH¸ubhŒ0 is negative, no flush color update is done and ”…”�”}”(hjH¸h²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj†¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjH¸ubhŒ is returned.”…”�”}”(hjH¸h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¿hjè¶ubhì)�”}”(hŒ›If **work_color** is non-negative, all pwqs should have the same work_color which is previous to **work_color** and all will be advanced to **work_color**.”h]”(hŒIf ”…”�”}”(hjŸ¸h²hh³Nh´Nubj)�”}”(hŒ**work_color**”h]”hŒ work_color”…”�”}”(hj§¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ¸ubhŒP is non-negative, all pwqs should have the same work_color which is previous to ”…”�”}”(hjŸ¸h²hh³Nh´Nubj)�”}”(hŒ**work_color**”h]”hŒ work_color”…”�”}”(hj¹¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ¸ubhŒ and all will be advanced to ”…”�”}”(hjŸ¸h²hh³Nh´Nubj)�”}”(hŒ**work_color**”h]”hŒ work_color”…”�”}”(hj˸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ¸ubhŒ.”…”�”}”(hjŸ¸h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÄhjè¶ubhì)�”}”(hŒ **Context**”h]”j)�”}”(hjæ¸h]”hŒContext”…”�”}”(hjè¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjä¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÈhjè¶ubhì)�”}”(hŒmutex_lock(wq->mutex).”h]”hŒmutex_lock(wq->mutex).”…”�”}”(hjü¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÉhjè¶ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj ¹h]”hŒReturn”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MËhjè¶ubhì)�”}”(hŒV``true`` if **flush_color** >= 0 and there's something to flush. ``false`` otherwise.”h]”(jú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj'¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj#¹ubhŒ if ”…”�”}”(hj#¹h²hh³Nh´Nubj)�”}”(hŒ**flush_color**”h]”hŒ flush_color”…”�”}”(hj9¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#¹ubhŒ) >= 0 and there’s something to flush. ”…”�”}”(hj#¹h²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjK¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj#¹ubhŒ otherwise.”…”�”}”(hj#¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÌhjè¶ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ__flush_workqueue (C function)”Œc.__flush_workqueue”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ4void __flush_workqueue (struct workqueue_struct *wq)”h]”jè)�”}”(hŒ3void __flush_workqueue(struct workqueue_struct *wq)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj„¹h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj€¹h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M'ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“¹h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj€¹h²hh³j’¹h´M'ubj)�”}”(hŒ__flush_workqueue”h]”j)�”}”(hŒ__flush_workqueue”h]”hŒ__flush_workqueue”…”�”}”(hj¥¹h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¡¹ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj€¹h²hh³j’¹h´M'ubj|)�”}”(hŒ(struct workqueue_struct *wq)”h]”j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÁ¹h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj½¹ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjιh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj½¹ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjß¹h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjܹubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jṌmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j§¹sbŒc.__flush_workqueue”†”asbuh1hhj½¹ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ¹h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj½¹ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj ºh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj½¹ubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj½¹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¹¹ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj€¹h²hh³j’¹h´M'ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj|¹h²hh³j’¹h´M'ubah}”(h]”jw¹ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j’¹h´M'hjy¹h²hubjC)�”}”(hhh]”hì)�”}”(hŒ5ensure that any scheduled work has run to completion.”h]”hŒ5ensure that any scheduled work has run to completion.”…”�”}”(hjDºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M'hjAºh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjy¹h²hh³j’¹h´M'ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej\ºjfj\ºjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒã**Parameters** ``struct workqueue_struct *wq`` workqueue to flush **Description** This function sleeps until all work items which were queued on entry have finished execution, but it is not livelocked by new incoming ones.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjfºh]”hŒ Parameters”…”�”}”(hjhºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdºubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M+hj`ºubjg)�”}”(hhh]”jl)�”}”(hŒ3``struct workqueue_struct *wq`` workqueue to flush ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj…ºh]”hŒstruct workqueue_struct *wq”…”�”}”(hj‡ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjƒºubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M(hjºubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue to flush”h]”hŒworkqueue to flush”…”�”}”(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&]”uh1jkh³jšºh´M(hj|ºubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj`ºubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÀºh]”hŒ Description”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾ºubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M*hj`ºubhì)�”}”(hŒŒThis function sleeps until all work items which were queued on entry have finished execution, but it is not livelocked by new incoming ones.”h]”hŒŒThis function sleeps until all work items which were queued on entry have finished execution, but it is not livelocked by new incoming ones.”…”�”}”(hjÖºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M)hj`ºubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒdrain_workqueue (C function)”Œc.drain_workqueue”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ2void drain_workqueue (struct workqueue_struct *wq)”h]”jè)�”}”(hŒ1void drain_workqueue(struct workqueue_struct *wq)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj»h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÄubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj»h²hh³j»h´MÄubj)�”}”(hŒdrain_workqueue”h]”j)�”}”(hŒdrain_workqueue”h]”hŒdrain_workqueue”…”�”}”(hj&»h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj"»ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj»h²hh³j»h´MÄubj|)�”}”(hŒ(struct workqueue_struct *wq)”h]”j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjB»h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj>»ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO»h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj>»ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hj`»h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj]»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jb»Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j(»sbŒc.drain_workqueue”†”asbuh1hhj>»ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€»h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj>»ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjŽ»h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj>»ubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hj›»h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj>»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj:»ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj»h²hh³j»h´MÄubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjýºh²hh³j»h´MÄubah}”(h]”jøºah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j»h´MÄhjúºh²hubjC)�”}”(hhh]”hì)�”}”(hŒdrain a workqueue”h]”hŒdrain a workqueue”…”�”}”(hjÅ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÄhj»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjúºh²hh³j»h´MÄubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejÝ»jfjÝ»jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXÑ**Parameters** ``struct workqueue_struct *wq`` workqueue to drain **Description** Wait until the workqueue becomes empty. While draining is in progress, only chain queueing is allowed. IOW, only currently pending or running work items on **wq** can queue further work items on it. **wq** is flushed repeatedly until it becomes empty. The number of flushing is determined by the depth of chaining and should be relatively short. Whine if it takes too long.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjç»h]”hŒ Parameters”…”�”}”(hjé»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjå»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÈhjá»ubjg)�”}”(hhh]”jl)�”}”(hŒ3``struct workqueue_struct *wq`` workqueue to drain ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj¼h]”hŒstruct workqueue_struct *wq”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÅhj¼ubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue to drain”h]”hŒworkqueue to drain”…”�”}”(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&]”uh1jkh³j¼h´MÅhjý»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjá»ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjA¼h]”hŒ Description”…”�”}”(hjC¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÇhjá»ubhì)�”}”(hXzWait until the workqueue becomes empty. While draining is in progress, only chain queueing is allowed. IOW, only currently pending or running work items on **wq** can queue further work items on it. **wq** is flushed repeatedly until it becomes empty. The number of flushing is determined by the depth of chaining and should be relatively short. Whine if it takes too long.”h]”(hŒžWait until the workqueue becomes empty. While draining is in progress, only chain queueing is allowed. IOW, only currently pending or running work items on ”…”�”}”(hjW¼h²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hj_¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjW¼ubhŒ& can queue further work items on it. ”…”�”}”(hjW¼h²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hjq¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjW¼ubhŒª is flushed repeatedly until it becomes empty. The number of flushing is determined by the depth of chaining and should be relatively short. Whine if it takes too long.”…”�”}”(hjW¼h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÆhjá»ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒflush_work (C function)”Œ c.flush_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ*bool flush_work (struct work_struct *work)”h]”jè)�”}”(hŒ)bool flush_work(struct work_struct *work)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjª¼h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj¦¼h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸¼h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¦¼h²hh³j·¼h´Mhubj)�”}”(hŒ flush_work”h]”j)�”}”(hŒ flush_work”h]”hŒ flush_work”…”�”}”(hjʼh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjƼubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj¦¼h²hh³j·¼h´Mhubj|)�”}”(hŒ(struct work_struct *work)”h]”j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjæ¼h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjâ¼ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó¼h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjâ¼ubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j½Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j̼sbŒ c.flush_work”†”asbuh1hhjâ¼ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$½h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjâ¼ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj2½h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjâ¼ubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hj?½h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjâ¼ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÞ¼ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj¦¼h²hh³j·¼h´Mhubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj¢¼h²hh³j·¼h´Mhubah}”(h]”j�¼ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j·¼h´MhhjŸ¼h²hubjC)�”}”(hhh]”hì)�”}”(hŒ>wait for a work to finish executing the last queueing instance”h]”hŒ>wait for a work to finish executing the last queueing instance”…”�”}”(hji½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhhjf½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjŸ¼h²hh³j·¼h´Mhubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej�½jfj�½jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXL**Parameters** ``struct work_struct *work`` the work to flush **Description** Wait until **work** has finished execution. **work** is guaranteed to be idle on return if it hasn't been requeued since flush started. **Return** ``true`` if flush_work() waited for the work to finish execution, ``false`` if it was already idle.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj‹½h]”hŒ Parameters”…”�”}”(hj�½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‰½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mlhj…½ubjg)�”}”(hhh]”jl)�”}”(hŒ/``struct work_struct *work`` the work to flush ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hjª½h]”hŒstruct work_struct *work”…”�”}”(hj¬½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¨½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mihj¤½ubj‹)�”}”(hhh]”hì)�”}”(hŒthe work to flush”h]”hŒthe work to flush”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¿½h´MihjÀ½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¤½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j¿½h´Mihj¡½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj…½ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjå½h]”hŒ Description”…”�”}”(hjç½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjã½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mkhj…½ubhì)�”}”(hŒˆWait until **work** has finished execution. **work** is guaranteed to be idle on return if it hasn't been requeued since flush started.”h]”(hŒ Wait until ”…”�”}”(hjû½h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû½ubhŒ has finished execution. ”…”�”}”(hjû½h²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû½ubhŒU is guaranteed to be idle on return if it hasn’t been requeued since flush started.”…”�”}”(hjû½h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mjhj…½ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj0¾h]”hŒReturn”…”�”}”(hj2¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mmhj…½ubhì)�”}”(hŒc``true`` if flush_work() waited for the work to finish execution, ``false`` if it was already idle.”h]”(jú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjJ¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjF¾ubhŒ: if flush_work() waited for the work to finish execution, ”…”�”}”(hjF¾h²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj\¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjF¾ubhŒ if it was already idle.”…”�”}”(hjF¾h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mnhj…½ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒflush_delayed_work (C function)”Œc.flush_delayed_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ4bool flush_delayed_work (struct delayed_work *dwork)”h]”jè)�”}”(hŒ3bool flush_delayed_work(struct delayed_work *dwork)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj•¾h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj‘¾h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mzubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£¾h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj‘¾h²hh³j¢¾h´Mzubj)�”}”(hŒflush_delayed_work”h]”j)�”}”(hŒflush_delayed_work”h]”hŒflush_delayed_work”…”�”}”(hjµ¾h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj±¾ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj‘¾h²hh³j¢¾h´Mzubj|)�”}”(hŒ(struct delayed_work *dwork)”h]”j‚)�”}”(hŒstruct delayed_work *dwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjѾh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj;ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ¾h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj;ubh)�”}”(hhh]”j)�”}”(hŒ delayed_work”h]”hŒ delayed_work”…”�”}”(hjï¾h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjì¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jñ¾Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j·¾sbŒc.flush_delayed_work”†”asbuh1hhj;ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj;ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj;ubj)�”}”(hŒdwork”h]”hŒdwork”…”�”}”(hj*¿h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjɾubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj‘¾h²hh³j¢¾h´Mzubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj�¾h²hh³j¢¾h´Mzubah}”(h]”jˆ¾ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j¢¾h´Mzhjоh²hubjC)�”}”(hhh]”hì)�”}”(hŒ6wait for a dwork to finish executing the last queueing”h]”hŒ6wait for a dwork to finish executing the last queueing”…”�”}”(hjT¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MzhjQ¿h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjоh²hh³j¢¾h´Mzubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejl¿jfjl¿jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXz**Parameters** ``struct delayed_work *dwork`` the delayed work to flush **Description** Delayed timer is cancelled and the pending work is queued for immediate execution. Like flush_work(), this function only considers the last queueing instance of **dwork**. **Return** ``true`` if flush_work() waited for the work to finish execution, ``false`` if it was already idle.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjv¿h]”hŒ Parameters”…”�”}”(hjx¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjt¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M~hjp¿ubjg)�”}”(hhh]”jl)�”}”(hŒ9``struct delayed_work *dwork`` the delayed work to flush ”h]”(jr)�”}”(hŒ``struct delayed_work *dwork``”h]”jú)�”}”(hj•¿h]”hŒstruct delayed_work *dwork”…”�”}”(hj—¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj“¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M{hj�¿ubj‹)�”}”(hhh]”hì)�”}”(hŒthe delayed work to flush”h]”hŒthe delayed work to flush”…”�”}”(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&]”uh1jkh³jª¿h´M{hjŒ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjp¿ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjпh]”hŒ Description”…”�”}”(hjÒ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjοubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M}hjp¿ubhì)�”}”(hŒ¬Delayed timer is cancelled and the pending work is queued for immediate execution. Like flush_work(), this function only considers the last queueing instance of **dwork**.”h]”(hŒ¢Delayed timer is cancelled and the pending work is queued for immediate execution. Like flush_work(), this function only considers the last queueing instance of ”…”�”}”(hjæ¿h²hh³Nh´Nubj)�”}”(hŒ **dwork**”h]”hŒdwork”…”�”}”(hjî¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjæ¿ubhŒ.”…”�”}”(hjæ¿h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M|hjp¿ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj Àh]”hŒReturn”…”�”}”(hj Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M€hjp¿ubhì)�”}”(hŒc``true`` if flush_work() waited for the work to finish execution, ``false`` if it was already idle.”h]”(jú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj#Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÀubhŒ: if flush_work() waited for the work to finish execution, ”…”�”}”(hjÀh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj5Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÀubhŒ if it was already idle.”…”�”}”(hjÀh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hjp¿ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒflush_rcu_work (C function)”Œc.flush_rcu_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ,bool flush_rcu_work (struct rcu_work *rwork)”h]”jè)�”}”(hŒ+bool flush_rcu_work(struct rcu_work *rwork)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjnÀh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjjÀh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|Àh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjjÀh²hh³j{Àh´M�ubj)�”}”(hŒflush_rcu_work”h]”j)�”}”(hŒflush_rcu_work”h]”hŒflush_rcu_work”…”�”}”(hjŽÀh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjŠÀubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjjÀh²hh³j{Àh´M�ubj|)�”}”(hŒ(struct rcu_work *rwork)”h]”j‚)�”}”(hŒstruct rcu_work *rwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjªÀh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj¦Àubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·Àh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¦Àubh)�”}”(hhh]”j)�”}”(hŒrcu_work”h]”hŒrcu_work”…”�”}”(hjÈÀh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÅÀubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÊÀŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j�ÀsbŒc.flush_rcu_work”†”asbuh1hhj¦Àubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèÀh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¦ÀubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjöÀh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj¦Àubj)�”}”(hŒrwork”h]”hŒrwork”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¦Àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¢Àubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjjÀh²hh³j{Àh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjfÀh²hh³j{Àh´M�ubah}”(h]”jaÀah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j{Àh´M�hjcÀh²hubjC)�”}”(hhh]”hì)�”}”(hŒ6wait for a rwork to finish executing the last queueing”h]”hŒ6wait for a rwork to finish executing the last queueing”…”�”}”(hj-Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hj*Áh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjcÀh²hh³j{Àh´M�ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejEÁjfjEÁjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ·**Parameters** ``struct rcu_work *rwork`` the rcu work to flush **Return** ``true`` if flush_rcu_work() waited for the work to finish execution, ``false`` if it was already idle.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjOÁh]”hŒ Parameters”…”�”}”(hjQÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M”hjIÁubjg)�”}”(hhh]”jl)�”}”(hŒ1``struct rcu_work *rwork`` the rcu work to flush ”h]”(jr)�”}”(hŒ``struct rcu_work *rwork``”h]”jú)�”}”(hjnÁh]”hŒstruct rcu_work *rwork”…”�”}”(hjpÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjlÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‘hjhÁubj‹)�”}”(hhh]”hì)�”}”(hŒthe rcu work to flush”h]”hŒthe rcu work to flush”…”�”}”(hj‡Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jƒÁh´M‘hj„Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjhÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jƒÁh´M‘hjeÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjIÁubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj©Áh]”hŒReturn”…”�”}”(hj«Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M“hjIÁubhì)�”}”(hŒg``true`` if flush_rcu_work() waited for the work to finish execution, ``false`` if it was already idle.”h]”(jú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjÃÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¿ÁubhŒ> if flush_rcu_work() waited for the work to finish execution, ”…”�”}”(hj¿Áh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjÕÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¿ÁubhŒ if it was already idle.”…”�”}”(hj¿Áh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M“hjIÁubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒcancel_work_sync (C function)”Œc.cancel_work_sync”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ0bool cancel_work_sync (struct work_struct *work)”h]”jè)�”}”(hŒ/bool cancel_work_sync(struct work_struct *work)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj Âh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mêubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj Âh²hh³jÂh´Mêubj)�”}”(hŒcancel_work_sync”h]”j)�”}”(hŒcancel_work_sync”h]”hŒcancel_work_sync”…”�”}”(hj.Âh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj*Âubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj Âh²hh³jÂh´Mêubj|)�”}”(hŒ(struct work_struct *work)”h]”j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjJÂh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjFÂubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWÂh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjFÂubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjhÂh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjeÂubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jjÂŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j0ÂsbŒc.cancel_work_sync”†”asbuh1hhjFÂubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆÂh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjFÂubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj–Âh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjFÂubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hj£Âh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjFÂubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjBÂubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj Âh²hh³jÂh´Mêubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÂh²hh³jÂh´Mêubah}”(h]”jÂah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÂh´MêhjÂh²hubjC)�”}”(hhh]”hì)�”}”(hŒ'cancel a work and wait for it to finish”h]”hŒ'cancel a work and wait for it to finish”…”�”}”(hjÍÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MêhjÊÂh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÂh²hh³jÂh´Mêubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejåÂjfjåÂjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX**Parameters** ``struct work_struct *work`` the work to cancel **Description** Cancel **work** and wait for its execution to finish. This function can be used even if the work re-queues itself or migrates to another workqueue. On return from this function, **work** is guaranteed to be not pending or executing on any CPU as long as there aren't racing enqueues. cancel_work_sync(:c:type:`delayed_work->work `) must not be used for delayed_work's. Use cancel_delayed_work_sync() instead. Must be called from a sleepable context if **work** was last queued on a non-BH workqueue. Can also be called from non-hardirq atomic contexts including BH if **work** was last queued on a BH workqueue. Returns ``true`` if **work** was pending, ``false`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjïÂh]”hŒ Parameters”…”�”}”(hjñÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjíÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MîhjéÂubjg)�”}”(hhh]”jl)�”}”(hŒ0``struct work_struct *work`` the work to cancel ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hjÃh]”hŒstruct work_struct *work”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MëhjÃubj‹)�”}”(hhh]”hì)�”}”(hŒthe work to cancel”h]”hŒthe work to cancel”…”�”}”(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&]”uh1jkh³j#Ãh´MëhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjéÂubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjIÃh]”hŒ Description”…”�”}”(hjKÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjGÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MíhjéÂubhì)�”}”(hXCancel **work** and wait for its execution to finish. This function can be used even if the work re-queues itself or migrates to another workqueue. On return from this function, **work** is guaranteed to be not pending or executing on any CPU as long as there aren't racing enqueues.”•h]”(hŒCancel ”…”�”}”(hj_Ãh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjgÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_ÃubhŒ£ and wait for its execution to finish. This function can be used even if the work re-queues itself or migrates to another workqueue. On return from this function, ”…”�”}”(hj_Ãh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjyÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_ÃubhŒc is guaranteed to be not pending or executing on any CPU as long as there aren’t racing enqueues.”…”�”}”(hj_Ãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MìhjéÂubhì)�”}”(hŒŠcancel_work_sync(:c:type:`delayed_work->work `) must not be used for delayed_work's. Use cancel_delayed_work_sync() instead.”h]”(hŒcancel_work_sync(”…”�”}”(hj’Ãh²hh³Nh´Nubh)�”}”(hŒ+:c:type:`delayed_work->work `”h]”jú)�”}”(hjœÃh]”hŒdelayed_work->work”…”�”}”(hjžÃh²hh³Nh´Nubah}”(h]”h ]”(Œxref”j_Œc-type”eh"]”h$]”h&]”uh1jùhjšÃubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œcore-api/workqueue”Œ refdomain”j_Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j7j:)�”}”j=]”sbŒ reftarget”Œ delayed_work”uh1hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mñhj’ÃubhŒP) must not be used for delayed_work’s. Use cancel_delayed_work_sync() instead.”…”�”}”(hj’Ãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¿Ãh´MñhjéÂubhì)�”}”(hŒÊMust be called from a sleepable context if **work** was last queued on a non-BH workqueue. Can also be called from non-hardirq atomic contexts including BH if **work** was last queued on a BH workqueue.”h]”(hŒ+Must be called from a sleepable context if ”…”�”}”(hjÊÃh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjÒÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊÃubhŒl was last queued on a non-BH workqueue. Can also be called from non-hardirq atomic contexts including BH if ”…”�”}”(hjÊÃh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjäÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊÃubhŒ# was last queued on a BH workqueue.”…”�”}”(hjÊÃh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MôhjéÂubhì)�”}”(hŒ>Returns ``true`` if **work** was pending, ``false`` otherwise.”h]”(hŒReturns ”…”�”}”(hjýÃh²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjýÃubhŒ if ”…”�”}”(hjýÃh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýÃubhŒ was pending, ”…”�”}”(hjýÃh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj)Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjýÃubhŒ otherwise.”…”�”}”(hjýÃh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MøhjéÂubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ cancel_delayed_work (C function)”Œc.cancel_delayed_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ5bool cancel_delayed_work (struct delayed_work *dwork)”h]”jè)�”}”(hŒ4bool cancel_delayed_work(struct delayed_work *dwork)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjbÄh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj^Äh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpÄh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj^Äh²hh³joÄh´Mubj)�”}”(hŒcancel_delayed_work”h]”j)�”}”(hŒcancel_delayed_work”h]”hŒcancel_delayed_work”…”�”}”(hj‚Äh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj~Äubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj^Äh²hh³joÄh´Mubj|)�”}”(hŒ(struct delayed_work *dwork)”h]”j‚)�”}”(hŒstruct delayed_work *dwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjžÄh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjšÄubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«Äh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjšÄubh)�”}”(hhh]”j)�”}”(hŒ delayed_work”h]”hŒ delayed_work”…”�”}”(hj¼Äh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¹Äubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j¾ÄŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j„ÄsbŒc.cancel_delayed_work”†”asbuh1hhjšÄubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜÄh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjšÄubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjêÄh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjšÄubj)�”}”(hŒdwork”h]”hŒdwork”…”�”}”(hj÷Äh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjšÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj–Äubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj^Äh²hh³joÄh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjZÄh²hh³joÄh´Mubah}”(h]”jUÄah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³joÄh´MhjWÄh²hubjC)�”}”(hhh]”hì)�”}”(hŒcancel a delayed work”h]”hŒcancel a delayed work”…”�”}”(hj!Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjÅh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjWÄh²hh³joÄh´Mubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej9Åjfj9Åjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXæ**Parameters** ``struct delayed_work *dwork`` delayed_work to cancel **Description** Kill off a pending delayed_work. **Return** ``true`` if **dwork** was pending and canceled; ``false`` if it wasn't pending. **Note** The work callback function may still be running on return, unless it returns ``true`` and the work doesn't re-arm itself. Explicitly flush or use cancel_delayed_work_sync() to wait on it. This function is safe to call from any context including IRQ handler.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjCÅh]”hŒ Parameters”…”�”}”(hjEÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjAÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj=Åubjg)�”}”(hhh]”jl)�”}”(hŒ6``struct delayed_work *dwork`` delayed_work to cancel ”h]”(jr)�”}”(hŒ``struct delayed_work *dwork``”h]”jú)�”}”(hjbÅh]”hŒstruct delayed_work *dwork”…”�”}”(hjdÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj`Åubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj\Åubj‹)�”}”(hhh]”hì)�”}”(hŒdelayed_work to cancel”h]”hŒdelayed_work to cancel”…”�”}”(hj{Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jwÅh´MhjxÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj\Åubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jwÅh´MhjYÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj=Åubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj�Åh]”hŒ Description”…”�”}”(hjŸÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›Åubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj=Åubhì)�”}”(hŒ Kill off a pending delayed_work.”h]”hŒ Kill off a pending delayed_work.”…”�”}”(hj³Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj=Åubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjÄÅh]”hŒReturn”…”�”}”(hjÆÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÂÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj=Åubhì)�”}”(hŒO``true`` if **dwork** was pending and canceled; ``false`` if it wasn't pending.”h]”(jú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjÞÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÚÅubhŒ if ”…”�”}”(hjÚÅh²hh³Nh´Nubj)�”}”(hŒ **dwork**”h]”hŒdwork”…”�”}”(hjðÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚÅubhŒ was pending and canceled; ”…”�”}”(hjÚÅh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÚÅubhŒ if it wasn’t pending.”…”�”}”(hjÚÅh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj=Åubhì)�”}”(hŒ**Note**”h]”j)�”}”(hjÆh]”hŒNote”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hj=Åubhì)�”}”(hŒ¼The work callback function may still be running on return, unless it returns ``true`` and the work doesn't re-arm itself. Explicitly flush or use cancel_delayed_work_sync() to wait on it.”h]”(hŒMThe work callback function may still be running on return, unless it returns ”…”�”}”(hj3Æh²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj;Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj3ÆubhŒi and the work doesn’t re-arm itself. Explicitly flush or use cancel_delayed_work_sync() to wait on it.”…”�”}”(hj3Æh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hj=Åubhì)�”}”(hŒEThis function is safe to call from any context including IRQ handler.”h]”hŒEThis function is safe to call from any context including IRQ handler.”…”�”}”(hjTÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj=Åubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ%cancel_delayed_work_sync (C function)”Œc.cancel_delayed_work_sync”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ:bool cancel_delayed_work_sync (struct delayed_work *dwork)”h]”jè)�”}”(hŒ9bool cancel_delayed_work_sync(struct delayed_work *dwork)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjƒÆh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÆh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘Æh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÆh²hh³j�Æh´Mubj)�”}”(hŒcancel_delayed_work_sync”h]”j)�”}”(hŒcancel_delayed_work_sync”h]”hŒcancel_delayed_work_sync”…”�”}”(hj£Æh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjŸÆubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÆh²hh³j�Æh´Mubj|)�”}”(hŒ(struct delayed_work *dwork)”h]”j‚)�”}”(hŒstruct delayed_work *dwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¿Æh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj»Æubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌÆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj»Æubh)�”}”(hhh]”j)�”}”(hŒ delayed_work”h]”hŒ delayed_work”…”�”}”(hjÝÆh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÚÆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j߯Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j¥ÆsbŒc.cancel_delayed_work_sync”†”asbuh1hhj»Æubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýÆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj»ÆubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj Çh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj»Æubj)�”}”(hŒdwork”h]”hŒdwork”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj»Æubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj·Æubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÆh²hh³j�Æh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj{Æh²hh³j�Æh´Mubah}”(h]”jvÆah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j�Æh´MhjxÆh²hubjC)�”}”(hhh]”hì)�”}”(hŒ/cancel a delayed work and wait for it to finish”h]”hŒ/cancel a delayed work and wait for it to finish”…”�”}”(hjBÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj?Çh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjxÆh²hh³j�Æh´Mubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejZÇjfjZÇjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒÍ**Parameters** ``struct delayed_work *dwork`` the delayed work cancel **Description** This is cancel_work_sync() for delayed works. **Return** ``true`` if **dwork** was pending, ``false`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjdÇh]”hŒ Parameters”…”�”}”(hjfÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjbÇubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj^Çubjg)�”}”(hhh]”jl)�”}”(hŒ7``struct delayed_work *dwork`` the delayed work cancel ”h]”(jr)�”}”(hŒ``struct delayed_work *dwork``”h]”jú)�”}”(hjƒÇh]”hŒstruct delayed_work *dwork”…”�”}”(hj…Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj�Çubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj}Çubj‹)�”}”(hhh]”hì)�”}”(hŒthe delayed work cancel”h]”hŒthe delayed work cancel”…”�”}”(hjœÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j˜Çh´Mhj™Çubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj}Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j˜Çh´MhjzÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj^Çubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj¾Çh]”hŒ Description”…”�”}”(hjÀÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼Çubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj^Çubhì)�”}”(hŒ-This is cancel_work_sync() for delayed works.”h]”hŒ-This is cancel_work_sync() for delayed works.”…”�”}”(hjÔÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj^Çubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjåÇh]”hŒReturn”…”�”}”(hjçÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjãÇubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj^Çubhì)�”}”(hŒ7``true`` if **dwork** was pending, ``false`` otherwise.”h]”(jú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjÿÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjûÇubhŒ if ”…”�”}”(hjûÇh²hh³Nh´Nubj)�”}”(hŒ **dwork**”h]”hŒdwork”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûÇubhŒ was pending, ”…”�”}”(hjûÇh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj#Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjûÇubhŒ otherwise.”…”�”}”(hjûÇh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj^Çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒdisable_work (C function)”Œc.disable_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ,bool disable_work (struct work_struct *work)”h]”jè)�”}”(hŒ+bool disable_work(struct work_struct *work)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj\Èh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjXÈh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M'ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjÈh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjXÈh²hh³jiÈh´M'ubj)�”}”(hŒ disable_work”h]”j)�”}”(hŒ disable_work”h]”hŒ disable_work”…”�”}”(hj|Èh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjxÈubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjXÈh²hh³jiÈh´M'ubj|)�”}”(hŒ(struct work_struct *work)”h]”j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj˜Èh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj”Èubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Èh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj”Èubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hj¶Èh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj³Èubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j¸ÈŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j~ÈsbŒc.disable_work”†”asbuh1hhj”Èubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖÈh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj”ÈubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjäÈh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj”Èubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjñÈh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj”Èubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj�Èubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjXÈh²hh³jiÈh´M'ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjTÈh²hh³jiÈh´M'ubah}”(h]”jOÈah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jiÈh´M'hjQÈh²hubjC)�”}”(hhh]”hì)�”}”(hŒDisable and cancel a work item”h]”hŒDisable and cancel a work item”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M'hjÉh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjQÈh²hh³jiÈh´M'ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej3Éjfj3Éjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXÚ**Parameters** ``struct work_struct *work`` work item to disable **Description** Disable **work** by incrementing its disable count and cancel it if currently pending. As long as the disable count is non-zero, any attempt to queue **work** will fail and return ``false``. The maximum supported disable depth is 2 to the power of ``WORK_OFFQ_DISABLE_BITS``, currently 65536. Can be called from any context. Returns ``true`` if **work** was pending, ``false`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj=Éh]”hŒ Parameters”…”�”}”(hj?Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;Éubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M+hj7Éubjg)�”}”(hhh]”jl)�”}”(hŒ2``struct work_struct *work`` work item to disable ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hj\Éh]”hŒstruct work_struct *work”…”�”}”(hj^Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjZÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M(hjVÉubj‹)�”}”(hhh]”hì)�”}”(hŒwork item to disable”h]”hŒwork item to disable”…”�”}”(hjuÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jqÉh´M(hjrÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjVÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jqÉh´M(hjSÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj7Éubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj—Éh]”hŒ Description”…”�”}”(hj™Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•Éubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M*hj7Éubhì)�”}”(hX$Disable **work** by incrementing its disable count and cancel it if currently pending. As long as the disable count is non-zero, any attempt to queue **work** will fail and return ``false``. The maximum supported disable depth is 2 to the power of ``WORK_OFFQ_DISABLE_BITS``, currently 65536.”h]”(hŒDisable ”…”�”}”(hj­Éh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjµÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ÉubhŒ† by incrementing its disable count and cancel it if currently pending. As long as the disable count is non-zero, any attempt to queue ”…”�”}”(hj­Éh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjÇÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ÉubhŒ will fail and return ”…”�”}”(hj­Éh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjÙÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj­ÉubhŒ;. The maximum supported disable depth is 2 to the power of ”…”�”}”(hj­Éh²hh³Nh´Nubjú)�”}”(hŒ``WORK_OFFQ_DISABLE_BITS``”h]”hŒWORK_OFFQ_DISABLE_BITS”…”�”}”(hjëÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj­ÉubhŒ, currently 65536.”…”�”}”(hj­Éh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M)hj7Éubhì)�”}”(hŒ^Can be called from any context. Returns ``true`` if **work** was pending, ``false`` otherwise.”h]”(hŒ(Can be called from any context. Returns ”…”�”}”(hjÊh²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÊubhŒ if ”…”�”}”(hjÊh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊubhŒ was pending, ”…”�”}”(hjÊh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj0Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÊubhŒ otherwise.”…”�”}”(hjÊh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M.hj7Éubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒdisable_work_sync (C function)”Œc.disable_work_sync”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ1bool disable_work_sync (struct work_struct *work)”h]”jè)�”}”(hŒ0bool disable_work_sync(struct work_struct *work)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjiÊh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjeÊh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M9ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwÊh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjeÊh²hh³jvÊh´M9ubj)�”}”(hŒdisable_work_sync”h]”j)�”}”(hŒdisable_work_sync”h]”hŒdisable_work_sync”…”�”}”(hj‰Êh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj…Êubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjeÊh²hh³jvÊh´M9ubj|)�”}”(hŒ(struct work_struct *work)”h]”j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¥Êh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj¡Êubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²Êh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¡Êubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjÃÊh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÀÊubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÅÊŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j‹ÊsbŒc.disable_work_sync”†”asbuh1hhj¡Êubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãÊh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¡ÊubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjñÊh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj¡Êubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjþÊh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¡Êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj�Êubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjeÊh²hh³jvÊh´M9ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjaÊh²hh³jvÊh´M9ubah}”(h]”j\Êah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jvÊh´M9hj^Êh²hubjC)�”}”(hhh]”hì)�”}”(hŒ%Disable, cancel and drain a work item”h]”hŒ%Disable, cancel and drain a work item”…”�”}”(hj(Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M9hj%Ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj^Êh²hh³jvÊh´M9ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej@Ëjfj@Ëjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX¸**Parameters** ``struct work_struct *work`` work item to disable **Description** Similar to disable_work() but also wait for **work** to finish if currently executing. Must be called from a sleepable context if **work** was last queued on a non-BH workqueue. Can also be called from non-hardirq atomic contexts including BH if **work** was last queued on a BH workqueue. Returns ``true`` if **work** was pending, ``false`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjJËh]”hŒ Parameters”…”�”}”(hjLËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHËubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M=hjDËubjg)�”}”(hhh]”jl)�”}”(hŒ2``struct work_struct *work`` work item to disable ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hjiËh]”hŒstruct work_struct *work”…”�”}”(hjkËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjgËubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M:hjcËubj‹)�”}”(hhh]”hì)�”}”(hŒwork item to disable”h]”hŒwork item to disable”…”�”}”(hj‚Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j~Ëh´M:hjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjcËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j~Ëh´M:hj`Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjDËubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj¤Ëh]”hŒ Description”…”�”}”(hj¦Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M<hjDËubhì)�”}”(hŒVSimilar to disable_work() but also wait for **work** to finish if currently executing.”h]”(hŒ,Similar to disable_work() but also wait for ”…”�”}”(hjºËh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjÂËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºËubhŒ" to finish if currently executing.”…”�”}”(hjºËh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M;hjDËubhì)�”}”(hŒÊMust be called from a sleepable context if **work** was last queued on a non-BH workqueue. Can also be called from non-hardirq atomic contexts including BH if **work** was last queued on a BH workqueue.”h]”(hŒ+Must be called from a sleepable context if ”…”�”}”(hjÛËh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjãËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛËubhŒl was last queued on a non-BH workqueue. Can also be called from non-hardirq atomic contexts including BH if ”…”�”}”(hjÛËh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjõËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛËubhŒ# was last queued on a BH workqueue.”…”�”}”(hjÛËh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M>hjDËubhì)�”}”(hŒ>Returns ``true`` if **work** was pending, ``false`` otherwise.”h]”(hŒReturns ”…”�”}”(hjÌh²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÌubhŒ if ”…”�”}”(hjÌh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hj(Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌubhŒ was pending, ”…”�”}”(hjÌh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj:Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÌubhŒ otherwise.”…”�”}”(hjÌh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MBhjDËubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒenable_work (C function)”Œ c.enable_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ+bool enable_work (struct work_struct *work)”h]”jè)�”}”(hŒ*bool enable_work(struct work_struct *work)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjsÌh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjoÌh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MLubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Ìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjoÌh²hh³j€Ìh´MLubj)�”}”(hŒ enable_work”h]”j)�”}”(hŒ enable_work”h]”hŒ enable_work”…”�”}”(hj“Ìh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj�Ìubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjoÌh²hh³j€Ìh´MLubj|)�”}”(hŒ(struct work_struct *work)”h]”j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj¯Ìh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj«Ìubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Ìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj«Ìubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjÍÌh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÊÌubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÏÌŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j•ÌsbŒ c.enable_work”†”asbuh1hhj«Ìubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíÌh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj«ÌubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjûÌh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj«Ìubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj«Ìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj§Ìubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjoÌh²hh³j€Ìh´MLubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjkÌh²hh³j€Ìh´MLubah}”(h]”jfÌah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j€Ìh´MLhjhÌh²hubjC)�”}”(hhh]”hì)�”}”(hŒEnable a work item”h]”hŒEnable a work item”…”�”}”(hj2Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MLhj/Íh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjhÌh²hh³j€Ìh´MLubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejJÍjfjJÍjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX8**Parameters** ``struct work_struct *work`` work item to enable **Description** Undo disable_work[_sync]() by decrementing **work**'s disable count. **work** can only be queued if its disable count is 0. Can be called from any context. Returns ``true`` if the disable count reached 0. Otherwise, ``false``.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjTÍh]”hŒ Parameters”…”�”}”(hjVÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjRÍubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MPhjNÍubjg)�”}”(hhh]”jl)�”}”(hŒ1``struct work_struct *work`` work item to enable ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hjsÍh]”hŒstruct work_struct *work”…”�”}”(hjuÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjqÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MMhjmÍubj‹)�”}”(hhh]”hì)�”}”(hŒwork item to enable”h]”hŒwork item to enable”…”�”}”(hjŒÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jˆÍh´MMhj‰Íubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjmÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jˆÍh´MMhjjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjNÍubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj®Íh]”hŒ Description”…”�”}”(hj°Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬Íubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MOhjNÍubhì)�”}”(hŒ{Undo disable_work[_sync]() by decrementing **work**'s disable count. **work** can only be queued if its disable count is 0.”h]”(hŒ+Undo disable_work[_sync]() by decrementing ”…”�”}”(hjÄÍh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjÌÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄÍubhŒ’s disable count. ”…”�”}”(hjÄÍh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjÞÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄÍubhŒ. can only be queued if its disable count is 0.”…”�”}”(hjÄÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MNhjNÍubhì)�”}”(hŒfCan be called from any context. Returns ``true`` if the disable count reached 0. Otherwise, ``false``.”h]”(hŒ(Can be called from any context. Returns ”…”�”}”(hj÷Íh²hh³Nh´Nubjú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjÿÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj÷ÍubhŒ, if the disable count reached 0. Otherwise, ”…”�”}”(hj÷Íh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(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³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MQhjNÍubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ!disable_delayed_work (C function)”Œc.disable_delayed_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ6bool disable_delayed_work (struct delayed_work *dwork)”h]”jè)�”}”(hŒ5bool disable_delayed_work(struct delayed_work *dwork)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjJÎh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjFÎh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mgubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXÎh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjFÎh²hh³jWÎh´Mgubj)�”}”(hŒdisable_delayed_work”h]”j)�”}”(hŒdisable_delayed_work”h]”hŒdisable_delayed_work”…”�”}”(hjjÎh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjfÎubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjFÎh²hh³jWÎh´Mgubj|)�”}”(hŒ(struct delayed_work *dwork)”h]”j‚)�”}”(hŒstruct delayed_work *dwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj†Îh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj‚Îubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Îh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj‚Îubh)�”}”(hhh]”j)�”}”(hŒ delayed_work”h]”hŒ delayed_work”…”�”}”(hj¤Îh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¡Îubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j¦ÎŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jlÎsbŒc.disable_delayed_work”†”asbuh1hhj‚Îubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄÎh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj‚ÎubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÒÎh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj‚Îubj)�”}”(hŒdwork”h]”hŒdwork”…”�”}”(hjßÎh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj‚Îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj~Îubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjFÎh²hh³jWÎh´Mgubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjBÎh²hh³jWÎh´Mgubah}”(h]”j=Îah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jWÎh´Mghj?Îh²hubjC)�”}”(hhh]”hì)�”}”(hŒ&Disable and cancel a delayed work item”h]”hŒ&Disable and cancel a delayed work item”…”�”}”(hj Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MghjÏh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj?Îh²hh³jWÎh´Mgubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej!Ïjfj!Ïjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ†**Parameters** ``struct delayed_work *dwork`` delayed work item to disable **Description** disable_work() for delayed work items.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj+Ïh]”hŒ Parameters”…”�”}”(hj-Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mkhj%Ïubjg)�”}”(hhh]”jl)�”}”(hŒ<``struct delayed_work *dwork`` delayed work item to disable ”h]”(jr)�”}”(hŒ``struct delayed_work *dwork``”h]”jú)�”}”(hjJÏh]”hŒstruct delayed_work *dwork”…”�”}”(hjLÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjHÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhhjDÏubj‹)�”}”(hhh]”hì)�”}”(hŒdelayed work item to disable”h]”hŒdelayed work item to disable”…”�”}”(hjcÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j_Ïh´Mhhj`Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjDÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j_Ïh´MhhjAÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj%Ïubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj…Ïh]”hŒ Description”…”�”}”(hj‡Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒÏubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mjhj%Ïubhì)�”}”(hŒ&disable_work() for delayed work items.”h]”hŒ&disable_work() for delayed work items.”…”�”}”(hj›Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mihj%Ïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ&disable_delayed_work_sync (C function)”Œc.disable_delayed_work_sync”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ;bool disable_delayed_work_sync (struct delayed_work *dwork)”h]”jè)�”}”(hŒ:bool disable_delayed_work_sync(struct delayed_work *dwork)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjÊÏh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÆÏh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mtubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØÏh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÆÏh²hh³j×Ïh´Mtubj)�”}”(hŒdisable_delayed_work_sync”h]”j)�”}”(hŒdisable_delayed_work_sync”h]”hŒdisable_delayed_work_sync”…”�”}”(hjêÏh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjæÏubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÆÏh²hh³j×Ïh´Mtubj|)�”}”(hŒ(struct delayed_work *dwork)”h]”j‚)�”}”(hŒstruct delayed_work *dwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjÐubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÐubh)�”}”(hhh]”j)�”}”(hŒ delayed_work”h]”hŒ delayed_work”…”�”}”(hj$Ðh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj!Ðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j&ÐŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jìÏsbŒc.disable_delayed_work_sync”†”asbuh1hhjÐubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDÐh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÐubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjRÐh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÐubj)�”}”(hŒdwork”h]”hŒdwork”…”�”}”(hj_Ðh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjþÏubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÆÏh²hh³j×Ïh´Mtubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÂÏh²hh³j×Ïh´Mtubah}”(h]”j½Ïah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j×Ïh´Mthj¿Ïh²hubjC)�”}”(hhh]”hì)�”}”(hŒ-Disable, cancel and drain a delayed work item”h]”hŒ-Disable, cancel and drain a delayed work item”…”�”}”(hj‰Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mthj†Ðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj¿Ïh²hh³j×Ïh´Mtubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej¡Ðjfj¡Ðjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ‹**Parameters** ``struct delayed_work *dwork`` delayed work item to disable **Description** disable_work_sync() for delayed work items.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj«Ðh]”hŒ Parameters”…”�”}”(hj­Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mxhj¥Ðubjg)�”}”(hhh]”jl)�”}”(hŒ<``struct delayed_work *dwork`` delayed work item to disable ”h]”(jr)�”}”(hŒ``struct delayed_work *dwork``”h]”jú)�”}”(hjÊÐh]”hŒstruct delayed_work *dwork”…”�”}”(hjÌÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÈÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MuhjÄÐubj‹)�”}”(hhh]”hì)�”}”(hŒdelayed work item to disable”h]”hŒdelayed work item to disable”…”�”}”(hjãÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jßÐh´MuhjàÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÄÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jßÐh´MuhjÁÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj¥Ðubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÑh]”hŒ Description”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mwhj¥Ðubhì)�”}”(hŒ+disable_work_sync() for delayed work items.”h]”hŒ+disable_work_sync() for delayed work items.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mvhj¥Ðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ enable_delayed_work (C function)”Œc.enable_delayed_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ5bool enable_delayed_work (struct delayed_work *dwork)”h]”jè)�”}”(hŒ4bool enable_delayed_work(struct delayed_work *dwork)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjJÑh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjFÑh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXÑh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjFÑh²hh³jWÑh´M�ubj)�”}”(hŒenable_delayed_work”h]”j)�”}”(hŒenable_delayed_work”h]”hŒenable_delayed_work”…”�”}”(hjjÑh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjfÑubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjFÑh²hh³jWÑh´M�ubj|)�”}”(hŒ(struct delayed_work *dwork)”h]”j‚)�”}”(hŒstruct delayed_work *dwork”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj†Ñh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj‚Ñubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Ñh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj‚Ñubh)�”}”(hhh]”j)�”}”(hŒ delayed_work”h]”hŒ delayed_work”…”�”}”(hj¤Ñh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¡Ñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j¦ÑŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jlÑsbŒc.enable_delayed_work”†”asbuh1hhj‚Ñubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄÑh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj‚ÑubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÒÑh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj‚Ñubj)�”}”(hŒdwork”h]”hŒdwork”…”�”}”(hjßÑh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj‚Ñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj~Ñubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjFÑh²hh³jWÑh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjBÑh²hh³jWÑh´M�ubah}”(h]”j=Ñah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jWÑh´M�hj?Ñh²hubjC)�”}”(hhh]”hì)�”}”(hŒEnable a delayed work item”h]”hŒEnable a delayed work item”…”�”}”(hj Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hjÒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj?Ñh²hh³jWÑh´M�ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej!Òjfj!Òjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ„**Parameters** ``struct delayed_work *dwork`` delayed work item to enable **Description** enable_work() for delayed work items.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj+Òh]”hŒ Parameters”…”�”}”(hj-Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)Òubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M…hj%Òubjg)�”}”(hhh]”jl)�”}”(hŒ;``struct delayed_work *dwork`` delayed work item to enable ”h]”(jr)�”}”(hŒ``struct delayed_work *dwork``”h]”jú)�”}”(hjJÒh]”hŒstruct delayed_work *dwork”…”�”}”(hjLÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjHÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‚hjDÒubj‹)�”}”(hhh]”hì)�”}”(hŒdelayed work item to enable”h]”hŒdelayed work item to enable”…”�”}”(hjcÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j_Òh´M‚hj`Òubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjDÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j_Òh´M‚hjAÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj%Òubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj…Òh]”hŒ Description”…”�”}”(hj‡Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M„hj%Òubhì)�”}”(hŒ%enable_work() for delayed work items.”h]”hŒ%enable_work() for delayed work items.”…”�”}”(hj›Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mƒhj%Òubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ!schedule_on_each_cpu (C function)”Œc.schedule_on_each_cpu”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ+int schedule_on_each_cpu (work_func_t func)”h]”jè)�”}”(hŒ*int schedule_on_each_cpu(work_func_t func)”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjÊÒh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÆÒh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙÒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÆÒh²hh³jØÒh´M�ubj)�”}”(hŒschedule_on_each_cpu”h]”j)�”}”(hŒschedule_on_each_cpu”h]”hŒschedule_on_each_cpu”…”�”}”(hjëÒh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjçÒubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÆÒh²hh³jØÒh´M�ubj|)�”}”(hŒ(work_func_t func)”h]”j‚)�”}”(hŒwork_func_t func”h]”(h)�”}”(hhh]”j)�”}”(hŒ work_func_t”h]”hŒ work_func_t”…”�”}”(hj Óh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÓubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j ÓŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jíÒsbŒc.schedule_on_each_cpu”†”asbuh1hhjÓubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Óh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÓubj)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hj8Óh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÿÒubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÆÒh²hh³jØÒh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÂÒh²hh³jØÒh´M�ubah}”(h]”j½Òah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jØÒh´M�hj¿Òh²hubjC)�”}”(hhh]”hì)�”}”(hŒ3execute a function synchronously on each online CPU”h]”hŒ3execute a function synchronously on each online CPU”…”�”}”(hjbÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hj_Óh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj¿Òh²hh³jØÒh´M�ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejzÓjfjzÓjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX!**Parameters** ``work_func_t func`` the function to call **Description** schedule_on_each_cpu() executes **func** on each online CPU using the system workqueue and blocks until all CPUs have completed. schedule_on_each_cpu() is very slow. **Return** 0 on success, -errno on failure.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj„Óh]”hŒ Parameters”…”�”}”(hj†Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚Óubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‘hj~Óubjg)�”}”(hhh]”jl)�”}”(hŒ*``work_func_t func`` the function to call ”h]”(jr)�”}”(hŒ``work_func_t func``”h]”jú)�”}”(hj£Óh]”hŒwork_func_t func”…”�”}”(hj¥Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¡Óubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MŽhj�Óubj‹)�”}”(hhh]”hì)�”}”(hŒthe function to call”h]”hŒthe function to call”…”�”}”(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&]”uh1jkh³j¸Óh´MŽhjšÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj~Óubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÞÓh]”hŒ Description”…”�”}”(hjàÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hj~Óubhì)�”}”(hŒ¥schedule_on_each_cpu() executes **func** on each online CPU using the system workqueue and blocks until all CPUs have completed. schedule_on_each_cpu() is very slow.”h]”(hŒ schedule_on_each_cpu() executes ”…”�”}”(hjôÓh²hh³Nh´Nubj)�”}”(hŒ**func**”h]”hŒfunc”…”�”}”(hjüÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôÓubhŒ} on each online CPU using the system workqueue and blocks until all CPUs have completed. schedule_on_each_cpu() is very slow.”…”�”}”(hjôÓh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hj~Óubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjÔh]”hŒReturn”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M“hj~Óubhì)�”}”(hŒ 0 on success, -errno on failure.”h]”hŒ 0 on success, -errno on failure.”…”�”}”(hj-Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M”hj~Óubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ'execute_in_process_context (C function)”Œc.execute_in_process_context”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒHint execute_in_process_context (work_func_t fn, struct execute_work *ew)”h]”jè)�”}”(hŒGint execute_in_process_context(work_func_t fn, struct execute_work *ew)”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj\Ôh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjXÔh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M²ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkÔh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjXÔh²hh³jjÔh´M²ubj)�”}”(hŒexecute_in_process_context”h]”j)�”}”(hŒexecute_in_process_context”h]”hŒexecute_in_process_context”…”�”}”(hj}Ôh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjyÔubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjXÔh²hh³jjÔh´M²ubj|)�”}”(hŒ)(work_func_t fn, struct execute_work *ew)”h]”(j‚)�”}”(hŒwork_func_t fn”h]”(h)�”}”(hhh]”j)�”}”(hŒ work_func_t”h]”hŒ work_func_t”…”�”}”(hjœÔh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj™Ôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jžÔŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jÔsbŒc.execute_in_process_context”†”asbuh1hhj•Ôubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Ôh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj•Ôubj)�”}”(hŒfn”h]”hŒfn”…”�”}”(hjÊÔh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj•Ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj‘Ôubj‚)�”}”(hŒstruct execute_work *ew”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjãÔh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjßÔubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðÔh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjßÔubh)�”}”(hhh]”j)�”}”(hŒ execute_work”h]”hŒ execute_work”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjþÔubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÕŒmodname”NŒ classname”Nj7j:)�”}”j=]”j¸ÔŒc.execute_in_process_context”†”asbuh1hhjßÔubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjßÔubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj-Õh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjßÔubj)�”}”(hŒew”h]”hŒew”…”�”}”(hj:Õh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjßÔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj‘Ôubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjXÔh²hh³jjÔh´M²ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjTÔh²hh³jjÔh´M²ubah}”(h]”jOÔah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jjÔh´M²hjQÔh²hubjC)�”}”(hhh]”hì)�”}”(hŒ.reliably execute the routine with user context”h]”hŒ.reliably execute the routine with user context”…”�”}”(hjdÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M²hjaÕh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjQÔh²hh³jjÔh´M²ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej|Õjfj|Õjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX—**Parameters** ``work_func_t fn`` the function to execute ``struct execute_work *ew`` guaranteed storage for the execute work structure (must be available when the work executes) **Description** Executes the function immediately if process context is available, otherwise schedules the function for delayed execution. **Return** 0 - function was executed 1 - function was scheduled for execution”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj†Õh]”hŒ Parameters”…”�”}”(hjˆÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„Õubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¶hj€Õubjg)�”}”(hhh]”(jl)�”}”(hŒ+``work_func_t fn`` the function to execute ”h]”(jr)�”}”(hŒ``work_func_t fn``”h]”jú)�”}”(hj¥Õh]”hŒwork_func_t fn”…”�”}”(hj§Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj£Õubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M³hjŸÕubj‹)�”}”(hhh]”hì)�”}”(hŒthe function to execute”h]”hŒthe function to execute”…”�”}”(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&]”uh1jkh³jºÕh´M³hjœÕubjl)�”}”(hŒy``struct execute_work *ew`` guaranteed storage for the execute work structure (must be available when the work executes) ”h]”(jr)�”}”(hŒ``struct execute_work *ew``”h]”jú)�”}”(hjÞÕh]”hŒstruct execute_work *ew”…”�”}”(hjàÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÜÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MµhjØÕubj‹)�”}”(hhh]”hì)�”}”(hŒ\guaranteed storage for the execute work structure (must be available when the work executes)”h]”hŒ\guaranteed storage for the execute work structure (must be available when the work executes)”…”�”}”(hj÷Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M´hjôÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjØÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jóÕh´MµhjœÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj€Õubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÖh]”hŒ Description”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M·hj€Õubhì)�”}”(hŒzExecutes the function immediately if process context is available, otherwise schedules the function for delayed execution.”h]”hŒzExecutes the function immediately if process context is available, otherwise schedules the function for delayed execution.”…”�”}”(hj0Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¶hj€Õubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjAÖh]”hŒReturn”…”�”}”(hjCÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?Öubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¹hj€Õubhì)�”}”(hŒB0 - function was executed 1 - function was scheduled for execution”h]”hŒB0 - function was executed 1 - function was scheduled for execution”…”�”}”(hjWÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mºhj€Õubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ!free_workqueue_attrs (C function)”Œc.free_workqueue_attrs”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ9void free_workqueue_attrs (struct workqueue_attrs *attrs)”h]”jè)�”}”(hŒ8void free_workqueue_attrs(struct workqueue_attrs *attrs)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj†Öh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj‚Öh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÌubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Öh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj‚Öh²hh³j”Öh´MÌubj)�”}”(hŒfree_workqueue_attrs”h]”j)�”}”(hŒfree_workqueue_attrs”h]”hŒfree_workqueue_attrs”…”�”}”(hj§Öh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj£Öubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj‚Öh²hh³j”Öh´MÌubj|)�”}”(hŒ(struct workqueue_attrs *attrs)”h]”j‚)�”}”(hŒstruct workqueue_attrs *attrs”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÃÖh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj¿Öubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐÖh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¿Öubh)�”}”(hhh]”j)�”}”(hŒworkqueue_attrs”h]”hŒworkqueue_attrs”…”�”}”(hjáÖh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÞÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jãÖŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j©ÖsbŒc.free_workqueue_attrs”†”asbuh1hhj¿Öubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¿ÖubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj¿Öubj)�”}”(hŒattrs”h]”hŒattrs”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¿Öubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj»Öubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj‚Öh²hh³j”Öh´MÌubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj~Öh²hh³j”Öh´MÌubah}”(h]”jyÖah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j”Öh´MÌhj{Öh²hubjC)�”}”(hhh]”hì)�”}”(hŒfree a workqueue_attrs”h]”hŒfree a workqueue_attrs”…”�”}”(hjF×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÌhjC×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj{Öh²hh³j”Öh´MÌubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej^×jfj^×jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ{**Parameters** ``struct workqueue_attrs *attrs`` workqueue_attrs to free **Description** Undo alloc_workqueue_attrs().”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjh×h]”hŒ Parameters”…”�”}”(hjj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjf×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÐhjb×ubjg)�”}”(hhh]”jl)�”}”(hŒ:``struct workqueue_attrs *attrs`` workqueue_attrs to free ”h]”(jr)�”}”(hŒ!``struct workqueue_attrs *attrs``”h]”jú)�”}”(hj‡×h]”hŒstruct workqueue_attrs *attrs”…”�”}”(hj‰×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj…×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÍhj�×ubj‹)�”}”(hhh]”hì)�”}”(hŒworkqueue_attrs to free”h]”hŒworkqueue_attrs to free”…”�”}”(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&]”uh1jkh³jœ×h´MÍhj~×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjb×ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÂ×h]”hŒ Description”…”�”}”(hjÄ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÏhjb×ubhì)�”}”(hŒUndo alloc_workqueue_attrs().”h]”hŒUndo alloc_workqueue_attrs().”…”�”}”(hjØ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÎhjb×ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ"alloc_workqueue_attrs (C function)”Œc.alloc_workqueue_attrs”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ5struct workqueue_attrs * alloc_workqueue_attrs (void)”h]”jè)�”}”(hŒ3struct workqueue_attrs *alloc_workqueue_attrs(void)”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjØh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÛubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjØh²hh³jØh´MÛubh)�”}”(hhh]”j)�”}”(hŒworkqueue_attrs”h]”hŒworkqueue_attrs”…”�”}”(hj&Øh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj#Øubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j(ØŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œalloc_workqueue_attrs”sbŒc.alloc_workqueue_attrs”†”asbuh1hhjØh²hh³jØh´MÛubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGØh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjØh²hh³jØh´MÛubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjUØh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjØh²hh³jØh´MÛubj)�”}”(hŒalloc_workqueue_attrs”h]”j)�”}”(hjDØh]”hŒalloc_workqueue_attrs”…”�”}”(hjfØh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjbØubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjØh²hh³jØh´MÛubj|)�”}”(hŒ(void)”h]”j‚)�”}”(hŒvoid”h]”j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�Øh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj}Øubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjyØubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjØh²hh³jØh´MÛubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÿ×h²hh³jØh´MÛubah}”(h]”jú×ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jØh´MÛhjü×h²hubjC)�”}”(hhh]”hì)�”}”(hŒallocate a workqueue_attrs”h]”hŒallocate a workqueue_attrs”…”�”}”(hj«Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”•h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÛhj¨Øh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjü×h²hh³jØh´MÛubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejÃØjfjÃØjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒØ**Parameters** ``void`` no arguments **Description** Allocate a new workqueue_attrs, initialize with default settings and return it. **Return** The allocated new workqueue_attr on success. ``NULL`` on failure.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÍØh]”hŒ Parameters”…”�”}”(hjÏØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËØubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MßhjÇØubjg)�”}”(hhh]”jl)�”}”(hŒ``void`` no arguments ”h]”(jr)�”}”(hŒ``void``”h]”jú)�”}”(hjìØh]”hŒvoid”…”�”}”(hjîØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjêØubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´KhjæØubj‹)�”}”(hhh]”hì)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(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&]”uh1jkh³jÙh´KhjãØubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjÇØubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj'Ùh]”hŒ Description”…”�”}”(hj)Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´KhjÇØubhì)�”}”(hŒOAllocate a new workqueue_attrs, initialize with default settings and return it.”h]”hŒOAllocate a new workqueue_attrs, initialize with default settings and return it.”…”�”}”(hj=Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÜhjÇØubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjNÙh]”hŒReturn”…”�”}”(hjPÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MßhjÇØubhì)�”}”(hŒAThe allocated new workqueue_attr on success. ``NULL`` on failure.”h]”(hŒ-The allocated new workqueue_attr on success. ”…”�”}”(hjdÙh²hh³Nh´Nubjú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjlÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjdÙubhŒ on failure.”…”�”}”(hjdÙh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MàhjÇØubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒinit_worker_pool (C function)”Œc.init_worker_pool”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ/int init_worker_pool (struct worker_pool *pool)”h]”jè)�”}”(hŒ.int init_worker_pool(struct worker_pool *pool)”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj¥Ùh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj¡Ùh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M^ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´Ùh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¡Ùh²hh³j³Ùh´M^ubj)�”}”(hŒinit_worker_pool”h]”j)�”}”(hŒinit_worker_pool”h]”hŒinit_worker_pool”…”�”}”(hjÆÙh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÂÙubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj¡Ùh²hh³j³Ùh´M^ubj|)�”}”(hŒ(struct worker_pool *pool)”h]”j‚)�”}”(hŒstruct worker_pool *pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjâÙh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjÞÙubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïÙh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÞÙubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjýÙubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÚŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jÈÙsbŒc.init_worker_pool”†”asbuh1hhjÞÙubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Úh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÞÙubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj.Úh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÞÙubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj;Úh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÞÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÚÙubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj¡Ùh²hh³j³Ùh´M^ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj�Ùh²hh³j³Ùh´M^ubah}”(h]”j˜Ùah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j³Ùh´M^hjšÙh²hubjC)�”}”(hhh]”hì)�”}”(hŒ'initialize a newly zalloc'd worker_pool”h]”hŒ)initialize a newly zalloc’d worker_pool”…”�”}”(hjeÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M^hjbÚh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjšÙh²hh³j³Ùh´M^ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej}Újfj}Újg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX]**Parameters** ``struct worker_pool *pool`` worker_pool to initialize **Description** Initialize a newly zalloc'd **pool**. It also allocates **pool->attrs**. **Return** 0 on success, -errno on failure. Even on failure, all fields inside **pool** proper are initialized and put_unbound_pool() can be called on **pool** safely to release it.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj‡Úh]”hŒ Parameters”…”�”}”(hj‰Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj…Úubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mbhj�Úubjg)�”}”(hhh]”jl)�”}”(hŒ7``struct worker_pool *pool`` worker_pool to initialize ”h]”(jr)�”}”(hŒ``struct worker_pool *pool``”h]”jú)�”}”(hj¦Úh]”hŒstruct worker_pool *pool”…”�”}”(hj¨Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¤Úubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M_hj Úubj‹)�”}”(hhh]”hì)�”}”(hŒworker_pool to initialize”h]”hŒworker_pool to initialize”…”�”}”(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&]”uh1jkh³j»Úh´M_hj�Úubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj�Úubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjáÚh]”hŒ Description”…”�”}”(hjãÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mahj�Úubhì)�”}”(hŒIInitialize a newly zalloc'd **pool**. It also allocates **pool->attrs**.”h]”(hŒInitialize a newly zalloc’d ”…”�”}”(hj÷Úh²hh³Nh´Nubj)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjÿÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷ÚubhŒ. It also allocates ”…”�”}”(hj÷Úh²hh³Nh´Nubj)�”}”(hŒ**pool->attrs**”h]”hŒ pool->attrs”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷ÚubhŒ.”…”�”}”(hj÷Úh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M`hj�Úubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj,Ûh]”hŒReturn”…”�”}”(hj.Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mbhj�Úubhì)�”}”(hŒ«0 on success, -errno on failure. Even on failure, all fields inside **pool** proper are initialized and put_unbound_pool() can be called on **pool** safely to release it.”h]”(hŒE0 on success, -errno on failure. Even on failure, all fields inside ”…”�”}”(hjBÛh²hh³Nh´Nubj)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjJÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBÛubhŒ@ proper are initialized and put_unbound_pool() can be called on ”…”�”}”(hjBÛh²hh³Nh´Nubj)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hj\Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBÛubhŒ safely to release it.”…”�”}”(hjBÛh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mchj�Úubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒput_unbound_pool (C function)”Œc.put_unbound_pool”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ0void put_unbound_pool (struct worker_pool *pool)”h]”jè)�”}”(hŒ/void put_unbound_pool(struct worker_pool *pool)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj•Ûh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj‘Ûh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤Ûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj‘Ûh²hh³j£Ûh´Mubj)�”}”(hŒput_unbound_pool”h]”j)�”}”(hŒput_unbound_pool”h]”hŒput_unbound_pool”…”�”}”(hj¶Ûh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj²Ûubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj‘Ûh²hh³j£Ûh´Mubj|)�”}”(hŒ(struct worker_pool *pool)”h]”j‚)�”}”(hŒstruct worker_pool *pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÒÛh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjÎÛubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßÛh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÎÛubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hjðÛh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjíÛubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jòÛŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j¸ÛsbŒc.put_unbound_pool”†”asbuh1hhjÎÛubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÎÛubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÎÛubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj+Üh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÎÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÊÛubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj‘Ûh²hh³j£Ûh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj�Ûh²hh³j£Ûh´Mubah}”(h]”jˆÛah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j£Ûh´MhjŠÛh²hubjC)�”}”(hhh]”hì)�”}”(hŒput a worker_pool”h]”hŒput a worker_pool”…”�”}”(hjUÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjRÜh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjŠÛh²hh³j£Ûh´Mubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejmÜjfjmÜjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXz**Parameters** ``struct worker_pool *pool`` worker_pool to put **Description** Put **pool**. If its refcnt reaches zero, it gets destroyed in RCU safe manner. get_unbound_pool() calls this function on its failure path and this function should be able to release pools which went through, successfully or not, init_worker_pool(). Should be called with wq_pool_mutex held.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjwÜh]”hŒ Parameters”…”�”}”(hjyÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjuÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjqÜubjg)�”}”(hhh]”jl)�”}”(hŒ0``struct worker_pool *pool`` worker_pool to put ”h]”(jr)�”}”(hŒ``struct worker_pool *pool``”h]”jú)�”}”(hj–Üh]”hŒstruct worker_pool *pool”…”�”}”(hj˜Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj”Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj�Üubj‹)�”}”(hhh]”hì)�”}”(hŒworker_pool to put”h]”hŒworker_pool to put”…”�”}”(hj¯Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j«Üh´Mhj¬Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj�Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j«Üh´Mhj�Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjqÜubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÑÜh]”hŒ Description”…”�”}”(hjÓÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjqÜubhì)�”}”(hŒûPut **pool**. If its refcnt reaches zero, it gets destroyed in RCU safe manner. get_unbound_pool() calls this function on its failure path and this function should be able to release pools which went through, successfully or not, init_worker_pool().”h]”(hŒPut ”…”�”}”(hjçÜh²hh³Nh´Nubj)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjïÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjçÜubhŒï. If its refcnt reaches zero, it gets destroyed in RCU safe manner. get_unbound_pool() calls this function on its failure path and this function should be able to release pools which went through, successfully or not, init_worker_pool().”…”�”}”(hjçÜh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjqÜubhì)�”}”(hŒ)Should be called with wq_pool_mutex held.”h]”hŒ)Should be called with wq_pool_mutex held.”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hjqÜubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒget_unbound_pool (C function)”Œc.get_unbound_pool”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒKstruct worker_pool * get_unbound_pool (const struct workqueue_attrs *attrs)”h]”jè)�”}”(hŒIstruct worker_pool *get_unbound_pool(const struct workqueue_attrs *attrs)”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj7Ýh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj3Ýh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEÝh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj3Ýh²hh³jDÝh´MSubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hjVÝh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjSÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jXÝŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œget_unbound_pool”sbŒc.get_unbound_pool”†”asbuh1hhj3Ýh²hh³jDÝh´MSubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwÝh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj3Ýh²hh³jDÝh´MSubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj…Ýh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj3Ýh²hh³jDÝh´MSubj)�”}”(hŒget_unbound_pool”h]”j)�”}”(hjtÝh]”hŒget_unbound_pool”…”�”}”(hj–Ýh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj’Ýubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj3Ýh²hh³jDÝh´MSubj|)�”}”(hŒ%(const struct workqueue_attrs *attrs)”h]”j‚)�”}”(hŒ#const struct workqueue_attrs *attrs”h]”(jî)�”}”(hj‰h]”hŒconst”…”�”}”(hj±Ýh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj­Ýubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Ýh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj­Ýubjî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÌÝh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj­Ýubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙÝh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj­Ýubh)�”}”(hhh]”j)�”}”(hŒworkqueue_attrs”h]”hŒworkqueue_attrs”…”�”}”(hjêÝh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjçÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jìÝŒmodname”NŒ classname”Nj7j:)�”}”j=]”jrÝŒc.get_unbound_pool”†”asbuh1hhj­Ýubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj­ÝubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj­Ýubj)�”}”(hŒattrs”h]”hŒattrs”…”�”}”(hj#Þh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj­Ýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj©Ýubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj3Ýh²hh³jDÝh´MSubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj/Ýh²hh³jDÝh´MSubah}”(h]”j*Ýah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jDÝh´MShj,Ýh²hubjC)�”}”(hhh]”hì)�”}”(hŒ/get a worker_pool with the specified attributes”h]”hŒ/get a worker_pool with the specified attributes”…”�”}”(hjMÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MShjJÞh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj,Ýh²hh³jDÝh´MSubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejeÞjfjeÞjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXá**Parameters** ``const struct workqueue_attrs *attrs`` the attributes of the worker_pool to get **Description** Obtain a worker_pool which has the same attributes as **attrs**, bump the reference count and return it. If there already is a matching worker_pool, it will be used; otherwise, this function attempts to create a new one. Should be called with wq_pool_mutex held. **Return** On success, a worker_pool with the same attributes as **attrs**. On failure, ``NULL``.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjoÞh]”hŒ Parameters”…”�”}”(hjqÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjmÞubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MWhjiÞubjg)�”}”(hhh]”jl)�”}”(hŒQ``const struct workqueue_attrs *attrs`` the attributes of the worker_pool to get ”h]”(jr)�”}”(hŒ'``const struct workqueue_attrs *attrs``”h]”jú)�”}”(hjŽÞh]”hŒ#const struct workqueue_attrs *attrs”…”�”}”(hj�Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjŒÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MThjˆÞubj‹)�”}”(hhh]”hì)�”}”(hŒ(the attributes of the worker_pool to get”h]”hŒ(the attributes of the worker_pool to get”…”�”}”(hj§Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j£Þh´MThj¤Þubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjˆÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j£Þh´MThj…Þubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjiÞubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÉÞh]”hŒ Description”…”�”}”(hjËÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇÞubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MVhjiÞubhì)�”}”(hŒÝObtain a worker_pool which has the same attributes as **attrs**, bump the reference count and return it. If there already is a matching worker_pool, it will be used; otherwise, this function attempts to create a new one.”h]”(hŒ6Obtain a worker_pool which has the same attributes as ”…”�”}”(hjßÞh²hh³Nh´Nubj)�”}”(hŒ **attrs**”h]”hŒattrs”…”�”}”(hjçÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßÞubhŒž, bump the reference count and return it. If there already is a matching worker_pool, it will be used; otherwise, this function attempts to create a new one.”…”�”}”(hjßÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MUhjiÞubhì)�”}”(hŒ)Should be called with wq_pool_mutex held.”h]”hŒ)Should be called with wq_pool_mutex held.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MZhjiÞubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjßh]”hŒReturn”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M\hjiÞubhì)�”}”(hŒVOn success, a worker_pool with the same attributes as **attrs**. On failure, ``NULL``.”h]”(hŒ6On success, a worker_pool with the same attributes as ”…”�”}”(hj'ßh²hh³Nh´Nubj)�”}”(hŒ **attrs**”h]”hŒattrs”…”�”}”(hj/ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ßubhŒ. On failure, ”…”�”}”(hj'ßh²hh³Nh´Nubjú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjAßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj'ßubhŒ.”…”�”}”(hj'ßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M]hjiÞubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ wq_calc_pod_cpumask (C function)”Œc.wq_calc_pod_cpumask”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒAvoid wq_calc_pod_cpumask (struct workqueue_attrs *attrs, int cpu)”h]”jè)�”}”(hŒ@void wq_calc_pod_cpumask(struct workqueue_attrs *attrs, int cpu)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjzßh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjvßh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰ßh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjvßh²hh³jˆßh´M$ubj)�”}”(hŒwq_calc_pod_cpumask”h]”j)�”}”(hŒwq_calc_pod_cpumask”h]”hŒwq_calc_pod_cpumask”…”�”}”(hj›ßh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj—ßubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjvßh²hh³jˆßh´M$ubj|)�”}”(hŒ((struct workqueue_attrs *attrs, int cpu)”h]”(j‚)�”}”(hŒstruct workqueue_attrs *attrs”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj·ßh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj³ßubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄßh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj³ßubh)�”}”(hhh]”j)�”}”(hŒworkqueue_attrs”h]”hŒworkqueue_attrs”…”�”}”(hjÕßh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÒßubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j×ߌmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j�ßsbŒc.wq_calc_pod_cpumask”†”asbuh1hhj³ßubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõßh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj³ßubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj³ßubj)�”}”(hŒattrs”h]”hŒattrs”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj³ßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¯ßubj‚)�”}”(hŒint cpu”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj)àh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj%àubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7àh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj%àubj)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hjEàh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj%àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¯ßubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjvßh²hh³jˆßh´M$ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjrßh²hh³jˆßh´M$ubah}”(h]”jmßah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jˆßh´M$hjoßh²hubjC)�”}”(hhh]”hì)�”}”(hŒ'calculate a wq_attrs' cpumask for a pod”h]”hŒ)calculate a wq_attrs’ cpumask for a pod”…”�”}”(hjoàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M$hjlàh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjoßh²hh³jˆßh´M$ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej‡àjfj‡àjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXK**Parameters** ``struct workqueue_attrs *attrs`` the wq_attrs of the default pwq of the target workqueue ``int cpu`` the target CPU **Description** Calculate the cpumask a workqueue with **attrs** should use on **pod**. The result is stored in **attrs->__pod_cpumask**. If pod affinity is not enabled, **attrs->cpumask** is always used. If enabled and **pod** has online CPUs requested by **attrs**, the returned cpumask is the intersection of the possible CPUs of **pod** and **attrs->cpumask**. The caller is responsible for ensuring that the cpumask of **pod** stays stable.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj‘àh]”hŒ Parameters”…”�”}”(hj“àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�àubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M(hj‹àubjg)�”}”(hhh]”(jl)�”}”(hŒZ``struct workqueue_attrs *attrs`` the wq_attrs of the default pwq of the target workqueue ”h]”(jr)�”}”(hŒ!``struct workqueue_attrs *attrs``”h]”jú)�”}”(hj°àh]”hŒstruct workqueue_attrs *attrs”…”�”}”(hj²àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj®àubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M%hjªàubj‹)�”}”(hhh]”hì)�”}”(hŒ7the wq_attrs of the default pwq of the target workqueue”h]”hŒ7the wq_attrs of the default pwq of the target workqueue”…”�”}”(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&]”uh1jkh³jÅàh´M%hj§àubjl)�”}”(hŒ``int cpu`` the target CPU ”h]”(jr)�”}”(hŒ ``int cpu``”h]”jú)�”}”(hjéàh]”hŒint cpu”…”�”}”(hjëàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjçàubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M&hjãàubj‹)�”}”(hhh]”hì)�”}”(hŒthe target CPU”h]”hŒthe target CPU”…”�”}”(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&]”uh1jkh³jþàh´M&hj§àubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj‹àubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj$áh]”hŒ Description”…”�”}”(hj&áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"áubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M(hj‹àubhì)�”}”(hŒyCalculate the cpumask a workqueue with **attrs** should use on **pod**. The result is stored in **attrs->__pod_cpumask**.”h]”(hŒ'Calculate the cpumask a workqueue with ”…”�”}”(hj:áh²hh³Nh´Nubj)�”}”(hŒ **attrs**”h]”hŒattrs”…”�”}”(hjBáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:áubhŒ should use on ”…”�”}”(hj:áh²hh³Nh´Nubj)�”}”(hŒ**pod**”h]”hŒpod”…”�”}”(hjTáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:áubhŒ. The result is stored in ”…”�”}”(hj:áh²hh³Nh´Nubj)�”}”(hŒ**attrs->__pod_cpumask**”h]”hŒattrs->__pod_cpumask”…”�”}”(hjfáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:áubhŒ.”…”�”}”(hj:áh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M'hj‹àubhì)�”}”(hŒâIf pod affinity is not enabled, **attrs->cpumask** is always used. If enabled and **pod** has online CPUs requested by **attrs**, the returned cpumask is the intersection of the possible CPUs of **pod** and **attrs->cpumask**.”h]”(hŒ If pod affinity is not enabled, ”…”�”}”(hjáh²hh³Nh´Nubj)�”}”(hŒ**attrs->cpumask**”h]”hŒattrs->cpumask”…”�”}”(hj‡áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáubhŒ is always used. If enabled and ”…”�”}”(hjáh²hh³Nh´Nubj)�”}”(hŒ**pod**”h]”hŒpod”…”�”}”(hj™áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáubhŒ has online CPUs requested by ”…”�”}”(hjáh²hh³Nh´Nubj)�”}”(hŒ **attrs**”h]”hŒattrs”…”�”}”(hj«áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáubhŒC, the returned cpumask is the intersection of the possible CPUs of ”…”�”}”(hjáh²hh³Nh´Nubj)�”}”(hŒ**pod**”h]”hŒpod”…”�”}”(hj½áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáubhŒ and ”…”�”}”(hjáh²hh³Nh´Nubj)�”}”(hŒ**attrs->cpumask**”h]”hŒattrs->cpumask”…”�”}”(hjÏáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáubhŒ.”…”�”}”(hjáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M*hj‹àubhì)�”}”(hŒPThe caller is responsible for ensuring that the cpumask of **pod** stays stable.”h]”(hŒ;The caller is responsible for ensuring that the cpumask of ”…”�”}”(hjèáh²hh³Nh´Nubj)�”}”(hŒ**pod**”h]”hŒpod”…”�”}”(hjðáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjèáubhŒ stays stable.”…”�”}”(hjèáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M.hj‹àubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ"apply_workqueue_attrs (C function)”Œc.apply_workqueue_attrs”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ\int apply_workqueue_attrs (struct workqueue_struct *wq, const struct workqueue_attrs *attrs)”h]”jè)�”}”(hŒ[int apply_workqueue_attrs(struct workqueue_struct *wq, const struct workqueue_attrs *attrs)”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj)âh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj%âh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÜubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8âh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj%âh²hh³j7âh´MÜubj)�”}”(hŒapply_workqueue_attrs”h]”j)�”}”(hŒapply_workqueue_attrs”h]”hŒapply_workqueue_attrs”…”�”}”(hjJâh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjFâubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj%âh²hh³j7âh´MÜubj|)�”}”(hŒB(struct workqueue_struct *wq, const struct workqueue_attrs *attrs)”h]”(j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjfâh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjbâubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsâh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjbâubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hj„âh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj�âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j†âŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jLâsbŒc.apply_workqueue_attrs”†”asbuh1hhjbâubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤âh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjbâubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj²âh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjbâubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hj¿âh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjbâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj^âubj‚)�”}”(hŒ#const struct workqueue_attrs *attrs”h]”(jî)�”}”(hj‰h]”hŒconst”…”�”}”(hjØâh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjÔâubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåâh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÔâubjî)�”}”(hjñh]”hŒstruct”…”�”}”(hjóâh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjÔâubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÔâubh)�”}”(hhh]”j)�”}”(hŒworkqueue_attrs”h]”hŒworkqueue_attrs”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jãŒmodname”NŒ classname”Nj7j:)�”}”j=]”j âŒc.apply_workqueue_attrs”†”asbuh1hhjÔâubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/ãh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÔâubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj=ãh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÔâubj)�”}”(hŒattrs”h]”hŒattrs”…”�”}”(hjJãh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÔâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj^âubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj%âh²hh³j7âh´MÜubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj!âh²hh³j7âh´MÜubah}”(h]”jâah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j7âh´MÜhjâh²hubjC)�”}”(hhh]”hì)�”}”(hŒ1apply new workqueue_attrs to an unbound workqueue”h]”hŒ1apply new workqueue_attrs to an unbound workqueue”…”�”}”(hjtãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÜhjqãh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjâh²hh³j7âh´MÜubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejŒãjfjŒãjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX�**Parameters** ``struct workqueue_struct *wq`` the target workqueue ``const struct workqueue_attrs *attrs`` the workqueue_attrs to apply, allocated with alloc_workqueue_attrs() **Description** Apply **attrs** to an unbound workqueue **wq**. Unless disabled, this function maps a separate pwq to each CPU pod with possibles CPUs in **attrs->cpumask** so that work items are affine to the pod it was issued on. Older pwqs are released as in-flight work items finish. Note that a work item which repeatedly requeues itself back-to-back will stay on its current pwq. Performs GFP_KERNEL allocations. **Return** 0 on success and -errno on failure.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj–ãh]”hŒ Parameters”…”�”}”(hj˜ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”ãubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Màhj�ãubjg)�”}”(hhh]”(jl)�”}”(hŒ5``struct workqueue_struct *wq`` the target workqueue ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hjµãh]”hŒstruct workqueue_struct *wq”…”�”}”(hj·ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj³ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÝhj¯ãubj‹)�”}”(hhh]”hì)�”}”(hŒthe target workqueue”h]”hŒthe target workqueue”…”�”}”(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&]”uh1jkh³jÊãh´MÝhj¬ãubjl)�”}”(hŒm``const struct workqueue_attrs *attrs`` the workqueue_attrs to apply, allocated with alloc_workqueue_attrs() ”h]”(jr)�”}”(hŒ'``const struct workqueue_attrs *attrs``”h]”jú)�”}”(hjîãh]”hŒ#const struct workqueue_attrs *attrs”…”�”}”(hjðãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjìãubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÞhjèãubj‹)�”}”(hhh]”hì)�”}”(hŒDthe workqueue_attrs to apply, allocated with alloc_workqueue_attrs()”h]”hŒDthe workqueue_attrs to apply, allocated with alloc_workqueue_attrs()”…”�”}”(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&]”uh1jkh³jäh´MÞhj¬ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj�ãubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj)äh]”hŒ Description”…”�”}”(hj+äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'äubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Màhj�ãubhì)�”}”(hXqApply **attrs** to an unbound workqueue **wq**. Unless disabled, this function maps a separate pwq to each CPU pod with possibles CPUs in **attrs->cpumask** so that work items are affine to the pod it was issued on. Older pwqs are released as in-flight work items finish. Note that a work item which repeatedly requeues itself back-to-back will stay on its current pwq.”h]”(hŒApply ”…”�”}”(hj?äh²hh³Nh´Nubj)�”}”(hŒ **attrs**”h]”hŒattrs”…”�”}”(hjGäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?äubhŒ to an unbound workqueue ”…”�”}”(hj?äh²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hjYäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?äubhŒ\. Unless disabled, this function maps a separate pwq to each CPU pod with possibles CPUs in ”…”�”}”(hj?äh²hh³Nh´Nubj)�”}”(hŒ**attrs->cpumask**”h]”hŒattrs->cpumask”…”�”}”(hjkäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?äubhŒÕ so that work items are affine to the pod it was issued on. Older pwqs are released as in-flight work items finish. Note that a work item which repeatedly requeues itself back-to-back will stay on its current pwq.”…”�”}”(hj?äh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mßhj�ãubhì)�”}”(hŒ Performs GFP_KERNEL allocations.”h]”hŒ Performs GFP_KERNEL allocations.”…”�”}”(hj„äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Måhj�ãubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj•äh]”hŒReturn”…”�”}”(hj—äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“äubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mçhj�ãubhì)�”}”(hŒ#0 on success and -errno on failure.”h]”hŒ#0 on success and -errno on failure.”…”�”}”(hj«äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mèhj�ãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ"unbound_wq_update_pwq (C function)”Œc.unbound_wq_update_pwq”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒAvoid unbound_wq_update_pwq (struct workqueue_struct *wq, int cpu)”h]”jè)�”}”(hŒ@void unbound_wq_update_pwq(struct workqueue_struct *wq, int cpu)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÚäh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÖäh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M÷ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéäh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÖäh²hh³jèäh´M÷ubj)�”}”(hŒunbound_wq_update_pwq”h]”j)�”}”(hŒunbound_wq_update_pwq”h]”hŒunbound_wq_update_pwq”…”�”}”(hjûäh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj÷äubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÖäh²hh³jèäh´M÷ubj|)�”}”(hŒ&(struct workqueue_struct *wq, int cpu)”h]”(j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjåubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$åh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjåubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hj5åh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj2åubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j7åŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jýäsbŒc.unbound_wq_update_pwq”†”asbuh1hhjåubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUåh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjåubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjcåh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjåubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hjpåh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjåubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjåubj‚)�”}”(hŒint cpu”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj‰åh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj…åubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—åh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj…åubj)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj¥åh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj…åubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjåubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÖäh²hh³jèäh´M÷ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÒäh²hh³jèäh´M÷ubah}”(h]”jÍäah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jèäh´M÷hjÏäh²hubjC)�”}”(hhh]”hì)�”}”(hŒ%update a pwq slot for CPU hot[un]plug”h]”hŒ%update a pwq slot for CPU hot[un]plug”…”�”}”(hjÏåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M÷hjÌåh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÏäh²hh³jèäh´M÷ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejçåjfjçåjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXj**Parameters** ``struct workqueue_struct *wq`` the target workqueue ``int cpu`` the CPU to update the pwq slot for **Description** This function is to be called from ``CPU_DOWN_PREPARE``, ``CPU_ONLINE`` and ``CPU_DOWN_FAILED``. **cpu** is in the same pod of the CPU being hot[un]plugged. If pod affinity can't be adjusted due to memory allocation failure, it falls back to **wq->dfl_pwq** which may not be optimal but is always correct. Note that when the last allowed CPU of a pod goes offline for a workqueue with a cpumask spanning multiple pods, the workers which were already executing the work items for the workqueue will lose their CPU affinity and may execute on any CPU. This is similar to how per-cpu workqueues behave on CPU_DOWN. If a workqueue user wants strict affinity, it's the user's responsibility to flush the work item from CPU_DOWN_PREPARE.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjñåh]”hŒ Parameters”…”�”}”(hjóåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïåubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mûhjëåubjg)�”}”(hhh]”(jl)�”}”(hŒ5``struct workqueue_struct *wq`` the target workqueue ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hjæh]”hŒstruct workqueue_struct *wq”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Møhj æubj‹)�”}”(hhh]”hì)�”}”(hŒthe target workqueue”h]”hŒthe target workqueue”…”�”}”(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&]”uh1jkh³j%æh´Møhjæubjl)�”}”(hŒ/``int cpu`` the CPU to update the pwq slot for ”h]”(jr)�”}”(hŒ ``int cpu``”h]”jú)�”}”(hjIæh]”hŒint cpu”…”�”}”(hjKæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjGæubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MùhjCæubj‹)�”}”(hhh]”hì)�”}”(hŒ"the CPU to update the pwq slot for”h]”hŒ"the CPU to update the pwq slot for”…”�”}”(hjbæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j^æh´Mùhj_æubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjCæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j^æh´Mùhjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjëåubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj„æh]”hŒ Description”…”�”}”(hj†æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚æubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mûhjëåubhì)�”}”(hŒ�This function is to be called from ``CPU_DOWN_PREPARE``, ``CPU_ONLINE`` and ``CPU_DOWN_FAILED``. **cpu** is in the same pod of the CPU being hot[un]plugged.”h]”(hŒ#This function is to be called from ”…”�”}”(hjšæh²hh³Nh´Nubjú)�”}”(hŒ``CPU_DOWN_PREPARE``”h]”hŒCPU_DOWN_PREPARE”…”�”}”(hj¢æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjšæubhŒ, ”…”�”}”(hjšæh²hh³Nh´Nubjú)�”}”(hŒ``CPU_ONLINE``”h]”hŒ CPU_ONLINE”…”�”}”(hj´æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjšæubhŒ and ”…”�”}”(hjšæh²hh³Nh´Nubjú)�”}”(hŒ``CPU_DOWN_FAILED``”h]”hŒCPU_DOWN_FAILED”…”�”}”(hjÆæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjšæubhŒ. ”…”�”}”(hjšæh²hh³Nh´Nubj)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hjØæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšæubhŒ4 is in the same pod of the CPU being hot[un]plugged.”…”�”}”(hjšæh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Múhjëåubhì)�”}”(hŒ”If pod affinity can't be adjusted due to memory allocation failure, it falls back to **wq->dfl_pwq** which may not be optimal but is always correct.”h]”(hŒWIf pod affinity can’t be adjusted due to memory allocation failure, it falls back to ”…”�”}”(hjñæh²hh³Nh´Nubj)�”}”(hŒ**wq->dfl_pwq**”h]”hŒ wq->dfl_pwq”…”�”}”(hjùæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñæubhŒ0 which may not be optimal but is always correct.”…”�”}”(hjñæh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mþhjëåubhì)�”}”(hX©Note that when the last allowed CPU of a pod goes offline for a workqueue with a cpumask spanning multiple pods, the workers which were already executing the work items for the workqueue will lose their CPU affinity and may execute on any CPU. This is similar to how per-cpu workqueues behave on CPU_DOWN. If a workqueue user wants strict affinity, it's the user's responsibility to flush the work item from CPU_DOWN_PREPARE.”h]”hX­Note that when the last allowed CPU of a pod goes offline for a workqueue with a cpumask spanning multiple pods, the workers which were already executing the work items for the workqueue will lose their CPU affinity and may execute on any CPU. This is similar to how per-cpu workqueues behave on CPU_DOWN. If a workqueue user wants strict affinity, it’s the user’s responsibility to flush the work item from CPU_DOWN_PREPARE.”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhjëåubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ!wq_adjust_max_active (C function)”Œc.wq_adjust_max_active”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ7void wq_adjust_max_active (struct workqueue_struct *wq)”h]”jè)�”}”(hŒ6void wq_adjust_max_active(struct workqueue_struct *wq)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjAçh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj=çh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÄubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPçh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj=çh²hh³jOçh´MÄubj)�”}”(hŒwq_adjust_max_active”h]”j)�”}”(hŒwq_adjust_max_active”h]”hŒwq_adjust_max_active”…”�”}”(hjbçh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj^çubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj=çh²hh³jOçh´MÄubj|)�”}”(hŒ(struct workqueue_struct *wq)”h]”j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj~çh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjzçubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹çh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjzçubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjœçh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj™çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jžçŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jdçsbŒc.wq_adjust_max_active”†”asbuh1hhjzçubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼çh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjzçubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÊçh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjzçubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hj×çh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjzçubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjvçubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj=çh²hh³jOçh´MÄubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj9çh²hh³jOçh´MÄubah}”(h]”j4çah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jOçh´MÄhj6çh²hubjC)�”}”(hhh]”hì)�”}”(hŒ/update a wq's max_active to the current setting”h]”hŒ1update a wq’s max_active to the current setting”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÄhjþçh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj6çh²hh³jOçh´MÄubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejèjfjèjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX**Parameters** ``struct workqueue_struct *wq`` target workqueue **Description** If **wq** isn't freezing, set **wq->max_active** to the saved_max_active and activate inactive work items accordingly. If **wq** is freezing, clear **wq->max_active** to zero.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj#èh]”hŒ Parameters”…”�”}”(hj%èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!èubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÈhjèubjg)�”}”(hhh]”jl)�”}”(hŒ1``struct workqueue_struct *wq`` target workqueue ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hjBèh]”hŒstruct workqueue_struct *wq”…”�”}”(hjDèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj@èubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÅhj<èubj‹)�”}”(hhh]”hì)�”}”(hŒtarget workqueue”h]”hŒtarget workqueue”…”�”}”(hj[èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jWèh´MÅhjXèubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj<èubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jWèh´MÅhj9èubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjèubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj}èh]”hŒ Description”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{èubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÇhjèubhì)�”}”(hŒ¯If **wq** isn't freezing, set **wq->max_active** to the saved_max_active and activate inactive work items accordingly. If **wq** is freezing, clear **wq->max_active** to zero.”h]”(hŒIf ”…”�”}”(hj“èh²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hj›èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“èubhŒ isn’t freezing, set ”…”�”}”(hj“èh²hh³Nh´Nubj)�”}”(hŒ**wq->max_active**”h]”hŒwq->max_active”…”�”}”(hj­èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“èubhŒJ to the saved_max_active and activate inactive work items accordingly. If ”…”�”}”(hj“èh²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hj¿èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“èubhŒ is freezing, clear ”…”�”}”(hj“èh²hh³Nh´Nubj)�”}”(hŒ**wq->max_active**”h]”hŒwq->max_active”…”�”}”(hjÑèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“èubhŒ to zero.”…”�”}”(hj“èh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÆhjèubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒdestroy_workqueue (C function)”Œc.destroy_workqueue”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ4void destroy_workqueue (struct workqueue_struct *wq)”h]”jè)�”}”(hŒ3void destroy_workqueue(struct workqueue_struct *wq)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj éh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjéh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mêubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjéh²hh³jéh´Mêubj)�”}”(hŒdestroy_workqueue”h]”j)�”}”(hŒdestroy_workqueue”h]”hŒdestroy_workqueue”…”�”}”(hj+éh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj'éubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjéh²hh³jéh´Mêubj|)�”}”(hŒ(struct workqueue_struct *wq)”h]”j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjGéh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjCéubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTéh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjCéubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjeéh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjbéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jgéŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j-ésbŒc.destroy_workqueue”†”asbuh1hhjCéubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…éh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjCéubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj“éh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjCéubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hj éh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjCéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj?éubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjéh²hh³jéh´Mêubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjéh²hh³jéh´Mêubah}”(h]”jýèah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jéh´Mêhjÿèh²hubjC)�”}”(hhh]”hì)�”}”(hŒsafely terminate a workqueue”h]”hŒsafely terminate a workqueue”…”�”}”(hjÊéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MêhjÇéh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÿèh²hh³jéh´Mêubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejâéjfjâéjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXÓ**Parameters** ``struct workqueue_struct *wq`` target workqueue **Description** Safely destroy a workqueue. All work currently pending will be done first. This function does NOT guarantee that non-pending work that has been submitted with queue_delayed_work() and similar functions will be done before destroying the workqueue. The fundamental problem is that, currently, the workqueue has no way of accessing non-pending delayed_work. delayed_work is only linked on the timer-side. All delayed_work must, therefore, be canceled before calling this function. TODO: It would be better if the problem described above wouldn't exist and destroy_workqueue() would cleanly cancel all pending and non-pending delayed_work.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjìéh]”hŒ Parameters”…”�”}”(hjîéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjêéubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mîhjæéubjg)�”}”(hhh]”jl)�”}”(hŒ1``struct workqueue_struct *wq`` target workqueue ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj êh]”hŒstruct workqueue_struct *wq”…”�”}”(hj êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj êubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mëhjêubj‹)�”}”(hhh]”hì)�”}”(hŒtarget workqueue”h]”hŒtarget workqueue”…”�”}”(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&]”uh1jkh³j êh´Mëhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjæéubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjFêh]”hŒ Description”…”�”}”(hjHêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDêubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Míhjæéubhì)�”}”(hŒJSafely destroy a workqueue. All work currently pending will be done first.”h]”hŒJSafely destroy a workqueue. All work currently pending will be done first.”…”�”}”(hj\êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mìhjæéubhì)�”}”(hX“This function does NOT guarantee that non-pending work that has been submitted with queue_delayed_work() and similar functions will be done before destroying the workqueue. The fundamental problem is that, currently, the workqueue has no way of accessing non-pending delayed_work. delayed_work is only linked on the timer-side. All delayed_work must, therefore, be canceled before calling this function.”h]”hX“This function does NOT guarantee that non-pending work that has been submitted with queue_delayed_work() and similar functions will be done before destroying the workqueue. The fundamental problem is that, currently, the workqueue has no way of accessing non-pending delayed_work. delayed_work is only linked on the timer-side. All delayed_work must, therefore, be canceled before calling this function.”…”�”}”(hjkêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mîhjæéubhì)�”}”(hŒ�TODO: It would be better if the problem described above wouldn't exist and destroy_workqueue() would cleanly cancel all pending and non-pending delayed_work.”h]”hŒŸTODO: It would be better if the problem described above wouldn’t exist and destroy_workqueue() would cleanly cancel all pending and non-pending delayed_work.”…”�”}”(hjzêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mõhjæéubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ%workqueue_set_max_active (C function)”Œc.workqueue_set_max_active”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒKvoid workqueue_set_max_active (struct workqueue_struct *wq, int max_active)”h]”jè)�”}”(hŒJvoid workqueue_set_max_active(struct workqueue_struct *wq, int max_active)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj©êh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj¥êh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MFubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸êh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¥êh²hh³j·êh´MFubj)�”}”(hŒworkqueue_set_max_active”h]”j)�”}”(hŒworkqueue_set_max_active”h]”hŒworkqueue_set_max_active”…”�”}”(hjÊêh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÆêubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj¥êh²hh³j·êh´MFubj|)�”}”(hŒ-(struct workqueue_struct *wq, int max_active)”h]”(j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjæêh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjâêubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóêh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjâêubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jëŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jÌêsbŒc.workqueue_set_max_active”†”asbuh1hhjâêubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$ëh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjâêubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj2ëh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjâêubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hj?ëh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjâêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÞêubj‚)�”}”(hŒint max_active”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjXëh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjTëubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfëh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjTëubj)�”}”(hŒ max_active”h]”hŒ max_active”…”�”}”(hjtëh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjTëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÞêubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj¥êh²hh³j·êh´MFubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj¡êh²hh³j·êh´MFubah}”(h]”jœêah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j·êh´MFhjžêh²hubjC)�”}”(hhh]”hì)�”}”(hŒ adjust max_active of a workqueue”h]”hŒ adjust max_active of a workqueue”…”�”}”(hjžëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MFhj›ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjžêh²hh³j·êh´MFubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej¶ëjfj¶ëjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX**Parameters** ``struct workqueue_struct *wq`` target workqueue ``int max_active`` new max_active value. **Description** Set max_active of **wq** to **max_active**. See the alloc_workqueue() function comment. **Context** Don't call from IRQ context.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÀëh]”hŒ Parameters”…”�”}”(hjÂëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MJhjºëubjg)�”}”(hhh]”(jl)�”}”(hŒ1``struct workqueue_struct *wq`` target workqueue ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hjßëh]”hŒstruct workqueue_struct *wq”…”�”}”(hjáëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÝëubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MGhjÙëubj‹)�”}”(hhh]”hì)�”}”(hŒtarget workqueue”h]”hŒtarget workqueue”…”�”}”(hjøëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jôëh´MGhjõëubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÙëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jôëh´MGhjÖëubjl)�”}”(hŒ)``int max_active`` new max_active value. ”h]”(jr)�”}”(hŒ``int max_active``”h]”jú)�”}”(hjìh]”hŒint max_active”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MHhjìubj‹)�”}”(hhh]”hì)�”}”(hŒnew max_active value.”h]”hŒnew max_active value.”…”�”}”(hj1ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j-ìh´MHhj.ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j-ìh´MHhjÖëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjºëubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjSìh]”hŒ Description”…”�”}”(hjUìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQìubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MJhjºëubhì)�”}”(hŒWSet max_active of **wq** to **max_active**. See the alloc_workqueue() function comment.”h]”(hŒSet max_active of ”…”�”}”(hjiìh²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hjqìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjiìubhŒ to ”…”�”}”(hjiìh²hh³Nh´Nubj)�”}”(hŒ**max_active**”h]”hŒ max_active”…”�”}”(hjƒìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjiìubhŒ-. See the alloc_workqueue() function comment.”…”�”}”(hjiìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MIhjºëubhì)�”}”(hŒ **Context**”h]”j)�”}”(hjžìh]”hŒContext”…”�”}”(hj ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjœìubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MLhjºëubhì)�”}”(hŒDon't call from IRQ context.”h]”hŒDon’t call from IRQ context.”…”�”}”(hj´ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MMhjºëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ%workqueue_set_min_active (C function)”Œc.workqueue_set_min_active”hNt”au•h1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒKvoid workqueue_set_min_active (struct workqueue_struct *wq, int min_active)”h]”jè)�”}”(hŒJvoid workqueue_set_min_active(struct workqueue_struct *wq, int min_active)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjãìh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjßìh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjßìh²hh³jñìh´Mhubj)�”}”(hŒworkqueue_set_min_active”h]”j)�”}”(hŒworkqueue_set_min_active”h]”hŒworkqueue_set_min_active”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjíubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjßìh²hh³jñìh´Mhubj|)�”}”(hŒ-(struct workqueue_struct *wq, int min_active)”h]”(j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj íh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjíubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-íh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjíubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hj>íh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj;íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j@íŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jísbŒc.workqueue_set_min_active”†”asbuh1hhjíubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^íh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjíubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjlíh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjíubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hjyíh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjíubj‚)�”}”(hŒint min_active”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj’íh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjŽíubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj íh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjŽíubj)�”}”(hŒ min_active”h]”hŒ min_active”…”�”}”(hj®íh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjŽíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjíubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjßìh²hh³jñìh´Mhubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÛìh²hh³jñìh´Mhubah}”(h]”jÖìah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jñìh´MhhjØìh²hubjC)�”}”(hhh]”hì)�”}”(hŒ)adjust min_active of an unbound workqueue”h]”hŒ)adjust min_active of an unbound workqueue”…”�”}”(hjØíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhhjÕíh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjØìh²hh³jñìh´Mhubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejðíjfjðíjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX(**Parameters** ``struct workqueue_struct *wq`` target unbound workqueue ``int min_active`` new min_active value **Description** Set min_active of an unbound workqueue. Unlike other types of workqueues, an unbound workqueue is not guaranteed to be able to process max_active interdependent work items. Instead, an unbound workqueue is guaranteed to be able to process min_active number of interdependent work items which is ``WQ_DFL_MIN_ACTIVE`` by default. Use this function to adjust the min_active value between 0 and the current max_active.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjúíh]”hŒ Parameters”…”�”}”(hjüíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjøíubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mlhjôíubjg)�”}”(hhh]”(jl)�”}”(hŒ9``struct workqueue_struct *wq`` target unbound workqueue ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hjîh]”hŒstruct workqueue_struct *wq”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mihjîubj‹)�”}”(hhh]”hì)�”}”(hŒtarget unbound workqueue”h]”hŒtarget unbound workqueue”…”�”}”(hj2îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j.îh´Mihj/îubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j.îh´Mihjîubjl)�”}”(hŒ(``int min_active`` new min_active value ”h]”(jr)�”}”(hŒ``int min_active``”h]”jú)�”}”(hjRîh]”hŒint min_active”…”�”}”(hjTîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjPîubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MjhjLîubj‹)�”}”(hhh]”hì)�”}”(hŒnew min_active value”h]”hŒnew min_active value”…”�”}”(hjkîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jgîh´Mjhjhîubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjLîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jgîh´Mjhjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjôíubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj�îh]”hŒ Description”…”�”}”(hj�îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹îubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mlhjôíubhì)�”}”(hXHSet min_active of an unbound workqueue. Unlike other types of workqueues, an unbound workqueue is not guaranteed to be able to process max_active interdependent work items. Instead, an unbound workqueue is guaranteed to be able to process min_active number of interdependent work items which is ``WQ_DFL_MIN_ACTIVE`` by default.”h]”(hX'Set min_active of an unbound workqueue. Unlike other types of workqueues, an unbound workqueue is not guaranteed to be able to process max_active interdependent work items. Instead, an unbound workqueue is guaranteed to be able to process min_active number of interdependent work items which is ”…”�”}”(hj£îh²hh³Nh´Nubjú)�”}”(hŒ``WQ_DFL_MIN_ACTIVE``”h]”hŒWQ_DFL_MIN_ACTIVE”…”�”}”(hj«îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj£îubhŒ by default.”…”�”}”(hj£îh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mkhjôíubhì)�”}”(hŒVUse this function to adjust the min_active value between 0 and the current max_active.”h]”hŒVUse this function to adjust the min_active value between 0 and the current max_active.”…”�”}”(hjÄîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mqhjôíubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒcurrent_work (C function)”Œc.current_work”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ(struct work_struct * current_work (void)”h]”jè)�”}”(hŒ&struct work_struct *current_work(void)”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjóîh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjïîh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mƒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjïîh²hh³jïh´Mƒubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jïŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œ current_work”sbŒc.current_work”†”asbuh1hhjïîh²hh³jïh´Mƒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3ïh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjïîh²hh³jïh´MƒubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjAïh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjïîh²hh³jïh´Mƒubj)�”}”(hŒ current_work”h]”j)�”}”(hj0ïh]”hŒ current_work”…”�”}”(hjRïh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjNïubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjïîh²hh³jïh´Mƒubj|)�”}”(hŒ(void)”h]”j‚)�”}”(hŒvoid”h]”j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjmïh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjiïubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjeïubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjïîh²hh³jïh´Mƒubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjëîh²hh³jïh´Mƒubah}”(h]”jæîah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jïh´Mƒhjèîh²hubjC)�”}”(hhh]”hì)�”}”(hŒ'retrieve ``current`` task's work struct”h]”(hŒ retrieve ”…”�”}”(hj—ïh²hh³Nh´Nubjú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hjŸïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj—ïubhŒ task’s work struct”…”�”}”(hj—ïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mƒhj”ïh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjèîh²hh³jïh´Mƒubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejÁïjfjÁïjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX'**Parameters** ``void`` no arguments **Description** Determine if ``current`` task is a workqueue worker and what it's working on. Useful to find out the context that the ``current`` task is running in. **Return** work struct if ``current`` task is a workqueue worker, ``NULL`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjËïh]”hŒ Parameters”…”�”}”(hjÍïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉïubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‡hjÅïubjg)�”}”(hhh]”jl)�”}”(hŒ``void`` no arguments ”h]”(jr)�”}”(hŒ``void``”h]”jú)�”}”(hjêïh]”hŒvoid”…”�”}”(hjìïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjèïubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khjäïubj‹)�”}”(hhh]”hì)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(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&]”uh1jkh³jÿïh´Khjáïubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjÅïubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj%ðh]”hŒ Description”…”�”}”(hj'ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#ðubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´KhjÅïubhì)�”}”(hŒ•Determine if ``current`` task is a workqueue worker and what it's working on. Useful to find out the context that the ``current`` task is running in.”h]”(hŒ Determine if ”…”�”}”(hj;ðh²hh³Nh´Nubjú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hjCðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj;ðubhŒ` task is a workqueue worker and what it’s working on. Useful to find out the context that the ”…”�”}”(hj;ðh²hh³Nh´Nubjú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hjUðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj;ðubhŒ task is running in.”…”�”}”(hj;ðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M„hjÅïubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjpðh]”hŒReturn”…”�”}”(hjrðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjnðubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‡hjÅïubhì)�”}”(hŒJwork struct if ``current`` task is a workqueue worker, ``NULL`` otherwise.”h]”(hŒwork struct if ”…”�”}”(hj†ðh²hh³Nh´Nubjú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hjŽðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj†ðubhŒ task is a workqueue worker, ”…”�”}”(hj†ðh²hh³Nh´Nubjú)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj†ðubhŒ otherwise.”…”�”}”(hj†ðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MˆhjÅïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ)current_is_workqueue_rescuer (C function)”Œc.current_is_workqueue_rescuer”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ(bool current_is_workqueue_rescuer (void)”h]”jè)�”}”(hŒ'bool current_is_workqueue_rescuer(void)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjÙðh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÕðh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M“ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçðh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÕðh²hh³jæðh´M“ubj)�”}”(hŒcurrent_is_workqueue_rescuer”h]”j)�”}”(hŒcurrent_is_workqueue_rescuer”h]”hŒcurrent_is_workqueue_rescuer”…”�”}”(hjùðh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjõðubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÕðh²hh³jæðh´M“ubj|)�”}”(hŒ(void)”h]”j‚)�”}”(hŒvoid”h]”j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjñubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj ñubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÕðh²hh³jæðh´M“ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÑðh²hh³jæðh´M“ubah}”(h]”jÌðah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jæðh´M“hjÎðh²hubjC)�”}”(hhh]”hì)�”}”(hŒ!is ``current`` workqueue rescuer?”h]”(hŒis ”…”�”}”(hj?ñh²hh³Nh´Nubjú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hjGñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj?ñubhŒ workqueue rescuer?”…”�”}”(hj?ñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M“hj<ñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÎðh²hh³jæðh´M“ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejiñjfjiñjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX**Parameters** ``void`` no arguments **Description** Determine whether ``current`` is a workqueue rescuer. Can be used from work functions to determine whether it's being run off the rescuer task. **Return** ``true`` if ``current`` is a workqueue rescuer. ``false`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjsñh]”hŒ Parameters”…”�”}”(hjuñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqñubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M—hjmñubjg)�”}”(hhh]”jl)�”}”(hŒ``void`` no arguments ”h]”(jr)�”}”(hŒ``void``”h]”jú)�”}”(hj’ñh]”hŒvoid”…”�”}”(hj”ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj�ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´KhjŒñubj‹)�”}”(hhh]”hì)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(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&]”uh1jkh³j§ñh´Khj‰ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjmñubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÍñh]”hŒ Description”…”�”}”(hjÏñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËñubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khjmñubhì)�”}”(hŒ�Determine whether ``current`` is a workqueue rescuer. Can be used from work functions to determine whether it's being run off the rescuer task.”h]”(hŒDetermine whether ”…”�”}”(hjãñh²hh³Nh´Nubjú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hjëñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjãñubhŒu is a workqueue rescuer. Can be used from work functions to determine whether it’s being run off the rescuer task.”…”�”}”(hjãñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M”hjmñubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjòh]”hŒReturn”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M—hjmñubhì)�”}”(hŒD``true`` if ``current`` is a workqueue rescuer. ``false`` otherwise.”h]”(jú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjòubhŒ if ”…”�”}”(hjòh²hh³Nh´Nubjú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hj2òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjòubhŒ is a workqueue rescuer. ”…”�”}”(hjòh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjDòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjòubhŒ otherwise.”…”�”}”(hjòh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M˜hjmñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ-current_is_workqueue_mem_reclaim (C function)”Œ"c.current_is_workqueue_mem_reclaim”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ,bool current_is_workqueue_mem_reclaim (void)”h]”jè)�”}”(hŒ+bool current_is_workqueue_mem_reclaim(void)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj}òh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjyòh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¢ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹òh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjyòh²hh³jŠòh´M¢ubj)�”}”(hŒ current_is_workqueue_mem_reclaim”h]”j)�”}”(hŒ current_is_workqueue_mem_reclaim”h]”hŒ current_is_workqueue_mem_reclaim”…”�”}”(hj�òh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj™òubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjyòh²hh³jŠòh´M¢ubj|)�”}”(hŒ(void)”h]”j‚)�”}”(hŒvoid”h]”j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¹òh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjµòubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj±òubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjyòh²hh³jŠòh´M¢ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjuòh²hh³jŠòh´M¢ubah}”(h]”jpòah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jŠòh´M¢hjròh²hubjC)�”}”(hhh]”hì)�”}”(hŒ+is ``current`` a ``WQ_MEM_RECLAIM`` worker?”h]”(hŒis ”…”�”}”(hjãòh²hh³Nh´Nubjú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hjëòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjãòubhŒ a ”…”�”}”(hjãòh²hh³Nh´Nubjú)�”}”(hŒ``WQ_MEM_RECLAIM``”h]”hŒWQ_MEM_RECLAIM”…”�”}”(hjýòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjãòubhŒ worker?”…”�”}”(hjãòh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¢hjàòh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjròh²hh³jŠòh´M¢ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejójfjójg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXÚ**Parameters** ``void`` no arguments **Description** Determine whether ``current`` is a workqueue worker executing on a workqueue created with ``WQ_MEM_RECLAIM``. This mirrors the condition that check_flush_dependency() warns on: flushing (or otherwise waiting on) a !WQ_MEM_RECLAIM workqueue from such a context breaks the forward-progress guarantee and can deadlock. Callers that may recurse into such a flush -- e.g. NFS LOCALIO submitting into a stacked filesystem that flushes its own !WQ_MEM_RECLAIM workqueue -- can use this to decide whether they must defer the work to a !WQ_MEM_RECLAIM workqueue rather than run it inline. **Return** ``true`` if ``current`` is a ``WQ_MEM_RECLAIM`` worker. ``false`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj)óh]”hŒ Parameters”…”�”}”(hj+óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'óubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¦hj#óubjg)�”}”(hhh]”jl)�”}”(hŒ``void`` no arguments ”h]”(jr)�”}”(hŒ``void``”h]”jú)�”}”(hjHóh]”hŒvoid”…”�”}”(hjJóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjFóubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´KhjBóubj‹)�”}”(hhh]”hì)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjaóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j]óh´Khj^óubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjBóubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j]óh´Khj?óubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj#óubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjƒóh]”hŒ Description”…”�”}”(hj…óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�óubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khj#óubhì)�”}”(hXEDetermine whether ``current`` is a workqueue worker executing on a workqueue created with ``WQ_MEM_RECLAIM``. This mirrors the condition that check_flush_dependency() warns on: flushing (or otherwise waiting on) a !WQ_MEM_RECLAIM workqueue from such a context breaks the forward-progress guarantee and can deadlock. Callers that may recurse into such a flush -- e.g. NFS LOCALIO submitting into a stacked filesystem that flushes its own !WQ_MEM_RECLAIM workqueue -- can use this to decide whether they must defer the work to a !WQ_MEM_RECLAIM workqueue rather than run it inline.”h]”(hŒDetermine whether ”…”�”}”(hj™óh²hh³Nh´Nubjú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hj¡óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj™óubhŒ= is a workqueue worker executing on a workqueue created with ”…”�”}”(hj™óh²hh³Nh´Nubjú)�”}”(hŒ``WQ_MEM_RECLAIM``”h]”hŒWQ_MEM_RECLAIM”…”�”}”(hj³óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj™óubhXÙ. This mirrors the condition that check_flush_dependency() warns on: flushing (or otherwise waiting on) a !WQ_MEM_RECLAIM workqueue from such a context breaks the forward-progress guarantee and can deadlock. Callers that may recurse into such a flush -- e.g. NFS LOCALIO submitting into a stacked filesystem that flushes its own !WQ_MEM_RECLAIM workqueue -- can use this to decide whether they must defer the work to a !WQ_MEM_RECLAIM workqueue rather than run it inline.”…”�”}”(hj™óh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M£hj#óubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjÎóh]”hŒReturn”…”�”}”(hjÐóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌóubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¬hj#óubhì)�”}”(hŒM``true`` if ``current`` is a ``WQ_MEM_RECLAIM`` worker. ``false`` otherwise.”h]”(jú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjèóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjäóubhŒ if ”…”�”}”(hjäóh²hh³Nh´Nubjú)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hjúóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjäóubhŒ is a ”…”�”}”(hjäóh²hh³Nh´Nubjú)�”}”(hŒ``WQ_MEM_RECLAIM``”h]”hŒWQ_MEM_RECLAIM”…”�”}”(hj ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjäóubhŒ worker. ”…”�”}”(hjäóh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjäóubhŒ otherwise.”…”�”}”(hjäóh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M­hj#óubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ workqueue_congested (C function)”Œc.workqueue_congested”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ?bool workqueue_congested (int cpu, struct workqueue_struct *wq)”h]”jè)�”}”(hŒ>bool workqueue_congested(int cpu, struct workqueue_struct *wq)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hjWôh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjSôh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mºubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeôh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjSôh²hh³jdôh´Mºubj)�”}”(hŒworkqueue_congested”h]”j)�”}”(hŒworkqueue_congested”h]”hŒworkqueue_congested”…”�”}”(hjwôh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjsôubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjSôh²hh³jdôh´Mºubj|)�”}”(hŒ&(int cpu, struct workqueue_struct *wq)”h]”(j‚)�”}”(hŒint cpu”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj“ôh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj�ôubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡ôh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj�ôubj)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj¯ôh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj�ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj‹ôubj‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÈôh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjÄôubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕôh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÄôubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjæôh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjãôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jèôŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jyôsbŒc.workqueue_congested”†”asbuh1hhjÄôubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÄôubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÄôubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hj!õh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÄôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj‹ôubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjSôh²hh³jdôh´Mºubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjOôh²hh³jdôh´Mºubah}”(h]”jJôah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jdôh´MºhjLôh²hubjC)�”}”(hhh]”hì)�”}”(hŒ%test whether a workqueue is congested”h]”hŒ%test whether a workqueue is congested”…”�”}”(hjKõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MºhjHõh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjLôh²hh³jdôh´Mºubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejcõjfjcõjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX�**Parameters** ``int cpu`` CPU in question ``struct workqueue_struct *wq`` target workqueue **Description** Test whether **wq**'s cpu workqueue for **cpu** is congested. There is no synchronization around this function and the test result is unreliable and only useful as advisory hints or for debugging. If **cpu** is WORK_CPU_UNBOUND, the test is performed on the local CPU. With the exception of ordered workqueues, all workqueues have per-cpu pool_workqueues, each with its own congested state. A workqueue being congested on one CPU doesn't mean that the workqueue is contested on any other CPUs. **Return** ``true`` if congested, ``false`` otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjmõh]”hŒ Parameters”…”�”}”(hjoõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkõubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¾hjgõubjg)�”}”(hhh]”(jl)�”}”(hŒ``int cpu`` CPU in question ”h]”(jr)�”}”(hŒ ``int cpu``”h]”jú)�”}”(hjŒõh]”hŒint cpu”…”�”}”(hjŽõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjŠõubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M»hj†õubj‹)�”}”(hhh]”hì)�”}”(hŒCPU in question”h]”hŒCPU in question”…”�”}”(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&]”uh1jkh³j¡õh´M»hjƒõubjl)�”}”(hŒ1``struct workqueue_struct *wq`` target workqueue ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hjÅõh]”hŒstruct workqueue_struct *wq”…”�”}”(hjÇõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÃõubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¼hj¿õubj‹)�”}”(hhh]”hì)�”}”(hŒtarget workqueue”h]”hŒtarget workqueue”…”�”}”(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&]”uh1jkh³jÚõh´M¼hjƒõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjgõubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjöh]”hŒ Description”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþõubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¾hjgõubhì)�”}”(hŒÅTest whether **wq**'s cpu workqueue for **cpu** is congested. There is no synchronization around this function and the test result is unreliable and only useful as advisory hints or for debugging.”h]”(hŒ Test whether ”…”�”}”(hjöh²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöubhŒ’s cpu workqueue for ”…”�”}”(hjöh²hh³Nh´Nubj)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hj0öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöubhŒ– is congested. There is no synchronization around this function and the test result is unreliable and only useful as advisory hints or for debugging.”…”�”}”(hjöh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M½hjgõubhì)�”}”(hŒGIf **cpu** is WORK_CPU_UNBOUND, the test is performed on the local CPU.”h]”(hŒIf ”…”�”}”(hjIöh²hh³Nh´Nubj)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hjQöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIöubhŒ= is WORK_CPU_UNBOUND, the test is performed on the local CPU.”…”�”}”(hjIöh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÁhjgõubhì)�”}”(hŒàWith the exception of ordered workqueues, all workqueues have per-cpu pool_workqueues, each with its own congested state. A workqueue being congested on one CPU doesn't mean that the workqueue is contested on any other CPUs.”h]”hŒâWith the exception of ordered workqueues, all workqueues have per-cpu pool_workqueues, each with its own congested state. A workqueue being congested on one CPU doesn’t mean that the workqueue is contested on any other CPUs.”…”�”}”(hjjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÃhjgõubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj{öh]”hŒReturn”…”�”}”(hj}öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjyöubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÈhjgõubhì)�”}”(hŒ+``true`` if congested, ``false`` otherwise.”h]”(jú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj•öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj‘öubhŒ if congested, ”…”�”}”(hj‘öh²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj§öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj‘öubhŒ otherwise.”…”�”}”(hj‘öh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÉhjgõubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒwork_busy (C function)”Œ c.work_busy”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ1unsigned int work_busy (struct work_struct *work)”h]”jè)�”}”(hŒ0unsigned int work_busy(struct work_struct *work)”h]”(j¤)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjàöh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÜöh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Màubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïöh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÜöh²hh³jîöh´Màubj¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjýöh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÜöh²hh³jîöh´Màubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ÷h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÜöh²hh³jîöh´Màubj)�”}”(hŒ work_busy”h]”j)�”}”(hŒ work_busy”h]”hŒ work_busy”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj÷ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÜöh²hh³jîöh´Màubj|)�”}”(hŒ(struct work_struct *work)”h]”j‚)�”}”(hŒstruct work_struct *work”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj9÷h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj5÷ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF÷h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj5÷ubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hjW÷h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjT÷ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jY÷Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j÷sbŒ c.work_busy”†”asbuh1hhj5÷ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw÷h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj5÷ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj…÷h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj5÷ubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hj’÷h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj5÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj1÷ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÜöh²hh³jîöh´Màubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjØöh²hh³jîöh´Màubah}”(h]”jÓöah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jîöh´MàhjÕöh²hubjC)�”}”(hhh]”hì)�”}”(hŒ3test whether a work is currently pending or running”h]”hŒ3test whether a work is currently pending or running”…”�”}”(hj¼÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Màhj¹÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÕöh²hh³jîöh´Màubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejÔ÷jfjÔ÷jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXD**Parameters** ``struct work_struct *work`` the work to be tested **Description** Test whether **work** is currently pending or running. There is no synchronization around this function and the test result is unreliable and only useful as advisory hints or for debugging. **Return** OR'd bitmask of WORK_BUSY_* bits.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÞ÷h]”hŒ Parameters”…”�”}”(hjà÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜ÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MähjØ÷ubjg)�”}”(hhh]”jl)�”}”(hŒ3``struct work_struct *work`` the work to be tested ”h]”(jr)�”}”(hŒ``struct work_struct *work``”h]”jú)�”}”(hjý÷h]”hŒstruct work_struct *work”…”�”}”(hjÿ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjû÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Máhj÷÷ubj‹)�”}”(hhh]”hì)�”}”(hŒthe work to be tested”h]”hŒthe work to be tested”…”�”}”(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&]”uh1jkh³jøh´Máhjô÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjØ÷ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj8øh]”hŒ Description”…”�”}”(hj:øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6øubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MãhjØ÷ubhì)�”}”(hŒ¾Test whether **work** is currently pending or running. There is no synchronization around this function and the test result is unreliable and only useful as advisory hints or for debugging.”h]”(hŒ Test whether ”…”�”}”(hjNøh²hh³Nh´Nubj)�”}”(hŒ**work**”h]”hŒwork”…”�”}”(hjVøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNøubhŒ© is currently pending or running. There is no synchronization around this function and the test result is unreliable and only useful as advisory hints or for debugging.”…”�”}”(hjNøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MâhjØ÷ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjqøh]”hŒReturn”…”�”}”(hjsøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoøubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MæhjØ÷ubhì)�”}”(hŒ!OR'd bitmask of WORK_BUSY_* bits.”h]”hŒ#OR’d bitmask of WORK_BUSY_* bits.”…”�”}”(hj‡øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MçhjØ÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒset_worker_desc (C function)”Œc.set_worker_desc”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ+void set_worker_desc (const char *fmt, ...)”h]”jè)�”}”(hŒ*void set_worker_desc(const char *fmt, ...)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¶øh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj²øh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅøh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj²øh²hh³jÄøh´Mubj)�”}”(hŒset_worker_desc”h]”j)�”}”(hŒset_worker_desc”h]”hŒset_worker_desc”…”�”}”(hj×øh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÓøubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj²øh²hh³jÄøh´Mubj|)�”}”(hŒ(const char *fmt, ...)”h]”(j‚)�”}”(hŒconst char *fmt”h]”(jî)�”}”(hj‰h]”hŒconst”…”�”}”(hjóøh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjïøubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjïøubj¤)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjïøubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjïøubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj*ùh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjïøubj)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hj7ùh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjïøubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjëøubj‚)�”}”(hŒ...”h]”jU)�”}”(hjph]”hŒ...”…”�”}”(hjPùh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjLùubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjëøubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj²øh²hh³jÄøh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj®øh²hh³jÄøh´Mubah}”(h]”j©øah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÄøh´Mhj«øh²hubjC)�”}”(hhh]”hì)�”}”(hŒ)set description for the current work item”h]”hŒ)set description for the current work item”…”�”}”(hjyùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhjvùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj«øh²hh³jÄøh´Mubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej‘ùjfj‘ùjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXŒ**Parameters** ``const char *fmt`` printf-style format string ``...`` arguments for the format string **Description** This function can be called by a running work function to describe what the work item is about. If the worker task gets dumped, this information will be printed out together to help debugging. The description can be at most WORKER_DESC_LEN including the trailing '\0'.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj›ùh]”hŒ Parameters”…”�”}”(hj�ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™ùubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj•ùubjg)�”}”(hhh]”(jl)�”}”(hŒ/``const char *fmt`` printf-style format string ”h]”(jr)�”}”(hŒ``const char *fmt``”h]”jú)�”}”(hjºùh]”hŒconst char *fmt”…”�”}”(hj¼ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¸ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj´ùubj‹)�”}”(hhh]”hì)�”}”(hŒprintf-style format string”h]”hŒprintf-style format string”…”�”}”(hjÓùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÏùh´MhjÐùubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj´ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÏùh´Mhj±ùubjl)�”}”(hŒ(``...`` arguments for the format string ”h]”(jr)�”}”(hŒ``...``”h]”jú)�”}”(hjóùh]”hŒ...”…”�”}”(hjõùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjñùubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhjíùubj‹)�”}”(hhh]”hì)�”}”(hŒarguments for the format string”h]”hŒarguments for the format string”…”�”}”(hj úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³júh´Mhj úubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjíùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³júh´Mhj±ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj•ùubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj.úh]”hŒ Description”…”�”}”(hj0úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,úubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj•ùubhì)�”}”(hXThis function can be called by a running work function to describe what the work item is about. If the worker task gets dumped, this information will be printed out together to help debugging. The description can be at most WORKER_DESC_LEN including the trailing '\0'.”h]”hXThis function can be called by a running work function to describe what the work item is about. If the worker task gets dumped, this information will be printed out together to help debugging. The description can be at most WORKER_DESC_LEN including the trailing ‘0’.”…”�”}”(hjDúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj•ùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒprint_worker_info (C function)”Œc.print_worker_info”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒFvoid print_worker_info (const char *log_lvl, struct task_struct *task)”h]”jè)�”}”(hŒEvoid print_worker_info(const char *log_lvl, struct task_struct *task)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjsúh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjoúh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚úh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjoúh²hh³j�úh´Mubj)�”}”(hŒprint_worker_info”h]”j)�”}”(hŒprint_worker_info”h]”hŒprint_worker_info”…”�”}”(hj”úh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj�úubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjoúh²hh³j�úh´Mubj|)�”}”(hŒ/(const char *log_lvl, struct task_struct *task)”h]”(j‚)�”}”(hŒconst char *log_lvl”h]”(jî)�”}”(hj‰h]”hŒconst”…”�”}”(hj°úh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj¬úubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½úh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¬úubj¤)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjËúh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj¬úubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙúh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj¬úubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjçúh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj¬úubj)�”}”(hŒlog_lvl”h]”hŒlog_lvl”…”�”}”(hjôúh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¬úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¨úubj‚)�”}”(hŒstruct task_struct *task”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj ûh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj ûubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj ûubh)�”}”(hhh]”j)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hj+ûh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj(ûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j-ûŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j–úsbŒc.print_worker_info”†”asbuh1hhj ûubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj ûubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjYûh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj ûubj)�”}”(hŒtask”h]”hŒtask”…”�”}”(hjfûh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¨úubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjoúh²hh³j�úh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjkúh²hh³j�úh´Mubah}”(h]”jfúah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j�úh´Mhjhúh²hubjC)�”}”(hhh]”hì)�”}”(hŒ,print out worker information and description”h]”hŒ,print out worker information and description”…”�”}”(hj�ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj�ûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjhúh²hh³j�úh´Mubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej¨ûjfj¨ûjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX**Parameters** ``const char *log_lvl`` the log level to use when printing ``struct task_struct *task`` target task **Description** If **task** is a worker and currently executing a work item, print out the name of the workqueue being serviced and worker description set with set_worker_desc() by the currently executing work item. This function can be safely called on any task as long as the task_struct itself is accessible. While safe, this function isn't synchronized and may print out mixups or garbages of limited length.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj²ûh]”hŒ Parameters”…”�”}”(hj´ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj¬ûubjg)�”}”(hhh]”(jl)�”}”(hŒ;``const char *log_lvl`` the log level to use when printing ”h]”(jr)�”}”(hŒ``const char *log_lvl``”h]”jú)�”}”(hjÑûh]”hŒconst char *log_lvl”…”�”}”(hjÓûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÏûubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjËûubj‹)�”}”(hhh]”hì)�”}”(hŒ"the log level to use when printing”h]”hŒ"the log level to use when printing”…”�”}”(hjêûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jæûh´Mhjçûubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjËûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jæûh´MhjÈûubjl)�”}”(hŒ)``struct task_struct *task`` target task ”h]”(jr)�”}”(hŒ``struct task_struct *task``”h]”jú)�”}”(hj üh]”hŒstruct task_struct *task”…”�”}”(hj üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhjüubj‹)�”}”(hhh]”hì)�”}”(hŒ target task”h]”hŒ target task”…”�”}”(hj#üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jüh´Mhj üubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jüh´MhjÈûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj¬ûubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjEüh]”hŒ Description”…”�”}”(hjGüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCüubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj¬ûubhì)�”}”(hŒÇIf **task** is a worker and currently executing a work item, print out the name of the workqueue being serviced and worker description set with set_worker_desc() by the currently executing work item.”h]”(hŒIf ”…”�”}”(hj[üh²hh³Nh´Nubj)�”}”(hŒ**task**”h]”hŒtask”…”�”}”(hjcüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[üubhŒ¼ is a worker and currently executing a work item, print out the name of the workqueue being serviced and worker description set with set_worker_desc() by the currently executing work item.”…”�”}”(hj[üh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj¬ûubhì)�”}”(hŒÅThis function can be safely called on any task as long as the task_struct itself is accessible. While safe, this function isn't synchronized and may print out mixups or garbages of limited length.”h]”hŒÇThis function can be safely called on any task as long as the task_struct itself is accessible. While safe, this function isn’t synchronized and may print out mixups or garbages of limited length.”…”�”}”(hj|üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hj¬ûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒshow_one_workqueue (C function)”Œc.show_one_workqueue”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ5void show_one_workqueue (struct workqueue_struct *wq)”h]”jè)�”}”(hŒ4void show_one_workqueue(struct workqueue_struct *wq)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj«üh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj§üh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÜubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºüh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj§üh²hh³j¹üh´MÜubj)�”}”(hŒshow_one_workqueue”h]”j)�”}”(hŒshow_one_workqueue”h]”hŒshow_one_workqueue”…”�”}”(hjÌüh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÈüubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj§üh²hh³j¹üh´MÜubj|)�”}”(hŒ(struct workqueue_struct *wq)”h]”j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjèüh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjäüubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõüh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjäüubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jýŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jÎüsbŒc.show_one_workqueue”†”asbuh1hhjäüubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&ýh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjäüubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj4ýh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjäüubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hjAýh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjäüubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjàüubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj§üh²hh³j¹üh´MÜubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj£üh²hh³j¹üh´MÜubah}”(h]”jžüah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j¹üh´MÜhj üh²hubjC)�”}”(hhh]”hì)�”}”(hŒ!dump state of specified workqueue”h]”hŒ!dump state of specified workqueue”…”�”}”(hjkýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÜhjhýh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj üh²hh³j¹üh´MÜubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejƒýjfjƒýjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒW**Parameters** ``struct workqueue_struct *wq`` workqueue whose state will be printed”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj�ýh]”hŒ Parameters”…”�”}”(hj�ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹ýubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Màhj‡ýubjg)�”}”(hhh]”jl)�”}”(hŒE``struct workqueue_struct *wq`` workqueue whose state will be printed”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hj¬ýh]”hŒstruct workqueue_struct *wq”…”�”}”(hj®ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjªýubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mâhj¦ýubj‹)�”}”(hhh]”hì)�”}”(hŒ%workqueue whose state will be printed”h]”hŒ%workqueue whose state will be printed”…”�”}”(hjÅýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÝhjÂýubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¦ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÁýh´Mâhj£ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj‡ýubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ!show_one_worker_pool (C function)”Œc.show_one_worker_pool”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ4void show_one_worker_pool (struct worker_pool *pool)”h]”jè)�”}”(hŒ3void show_one_worker_pool(struct worker_pool *pool)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjþh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjþh²hh³jþh´Mubj)�”}”(hŒshow_one_worker_pool”h]”j)�”}”(hŒshow_one_worker_pool”h]”hŒshow_one_worker_pool”…”�”}”(hj'þh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj#þubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjþh²hh³jþh´Mubj|)�”}”(hŒ(struct worker_pool *pool)”h]”j‚)�”}”(hŒstruct worker_pool *pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjCþh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj?þubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPþh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj?þubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hjaþh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj^þubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jcþŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j)þsbŒc.show_one_worker_pool”†”asbuh1hhj?þubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�þh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj?þubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj�þh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj?þubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjœþh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj?þubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj;þubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjþh²hh³jþh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjþýh²hh³jþh´Mubah}”(h]”jùýah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jþh´Mhjûýh²hubjC)�”}”(hhh]”hì)�”}”(hŒ#dump state of specified worker pool”h]”hŒ#dump state of specified worker pool”…”�”}”(hjÆþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjÃþh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjûýh²hh³jþh´Mubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejÞþjfjÞþjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒV**Parameters** ``struct worker_pool *pool`` worker pool whose state will be printed”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjèþh]”hŒ Parameters”…”�”}”(hjêþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjæþubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hjâþubjg)�”}”(hhh]”jl)�”}”(hŒD``struct worker_pool *pool`` worker pool whose state will be printed”h]”(jr)�”}”(hŒ``struct worker_pool *pool``”h]”jú)�”}”(hjÿh]”hŒstruct worker_pool *pool”…”�”}”(hj ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhjÿubj‹)�”}”(hhh]”hì)�”}”(hŒ'worker pool whose state will be printed”h]”hŒ'worker pool whose state will be printed”…”�”}”(hj ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÿh´Mhjþþubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjâþubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ show_all_workqueues (C function)”Œc.show_all_workqueues”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒvoid show_all_workqueues (void)”h]”jè)�”}”(hŒvoid show_all_workqueues(void)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjaÿh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj]ÿh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M9ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpÿh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj]ÿh²hh³joÿh´M9ubj)�”}”(hŒshow_all_workqueues”h]”j)�”}”(hŒshow_all_workqueues”h]”hŒshow_all_workqueues”…”�”}”(hj‚ÿh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj~ÿubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj]ÿh²hh³joÿh´M9ubj|)�”}”(hŒ(void)”h]”j‚)�”}”(hŒvoid”h]”j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjžÿh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjšÿubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj–ÿubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj]ÿh²hh³joÿh´M9ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjYÿh²hh³joÿh´M9ubah}”(h]”jTÿah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³joÿh´M9hjVÿh²hubjC)�”}”(hhh]”hì)�”}”(hŒdump workqueue state”h]”hŒdump workqueue state”…”�”}”(hjÈÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M9hjÅÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjVÿh²hh³joÿh´M9ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejàÿjfjàÿjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒƒ**Parameters** ``void`` no arguments **Description** Called from a sysrq handler and prints out all busy workqueues and pools.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjêÿh]”hŒ Parameters”…”�”}”(hjìÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjèÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M=hjäÿubjg)�”}”(hhh]”jl)�”}”(hŒ``void`` no arguments ”h]”(jr)�”}”(hŒ``void``”h]”jú)�”}”(hj h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khjubj‹)�”}”(hhh]”hì)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjäÿubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjDh]”hŒ Description”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khjäÿubhì)�”}”(hŒICalled from a sysrq handler and prints out all busy workqueues and pools.”h]”hŒICalled from a sysrq handler and prints out all busy workqueues and pools.”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M:hjäÿubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ&show_freezable_workqueues (C function)”Œc.show_freezable_workqueues”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ%void show_freezable_workqueues (void)”h]”jè)�”}”(hŒ$void show_freezable_workqueues(void)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj…h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MQubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj…h²hh³j—h´MQubj)�”}”(hŒshow_freezable_workqueues”h]”j)�”}”(hŒshow_freezable_workqueues”h]”hŒshow_freezable_workqueues”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj¦ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj…h²hh³j—h´MQubj|)�”}”(hŒ(void)”h]”j‚)�”}”(hŒvoid”h]”j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÂubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¾ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj…h²hh³j—h´MQubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj�h²hh³j—h´MQubah}”(h]”j|ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j—h´MQhj~h²hubjC)�”}”(hhh]”hì)�”}”(hŒdump freezable workqueue state”h]”hŒdump freezable workqueue state”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MQhjíh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj~h²hh³j—h´MQubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejjfjjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ�**Parameters** ``void`` no arguments **Description** Called from try_to_freeze_tasks() and prints out all freezable workqueues still busy.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MUhj ubjg)�”}”(hhh]”jl)�”}”(hŒ``void`` no arguments ”h]”(jr)�”}”(hŒ``void``”h]”jú)�”}”(hj1h]”hŒvoid”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khj+ubj‹)�”}”(hhh]”hì)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jFh´KhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jFh´Khj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjlh]”hŒ Description”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”u•;h1jhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khj ubhì)�”}”(hŒUCalled from try_to_freeze_tasks() and prints out all freezable workqueues still busy.”h]”hŒUCalled from try_to_freeze_tasks() and prints out all freezable workqueues still busy.”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MRhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒrebind_workers (C function)”Œc.rebind_workers”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ.void rebind_workers (struct worker_pool *pool)”h]”jè)�”}”(hŒ-void rebind_workers(struct worker_pool *pool)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj­h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÎubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj­h²hh³j¿h´MÎubj)�”}”(hŒrebind_workers”h]”j)�”}”(hŒrebind_workers”h]”hŒrebind_workers”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÎubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj­h²hh³j¿h´MÎubj|)�”}”(hŒ(struct worker_pool *pool)”h]”j‚)�”}”(hŒstruct worker_pool *pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjêubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjêubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jÔsbŒc.rebind_workers”†”asbuh1hhjêubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjêubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjêubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjæubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj­h²hh³j¿h´MÎubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj©h²hh³j¿h´MÎubah}”(h]”j¤ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j¿h´MÎhj¦h²hubjC)�”}”(hhh]”hì)�”}”(hŒ2rebind all workers of a pool to the associated CPU”h]”hŒ2rebind all workers of a pool to the associated CPU”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÎhjnh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj¦h²hh³j¿h´MÎubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej‰jfj‰jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒ‘**Parameters** ``struct worker_pool *pool`` pool of interest **Description** **pool->cpu** is coming online. Rebind all workers to the CPU.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj“h]”hŒ Parameters”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÒhj�ubjg)�”}”(hhh]”jl)�”}”(hŒ.``struct worker_pool *pool`` pool of interest ”h]”(jr)�”}”(hŒ``struct worker_pool *pool``”h]”jú)�”}”(hj²h]”hŒstruct worker_pool *pool”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÏhj¬ubj‹)�”}”(hhh]”hì)�”}”(hŒpool of interest”h]”hŒpool of interest”…”�”}”(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&]”uh1jkh³jÇh´MÏhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj�ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjíh]”hŒ Description”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÑhj�ubhì)�”}”(hŒ?**pool->cpu** is coming online. Rebind all workers to the CPU.”h]”(j)�”}”(hŒ **pool->cpu**”h]”hŒ pool->cpu”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ2 is coming online. Rebind all workers to the CPU.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÐhj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ,restore_unbound_workers_cpumask (C function)”Œ!c.restore_unbound_workers_cpumask”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒHvoid restore_unbound_workers_cpumask (struct worker_pool *pool, int cpu)”h]”jè)�”}”(hŒGvoid restore_unbound_workers_cpumask(struct worker_pool *pool, int cpu)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj<h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj<h²hh³jNh´Mubj)�”}”(hŒrestore_unbound_workers_cpumask”h]”j)�”}”(hŒrestore_unbound_workers_cpumask”h]”hŒrestore_unbound_workers_cpumask”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj]ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj<h²hh³jNh´Mubj|)�”}”(hŒ#(struct worker_pool *pool, int cpu)”h]”(j‚)�”}”(hŒstruct worker_pool *pool”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjyubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjyubh)�”}”(hhh]”j)�”}”(hŒ worker_pool”h]”hŒ worker_pool”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j�Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jcsbŒ!c.restore_unbound_workers_cpumask”†”asbuh1hhjyubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjyubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjyubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjuubj‚)�”}”(hŒint cpu”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjëubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjëubj)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjuubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj<h²hh³jNh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj8h²hh³jNh´Mubah}”(h]”j3ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jNh´Mhj5h²hubjC)�”}”(hhh]”hì)�”}”(hŒ"restore cpumask of unbound workers”h]”hŒ"restore cpumask of unbound workers”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj2h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj5h²hh³jNh´Mubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejMjfjMjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX¥**Parameters** ``struct worker_pool *pool`` unbound pool of interest ``int cpu`` the CPU which is coming up **Description** An unbound pool may end up with a cpumask which doesn't have any online CPUs. When a worker of such pool get scheduled, the scheduler resets its cpus_allowed. If **cpu** is in **pool**'s cpumask which didn't have any online CPU before, cpus_allowed of all its workers should be restored.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjWh]”hŒ Parameters”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hjQubjg)�”}”(hhh]”(jl)�”}”(hŒ6``struct worker_pool *pool`` unbound pool of interest ”h]”(jr)�”}”(hŒ``struct worker_pool *pool``”h]”jú)�”}”(hjvh]”hŒstruct worker_pool *pool”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhjpubj‹)�”}”(hhh]”hì)�”}”(hŒunbound pool of interest”h]”hŒunbound pool of interest”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j‹h´MhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j‹h´Mhjmubjl)�”}”(hŒ'``int cpu`` the CPU which is coming up ”h]”(jr)�”}”(hŒ ``int cpu``”h]”jú)�”}”(hj¯h]”hŒint cpu”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mhj©ubj‹)�”}”(hhh]”hì)�”}”(hŒthe CPU which is coming up”h]”hŒthe CPU which is coming up”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÄh´MhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jÄh´Mhjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjQubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjêh]”hŒ Description”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hjQubhì)�”}”(hX!An unbound pool may end up with a cpumask which doesn't have any online CPUs. When a worker of such pool get scheduled, the scheduler resets its cpus_allowed. If **cpu** is in **pool**'s cpumask which didn't have any online CPU before, cpus_allowed of all its workers should be restored.”h]”(hŒ¦An unbound pool may end up with a cpumask which doesn’t have any online CPUs. When a worker of such pool get scheduled, the scheduler resets its cpus_allowed. If ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ**cpu**”h]”hŒcpu”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ is in ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒk’s cpumask which didn’t have any online CPU before, cpus_allowed of all its workers should be restored.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hjQubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒwork_on_cpu_key (C function)”Œc.work_on_cpu_key”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒYlong work_on_cpu_key (int cpu, long (*fn)(void *), void *arg, struct lock_class_key *key)”h]”jè)�”}”(hŒWlong work_on_cpu_key(int cpu, long (*fn)(void*), void *arg, struct lock_class_key *key)”h]”(j¤)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjOh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MŒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjOh²hh³jah´MŒubj)�”}”(hŒwork_on_cpu_key”h]”j)�”}”(hŒwork_on_cpu_key”h]”hŒwork_on_cpu_key”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjpubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjOh²hh³jah´MŒubj|)�”}”(hŒC(int cpu, long (*fn)(void*), void *arg, struct lock_class_key *key)”h]”(j‚)�”}”(hŒint cpu”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjŒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjŒubj)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjˆubj‚)�”}”(hŒlong (*fn)(void*)”h]”(j¤)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÁubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÁubjU)�”}”(hŒ(”h]”hŒ(”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÁubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÁubj)�”}”(hŒfn”h]”hŒfn”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÁubjU)�”}”(hŒ)”h]”hŒ)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÁubjU)�”}”(hjãh]”hŒ(”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÁubj¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÁubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÁubjU)�”}”(hj h]”hŒ)”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjÁubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjˆubj‚)�”}”(hŒ void *arg”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjTubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjTubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjTubj)�”}”(hŒarg”h]”hŒarg”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjˆubj‚)�”}”(hŒstruct lock_class_key *key”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj–ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj–ubh)�”}”(hhh]”j)�”}”(hŒlock_class_key”h]”hŒlock_class_key”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjµubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jºŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jvsbŒc.work_on_cpu_key”†”asbuh1hhj–ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj–ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj–ubj)�”}”(hŒkey”h]”hŒkey”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjˆubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjOh²hh³jah´MŒubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjKh²hh³jah´MŒubah}”(h]”jFah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jah´MŒhjHh²hubjC)�”}”(hhh]”hì)�”}”(hŒ4run a function in thread context on a particular cpu”h]”hŒ4run a function in thread context on a particular cpu”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MŒhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjHh²hh³jah´MŒubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej5jfj5jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXš**Parameters** ``int cpu`` the cpu to run on ``long (*fn)(void *)`` the function to run ``void *arg`` the function arg ``struct lock_class_key *key`` The lock class key for lock debugging purposes **Description** It is up to the caller to ensure that the cpu doesn't go offline. The caller must not hold any locks which would prevent **fn** from completing. **Return** The value **fn** returns.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj?h]”hŒ Parameters”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hj9ubjg)�”}”(hhh]”(jl)�”}”(hŒ``int cpu`` the cpu to run on ”h]”(jr)�”}”(hŒ ``int cpu``”h]”jú)�”}”(hj^h]”hŒint cpu”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hjXubj‹)�”}”(hhh]”hì)�”}”(hŒthe cpu to run on”h]”hŒthe cpu to run on”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jsh´M�hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jsh´M�hjUubjl)�”}”(hŒ+``long (*fn)(void *)`` the function to run ”h]”(jr)�”}”(hŒ``long (*fn)(void *)``”h]”jú)�”}”(hj—h]”hŒlong (*fn)(void *)”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MŽhj‘ubj‹)�”}”(hhh]”hì)�”}”(hŒthe function to run”h]”hŒthe function to run”…”�”}”(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&]”uh1jkh³j¬h´MŽhjUubjl)�”}”(hŒ``void *arg`` the function arg ”h]”(jr)�”}”(hŒ ``void *arg``”h]”jú)�”}”(hjÐh]”hŒ void *arg”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hjÊubj‹)�”}”(hhh]”hì)�”}”(hŒthe function arg”h]”hŒthe function arg”…”�”}”(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&]”uh1jkh³jåh´M�hjUubjl)�”}”(hŒN``struct lock_class_key *key`` The lock class key for lock debugging purposes ”h]”(jr)�”}”(hŒ``struct lock_class_key *key``”h]”jú)�”}”(hj h]”hŒstruct lock_class_key *key”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�hjubj‹)�”}”(hhh]”hì)�”}”(hŒ.The lock class key for lock debugging purposes”h]”hŒ.The lock class key for lock debugging purposes”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jh´M�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jh´M�hjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj9ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjDh]”hŒ Description”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M’hj9ubhì)�”}”(hŒ�It is up to the caller to ensure that the cpu doesn't go offline. The caller must not hold any locks which would prevent **fn** from completing.”h]”(hŒ{It is up to the caller to ensure that the cpu doesn’t go offline. The caller must not hold any locks which would prevent ”…”�”}”(hjZh²hh³Nh´Nubj)�”}”(hŒ**fn**”h]”hŒfn”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZubhŒ from completing.”…”�”}”(hjZh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M‘hj9ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj}h]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M”hj9ubhì)�”}”(hŒThe value **fn** returns.”h]”(hŒ The value ”…”�”}”(hj“h²hh³Nh´Nubj)�”}”(hŒ**fn**”h]”hŒfn”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“ubhŒ returns.”…”�”}”(hj“h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M•hj9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ$freeze_workqueues_begin (C function)”Œc.freeze_workqueues_begin”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ#void freeze_workqueues_begin (void)”h]”jè)�”}”(hŒ"void freeze_workqueues_begin(void)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÐh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¨ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÐh²hh³jâh´M¨ubj)�”}”(hŒfreeze_workqueues_begin”h]”j)�”}”(hŒfreeze_workqueues_begin”h]”hŒfreeze_workqueues_begin”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjñubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÐh²hh³jâh´M¨ubj|)�”}”(hŒ(void)”h]”j‚)�”}”(hŒvoid”h]”j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÐh²hh³jâh´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÌh²hh³jâh´M¨ubah}”(h]”jÇah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jâh´M¨hjÉh²hubjC)�”}”(hhh]”hì)�”}”(hŒbegin freezing workqueues”h]”hŒbegin freezing workqueues”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¨hj8 h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjÉh²hh³jâh´M¨ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejS jfjS jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX$**Parameters** ``void`` no arguments **Description** Start freezing workqueues. After this function returns, all freezable workqueues will queue new works to their inactive_works list instead of pool->worklist. **Context** Grabs and releases wq_pool_mutex, wq->mutex and pool->lock's.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj] h]”hŒ Parameters”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¬hjW ubjg)�”}”(hhh]”jl)�”}”(hŒ``void`` no arguments ”h]”(jr)�”}”(hŒ``void``”h]”jú)�”}”(hj| h]”hŒvoid”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjz ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khjv ubj‹)�”}”(hhh]”hì)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j‘ h´Khj’ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjv ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j‘ h´Khjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjW ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj· h]”hŒ Description”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´KhjW ubhì)�”}”(hŒžStart freezing workqueues. After this function returns, all freezable workqueues will queue new works to their inactive_works list instead of pool->worklist.”h]”hŒžStart freezing workqueues. After this function returns, all freezable workqueues will queue new works to their inactive_works list instead of pool->worklist.”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M©hjW ubhì)�”}”(hŒ **Context**”h]”j)�”}”(hjÞ h]”hŒContext”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M­hjW ubhì)�”}”(hŒ=Grabs and releases wq_pool_mutex, wq->mutex and pool->lock's.”h]”hŒ?Grabs and releases wq_pool_mutex, wq->mutex and pool->lock’s.”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M®hjW ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ#freeze_workqueues_busy (C function)”Œc.freeze_workqueues_busy”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ"bool freeze_workqueues_busy (void)”h]”jè)�”}”(hŒ!bool freeze_workqueues_busy(void)”h]”(j¤)�”}”(hjð*h]”hŒbool”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÄubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1 h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj h²hh³j0 h´MÄubj)�”}”(hŒfreeze_workqueues_busy”h]”j)�”}”(hŒfreeze_workqueues_busy”h]”hŒfreeze_workqueues_busy”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj? ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj h²hh³j0 h´MÄubj|)�”}”(hŒ(void)”h]”j‚)�”}”(hŒvoid”h]”j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj[ ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjW ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj h²hh³j0 h´MÄubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj h²hh³j0 h´MÄubah}”(h]”j ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j0 h´MÄhj h²hubjC)�”}”(hhh]”hì)�”}”(hŒ$are freezable workqueues still busy?”h]”hŒ$are freezable workqueues still busy?”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÄhj† h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj h²hh³j0 h´MÄubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej¡ jfj¡ jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXK**Parameters** ``void`` no arguments **Description** Check whether freezing is complete. This function must be called between freeze_workqueues_begin() and thaw_workqueues(). **Context** Grabs and releases wq_pool_mutex. **Return** ``true`` if some freezable workqueues are still busy. ``false`` if freezing is complete.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj« h]”hŒ Parameters”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj© ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÈhj¥ ubjg)�”}”(hhh]”jl)�”}”(hŒ``void`` no arguments ”h]”(jr)�”}”(hŒ``void``”h]”jú)�”}”(hjÊ h]”hŒvoid”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjÈ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´KhjÄ ubj‹)�”}”(hhh]”hì)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(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&]”uh1jkh³jß h´KhjÁ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj¥ ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khj¥ ubhì)�”}”(hŒzCheck whether freezing is complete. This function must be called between freeze_workqueues_begin() and thaw_workqueues().”h]”hŒzCheck whether freezing is complete. This function must be called between freeze_workqueues_begin() and thaw_workqueues().”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÅhj¥ ubhì)�”}”(hŒ **Context**”h]”j)�”}”(hj, h]”hŒContext”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj* ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÈhj¥ ubhì)�”}”(hŒ!Grabs and releases wq_pool_mutex.”h]”hŒ!Grabs and releases wq_pool_mutex.”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÉhj¥ ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjS h]”hŒReturn”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MËhj¥ ubhì)�”}”(hŒY``true`` if some freezable workqueues are still busy. ``false`` if freezing is complete.”h]”(jú)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhji ubhŒ/ if some freezable workqueues are still busy. ”…”�”}”(hji h²hh³Nh´Nubjú)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhji ubhŒ if freezing is complete.”…”�”}”(hji h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÌhj¥ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒthaw_workqueues (C function)”Œc.thaw_workqueues”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒvoid thaw_workqueues (void)”h]”jè)�”}”(hŒvoid thaw_workqueues(void)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj´ h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mòubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj´ h²hh³jÆ h´Mòubj)�”}”(hŒthaw_workqueues”h]”j)�”}”(hŒthaw_workqueues”h]”hŒthaw_workqueues”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÕ ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj´ h²hh³jÆ h´Mòubj|)�”}”(hŒ(void)”h]”j‚)�”}”(hŒvoid”h]”j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjñ ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjí ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj´ h²hh³jÆ h´Mòubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hj° h²hh³jÆ h´Mòubah}”(h]”j« ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jÆ h´Mòhj­ h²hubjC)�”}”(hhh]”hì)�”}”(hŒthaw workqueues”h]”hŒthaw workqueues”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mòhj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj­ h²hh³jÆ h´Mòubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej7 jfj7 jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX**Parameters** ``void`` no arguments **Description** Thaw workqueues. Normal queueing is restored and all collected frozen works are transferred to their respective pool worklists. **Context** Grabs and releases wq_pool_mutex, wq->mutex and pool->lock's.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjA h]”hŒ Parameters”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj? ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Möhj; ubjg)�”}”(hhh]”jl)�”}”(hŒ``void`` no arguments ”h]”(jr)�”}”(hŒ``void``”h]”jú)�”}”(hj` h]”hŒvoid”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj^ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´KhjZ ubj‹)�”}”(hhh]”hì)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ju h´Khjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjZ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³ju h´KhjW ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj; ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj› h]”hŒ Description”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khj; ubhì)�”}”(hŒ€Thaw workqueues. Normal queueing is restored and all collected frozen works are transferred to their respective pool worklists.”h]”hŒ€Thaw workqueues. Normal queueing is restored and all collected frozen works are transferred to their respective pool worklists.”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Móhj; ubhì)�”}”(hŒ **Context**”h]”j)�”}”(hj h]”hŒContext”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Möhj; ubhì)�”}”(hŒ=Grabs and releases wq_pool_mutex, wq->mutex and pool->lock's.”h]”hŒ?Grabs and releases wq_pool_mutex, wq->mutex and pool->lock’s.”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M÷hj; ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ2workqueue_unbound_housekeeping_update (C function)”Œ'c.workqueue_unbound_housekeeping_update”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒDint workqueue_unbound_housekeeping_update (const struct cpumask *hk)”h]”jè)�”}”(hŒCint workqueue_unbound_housekeeping_update(const struct cpumask *hk)”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj h²hh³j h´MHubj)�”}”(hŒ%workqueue_unbound_housekeeping_update”h]”j)�”}”(hŒ%workqueue_unbound_housekeeping_update”h]”hŒ%workqueue_unbound_housekeeping_update”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj$ ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhj h²hh³j h´MHubj|)�”}”(hŒ(const struct cpumask *hk)”h]”j‚)�”}”(hŒconst struct cpumask *hk”h]”(jî)�”}”(hj‰h]”hŒconst”…”�”}”(hjD h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj@ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj@ ubjî)�”}”(hjñh]”hŒstruct”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj@ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj@ ubh)�”}”(hhh]”j)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjz ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j* sbŒ'c.workqueue_unbound_housekeeping_update”†”asbuh1hhj@ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj@ ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj@ ubj)�”}”(hŒhk”h]”hŒhk”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj@ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj< ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj h²hh³j h´MHubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÿ h²hh³j h´MHubah}”(h]”jú ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j h´MHhjü h²hubjC)�”}”(hhh]”hì)�”}”(hŒ%Propagate housekeeping cpumask update”h]”hŒ%Propagate housekeeping cpumask update”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MHhjß h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjü h²hh³j h´MHubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejú jfjú jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXr**Parameters** ``const struct cpumask *hk`` the new housekeeping cpumask **Description** Update the unbound workqueue cpumask on top of the new housekeeping cpumask such that the effective unbound affinity is the intersection of the new housekeeping with the requested affinity set via nohz_full=/isolcpus= or sysfs. **Return** 0 on success and -errno on failure.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MLhjþ ubjg)�”}”(hhh]”jl)�”}”(hŒ:``const struct cpumask *hk`` the new housekeeping cpumask ”h]”(jr)�”}”(hŒ``const struct cpumask *hk``”h]”jú)�”}”(hj#h]”hŒconst struct cpumask *hk”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MIhjubj‹)�”}”(hhh]”hì)�”}”(hŒthe new housekeeping cpumask”h]”hŒthe new housekeeping cpumask”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j8h´MIhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j8h´MIhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjþ ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj^h]”hŒ Description”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MKhjþ ubhì)�”}”(hŒãUpdate the unbound workqueue cpumask on top of the new housekeeping cpumask such that the effective unbound affinity is the intersection of the new housekeeping with the requested affinity set via nohz_full=/isolcpus= or sysfs.”h]”hŒãUpdate the unbound workqueue cpumask on top of the new housekeeping cpumask such that the effective unbound affinity is the intersection of the new housekeeping with the requested affinity set via nohz_full=/isolcpus= or sysfs.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MJhjþ ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj…h]”hŒReturn”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MNhjþ ubhì)�”}”(hŒ#0 on success and -errno on failure.”h]”hŒ#0 on success and -errno on failure.”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MOhjþ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ*workqueue_set_unbound_cpumask (C function)”Œc.workqueue_set_unbound_cpumask”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ9int workqueue_set_unbound_cpumask (cpumask_var_t cpumask)”h]”jè)�”}”(hŒ8int workqueue_set_unbound_cpumask(cpumask_var_t cpumask)”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjÆh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¢ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjÆh²hh³jØh´M¢ubj)�”}”(hŒworkqueue_set_unbound_cpumask”h]”j)�”}”(hŒworkqueue_set_unbound_cpumask”h]”hŒworkqueue_set_unbound_cpumask”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjçubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjÆh²hh³jØh´M¢ubj|)�”}”(hŒ(cpumask_var_t cpumask)”h]”j‚)�”}”(hŒcpumask_var_t cpumask”h]”(h)�”}”(hhh]”j)�”}”(hŒ cpumask_var_t”h]”hŒ cpumask_var_t”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”j Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jísbŒc.workqueue_set_unbound_cpumask”†”asbuh1hhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjubj)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjÿubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjÆh²hh³jØh´M¢ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjÂh²hh³jØh´M¢ubah}”(h]”j½ah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jØh´M¢hj¿h²hubjC)�”}”(hhh]”hì)�”}”(hŒ!Set the low-level unbound cpumask”h]”hŒ!Set the low-level unbound cpumask”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¢hj_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj¿h²hh³jØh´M¢ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejzjfjzjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hXš**Parameters** ``cpumask_var_t cpumask`` the cpumask to set **Description** The low-level workqueues cpumask is a global cpumask that limits the affinity of all unbound workqueues. This function check the **cpumask** and apply it to all unbound workqueues and updates all pwqs of them. **Return** 0 - Success -EINVAL - Invalid **cpumask** -ENOMEM - Failed to allocate memory for attrs or pwqs.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj„h]”hŒ Parameters”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¦hj~ubjg)�”}”(hhh]”jl)�”}”(hŒ-``cpumask_var_t cpumask`` the cpumask to set ”h]”(jr)�”}”(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&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M£hj�ubj‹)�”}”(hhh]”hì)�”}”(hŒthe cpumask to set”h]”hŒthe cpumask to set”…”�”}”(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&]”uh1jkh³j¸h´M£hjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhj~ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjÞh]”hŒ Description”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¥hj~ubj¶)�”}”(hŒÓThe low-level workqueues cpumask is a global cpumask that limits the affinity of all unbound workqueues. This function check the **cpumask** and apply it to all unbound workqueues and updates all pwqs of them. ”h]”hì)�”}”(hŒÒThe low-level workqueues cpumask is a global cpumask that limits the affinity of all unbound workqueues. This function check the **cpumask** and apply it to all unbound workqueues and updates all pwqs of them.”h]”(hŒ‚The low-level workqueues cpumask is a global cpumask that limits the affinity of all unbound workqueues. This function check the ”…”�”}”(hjøh²hh³Nh´Nubj)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjøubhŒE and apply it to all unbound workqueues and updates all pwqs of them.”…”�”}”(hjøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¤hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jh´M¤hj~ubhì)�”}”(hŒ **Return**”h]”j)�”}”(hj!h]”hŒReturn”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M¨hj~ubhì)�”}”(hŒf0 - Success -EINVAL - Invalid **cpumask** -ENOMEM - Failed to allocate memory for attrs or pwqs.”h]”(hŒ$0 - Success -EINVAL - Invalid ”…”�”}”(hj7h²hh³Nh´Nubj)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubhŒ7 -ENOMEM - Failed to allocate memory for attrs or pwqs.”…”�”}”(hj7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M©hj~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ%workqueue_sysfs_register (C function)”Œc.workqueue_sysfs_register”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ:int workqueue_sysfs_register (struct workqueue_struct *wq)”h]”jè)�”}”(hŒ9int workqueue_sysfs_register(struct workqueue_struct *wq)”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjth²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjth²hh³j†h´M ubj)�”}”(hŒworkqueue_sysfs_register”h]”j)�”}”(hŒworkqueue_sysfs_register”h]”hŒworkqueue_sysfs_register”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj•ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjth²hh³j†h´M ubj|)�”}”(hŒ(struct workqueue_struct *wq)”h]”j‚)�”}”(hŒstruct workqueue_struct *wq”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj±ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj±ubh)�”}”(hhh]”j)�”}”(hŒworkqueue_struct”h]”hŒworkqueue_struct”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjÐubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jÕŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j›sbŒc.workqueue_sysfs_register”†”asbuh1hhj±ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj±ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj±ubj)�”}”(hŒwq”h]”hŒwq”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj­ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjth²hh³j†h´M ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjph²hh³j†h´M ubah}”(h]”jkah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j†h´M hjmh²hubjC)�”}”(hhh]”hì)�”}”(hŒ!make a workqueue visible in sysfs”h]”hŒ!make a workqueue visible in sysfs”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hj5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjmh²hh³j†h´M ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejPjfjPjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX**Parameters** ``struct workqueue_struct *wq`` the workqueue to register **Description** Expose **wq** in sysfs under /sys/bus/workqueue/devices. alloc_workqueue*() automatically calls this function if WQ_SYSFS is set which is the preferred method. Workqueue user should use this function directly iff it wants to apply workqueue_attrs before making the workqueue visible in sysfs; otherwise, apply_workqueue_attrs() may race against userland updating the attributes. **Return** 0 on success, -errno on failure.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjZh]”hŒ Parameters”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjTubjg)�”}”(hhh]”jl)�”}”(hŒ:``struct workqueue_struct *wq`` the workqueue to register ”h]”(jr)�”}”(hŒ``struct workqueue_struct *wq``”h]”jú)�”}”(hjyh]”hŒstruct workqueue_struct *wq”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hjsubj‹)�”}”(hhh]”hì)�”}”(hŒthe workqueue to register”h]”hŒthe workqueue to register”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jŽh´M hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jŽh´M hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjTubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj´h]”hŒ Description”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjTubhì)�”}”(hŒŸExpose **wq** in sysfs under /sys/bus/workqueue/devices. alloc_workqueue*() automatically calls this function if WQ_SYSFS is set which is the preferred method.”h]”(hŒExpose ”…”�”}”(hjÊh²hh³Nh´Nubj)�”}”(hŒ**wq**”h]”hŒwq”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊubhŒ’ in sysfs under /sys/bus/workqueue/devices. alloc_workqueue*() automatically calls this function if WQ_SYSFS is set which is the preferred method.”…”�”}”(hjÊh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M hjTubhì)�”}”(hŒÚWorkqueue user should use this function directly iff it wants to apply workqueue_attrs before making the workqueue visible in sysfs; otherwise, apply_workqueue_attrs() may race against userland updating the attributes.”h]”hŒÚWorkqueue user should use this function directly iff it wants to apply workqueue_attrs before making the workqueue visible in sysfs; otherwise, apply_workqueue_attrs() may race against userland updating the attributes.”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjTubhì)�”}”(hŒ **Return**”h]”j)�”}”(hjüh]”hŒReturn”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjTubhì)�”}”(hŒ 0 on success, -errno on failure.”h]”hŒ 0 on success, -errno on failure.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MhjTubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ'workqueue_sysfs_unregister (C function)”Œc.workqueue_sysfs_unregister”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ=void workqueue_sysfs_unregister (struct workqueue_struct *wq)”h]”jè)�”}”(hŒ(const struct cpumask *pod_cpus, struct wq_pod_type *smt_pods)”h]”(j‚)�”}”(hŒconst struct cpumask *pod_cpus”h]”(jî)�”}”(hj‰h]”hŒconst”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj]ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj]ubjî)�”}”(hjñh]”hŒstruct”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj]ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj]ubh)�”}”(hhh]”j)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jœŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jGsbŒc.llc_count_cores”†”asbuh1hhj]ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj]ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj]ubj)�”}”(hŒpod_cpus”h]”hŒpod_cpus”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjYubj‚)�”}”(hŒstruct wq_pod_type *smt_pods”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjêubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjêubh)�”}”(hhh]”j)�”}”(hŒ wq_pod_type”h]”hŒ wq_pod_type”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jŒmodname”NŒ classname”Nj7j:)�”}”j=]”j¶Œc.llc_count_cores”†”asbuh1hhjêubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjêubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjêubj)�”}”(hŒsmt_pods”h]”hŒsmt_pods”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hjYubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hj h²hh³j2h´MÛ ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjh²hh³j2h´MÛ ubah}”(h]”jah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j2h´MÛ hjh²hubjC)�”}”(hhh]”hì)�”}”(hŒ3count distinct cores (SMT groups) within an LLC pod”h]”hŒ3count distinct cores (SMT groups) within an LLC pod”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÛ hjlh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjh²hh³j2h´MÛ ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jej‡jfj‡jg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX>**Parameters** ``const struct cpumask *pod_cpus`` the cpumask of CPUs in the LLC pod ``struct wq_pod_type *smt_pods`` the SMT pod type, used to identify sibling groups **Description** A core is represented by the lowest-numbered CPU in its SMT group. Returns the number of distinct cores found in **pod_cpus**.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hj‘h]”hŒ Parameters”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mß hj‹ubjg)�”}”(hhh]”(jl)�”}”(hŒF``const struct cpumask *pod_cpus`` the cpumask of CPUs in the LLC pod ”h]”(jr)�”}”(hŒ"``const struct cpumask *pod_cpus``”h]”jú)�”}”(hj°h]”hŒconst struct cpumask *pod_cpus”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÜ hjªubj‹)�”}”(hhh]”hì)�”}”(hŒ"the cpumask of CPUs in the LLC pod”h]”hŒ"the cpumask of CPUs in the LLC pod”…”�”}”(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&]”uh1jkh³jÅh´MÜ hj§ubjl)�”}”(hŒS``struct wq_pod_type *smt_pods`` the SMT pod type, used to identify sibling groups ”h]”(jr)�”}”(hŒ ``struct wq_pod_type *smt_pods``”h]”jú)�”}”(hjéh]”hŒstruct wq_pod_type *smt_pods”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÝ hjãubj‹)�”}”(hhh]”hì)�”}”(hŒ1the SMT pod type, used to identify sibling groups”h]”hŒ1the SMT pod type, used to identify sibling groups”…”�”}”(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&]”uh1jkh³jþh´MÝ hj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhj‹ubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj$h]”hŒ Description”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mß hj‹ubhì)�”}”(hŒ~A core is represented by the lowest-numbered CPU in its SMT group. Returns the number of distinct cores found in **pod_cpus**.”h]”(hŒqA core is represented by the lowest-numbered CPU in its SMT group. Returns the number of distinct cores found in ”…”�”}”(hj:h²hh³Nh´Nubj)�”}”(hŒ **pod_cpus**”h]”hŒpod_cpus”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:ubhŒ.”…”�”}”(hj:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MÞ hj‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ&llc_populate_cpu_shard_id (C function)”Œc.llc_populate_cpu_shard_id”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒkvoid llc_populate_cpu_shard_id (const struct cpumask *pod_cpus, struct wq_pod_type *smt_pods, int nr_cores)”h]”jè)�”}”(hŒjvoid llc_populate_cpu_shard_id(const struct cpumask *pod_cpus, struct wq_pod_type *smt_pods, int nr_cores)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjwh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M*!ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjwh²hh³j‰h´M*!ubj)�”}”(hŒllc_populate_cpu_shard_id”h]”j)�”}”(hŒllc_populate_cpu_shard_id”h]”hŒllc_populate_cpu_shard_id”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj˜ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjwh²hh³j‰h´M*!ubj|)�”}”(hŒL(const struct cpumask *pod_cpus, struct wq_pod_type *smt_pods, int nr_cores)”h]”(j‚)�”}”(hŒconst struct cpumask *pod_cpus”h]”(jî)�”}”(hj‰h]”hŒconst”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj´ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj´ubjî)�”}”(hjñh]”hŒstruct”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhj´ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj´ubh)�”}”(hhh]”j)�”}”(hŒcpumask”h]”hŒcpumask”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjîubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jóŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jžsbŒc.llc_populate_cpu_shard_id”†”asbuh1hhj´ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj´ubjU)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThj´ubj)�”}”(hŒpod_cpus”h]”hŒpod_cpus”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj°ubj‚)�”}”(hŒstruct wq_pod_type *smt_pods”h]”(jî)�”}”(hjñh]”hŒstruct”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”júah"]”h$]”h&]”uh1jíhjAubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjAubh)�”}”(hhh]”j)�”}”(hŒ wq_pod_type”h]”hŒ wq_pod_type”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j_Œreftype”j3Œ reftarget”jeŒmodname”NŒ classname”Nj7j:)�”}”j=]”j Œc.llc_populate_cpu_shard_id”†”asbuh1hhjAubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjAubjU)�”}”(hjuh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jThjAubj)�”}”(hŒsmt_pods”h]”hŒsmt_pods”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj°ubj‚)�”}”(hŒ int nr_cores”h]”(j¤)�”}”(hŒint”h]”hŒint”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj±ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhj±ubj)�”}”(hŒnr_cores”h]”hŒnr_cores”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj°ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjwh²hh³j‰h´M*!ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjsh²hh³j‰h´M*!ubah}”(h]”jnah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j‰h´M*!hjph²hubjC)�”}”(hhh]”hì)�”}”(hŒ2populate cpu_shard_id[] for each CPU in an LLC pod”h]”hŒ2populate cpu_shard_id[] for each CPU in an LLC pod”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M*!hjøh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjph²hh³j‰h´M*!ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejjfjjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hX®**Parameters** ``const struct cpumask *pod_cpus`` the cpumask of CPUs in the LLC pod ``struct wq_pod_type *smt_pods`` the SMT pod type, used to identify sibling groups ``int nr_cores`` number of distinct cores in **pod_cpus** (from llc_count_cores()) **Description** Walks **pod_cpus** in order. At each SMT group leader, advances to the next shard once the current shard is full. Results are written to cpu_shard_id[].”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M.!hjubjg)�”}”(hhh]”(jl)�”}”(hŒF``const struct cpumask *pod_cpus`` the cpumask of CPUs in the LLC pod ”h]”(jr)�”}”(hŒ"``const struct cpumask *pod_cpus``”h]”jú)�”}”(hj<h]”hŒconst struct cpumask *pod_cpus”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M+!hj6ubj‹)�”}”(hhh]”hì)�”}”(hŒ"the cpumask of CPUs in the LLC pod”h]”hŒ"the cpumask of CPUs in the LLC pod”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jQh´M+!hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jQh´M+!hj3ubjl)�”}”(hŒS``struct wq_pod_type *smt_pods`` the SMT pod type, used to identify sibling groups ”h]”(jr)�”}”(hŒ ``struct wq_pod_type *smt_pods``”h]”jú)�”}”(hjuh]”hŒstruct wq_pod_type *smt_pods”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M,!hjoubj‹)�”}”(hhh]”hì)�”}”(hŒ1the SMT pod type, used to identify sibling groups”h]”hŒ1the SMT pod type, used to identify sibling groups”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jŠh´M,!hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jŠh´M,!hj3ubjl)�”}”(hŒS``int nr_cores`` number of distinct cores in **pod_cpus** (from llc_count_cores()) ”h]”(jr)�”}”(hŒ``int nr_cores``”h]”jú)�”}”(hj®h]”hŒ int nr_cores”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M-!hj¨ubj‹)�”}”(hhh]”hì)�”}”(hŒAnumber of distinct cores in **pod_cpus** (from llc_count_cores())”h]”(hŒnumber of distinct cores in ”…”�”}”(hjÇh²hh³Nh´Nubj)�”}”(hŒ **pod_cpus**”h]”hŒpod_cpus”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇubhŒ (from llc_count_cores())”…”�”}”(hjÇh²hh³Nh´Nubeh}”(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&]”uh1jkh³jÃh´M-!hj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfhjubhì)�”}”(hŒ**Description**”h]”j)�”}”(hjûh]”hŒ Description”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M/!hjubhì)�”}”(hŒ˜Walks **pod_cpus** in order. At each SMT group leader, advances to the next shard once the current shard is full. Results are written to cpu_shard_id[].”h]”(hŒWalks ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ **pod_cpus**”h]”hŒpod_cpus”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ† in order. At each SMT group leader, advances to the next shard once the current shard is full. Results are written to cpu_shard_id[].”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M.!hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ'precompute_cache_shard_ids (C function)”Œc.precompute_cache_shard_ids”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ&void precompute_cache_shard_ids (void)”h]”jè)�”}”(hŒ%void precompute_cache_shard_ids(void)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjNh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Ma!ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjNh²hh³j`h´Ma!ubj)�”}”(hŒprecompute_cache_shard_ids”h]”j)�”}”(hŒprecompute_cache_shard_ids”h]”hŒprecompute_cache_shard_ids”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhjoubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjNh²hh³j`h´Ma!ubj|)�”}”(hŒ(void)”h]”j‚)�”}”(hŒvoid”h]”j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj‹ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj‡ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjNh²hh³j`h´Ma!ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjJh²hh³j`h´Ma!ubah}”(h]”jEah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³j`h´Ma!hjGh²hubjC)�”}”(hhh]”hì)�”}”(hŒ.assign each CPU its shard index within its LLC”h]”hŒ.assign each CPU its shard index within its LLC”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Ma!hj¶h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjGh²hh³j`h´Ma!ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejÑjfjÑjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒö**Parameters** ``void`` no arguments **Description** Iterates over all LLC pods. For each pod, counts distinct cores then assigns shard indices to all CPUs in the pod. Must be called after WQ_AFFN_CACHE and WQ_AFFN_SMT have been initialized.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÛh]”hŒ Parameters”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Me!hjÕubjg)�”}”(hhh]”jl)�”}”(hŒ``void`` no arguments ”h]”(jr)�”}”(hŒ``void``”h]”jú)�”}”(hjúh]”hŒvoid”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khjôubj‹)�”}”(hhh]”hì)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³jh´Khjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjÕubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj5h]”hŒ Description”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´KhjÕubhì)�”}”(hŒ¼Iterates over all LLC pods. For each pod, counts distinct cores then assigns shard indices to all CPUs in the pod. Must be called after WQ_AFFN_CACHE and WQ_AFFN_SMT have been initialized.”h]”hŒ¼Iterates over all LLC pods. For each pod, counts distinct cores then assigns shard indices to all CPUs in the pod. Must be called after WQ_AFFN_CACHE and WQ_AFFN_SMT have been initialized.”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Mb!hjÕubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´NubjÌ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jØŒ$workqueue_init_topology (C function)”Œc.workqueue_init_topology”hNt”auh1jËhjºh²hh³Nh´NubjÝ)�”}”(hhh]”(jâ)�”}”(hŒ#void workqueue_init_topology (void)”h]”jè)�”}”(hŒ"void workqueue_init_topology(void)”h]”(j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hjvh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MŒ!ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jÿhjvh²hh³jˆh´MŒ!ubj)�”}”(hŒworkqueue_init_topology”h]”j)�”}”(hŒworkqueue_init_topology”h]”hŒworkqueue_init_topology”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj—ubah}”(h]”h ]”(j)j*eh"]”h$]”h&]”jíjîuh1jhjvh²hh³jˆh´MŒ!ubj|)�”}”(hŒ(void)”h]”j‚)�”}”(hŒvoid”h]”j¤)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j°ah"]”h$]”h&]”uh1j£hj³ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjíjîuh1j�hj¯ubah}”(h]”h ]”h"]”h$]”h&]”jíjîuh1j{hjvh²hh³jˆh´MŒ!ubeh}”(h]”h ]”h"]”h$]”h&]”jíjîj4ˆuh1jçj5j6hjrh²hh³jˆh´MŒ!ubah}”(h]”jmah ]”(j:j;eh"]”h$]”h&]”j?ˆj@)jAhuh1jáh³jˆh´MŒ!hjoh²hubjC)�”}”(hhh]”hì)�”}”(hŒ*initialize CPU pods for unbound workqueues”h]”hŒ*initialize CPU pods for unbound workqueues”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´MŒ!hjÞh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjoh²hh³jˆh´MŒ!ubeh}”(h]”h ]”(j_Œfunction”eh"]”h$]”h&]”jdj_jejùjfjùjg‰jh‰ji‰uh1jÜh²hhjºh³Nh´Nubjk)�”}”(hŒú**Parameters** ``void`` no arguments **Description** This is the third step of three-staged workqueue subsystem initialization and invoked after SMP and topology information are fully initialized. It initializes the unbound CPU pods accordingly.”h]”(hì)�”}”(hŒ**Parameters**”h]”j)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�!hjýubjg)�”}”(hhh]”jl)�”}”(hŒ``void`` no arguments ”h]”(jr)�”}”(hŒ``void``”h]”jú)�”}”(hj"h]”hŒvoid”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jùhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khjubj‹)�”}”(hhh]”hì)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j7h´Khj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkh³j7h´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jfhjýubhì)�”}”(hŒ**Description**”h]”j)�”}”(hj]h]”hŒ Description”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´Khjýubhì)�”}”(hŒÀThis is the third step of three-staged workqueue subsystem initialization and invoked after SMP and topology information are fully initialized. It initializes the unbound CPU pods accordingly.”h]”hŒÀThis is the third step of three-staged workqueue subsystem initialization and invoked after SMP and topology information are fully initialized. It initializes the unbound CPU pods accordingly.”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/workqueue:795: ./kernel/workqueue.c”h´M�!hjýubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jjhjºh²hh³Nh´Nubeh}”(h]”Œ&kernel-inline-documentations-reference”ah ]”h"]”Œ&kernel inline documentations reference”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mubeh}”(h]”Œ workqueue”ah ]”h"]”Œ workqueue”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”jž Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j»Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j–j“jÓjÐj{jxj~j{j“j�jÛjØj‹jˆj~j{jn jk j‡ j„ j§j¤jjjðjíjËjÈjŸjœjêjçj-j*jjj·j´jŽj‹uŒ nametypes”}”(j–‰jÓ‰j{‰j~‰j“‰jÛ‰j‹‰j~‰jn ‰j‡ ‰j§‰j‰jð‰jˉjŸ‰jê‰j-‰j‰j·‰jމuh}”(j“h·jÐj“jxjÖj{j~j�j�jØjLjˆjÞj{j–jk j�j„ jq j¤jŠ jjé jíj jÈjójœjÎjçjªj*jíjj0j´jj‹jºjÚjãj)j.j jjñjöj=jBj.#j3#j'j'j )j)já*jæ*jÛ-jà-jŽ0j“0jA3jF3j/5j45j7j7j§9j¬9j<j$<j)>j.>j{?j€?jÍ@jÒ@jBj$Bj®Cj³CjxEj}EjŽGj“Gj½IjÂIjìKjñKjŠMj�Mj(Oj-OjwRj|RjØUjÝUjwYj|Yjà[jå[jn]js]jï^jô^jp`ju`jñajöajdjdjôfjùfjij ij¬jj±jj?ljDljömjûmjpjpjKrjPrjêsjïsjJvjOvjïwjôwjZzj_zj§~j¬~j×�jÜ�jµ…jº…j¥ˆjªˆjé‰jî‰j÷ŒjüŒj¹�j¾�j®”j³”j?—jD—j±™j¶™j2›j7›jN�jS�jßjÈŸjD¡jI¡jÔ¢jÙ¢jͤjÒ¤jܦjá¦j?©jD©jçªjìªj^¬jc¬j®j®j±j±j–µj›µjw¹j|¹jøºjýºj�¼j¢¼jˆ¾j�¾jaÀjfÀjÂjÂjUÄjZÄjvÆj{ÆjOÈjTÈj\ÊjaÊjfÌjkÌj=ÎjBÎj½ÏjÂÏj=ÑjBÑj½ÒjÂÒjOÔjTÔjyÖj~Öjú×jÿ×j˜Ùj�ÙjˆÛj�Ûj*Ýj/Ýjmßjrßjâj!âjÍäjÒäj4çj9çjýèjéjœêj¡êjÖìjÛìjæîjëîjÌðjÑðjpòjuòjJôjOôjÓöjØöj©øj®øjfújkújžüj£üjùýjþýjTÿjYÿj|j�j¤j©j3j8jFjKjÇjÌj j j« j° jú jÿ j½jÂjkjpj4j9jÇjÌjïjôjjjnjsjEjJjmjruŒ 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.