]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm/damon/core: introduce DAMON_FILTER_TYPE_MEMCG
authorSeongJae Park <sj@kernel.org>
Mon, 18 May 2026 23:41:10 +0000 (16:41 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 2 Jun 2026 22:22:30 +0000 (15:22 -0700)
Belonging memory cgoup is another data attribute that can be useful to
monitor.  Introduce a new DAMON filter type, namely
DAMON_FILTER_TYPE_MEMCG, for monitoring of this attribute.

Link: https://lore.kernel.org/20260518234119.97569-23-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: David Hildenbrand <david@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Liam R. Howlett <liam@infradead.org>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/damon.h
mm/damon/core.c

index 1fb271a35e98f2096dbc215ef966c913c5fdd607..6a54c601889bd2cf37cd7b1d30a20fa1c52b59c8 100644 (file)
@@ -742,9 +742,11 @@ struct damon_intervals_goal {
  * enum damon_filter_type - Type of &struct damon_filter
  *
  * @DAMON_FILTER_TYPE_ANON:    Anonymous pages.
+ * @DAMON_FILTER_TYPE_MEMCG:   Specific memcg's pages.
  */
 enum damon_filter_type {
        DAMON_FILTER_TYPE_ANON,
+       DAMON_FILTER_TYPE_MEMCG,
 };
 
 /**
@@ -753,12 +755,16 @@ enum damon_filter_type {
  * @type:      Type of the region.
  * @matching:  Whether this filter is for the type-matching ones.
  * @allow:     Whether the @type-@matching ones should pass this filter.
+ * @memcg_id:  Memcg id of the question if @type is DAMON_FILTER_MEMCG.
  * @list:      Siblings list.
  */
 struct damon_filter {
        enum damon_filter_type type;
        bool matching;
        bool allow;
+       union {
+               u64 memcg_id;
+       };
        struct list_head list;
 };
 
index 903fd6fc978960eb2d663af3bf9c53270f49a871..9a5a835a4d3f7532020afa376cf881b5ecfb0807 100644 (file)
@@ -1430,6 +1430,13 @@ static void damon_commit_filter(struct damon_filter *dst,
        dst->type = src->type;
        dst->matching = src->matching;
        dst->allow = src->allow;
+       switch (dst->type) {
+       case DAMON_FILTER_TYPE_MEMCG:
+               dst->memcg_id = src->memcg_id;
+               break;
+       default:
+               break;
+       }
 }
 
 static int damon_commit_filters(struct damon_probe *dst,
@@ -1454,6 +1461,13 @@ static int damon_commit_filters(struct damon_probe *dst,
                                src_filter->matching, src_filter->allow);
                if (!new_filter)
                        return -ENOMEM;
+               switch (src_filter->type) {
+               case DAMON_FILTER_TYPE_MEMCG:
+                       new_filter->memcg_id = src_filter->memcg_id;
+                       break;
+               default:
+                       break;
+               }
                damon_add_filter(dst, new_filter);
        }
        return 0;