percpu: allow limited allocation before slab is online
authorTejun Heo <tj@kernel.org>
Sun, 27 Jun 2010 16:50:00 +0000 (18:50 +0200)
committerTejun Heo <tj@kernel.org>
Sun, 27 Jun 2010 16:50:00 +0000 (18:50 +0200)
commit099a19d91ca429944743d51bef8fee240e94d8e3
tree55bdc0f25ecbf38240782fb1d9a80d33c0100eb6
parent4ba6ce250e406b20bcd6f0f3aed6b3d80965e6c2
percpu: allow limited allocation before slab is online

This patch updates percpu allocator such that it can serve limited
amount of allocation before slab comes online.  This is primarily to
allow slab to depend on working percpu allocator.

Two parameters, PERCPU_DYNAMIC_EARLY_SIZE and SLOTS, determine how
much memory space and allocation map slots are reserved.  If this
reserved area is exhausted, WARN_ON_ONCE() will trigger and allocation
will fail till slab comes online.

The following changes are made to implement early alloc.

* pcpu_mem_alloc() now checks slab_is_available()

* Chunks are allocated using pcpu_mem_alloc()

* Init paths make sure ai->dyn_size is at least as large as
  PERCPU_DYNAMIC_EARLY_SIZE.

* Initial alloc maps are allocated in __initdata and copied to
  kmalloc'd areas once slab is online.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Christoph Lameter <cl@linux-foundation.org>
include/linux/percpu.h
init/main.c
mm/percpu.c