Percpu Allocator 分配问题
我在初始化 SLUB 分配器的时候,使用kmem_cache_init() 在初始化的时候,此时 slab_state = DOWN,即 SLUB 分配器还不能使用.初始化过程中 使用 kmem_cache_open()函数 给 "kmem_cache_node" 分配内存时需要从 Percpu Allocator 内分配内存,此时 Percpu Allocator 已经初始化完成.
但使用 pcpu_mem_alloc() 进行分配.问题来了==================>
static void *pcpu_mem_alloc(size_t size)
{
if (WARN_ON_ONCE(!slab_is_available()))
return NULL;
if (size <= PAGE_SIZE)
return kzalloc(size, GFP_KERNEL);
else
return vzalloc(size);
}
该函数负责分配 pcpu 内存,但前提是 SLUB 分配器必须准备好,但按源码流程此时 SLUB 自身在初始化,不能提供内存分配.
这是个先有鸡还是先有蛋的问题.
面对 SLUB 的初始化必须从 SLUB 中分配内存,但此时 SLUB 正在初始化,这个问题该怎么解决????
slab_is_available() 函数一直返回 0 !!!!!!!
页:
[1]