On Mon, 29 Aug 2022 11:37:45 +0530 "Aneesh Kumar K.V" <aneesh.kumar@xxxxxxxxxxxxx> wrote: > This patch adds /sys/devices/virtual/memory_tiering/ where all memory tier > related details can be found. All allocated memory tiers will be listed > there as /sys/devices/virtual/memory_tiering/memory_tierN/ > > The nodes which are part of a specific memory tier can be listed via > /sys/devices/virtual/memory_tiering/memory_tierN/nodes > > The abstract distance range value of a specific memory tier can be listed via > /sys/devices/virtual/memory_tiering/memory_tierN/abstract_distance > > A directory hierarchy looks like > :/sys/devices/virtual/memory_tiering$ tree memory_tier4/ > memory_tier4/ > ├── abstract_distance > ├── nodes > ├── subsystem -> ../../../../bus/memory_tiering > └── uevent > > All toptier nodes are listed via > /sys/devices/virtual/memory_tiering/toptier_nodes > > :/sys/devices/virtual/memory_tiering$ cat toptier_nodes > 0,2 > :/sys/devices/virtual/memory_tiering$ cat memory_tier4/nodes > 0,2 > :/sys/devices/virtual/memory_tiering$ cat memory_tier4/abstract_distance > 512 - 639 > > ... > > --- a/mm/memory-tiers.c > +++ b/mm/memory-tiers.c > @@ -19,6 +19,7 @@ struct memory_tier { > * adistance_start .. adistance_start + MEMTIER_CHUNK_SIZE > */ > int adistance_start; > + struct device dev; > /* All the nodes that are part of all the lower memory tiers. */ > nodemask_t lower_tier_mask; > }; > @@ -36,6 +37,13 @@ static DEFINE_MUTEX(memory_tier_lock); > static LIST_HEAD(memory_tiers); > static struct node_memory_type_map node_memory_types[MAX_NUMNODES]; > static struct memory_dev_type *default_dram_type; > + > +#define to_memory_tier(device) container_of(device, struct memory_tier, dev) Please, only use a macro when a C function cannot be used. --- a/mm/memory-tiers.c~mm-demotion-expose-memory-tier-details-via-sysfs-fix +++ a/mm/memory-tiers.c @@ -38,7 +38,11 @@ static LIST_HEAD(memory_tiers); static struct node_memory_type_map node_memory_types[MAX_NUMNODES]; static struct memory_dev_type *default_dram_type; -#define to_memory_tier(device) container_of(device, struct memory_tier, dev) +static inline struct memory_tier *to_memory_tier(struct device *device) +{ + return container_of(device, struct memory_tier, dev); +} + static struct bus_type memory_tier_subsys = { .name = "memory_tiering", .dev_name = "memory_tier", If only so it checks the type of `device'.