• Nathan Lynch's avatar
    powerpc: Rewrite sysfs processor cache info code · 93197a36
    Nathan Lynch authored
    The current code for providing processor cache information in sysfs
    has the following deficiencies:
    - several complex functions that are hard to understand
    - implicit recursion (cache_desc_release -> kobject_put -> cache_desc_release)
    - explicit recursion (create_cache_index_info)
    - use of two per-cpu arrays when one would suffice
    - duplication of work on systems where CPUs share cache
    
    Also, when I looked at implementing support for a shared_cpu_map
    attribute, it was pretty much impossible to handle hotplug without
    checking every single online CPU's cache_desc list and fixing things
    up... not that this is a hot path, but it would have introduced
    O(n^2)-ish behavior during boot.  Addressing this involved rethinking
    the core data structures used, which didn't lend itself to an
    incremental approach.
    
    This implementation maintains a "forest" (potentially more than one
    tree) of cache objects which reflects the system's cache topology.
    Cache objects are instantiated as needed as CPUs come online.  A
    per-cpu array is used mainly for sysfs-related bookkeeping; the
    objects in the array just point to the appropriate points in the
    forest.
    
    This maintains compatibility with the existing code and includes some
    enhancements:
    - Implement the shared_cpu_map attribute, which is essential for
      enabling userspace to discover the system's overall cache topology.
    - Use cache-block-size properties if cache-line-size is not available.
    
    I chose to place this implementation in a new file since it would have
    roughly doubled the size of sysfs.c, which is already kind of messy.
    Signed-off-by: default avatarNathan Lynch <ntl@pobox.com>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    93197a36
cacheinfo.c 19.7 KB