On Fri, May 03, 2024 at 02:11:17PM -0700, Shakeel Butt wrote: > On Fri, May 03, 2024 at 01:18:33PM -0700, Roman Gushchin wrote: > [...] > > enum mem_counter_type { > > +#ifdef CONFIG_MEMCG > > MCT_MEMORY, /* cgroup v1 and v2 */ > > MCT_SWAP, /* cgroup v2 only */ > > MCT_MEMSW = MCT_SWAP, /* cgroup v1 only */ > > MCT_KMEM, /* cgroup v1 only */ > > MCT_TCPMEM, /* cgroup v1 only */ > > +#endif > > +#ifdef CONFIG_CGROUP_HUGETLB > > + MCT_HUGETLB_MAX = __MCT_HUGETLB_MAX, > > +#endif > > + __MCT_NR_ITEMS, > > }; > > > > Thanks for the awesome work. I haven't gone through all the patches yet > but wanted to ask a quick question. In the above enum are you trying to > do a union between memcg and hugetlb? It gave me a big pause to > understand what you are trying to do. Yep, sort of. So the page_counter structure supports N independent counters, where N is sufficient enough for both memcg and hugetlb cases. MCT_MEMORY, MCT_SWAP etc are used directly in the memcontrol.c code, while hugetlb code just indexes. MCT_HUGETLB_MAX magic is needed to define N at the compile time. Thanks!