This patch adds use_nodes_of_tier under
/sys/kernel/mm/damon/admin/kdamonds/<N>/contexts/<N>/schemes/<N>/
The 'use_nodes_of_tier' can be used to select nodes within the same memory
tier of target_nid for DAMOS actions such as DAMOS_MIGRATE_{HOT,COLD}.
Signed-off-by: wangchuanguo <wangchuanguo@xxxxxxxxxx>
---
include/linux/damon.h | 9 ++++++++-
include/linux/memory-tiers.h | 5 +++++
mm/damon/core.c | 6 ++++--
mm/damon/lru_sort.c | 3 ++-
mm/damon/paddr.c | 19 ++++++++++++-------
mm/damon/reclaim.c | 3 ++-
mm/damon/sysfs-schemes.c | 31 ++++++++++++++++++++++++++++++-
mm/memory-tiers.c | 13 +++++++++++++
samples/damon/mtier.c | 3 ++-
samples/damon/prcl.c | 3 ++-
10 files changed, 80 insertions(+), 15 deletions(-)
diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c
index e8464f7e0014..e13321cff38f 100644
--- a/mm/damon/paddr.c
+++ b/mm/damon/paddr.c
@@ -383,7 +383,7 @@ static unsigned long damon_pa_deactivate_pages(struct damon_region *r,
static unsigned int __damon_pa_migrate_folio_list(
struct list_head *migrate_folios, struct pglist_data *pgdat,
- int target_nid)
+ int target_nid, bool use_nodes_of_tier)
{
unsigned int nr_succeeded = 0;
nodemask_t allowed_mask = NODE_MASK_NONE;
@@ -405,6 +405,9 @@ static unsigned int __damon_pa_migrate_folio_list(
if (list_empty(migrate_folios))
return 0;
+ if (use_nodes_of_tier)
+ allowed_mask = get_tier_nodemask(target_nid);