On 5/22/26 17:55, Shakeel Butt wrote: > On Fri, May 22, 2026 at 08:53:10AM -0700, Shakeel Butt wrote: >> On Tue, May 19, 2026 at 11:59:01AM -0400, Eric Chanudet wrote: >>> Add mem_cgroup_dmem_charge() and mem_cgroup_dmem_uncharge() to allow >>> dmem pool allocations to optionally be double-charged against the memory >>> controller. Take the struct cgroup from the dmem pool's css as there is >>> no convenient object exported to represent these allocations. These will >>> resolve the effective memory css from that cgroup and perform the >>> charge. >>> >>> Introduce a MEMCG_DMEM stat counter to memory.stat to make the cgroup's >>> dmem charge visible. >>> >>> Signed-off-by: Eric Chanudet <[email protected]> >>> --- >>> include/linux/memcontrol.h | 16 ++++++++++++ >>> mm/memcontrol.c | 65 >>> ++++++++++++++++++++++++++++++++++++++++++++++ >>> 2 files changed, 81 insertions(+) >>> >>> diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h >>> index >>> dc3fa687759b45748b2acee6d7f43da325eb50c1..8e1d49b87fb64e6114f3eb920293e14920290fe7 >>> 100644 >>> --- a/include/linux/memcontrol.h >>> +++ b/include/linux/memcontrol.h >>> @@ -39,6 +39,7 @@ enum memcg_stat_item { >>> MEMCG_ZSWAP_B, >>> MEMCG_ZSWAPPED, >>> MEMCG_ZSWAP_INCOMP, >>> + MEMCG_DMEM, >>> MEMCG_NR_STAT, >>> }; >>> >>> @@ -1872,6 +1873,21 @@ static inline bool >>> mem_cgroup_zswap_writeback_enabled(struct mem_cgroup *memcg) >>> } >>> #endif >>> >>> +#if defined(CONFIG_MEMCG) && defined(CONFIG_CGROUP_DMEM) >>> +bool mem_cgroup_dmem_charge(struct cgroup *cgrp, unsigned int nr_pages, >>> + gfp_t gfp_mask); >>> +void mem_cgroup_dmem_uncharge(struct cgroup *cgrp, unsigned int nr_pages); >>> +#else >>> +static inline bool mem_cgroup_dmem_charge(struct cgroup *cgrp, >>> + unsigned int nr_pages, gfp_t gfp_mask) >> >> Please follow Johannes's request to pass the actually memory object instead >> of >> naked numbers. >> > > Also what exactly is the backing memory here? Is it system memory? If yes, > then > you need to pass struct page. For non-system memory, I am not sure memcg is > the > right place to charge such memory.
The object might be backed by system memory, but might also be backed by device memory. The charge is there because when applications over allocate device memory they get swapped to system memory. Regards, Christian.
