• Ho-Ren (Jack) Chuang's avatar
    memory tier: consolidate the initialization of memory tiers · 823430c8
    Ho-Ren (Jack) Chuang authored
    The current memory tier initialization process is distributed across two
    different functions, memory_tier_init() and memory_tier_late_init().  This
    design is hard to maintain.  Thus, this patch is proposed to reduce the
    possible code paths by consolidating different initialization patches into
    one.
    
    The earlier discussion with Jonathan and Ying is listed here:
    https://lore.kernel.org/lkml/20240405150244.00004b49@Huawei.com/
    
    If we want to put these two initializations together, they must be placed
    together in the later function.  Because only at that time, the HMAT
    information will be ready, adist between nodes can be calculated, and
    memory tiering can be established based on the adist.  So we position the
    initialization at memory_tier_init() to the memory_tier_late_init() call. 
    Moreover, it's natural to keep memory_tier initialization in drivers at
    device_initcall() level.
    
    If we simply move the set_node_memory_tier() from memory_tier_init() to
    late_initcall(), it will result in HMAT not registering the
    mt_adistance_algorithm callback function, because set_node_memory_tier()
    is not performed during the memory tiering initialization phase, leading
    to a lack of correct default_dram information.
    
    Therefore, we introduced a nodemask to pass the information of the default
    DRAM nodes.  The reason for not choosing to reuse default_dram_type->nodes
    is that it is not clean enough.  So in the end, we use a __initdata
    variable, which is a variable that is released once initialization is
    complete, including both CPU and memory nodes for HMAT to iterate through.
    
    Link: https://lkml.kernel.org/r/20240704072646.437579-1-horen.chuang@linux.devSigned-off-by: default avatarHo-Ren (Jack) Chuang <horenchuang@bytedance.com>
    Suggested-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
    Reviewed-by: default avatar"Huang, Ying" <ying.huang@intel.com>
    Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
    Cc: Alistair Popple <apopple@nvidia.com>
    Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Dave Jiang <dave.jiang@intel.com>
    Cc: Gregory Price <gourry.memverge@gmail.com>
    Cc: Len Brown <lenb@kernel.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Rafael J. Wysocki <rafael@kernel.org>
    Cc: Ravi Jonnalagadda <ravis.opensrc@micron.com>
    Cc: SeongJae Park <sj@kernel.org>
    Cc: Tejun Heo <tj@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    823430c8
memory-tiers.c 26 KB