Linux task_struct kmem_cache. , fork.c , :
#define alloc_task_struct_node(node) \
kmem_cache_alloc_node(task_struct_cachep, GFP_KERNEL, node)
static struct kmem_cache *task_struct_cachep;
, , . , x86 (arch/x86/include/asm/current.h):
static __always_inline struct task_struct *get_current(void)
{
return percpu_read_stable(current_task);
}
PowerPC (arch/powerpc/include/asm/current.h):
static inline struct task_struct *get_current(void)
{
struct task_struct *task;
__asm__ __volatile__("ld %0,%1(13)"
: "=r" (task)
: "i" (offsetof(struct paca_struct, __current)));
return task;
}
Elixir Cross Reference, .