x86: Fix fake apicid to node mapping for numa emulation
authorDavid Rientjes <rientjes@google.com>
Thu, 6 May 2010 09:24:34 +0000 (02:24 -0700)
committerIngo Molnar <mingo@elte.hu>
Thu, 6 May 2010 10:02:05 +0000 (12:02 +0200)
commitb0c4d952a158a6a2547672cf4fc9d55e415410de
treec7bc34a20edc3850565926d18243705ceccb9953
parent722154e4cacf015161efe60009ae9be23d492296
x86: Fix fake apicid to node mapping for numa emulation

With NUMA emulation, it's possible for a single cpu to be bound
to multiple nodes since more than one may have affinity if
allocated on a physical node that is local to the cpu.

APIC ids must therefore be mapped to the lowest node ids to
maintain generic kernel use of functions such as cpu_to_node()
that determine device affinity.  For example, if a device has
proximity to physical node 1, for instance, and a cpu happens to
be mapped to a higher emulated node id 8, the proximity may not
be correctly determined by comparison in generic code even
though the cpu may be truly local and allocated on physical node 1.

When this happens, the true topology of the machine isn't
accurately represented in the emulated environment; although
this isn't critical to the system's uptime, any generic code
that is NUMA aware benefits from the physical topology being
accurately represented.

This can affect any system that maps multiple APIC ids to a
single node and is booted with numa=fake=N where N is greater
than the number of physical nodes.

Signed-off-by: David Rientjes <rientjes@google.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Suresh Siddha <suresh.b.siddha@intel.com>
LKML-Reference: <alpine.DEB.2.00.1005060224140.19473@chino.kir.corp.google.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/mm/srat_64.c