lkml.org 
[lkml]   [2018]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.15 183/189] x86/platform/UV: Fix GAM Range Table entries less than 1GB
    Date
    From: "mike.travis@hpe.com" <mike.travis@hpe.com>

    [ Upstream commit c25d99d20ba69824a1e2cc118e04b877cd427afc ]

    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.

    Signed-off-by: Mike Travis <mike.travis@hpe.com>
    Reviewed-by: Andrew Banman <andrew.banman@hpe.com>
    Reviewed-by: Dimitri Sivanich <dimitri.sivanich@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: http://lkml.kernel.org/r/20180205221503.190219903@stormcage.americas.sgi.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    arch/x86/kernel/apic/x2apic_uv_x.c | 15 ++++++++++++---
    1 file changed, 12 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
    index e1b8e8bf6b3c..256a9924b8d8 100644
    --- a/arch/x86/kernel/apic/x2apic_uv_x.c
    +++ b/arch/x86/kernel/apic/x2apic_uv_x.c
    @@ -1174,16 +1174,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;
    --
    2.15.1
    \
     
     \ /
      Last update: 2018-04-09 05:32    [W:2.647 / U:0.244 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site