• Yicong Yang's avatar
    cacheinfo: Fix LLC is not exported through sysfs · 5c271238
    Yicong Yang authored
    After entering 6.3-rc1 the LLC cacheinfo is not exported on our ACPI
    based arm64 server. This is because the LLC cacheinfo is partly reset
    when secondary CPUs boot up. On arm64 the primary cpu will allocate
    and setup cacheinfo:
    init_cpu_topology()
      for_each_possible_cpu()
        fetch_cache_info() // Allocate cacheinfo and init levels
    detect_cache_attributes()
      cache_shared_cpu_map_setup()
        if (!last_level_cache_is_valid()) // not valid, setup LLC
          cache_setup_properties() // setup LLC
    
    On secondary CPU boot up:
    detect_cache_attributes()
      populate_cache_leaves()
        get_cache_type() // Get cache type from clidr_el1,
                         // for LLC type=CACHE_TYPE_NOCACHE
      cache_shared_cpu_map_setup()
        if (!last_level_cache_is_valid()) // Valid and won't go to this branch,
                                          // leave LLC's type=CACHE_TYPE_NOCACHE
    
    The last_level_cache_is_valid() use cacheinfo->{attributes, fw_token} to
    test it's valid or not, but populate_cache_leaves() will only reset
    LLC's type, so we won't try to re-setup LLC's type and leave it
    CACHE_TYPE_NOCACHE and won't export it through sysfs.
    
    This patch tries to fix this by not re-populating the cache leaves if
    the LLC is valid.
    
    Fixes: 5944ce09 ("arch_topology: Build cacheinfo from primary CPU")
    Signed-off-by: default avatarYicong Yang <yangyicong@hisilicon.com>
    Reviewed-by: default avatarPierre Gondois <pierre.gondois@arm.com>
    Reviewed-by: default avatarSudeep Holla <sudeep.holla@arm.com>
    Link: https://lore.kernel.org/r/20230328114915.33340-1-yangyicong@huawei.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    5c271238
cacheinfo.c 20.6 KB