• Tejun Heo's avatar
    percpu: use percpu allocator on UP too · 9b8327bb
    Tejun Heo authored
    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: default avatarTejun Heo <tj@kernel.org>
    Cc: Christoph Lameter <cl@linux-foundation.org>
    Cc: Pekka Enberg <penberg@cs.helsinki.fi>
    9b8327bb
percpu.c 55.2 KB