x86/platform/UV: Fix GAM Range Table entries less than 1GB
Subsystems (2)
cover x86/platform/UV: Fix GAM Range Table entries less than 1GB
* Fix GAM Range Table address ranges less than 1GB.
PATCH 1/1 x86/platform/UV: Fix GAM Range Table entries less than 1GB
The latest UV platforms include the new ApachePass NVDIMMs into the UV address space. This has introduced address ranges in the Global Address Map Table that are less than the previous lowest range, which was 2GB. Fix the address calculation so it accommodates address ranges from bytes to exabytes.
--- arch/x86/kernel/apic/x2apic_uv_x.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
arch/x86/kernel/apic/x2apic_uv_x.c +12 -3
@@ -1174,16 +1174,25 @@ static void __init decode_gam_rng_tbl(un uv_gre_table = gre;for (; gre->type !=UV_GAM_RANGE_TYPE_UNUSED ; gre++) { +unsigned long size = ((unsigned long )(gre->limit - lgre) + <<UV_GAM_RANGE_SHFT ); +int order =0 ; +char suffix[] =" KMGTPE" ; + +while (size >9999 && order <sizeof (suffix)) { + size /=1024 ; + order++; + } +if (!index) {pr_info ("UV: GAM Range Table...\n" );pr_info ("UV: # %20s %14s %5s %4s %5s %3s %2s\n" ,"Range" ,"" ,"Size" ,"Type" ,"NASID" ,"SID" ,"PN" ); } -pr_info ("UV: %2d: 0x%014lx-0x%014lx %5luG %3d %04x %02x %02x\n" , +pr_info ("UV: %2d: 0x%014lx-0x%014lx %5lu%c %3d %04x %02x %02x\n" , index++, (unsigned long )lgre <<UV_GAM_RANGE_SHFT , (unsigned long )gre->limit <<UV_GAM_RANGE_SHFT , - ((unsigned long )(gre->limit - lgre)) >> - (30 -UV_GAM_RANGE_SHFT ),/* 64M -> 1G */ + size, suffix[order], gre->type, gre->nasid, gre->sockid, gre->pnode); lgre = gre->limit;
tip-bot for [email protected]
merge botx86/platform/UV: Fix GAM Range Table entries less than 1GB
Commit-ID: c25d99d20ba69824a1e2cc118e04b877cd427afc Gitweb: https://git.kernel.org/tip/c25d99d20ba69824a1e2cc118e04b877cd427afc Author: [email protected] <[email protected]> AuthorDate: Mon, 5 Feb 2018 16:15:04 -0600 Committer: Ingo Molnar <[email protected]> CommitDate: Tue, 13 Feb 2018 14:15:45 +0100
x86/platform/UV: Fix GAM Range Table entries less than 1GB
The latest UV platforms include the new ApachePass NVDIMMs into the UV address space. This has introduced address ranges in the Global Address Map Table that are less than the previous lowest range, which was 2GB. Fix the address calculation so it accommodates address ranges from bytes to exabytes.
--- arch/x86/kernel/apic/x2apic_uv_x.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
arch/x86/kernel/apic/x2apic_uv_x.c +12 -3
@@ -1176,16 +1176,25 @@ static void __init decode_gam_rng_tbl(unsigned long ptr) uv_gre_table = gre;for (; gre->type !=UV_GAM_RANGE_TYPE_UNUSED ; gre++) { +unsigned long size = ((unsigned long )(gre->limit - lgre) + <<UV_GAM_RANGE_SHFT ); +int order =0 ; +char suffix[] =" KMGTPE" ; + +while (size >9999 && order <sizeof (suffix)) { + size /=1024 ; + order++; + } +if (!index) {pr_info ("UV: GAM Range Table...\n" );pr_info ("UV: # %20s %14s %5s %4s %5s %3s %2s\n" ,"Range" ,"" ,"Size" ,"Type" ,"NASID" ,"SID" ,"PN" ); } -pr_info ("UV: %2d: 0x%014lx-0x%014lx %5luG %3d %04x %02x %02x\n" , +pr_info ("UV: %2d: 0x%014lx-0x%014lx %5lu%c %3d %04x %02x %02x\n" , index++, (unsigned long )lgre <<UV_GAM_RANGE_SHFT , (unsigned long )gre->limit <<UV_GAM_RANGE_SHFT , - ((unsigned long )(gre->limit - lgre)) >> - (30 -UV_GAM_RANGE_SHFT ),/* 64M -> 1G */ + size, suffix[order], gre->type, gre->nasid, gre->sockid, gre->pnode); lgre = gre->limit;