linux/arch/x86/platform
Cliff Wickman 77ed23f8d9 x86: Fix UV BAU for non-consecutive nasids
This is a fix for the SGI Altix-UV Broadcast Assist Unit code,
which is used for TLB flushing.

Certain hardware configurations (that customers are ordering)
cause nasids (numa address space id's) to be non-consecutive.
Specifically, once you have more than 4 blades in a IRU
(Individual Rack Unit - or 1/2 rack) but less than the maximum
of 16, the nasid numbering becomes non-consecutive.  This
currently results in a 'catastrophic error' (CATERR) detected by
the firmware during OS boot.  The BAU is generating an 'INTD'
request that is targeting a non-existent nasid value. Such
configurations may also occur when a blade is configured off
because of hardware errors. (There is one UV hub per blade.)

This patch is required to support such configurations.

The problem with the tlb_uv.c code is that is using the
consecutive hub numbers as indices to the BAU distribution bit
map. These are simply the ordinal position of the hub or blade
within its partition.  It should be using physical node numbers
(pnodes), which correspond to the physical nasid values. Use of
the hub number only works as long as the nasids in the partition
are consecutive and increase with a stride of 1.

This patch changes the index to be the pnode number, thus
allowing nasids to be non-consecutive.
It also provides a table in local memory for each cpu to
translate target cpu number to target pnode and nasid.
And it improves naming to properly reflect 'node' and 'uvhub'
versus 'nasid'.

Signed-off-by: Cliff Wickman <cpw@sgi.com>
Cc: <stable@kernel.org>
Link: http://lkml.kernel.org/r/E1QJmxX-0002Mz-Fk@eag09.americas.sgi.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2011-05-12 23:45:42 +02:00
..
ce4100 x86: ce4100: Configure IOAPIC pins for USB and SATA to level type 2011-04-28 11:38:30 +02:00
efi x86: Move efi to platform 2010-10-27 14:30:01 +02:00
iris x86: platform: Move iris to x86/platform where it belongs 2010-11-20 10:37:05 +01:00
mrst x86/mrst: Fix boot crash caused by incorrect pin to irq mapping 2011-04-12 08:38:52 +02:00
olpc mfd: OLPC: Clean up names to match what OLPC actually uses 2011-03-27 00:09:31 +01:00
scx200 x86: Move scx200 to platform 2010-10-27 14:30:01 +02:00
sfi Merge branch 'linus' into x86/apic-cleanups 2011-01-07 14:14:15 +01:00
uv x86: Fix UV BAU for non-consecutive nasids 2011-05-12 23:45:42 +02:00
visws x86: visws: Fixup irq overhaul fallout 2011-04-04 16:51:15 +02:00
Makefile x86: platform: Move iris to x86/platform where it belongs 2010-11-20 10:37:05 +01:00