Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mm/damon/paddr: support addr_unit for MIGRATE_{HOT,COLD}

Add support of addr_unit for DAMOS_MIGRATE_HOT and DAMOS_MIGRATE_COLD
action handling from the DAMOS operation implementation for the physical
address space.

Link: https://lkml.kernel.org/r/20250828171242.59810-6-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Signed-off-by: Quanmin Yan <yanquanmin1@huawei.com>
Reviewed-by: SeongJae Park <sj@kernel.org>
Cc: David Hildenbrand <david@redhat.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: ze zuo <zuoze1@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

SeongJae Park and committed by
Andrew Morton
ec1d5bab 51a1ebd3

+8 -7
+8 -7
mm/damon/paddr.c
··· 256 256 sz_filter_passed); 257 257 } 258 258 259 - static unsigned long damon_pa_migrate(struct damon_region *r, struct damos *s, 259 + static unsigned long damon_pa_migrate(struct damon_region *r, 260 + unsigned long addr_unit, struct damos *s, 260 261 unsigned long *sz_filter_passed) 261 262 { 262 - unsigned long addr, applied; 263 + phys_addr_t addr, applied; 263 264 LIST_HEAD(folio_list); 264 265 struct folio *folio; 265 266 266 - addr = r->ar.start; 267 - while (addr < r->ar.end) { 267 + addr = damon_pa_phys_addr(r->ar.start, addr_unit); 268 + while (addr < damon_pa_phys_addr(r->ar.end, addr_unit)) { 268 269 folio = damon_get_folio(PHYS_PFN(addr)); 269 270 if (damon_pa_invalid_damos_folio(folio, s)) { 270 271 addr += PAGE_SIZE; ··· 275 274 if (damos_pa_filter_out(s, folio)) 276 275 goto put_folio; 277 276 else 278 - *sz_filter_passed += folio_size(folio); 277 + *sz_filter_passed += folio_size(folio) / addr_unit; 279 278 280 279 if (!folio_isolate_lru(folio)) 281 280 goto put_folio; ··· 287 286 applied = damon_migrate_pages(&folio_list, s->target_nid); 288 287 cond_resched(); 289 288 s->last_applied = folio; 290 - return applied * PAGE_SIZE; 289 + return damon_pa_core_addr(applied * PAGE_SIZE, addr_unit); 291 290 } 292 291 293 292 static unsigned long damon_pa_stat(struct damon_region *r, struct damos *s, ··· 333 332 sz_filter_passed); 334 333 case DAMOS_MIGRATE_HOT: 335 334 case DAMOS_MIGRATE_COLD: 336 - return damon_pa_migrate(r, scheme, sz_filter_passed); 335 + return damon_pa_migrate(r, aunit, scheme, sz_filter_passed); 337 336 case DAMOS_STAT: 338 337 return damon_pa_stat(r, scheme, sz_filter_passed); 339 338 default: