percpu: use percpu allocator on UP too
authorTejun Heo <tj@kernel.org>
Fri, 3 Sep 2010 16:22:48 +0000 (18:22 +0200)
committerPekka Enberg <penberg@kernel.org>
Sat, 2 Oct 2010 07:26:05 +0000 (10:26 +0300)
commit9b8327bb2483ded5e04df6c33cf339ce7c02f6e9
tree7af7d6ea0a83c3446b6adbf29e0bff99092f1be3
parenta7b6b77b8917488d2d6b99d82673845e508144a3
percpu: use percpu allocator on UP too

On UP, percpu allocations were redirected to kmalloc.  This has the
following problems.

* For certain amount of allocations (determined by
  PERCPU_DYNAMIC_EARLY_SLOTS and PERCPU_DYNAMIC_EARLY_SIZE), percpu
  allocator can be used before the usual kernel memory allocator is
  brought online.  On SMP, this is used to initialize the kernel
  memory allocator.

* percpu allocator honors alignment upto PAGE_SIZE but kmalloc()
  doesn't.  For example, workqueue makes use of larger alignments for
  cpu_workqueues.

Currently, users of percpu allocators need to handle UP differently,
which is somewhat fragile and ugly.  Other than small amount of
memory, there isn't much to lose by enabling percpu allocator on UP.
It can simply use kernel memory based chunk allocation which was added
for SMP archs w/o MMUs.

This patch removes mm/percpu_up.c, builds mm/percpu.c on UP too and
makes UP build use percpu-km.  As percpu addresses and kernel
addresses are always identity mapped and static percpu variables don't
need any special treatment, nothing is arch dependent and mm/percpu.c
implements generic setup_per_cpu_areas() for UP.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Christoph Lameter <cl@linux-foundation.org>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
include/linux/percpu.h
mm/Kconfig
mm/Makefile
mm/percpu-km.c
mm/percpu.c
mm/percpu_up.c [deleted file]