percpu: allow non-linear / sparse cpu -> unit mapping
authorTejun Heo <tj@kernel.org>
Fri, 3 Jul 2009 23:11:00 +0000 (08:11 +0900)
committerTejun Heo <tj@kernel.org>
Fri, 3 Jul 2009 23:11:00 +0000 (08:11 +0900)
commit2f39e637ea240efb74cf807d31c93a71a0b89174
treed26bd3ad962031c5b495a528b4115c2ed4ff7a80
parentce3141a277ff6cc37e51008b8888dc2cb7456ef1
percpu: allow non-linear / sparse cpu -> unit mapping

Currently cpu and unit are always identity mapped.  To allow more
efficient large page support on NUMA and lazy allocation for possible
but offline cpus, cpu -> unit mapping needs to be non-linear and/or
sparse.  This can be easily implemented by adding a cpu -> unit
mapping array and using it whenever looking up the matching unit for a
cpu.

The only unusal conversion is in pcpu_chunk_addr_search().  The passed
in address is unit0 based and unit0 might not be in use so it needs to
be converted to address of an in-use unit.  This is easily done by
adding the unit offset for the current processor.

[ Impact: allows non-linear/sparse cpu -> unit mapping, no visible change yet ]

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: David Miller <davem@davemloft.net>
arch/sparc/kernel/smp_64.c
include/linux/percpu.h
mm/percpu.c