Decode the hubless UVsystab passed from BIOS to the kernel saving pertinent info in a similar manner that hubbed UVsystabs are decoded. Signed-off-by: Mike Travis <mike.travis@xxxxxxx> Reviewed-by: Steve Wahl <steve.wahl@xxxxxxx> Reviewed-by: Dimitri Sivanich <dimitri.sivanich@xxxxxxx> To: Thomas Gleixner <tglx@xxxxxxxxxxxxx> To: Ingo Molnar <mingo@xxxxxxxxxx> To: H. Peter Anvin <hpa@xxxxxxxxx> To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> To: Borislav Petkov <bp@xxxxxxxxx> To: Christoph Hellwig <hch@xxxxxxxxxxxxx> Cc: Dimitri Sivanich <dimitri.sivanich@xxxxxxx> Cc: Russ Anderson <russ.anderson@xxxxxxx> Cc: Hedi Berriche <hedi.berriche@xxxxxxx> Cc: Steve Wahl <steve.wahl@xxxxxxx> Cc: x86@xxxxxxxxxx Cc: linux-kernel@xxxxxxxxxxxxxxx Cc: stable@xxxxxxxxxxxxxxx --- arch/x86/kernel/apic/x2apic_uv_x.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) --- linux.orig/arch/x86/kernel/apic/x2apic_uv_x.c +++ linux/arch/x86/kernel/apic/x2apic_uv_x.c @@ -1303,7 +1303,8 @@ static int __init decode_uv_systab(void) struct uv_systab *st; int i; - if (uv_hub_info->hub_revision < UV4_HUB_REVISION_BASE) + /* Select only UV4 (hubbed or hubless) and higher */ + if (is_uv_hubbed(-2) < uv(4) && is_uv_hubless(-2) < uv(4)) return 0; /* No extended UVsystab required */ st = uv_systab; @@ -1554,8 +1555,19 @@ static __init int uv_system_init_hubless /* Init kernel/BIOS interface */ rc = uv_bios_init(); + if (rc < 0) { + pr_err("UV: BIOS init error:%d\n", rc); + return rc; + } + + /* Process UVsystab */ + rc = decode_uv_systab(); + if (rc < 0) { + pr_err("UV: UVsystab decode error:%d\n", rc); + return rc; + } - /* Create user access node if UVsystab available */ + /* Create user access node */ if (rc >= 0) uv_setup_proc_files(1); --