第四十期-ARM Linux内核的中断(10)

作者:罗宇哲,中国科学院软件研究所智能软件研究中心

上一期中我们介绍了ARM Linux内核中添加工作项的关键函数,这一期我们继续介绍其他与工作队列相关的关键函数。

一、ARM Linux内核与工作队列相关的关键函数

从第38期我们可以知道,一个worker_pool数据结构中维护了两个工作者列表:一个空闲的工作者列表和一个工作者的busy hash table。事实上每个工作者都对应了一个内核线程[1],而工作者线程调用函数worker_thread(),该函数的源码在openeuler/kernel/blob/kernel-4.19/kernel/workqueue.c文件中可以找到(以下代码没有特别说明的都可以在workqueue.c文件中找到):

static int worker_thread(void *__worker)

{
   

/* tell the scheduler that this is a workqueue worker */

set_pf_worker(true);

woke_up:

spin_lock_irq(&pool->lock);

/* am I supposed to die? */

if (unlikely(worker->flags & WORKER_DIE)) {
   

spin_unlock_irq(&pool->lock);

WARN_ON_ONCE(!list_empty(&worker->entry));

set_pf_worker(false);

set_task_comm(worker->task, "kworker/dying");

ida_simple_remove(&pool->worker_ida, worker->id);

worker_detach_from_pool(worker);

kfree(worker);

return 0;

}

worker_leave_idle(worker);//工作者离开idle状态

recheck:

/* no more worker necessary? */

if (!need_more_worker(pool))

goto sleep;

/* do we need to manage? */

if (unlikely(!may_start_working(pool)) && manage_workers(worker))

goto recheck;

/*

* ->scheduled list can only be filled while a worker is

* preparing to process a work or actually processing it.

* Make sure nobody diddled with it while I was sleeping.

*/

WARN_ON_ONCE(!list_empty(&worker->scheduled));

/*

* Finish PREP stage. We're guaranteed to have at least one idle

* worker or that someone else has already assumed the manager

* role. This is where \@worker starts participating in concurrency

* management if applicable and concurrency management is restored

* after being rebound. See rebind_workers() for details.

*/

worker_clr_flags(worker, WORKER_PREP | WORKER_REBOUND);

do {
   </
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值