task_rq(p) 获取进程p所在的runqueue的首地址
--------------------------------------------
#define task_rq(p) cpu_rq(task_cpu(p))
#define cpu_rq(cpu) (&per_cpu(runqueues, (cpu)))
task_cpu(p) 获取进程p所在CPU的编号
-------------------------------------------
static inline unsigned int task_cpu(const struct task_struct *p)
{
return p->thread_info->cpu;
}
cpu_rq(cpu) 获取编号为cpu的处理器的runqueue的首地址
--------------------------------------------
#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
#define RELOC_HIDE(ptr, off) /
({ unsigned long __ptr; /
__asm__ ("" : "=g"(__ptr) : "0"(ptr)); /
(typeof(ptr)) (__ptr + (off)); })
--------------------------------------------
#define task_rq(p) cpu_rq(task_cpu(p))
#define cpu_rq(cpu) (&per_cpu(runqueues, (cpu)))
task_cpu(p) 获取进程p所在CPU的编号
-------------------------------------------
static inline unsigned int task_cpu(const struct task_struct *p)
{
return p->thread_info->cpu;
}
cpu_rq(cpu) 获取编号为cpu的处理器的runqueue的首地址
--------------------------------------------
#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
#define RELOC_HIDE(ptr, off) /
({ unsigned long __ptr; /
__asm__ ("" : "=g"(__ptr) : "0"(ptr)); /
(typeof(ptr)) (__ptr + (off)); })