• Kan Liang's avatar
    perf/x86/uncore: Use u64 to replace unsigned for the uncore offsets array · b560e0cd
    Kan Liang authored
    The current perf doesn't save the complete address of an uncore unit.
    The complete address of each unit is calculated by the base address +
    offset. The type of the base address is u64, while the type of offset is
    unsigned.
    In the old platforms (without the discovery table method), the base
    address and offset are hard coded in the driver. Perf can always use the
    lowest address as the base address. Everything works well.
    
    In the new platforms (starting from SPR), the discovery table provides
    a complete address for all uncore units. To follow the current
    framework/codes, when parsing the discovery table, the complete address
    of the first box is stored as a base address. The offset of the
    following units is calculated by the complete address of the unit minus
    the base address (the address of the first unit). On GNR, the latter
    units may have a lower address compared to the first unit. So the offset
    is a negative value. The upper 32 bits are lost when casting a negative
    u64 to an unsigned type.
    
    Use u64 to replace unsigned for the uncore offsets array to correct the
    above case. There is no functional change.
    Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: default avatarAmmy Yi <ammy.yi@intel.com>
    Link: https://lore.kernel.org/r/20231117163939.2468007-2-kan.liang@linux.intel.com
    b560e0cd
uncore_nhmex.c 36.6 KB