• Kan Liang's avatar
    perf/x86/intel/uncore: Remove uncore extra PCI dev HSWEP_PCI_PCU_3 · 9d480158
    Kan Liang authored
    There may be a kernel panic on the Haswell server and the Broadwell
    server, if the snbep_pci2phy_map_init() return error.
    
    The uncore_extra_pci_dev[HSWEP_PCI_PCU_3] is used in the cpu_init() to
    detect the existence of the SBOX, which is a MSR type of PMON unit.
    The uncore_extra_pci_dev is allocated in the uncore_pci_init(). If the
    snbep_pci2phy_map_init() returns error, perf doesn't initialize the
    PCI type of the PMON units, so the uncore_extra_pci_dev will not be
    allocated. But perf may continue initializing the MSR type of PMON
    units. A null dereference kernel panic will be triggered.
    
    The sockets in a Haswell server or a Broadwell server are identical.
    Only need to detect the existence of the SBOX once.
    Current perf probes all available PCU devices and stores them into the
    uncore_extra_pci_dev. It's unnecessary.
    Use the pci_get_device() to replace the uncore_extra_pci_dev. Only
    detect the existence of the SBOX on the first available PCU device once.
    
    Factor out hswep_has_limit_sbox(), since the Haswell server and the
    Broadwell server uses the same way to detect the existence of the SBOX.
    
    Add some macros to replace the magic number.
    
    Fixes: 5306c31c ("perf/x86/uncore/hsw-ep: Handle systems with only two SBOXes")
    Reported-by: default avatarSteve Wahl <steve.wahl@hpe.com>
    Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: default avatarSteve Wahl <steve.wahl@hpe.com>
    Link: https://lkml.kernel.org/r/1618521764-100923-1-git-send-email-kan.liang@linux.intel.com
    9d480158
uncore_snbep.c 161 KB