The following commit has been merged into the x86/platform branch of tip:

Commit-ID:     d6922effe4f3d5c643c8c05d51a572d6db4c9cb3
Gitweb:        
https://git.kernel.org/tip/d6922effe4f3d5c643c8c05d51a572d6db4c9cb3
Author:        Mike Travis <mike.tra...@hpe.com>
AuthorDate:    Mon, 05 Oct 2020 15:39:26 -05:00
Committer:     Borislav Petkov <b...@suse.de>
CommitterDate: Wed, 07 Oct 2020 09:08:35 +02:00

x86/platform/uv: Update node present counting

The changes in the UV5 arch shrunk the NODE PRESENT table to just 2x64
entries (128 total) so are in to 64 bit MMRs instead of a depth of 64
bits in an array.  Adjust references when counting up the nodes present.

Signed-off-by: Mike Travis <mike.tra...@hpe.com>
Signed-off-by: Borislav Petkov <b...@suse.de>
Reviewed-by: Dimitri Sivanich <dimitri.sivan...@hpe.com>
Reviewed-by: Steve Wahl <steve.w...@hpe.com>
Link: https://lkml.kernel.org/r/20201005203929.148656-11-mike.tra...@hpe.com
---
 arch/x86/kernel/apic/x2apic_uv_x.c | 26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c 
b/arch/x86/kernel/apic/x2apic_uv_x.c
index 64a1c59..9b44f45 100644
--- a/arch/x86/kernel/apic/x2apic_uv_x.c
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c
@@ -1436,20 +1436,32 @@ static int __init decode_uv_systab(void)
 /* Set up physical blade translations from UVH_NODE_PRESENT_TABLE */
 static __init void boot_init_possible_blades(struct uv_hub_info_s *hub_info)
 {
+       unsigned long np;
        int i, uv_pb = 0;
 
-       pr_info("UV: NODE_PRESENT_DEPTH = %d\n", UVH_NODE_PRESENT_TABLE_DEPTH);
-       for (i = 0; i < UVH_NODE_PRESENT_TABLE_DEPTH; i++) {
-               unsigned long np;
-
-               np = uv_read_local_mmr(UVH_NODE_PRESENT_TABLE + i * 8);
-               if (np)
+       if (UVH_NODE_PRESENT_TABLE) {
+               pr_info("UV: NODE_PRESENT_DEPTH = %d\n",
+                       UVH_NODE_PRESENT_TABLE_DEPTH);
+               for (i = 0; i < UVH_NODE_PRESENT_TABLE_DEPTH; i++) {
+                       np = uv_read_local_mmr(UVH_NODE_PRESENT_TABLE + i * 8);
                        pr_info("UV: NODE_PRESENT(%d) = 0x%016lx\n", i, np);
-
+                       uv_pb += hweight64(np);
+               }
+       }
+       if (UVH_NODE_PRESENT_0) {
+               np = uv_read_local_mmr(UVH_NODE_PRESENT_0);
+               pr_info("UV: NODE_PRESENT_0 = 0x%016lx\n", np);
+               uv_pb += hweight64(np);
+       }
+       if (UVH_NODE_PRESENT_1) {
+               np = uv_read_local_mmr(UVH_NODE_PRESENT_1);
+               pr_info("UV: NODE_PRESENT_1 = 0x%016lx\n", np);
                uv_pb += hweight64(np);
        }
        if (uv_possible_blades != uv_pb)
                uv_possible_blades = uv_pb;
+
+       pr_info("UV: number nodes/possible blades %d\n", uv_pb);
 }
 
 static void __init build_socket_tables(void)

Reply via email to