forked from mirrors/linux
		
	mm/damon/core: support damos_filter->allow
DAMOS filters supports allowing behavior, but the core layer's DAMOS filters handling logic still assumes only rejecting (filtering-out) behavior. Update the logic to aware of and respect the behavioral decision by reading damos_filter->allow when making the decision to exclude a region or not. Link: https://lkml.kernel.org/r/20250109175126.57878-4-sj@kernel.org Signed-off-by: SeongJae Park <sj@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									fe6d7fdd62
								
							
						
					
					
						commit
						491fee286e
					
				
					 2 changed files with 8 additions and 8 deletions
				
			
		|  | @ -1374,7 +1374,7 @@ static void damos_update_stat(struct damos *s, | |||
| 	s->stat.sz_ops_filter_passed += sz_ops_filter_passed; | ||||
| } | ||||
| 
 | ||||
| static bool __damos_filter_out(struct damon_ctx *ctx, struct damon_target *t, | ||||
| static bool damos_filter_match(struct damon_ctx *ctx, struct damon_target *t, | ||||
| 		struct damon_region *r, struct damos_filter *filter) | ||||
| { | ||||
| 	bool matched = false; | ||||
|  | @ -1428,8 +1428,8 @@ static bool damos_filter_out(struct damon_ctx *ctx, struct damon_target *t, | |||
| 	struct damos_filter *filter; | ||||
| 
 | ||||
| 	damos_for_each_filter(filter, s) { | ||||
| 		if (__damos_filter_out(ctx, t, r, filter)) | ||||
| 			return true; | ||||
| 		if (damos_filter_match(ctx, t, r, filter)) | ||||
| 			return !filter->allow; | ||||
| 	} | ||||
| 	return false; | ||||
| } | ||||
|  |  | |||
|  | @ -434,25 +434,25 @@ static void damos_test_filter_out(struct kunit *test) | |||
| 	damon_add_region(r, t); | ||||
| 
 | ||||
| 	/* region in the range */ | ||||
| 	KUNIT_EXPECT_TRUE(test, __damos_filter_out(NULL, t, r, f)); | ||||
| 	KUNIT_EXPECT_TRUE(test, damos_filter_match(NULL, t, r, f)); | ||||
| 	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1); | ||||
| 
 | ||||
| 	/* region before the range */ | ||||
| 	r->ar.start = DAMON_MIN_REGION * 1; | ||||
| 	r->ar.end = DAMON_MIN_REGION * 2; | ||||
| 	KUNIT_EXPECT_FALSE(test, __damos_filter_out(NULL, t, r, f)); | ||||
| 	KUNIT_EXPECT_FALSE(test, damos_filter_match(NULL, t, r, f)); | ||||
| 	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1); | ||||
| 
 | ||||
| 	/* region after the range */ | ||||
| 	r->ar.start = DAMON_MIN_REGION * 6; | ||||
| 	r->ar.end = DAMON_MIN_REGION * 8; | ||||
| 	KUNIT_EXPECT_FALSE(test, __damos_filter_out(NULL, t, r, f)); | ||||
| 	KUNIT_EXPECT_FALSE(test, damos_filter_match(NULL, t, r, f)); | ||||
| 	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1); | ||||
| 
 | ||||
| 	/* region started before the range */ | ||||
| 	r->ar.start = DAMON_MIN_REGION * 1; | ||||
| 	r->ar.end = DAMON_MIN_REGION * 4; | ||||
| 	KUNIT_EXPECT_FALSE(test, __damos_filter_out(NULL, t, r, f)); | ||||
| 	KUNIT_EXPECT_FALSE(test, damos_filter_match(NULL, t, r, f)); | ||||
| 	/* filter should have split the region */ | ||||
| 	KUNIT_EXPECT_EQ(test, r->ar.start, DAMON_MIN_REGION * 1); | ||||
| 	KUNIT_EXPECT_EQ(test, r->ar.end, DAMON_MIN_REGION * 2); | ||||
|  | @ -465,7 +465,7 @@ static void damos_test_filter_out(struct kunit *test) | |||
| 	/* region started in the range */ | ||||
| 	r->ar.start = DAMON_MIN_REGION * 2; | ||||
| 	r->ar.end = DAMON_MIN_REGION * 8; | ||||
| 	KUNIT_EXPECT_TRUE(test, __damos_filter_out(NULL, t, r, f)); | ||||
| 	KUNIT_EXPECT_TRUE(test, damos_filter_match(NULL, t, r, f)); | ||||
| 	/* filter should have split the region */ | ||||
| 	KUNIT_EXPECT_EQ(test, r->ar.start, DAMON_MIN_REGION * 2); | ||||
| 	KUNIT_EXPECT_EQ(test, r->ar.end, DAMON_MIN_REGION * 6); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 SeongJae Park
						SeongJae Park