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@xxxxxxxxxx/ 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. - v2: Thanks to Huang, Ying's and Andrew's comments * Add cover letter * Add Suggested-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> * Add get/put_online_mems() protection in memory_tier_late_init() * If memtype is set, skip initializing its node * Remove redundant code/comments or rewrite code in a cleaner manner - v1: * https://lore.kernel.org/all/20240621044833.3953055-1-horen.chuang@xxxxxxxxx/ This patchset is based on commits cf93be18fa1b and a72a30af550c: [0/2] https://lkml.kernel.org/r/20240405000707.2670063-1-horenchuang@xxxxxxxxxxxxx [1/2] https://lkml.kernel.org/r/20240405000707.2670063-2-horenchuang@xxxxxxxxxxxxx [1/2] https://lkml.kernel.org/r/20240405000707.2670063-3-horenchuang@xxxxxxxxxxxxx Ho-Ren (Jack) Chuang (1): memory tier: consolidate the initialization of memory tiers drivers/acpi/numa/hmat.c | 5 +-- include/linux/memory-tiers.h | 2 ++ mm/memory-tiers.c | 59 +++++++++++++++--------------------- 3 files changed, 28 insertions(+), 38 deletions(-) -- Ho-Ren (Jack) Chuang