lkml.org 
[lkml]   [2019]   [Sep]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH V2 2/8] x86/platform/uv: Return UV Hubless System Type
    Return the type of UV hubless system for UV specific code that depends
    on that. Add a function to convert UV system type to bit pattern needed
    for is_uv_hubless().

    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>
    ---
    V2: Remove is_uv_hubless define
    Remove leading '_' from _is_uv_hubless
    ---
    arch/x86/include/asm/uv/uv.h | 12 ++++++++++--
    arch/x86/kernel/apic/x2apic_uv_x.c | 27 ++++++++++++++++++---------
    2 files changed, 28 insertions(+), 11 deletions(-)

    --- linux.orig/arch/x86/include/asm/uv/uv.h
    +++ linux/arch/x86/include/asm/uv/uv.h
    @@ -12,6 +12,14 @@ struct mm_struct;
    #ifdef CONFIG_X86_UV
    #include <linux/efi.h>

    +static inline int uv(int uvtype)
    +{
    + /* uv(0) is "any" */
    + if (uvtype >= 0 && uvtype <= 30)
    + return 1 << uvtype;
    + return 1;
    +}
    +
    extern unsigned long uv_systab_phys;

    extern enum uv_system_type get_uv_system_type(void);
    @@ -20,7 +28,7 @@ static inline bool is_early_uv_system(vo
    return uv_systab_phys && uv_systab_phys != EFI_INVALID_TABLE_ADDR;
    }
    extern int is_uv_system(void);
    -extern int is_uv_hubless(void);
    +extern int is_uv_hubless(int uvtype);
    extern void uv_cpu_init(void);
    extern void uv_nmi_init(void);
    extern void uv_system_init(void);
    @@ -32,7 +40,7 @@ extern const struct cpumask *uv_flush_tl
    static inline enum uv_system_type get_uv_system_type(void) { return UV_NONE; }
    static inline bool is_early_uv_system(void) { return 0; }
    static inline int is_uv_system(void) { return 0; }
    -static inline int is_uv_hubless(void) { return 0; }
    +static inline int is_uv_hubless(int uv) { return 0; }
    static inline void uv_cpu_init(void) { }
    static inline void uv_system_init(void) { }
    static inline const struct cpumask *
    --- linux.orig/arch/x86/kernel/apic/x2apic_uv_x.c
    +++ linux/arch/x86/kernel/apic/x2apic_uv_x.c
    @@ -26,7 +26,7 @@
    static DEFINE_PER_CPU(int, x2apic_extra_bits);

    static enum uv_system_type uv_system_type;
    -static bool uv_hubless_system;
    +static int uv_hubless_system;
    static u64 gru_start_paddr, gru_end_paddr;
    static u64 gru_dist_base, gru_first_node_paddr = -1LL, gru_last_node_paddr;
    static u64 gru_dist_lmask, gru_dist_umask;
    @@ -268,11 +268,20 @@ static int __init uv_acpi_madt_oem_check
    uv_stringify(sizeof(oem_table_id), oem_table_id, _oem_table_id);

    if (strncmp(oem_id, "SGI", 3) != 0) {
    - if (strncmp(oem_id, "NSGI", 4) == 0) {
    - uv_hubless_system = true;
    - pr_info("UV: OEM IDs %s/%s, HUBLESS\n",
    - oem_id, oem_table_id);
    - }
    + if (strncmp(oem_id, "NSGI", 4) != 0)
    + return 0;
    +
    + /* UV4 Hubless, CH, (0x11:UV4+Any) */
    + if (strncmp(oem_id, "NSGI4", 5) == 0)
    + uv_hubless_system = 0x11;
    +
    + /* UV3 Hubless, UV300/MC990X w/o hub (0x9:UV3+Any) */
    + else
    + uv_hubless_system = 0x9;
    +
    + pr_info("UV: OEM IDs %s/%s, HUBLESS(0x%x)\n",
    + oem_id, oem_table_id, uv_hubless_system);
    +
    return 0;
    }

    @@ -350,9 +359,9 @@ int is_uv_system(void)
    }
    EXPORT_SYMBOL_GPL(is_uv_system);

    -int is_uv_hubless(void)
    +int is_uv_hubless(int uvtype)
    {
    - return uv_hubless_system;
    + return (uv_hubless_system & uvtype);
    }
    EXPORT_SYMBOL_GPL(is_uv_hubless);

    @@ -1592,7 +1601,7 @@ static void __init uv_system_init_hub(vo
    */
    void __init uv_system_init(void)
    {
    - if (likely(!is_uv_system() && !is_uv_hubless()))
    + if (likely(!is_uv_system() && !is_uv_hubless(1)))
    return;

    if (is_uv_system())
    --

    \
     
     \ /
      Last update: 2019-09-10 16:33    [W:4.130 / U:0.268 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site