]> Git Repo - linux.git/commitdiff
mm/damon/core: pass per-region filter-passed bytes to damos_walk_control->walk_fn()
authorSeongJae Park <[email protected]>
Mon, 6 Jan 2025 19:33:57 +0000 (11:33 -0800)
committerAndrew Morton <[email protected]>
Sun, 26 Jan 2025 04:22:28 +0000 (20:22 -0800)
Total size of memory that passed DAMON operations set layer-handled DAMOS
filters per scheme is provided to DAMON core API and ABI (sysfs interface)
users.  Having it per-region in non-accumulated way can provide it in
finer granularity.  Provide it to damos_walk() core API users, by passing
the data to damos_walk_control->walk_fn().

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: SeongJae Park <[email protected]>
Cc: Jonathan Corbet <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
include/linux/damon.h
mm/damon/core.c
mm/damon/sysfs.c

index 2a93dbe06eccafcc6c57900e9198a5c7b148e38b..298b1a831e626ebb2012f0ede1857edd46b07a0a 100644 (file)
@@ -388,7 +388,7 @@ struct damos;
 struct damos_walk_control {
        void (*walk_fn)(void *data, struct damon_ctx *ctx,
                        struct damon_target *t, struct damon_region *r,
-                       struct damos *s);
+                       struct damos *s, unsigned long sz_filter_passed);
        void *data;
 /* private: internal use only */
        /* informs if the kdamond finished handling of the walk request */
index c4ce72a86d812b1960bf516671969257068168c4..52e50f183ffe986be57afa290e24214866f30ebc 100644 (file)
@@ -1445,7 +1445,8 @@ static bool damos_filter_out(struct damon_ctx *ctx, struct damon_target *t,
  * installed by damos_walk() and not yet uninstalled, invoke it.
  */
 static void damos_walk_call_walk(struct damon_ctx *ctx, struct damon_target *t,
-               struct damon_region *r, struct damos *s)
+               struct damon_region *r, struct damos *s,
+               unsigned long sz_filter_passed)
 {
        struct damos_walk_control *control;
 
@@ -1454,7 +1455,7 @@ static void damos_walk_call_walk(struct damon_ctx *ctx, struct damon_target *t,
        mutex_unlock(&ctx->walk_control_lock);
        if (!control)
                return;
-       control->walk_fn(control->data, ctx, t, r, s);
+       control->walk_fn(control->data, ctx, t, r, s, sz_filter_passed);
 }
 
 /*
@@ -1574,7 +1575,7 @@ static void damos_apply_scheme(struct damon_ctx *c, struct damon_target *t,
                        sz_applied = c->ops.apply_scheme(c, t, r, s,
                                        &sz_ops_filter_passed);
                }
-               damos_walk_call_walk(c, t, r, s);
+               damos_walk_call_walk(c, t, r, s, sz_ops_filter_passed);
                ktime_get_coarse_ts64(&end);
                quota->total_charged_ns += timespec64_to_ns(&end) -
                        timespec64_to_ns(&begin);
index cf8fb5a963d6bada532e560dca8c3ae4e53a12c4..224873ca8aa68bcf05ee7ce3b16aee9f13bdc4e3 100644 (file)
@@ -1454,7 +1454,7 @@ struct damon_sysfs_schemes_walk_data {
 /* populate the region directory */
 static void damon_sysfs_schemes_tried_regions_upd_one(void *data, struct damon_ctx *ctx,
                struct damon_target *t, struct damon_region *r,
-               struct damos *s)
+               struct damos *s, unsigned long sz_filter_passed)
 {
        struct damon_sysfs_schemes_walk_data *walk_data = data;
        struct damon_sysfs_kdamond *sysfs_kdamond = walk_data->sysfs_kdamond;
This page took 0.064278 seconds and 4 git commands to generate.