worker
INIT_WORK(&ct->worker, ct_incoming_request_worker_func);
struct intel_guc_ct *ct = container_of(w, struct intel_guc_ct, worker);
queue_work(system_unbound_wq, &ct->worker);
queue_work(system_unbound_wq, &ct->worker);
struct work_struct worker;
struct work_struct worker;
struct workqueue_worker *worker;
struct workqueue_worker *worker = arg;
lockmgr(&worker->worker_lock, LK_EXCLUSIVE);
process_all_work(worker);
lksleep(worker, &worker->worker_lock, 0, "wqidle", 0);
lockmgr(&worker->worker_lock, LK_RELEASE);
struct workqueue_worker *worker;
worker = &(*wq->workers)[mycpuid];
worker = &(*wq->workers)[0];
lockmgr(&worker->worker_lock, LK_EXCLUSIVE);
STAILQ_INSERT_TAIL(&worker->ws_list_head, work,
work->worker = worker;
wakeup_one(worker);
lockmgr(&worker->worker_lock, LK_RELEASE);
struct workqueue_worker *worker = &(*wq->workers)[i];
lockinit(&worker->worker_lock, "lwq", 0, 0);
STAILQ_INIT(&worker->ws_list_head);
error = lwkt_create(wq_worker_thread, worker,
&worker->worker_thread, NULL, TDF_NOSTART, i, "%s/%d", name, i);
error = lwkt_create(wq_worker_thread, worker,
&worker->worker_thread, NULL, TDF_NOSTART, -1, name);
lwkt_setpri_initial(worker->worker_thread, priority);
lwkt_schedule(worker->worker_thread);
struct workqueue_worker *worker;
worker = &(*wq->workers)[i];
lockmgr(&worker->worker_lock, LK_EXCLUSIVE);
while (!STAILQ_EMPTY(&worker->ws_list_head)) {
lockmgr(&worker->worker_lock, LK_RELEASE);
struct workqueue_worker *worker;
worker = work->worker;
if (worker == NULL)
lockmgr(&worker->worker_lock, LK_EXCLUSIVE);
if (worker != work->worker || work->on_queue == false) {
lockmgr(&worker->worker_lock, LK_RELEASE);
STAILQ_REMOVE(&worker->ws_list_head, work,
lockmgr(&worker->worker_lock, LK_RELEASE);
worker = work->worker;
if (worker == NULL)
lockmgr(&worker->worker_lock, LK_EXCLUSIVE);
if (worker != work->worker || work->running == false) {
lockmgr(&worker->worker_lock, LK_RELEASE);
lockmgr(&worker->worker_lock, LK_RELEASE);
lksleep(work, &worker->worker_lock, 0, "wqcan", 1);
lockmgr(&worker->worker_lock, LK_RELEASE);
process_all_work(struct workqueue_worker *worker)
while (STAILQ_FIRST(&worker->ws_list_head)) {
work = STAILQ_FIRST(&worker->ws_list_head);
STAILQ_REMOVE_HEAD(&worker->ws_list_head, ws_entries);
lockmgr(&worker->worker_lock, LK_RELEASE);
lockmgr(&worker->worker_lock, LK_EXCLUSIVE);
work->worker = NULL;
if (vbus_ext->worker.ta_context)
TASK_ENQUEUE(&vbus_ext->worker);
TASK_INIT(&vbus_ext->worker, 0, (task_fn_t *)hpt_do_tasks, vbus_ext);
TASK_ENQUEUE(&vbus_ext->worker);
vbus_ext->worker.ta_context = NULL;
struct task worker;
if (vbus_ext->worker.ta_context)
TASK_ENQUEUE(&vbus_ext->worker);
TASK_INIT(&vbus_ext->worker, 0, (task_fn_t *)hpt_do_tasks, vbus_ext);
TASK_ENQUEUE(&vbus_ext->worker);
vbus_ext->worker.ta_context = NULL;
struct task worker;