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; | 	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) | 		struct damon_region *r, struct damos_filter *filter) | ||||||
| { | { | ||||||
| 	bool matched = false; | 	bool matched = false; | ||||||
|  | @ -1428,8 +1428,8 @@ static bool damos_filter_out(struct damon_ctx *ctx, struct damon_target *t, | ||||||
| 	struct damos_filter *filter; | 	struct damos_filter *filter; | ||||||
| 
 | 
 | ||||||
| 	damos_for_each_filter(filter, s) { | 	damos_for_each_filter(filter, s) { | ||||||
| 		if (__damos_filter_out(ctx, t, r, filter)) | 		if (damos_filter_match(ctx, t, r, filter)) | ||||||
| 			return true; | 			return !filter->allow; | ||||||
| 	} | 	} | ||||||
| 	return false; | 	return false; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -434,25 +434,25 @@ static void damos_test_filter_out(struct kunit *test) | ||||||
| 	damon_add_region(r, t); | 	damon_add_region(r, t); | ||||||
| 
 | 
 | ||||||
| 	/* region in the range */ | 	/* 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); | 	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1); | ||||||
| 
 | 
 | ||||||
| 	/* region before the range */ | 	/* region before the range */ | ||||||
| 	r->ar.start = DAMON_MIN_REGION * 1; | 	r->ar.start = DAMON_MIN_REGION * 1; | ||||||
| 	r->ar.end = DAMON_MIN_REGION * 2; | 	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); | 	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1); | ||||||
| 
 | 
 | ||||||
| 	/* region after the range */ | 	/* region after the range */ | ||||||
| 	r->ar.start = DAMON_MIN_REGION * 6; | 	r->ar.start = DAMON_MIN_REGION * 6; | ||||||
| 	r->ar.end = DAMON_MIN_REGION * 8; | 	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); | 	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1); | ||||||
| 
 | 
 | ||||||
| 	/* region started before the range */ | 	/* region started before the range */ | ||||||
| 	r->ar.start = DAMON_MIN_REGION * 1; | 	r->ar.start = DAMON_MIN_REGION * 1; | ||||||
| 	r->ar.end = DAMON_MIN_REGION * 4; | 	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 */ | 	/* filter should have split the region */ | ||||||
| 	KUNIT_EXPECT_EQ(test, r->ar.start, DAMON_MIN_REGION * 1); | 	KUNIT_EXPECT_EQ(test, r->ar.start, DAMON_MIN_REGION * 1); | ||||||
| 	KUNIT_EXPECT_EQ(test, r->ar.end, DAMON_MIN_REGION * 2); | 	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 */ | 	/* region started in the range */ | ||||||
| 	r->ar.start = DAMON_MIN_REGION * 2; | 	r->ar.start = DAMON_MIN_REGION * 2; | ||||||
| 	r->ar.end = DAMON_MIN_REGION * 8; | 	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 */ | 	/* filter should have split the region */ | ||||||
| 	KUNIT_EXPECT_EQ(test, r->ar.start, DAMON_MIN_REGION * 2); | 	KUNIT_EXPECT_EQ(test, r->ar.start, DAMON_MIN_REGION * 2); | ||||||
| 	KUNIT_EXPECT_EQ(test, r->ar.end, DAMON_MIN_REGION * 6); | 	KUNIT_EXPECT_EQ(test, r->ar.end, DAMON_MIN_REGION * 6); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 SeongJae Park
						SeongJae Park