x86/platform/uv: Decode UVsystab Info
authorMike Travis <mike.travis@hpe.com>
Tue, 10 Sep 2019 14:58:45 +0000 (09:58 -0500)
committerIngo Molnar <mingo@kernel.org>
Mon, 7 Oct 2019 11:42:11 +0000 (13:42 +0200)
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@hpe.com>
Reviewed-by: Steve Wahl <steve.wahl@hpe.com>
Reviewed-by: Dimitri Sivanich <dimitri.sivanich@hpe.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Hedi Berriche <hedi.berriche@hpe.com>
Cc: Justin Ernst <justin.ernst@hpe.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Russ Anderson <russ.anderson@hpe.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: https://lkml.kernel.org/r/20190910145840.135325066@stormcage.eag.rdlabs.hpecorp.net
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/kernel/apic/x2apic_uv_x.c

index b5059050b46f4fdbc3ff729e8a85a18b60a3472b..ec940add783e75f65a7629114d2b5b71c7ce3cee 100644 (file)
@@ -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)
+       /* If system is uv3 or lower, there is no extended UVsystab */
+       if (is_uv_hubbed(0xfffffe) < uv(4) && is_uv_hubless(0xfffffe) < uv(4))
                return 0;       /* No extended UVsystab required */
 
        st = uv_systab;
@@ -1554,8 +1555,15 @@ static __init int uv_system_init_hubless(void)
 
        /* Init kernel/BIOS interface */
        rc = uv_bios_init();
+       if (rc < 0)
+               return rc;
 
-       /* Create user access node if UVsystab available */
+       /* Process UVsystab */
+       rc = decode_uv_systab();
+       if (rc < 0)
+               return rc;
+
+       /* Create user access node */
        if (rc >= 0)
                uv_setup_proc_files(1);