Hi, Can anyone explain the below message: kernel:BUG: workqueue lockup - pool cpus=4 node=0 flags=0x0 nice=0 stuck for 55s! Red Hat Enterprise 9.2 BR Davoud
worker_pool是per-cpu变量,每个CPU都有worker_pool,而且有两个worker_pool。 一个用于普通优先级工作线程,另一个用于高优先级工作线程。 struct worker_pool { spinlock_t lock; /* the pool lock */---用于保护worker_pool的自旋锁 int cpu; /* I: the associated cpu */---对于unbound类型为-1;对于bo...
struct worker_pool { spinlock_t lock; /* the pool lock */---用于保护worker_pool的自旋锁 int cpu; /* I: the associated cpu */---对于unbound类型为-1;对于bound类型workqueue表示绑定的CPU ID。 int node; /* I: the associated node ID */ int id; /* I: pool ID */---该worker_pool...
spinlock_tlock;/*the pool lock*/---用于保护worker_pool的自旋锁intcpu;/*I: the associated cpu*/---对于unbound类型为-1;对于bound类型workqueue表示绑定的CPU ID。intnode;/*I: the associated node ID*/intid;/*I: pool ID*/---该worker_pool的ID号unsignedintflags;/*X: flags*/structlist_hea...
这两种worker-pool都会定义两个线程池,一个给普通优先级的work使用,另一个给高优先级的work使用。 1. 初始化工作队列 1.1 工作、工作队列、工作线程池、工作线程数据结构 workqueue机制最小的调度单元是work_struct,即工作任务。 struct work_struct {
lockup_detector_init(); smp_init(); sched_init_smp();---将剩余CPU1~3进行up操作。 do_basic_setup();---执行__initcall_0start之后的initcall函数 ... }在初始化pool的时候,是按照possible的CPU来进行初始化的。而在创建工作线程的时候是按照online的CPU来创建的。在init_workqueues()的时刻,CPU1...