mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 03:53:37 +02:00
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>
This commit is contained in:
parent
51a1ebd3a2
commit
ec1d5bab06
|
|
@ -256,15 +256,16 @@ static unsigned long damon_pa_deactivate_pages(struct damon_region *r,
|
|||
sz_filter_passed);
|
||||
}
|
||||
|
||||
static unsigned long damon_pa_migrate(struct damon_region *r, struct damos *s,
|
||||
static unsigned long damon_pa_migrate(struct damon_region *r,
|
||||
unsigned long addr_unit, struct damos *s,
|
||||
unsigned long *sz_filter_passed)
|
||||
{
|
||||
unsigned long addr, applied;
|
||||
phys_addr_t addr, applied;
|
||||
LIST_HEAD(folio_list);
|
||||
struct folio *folio;
|
||||
|
||||
addr = r->ar.start;
|
||||
while (addr < r->ar.end) {
|
||||
addr = damon_pa_phys_addr(r->ar.start, addr_unit);
|
||||
while (addr < damon_pa_phys_addr(r->ar.end, addr_unit)) {
|
||||
folio = damon_get_folio(PHYS_PFN(addr));
|
||||
if (damon_pa_invalid_damos_folio(folio, s)) {
|
||||
addr += PAGE_SIZE;
|
||||
|
|
@ -274,7 +275,7 @@ static unsigned long damon_pa_migrate(struct damon_region *r, struct damos *s,
|
|||
if (damos_pa_filter_out(s, folio))
|
||||
goto put_folio;
|
||||
else
|
||||
*sz_filter_passed += folio_size(folio);
|
||||
*sz_filter_passed += folio_size(folio) / addr_unit;
|
||||
|
||||
if (!folio_isolate_lru(folio))
|
||||
goto put_folio;
|
||||
|
|
@ -286,7 +287,7 @@ static unsigned long damon_pa_migrate(struct damon_region *r, struct damos *s,
|
|||
applied = damon_migrate_pages(&folio_list, s->target_nid);
|
||||
cond_resched();
|
||||
s->last_applied = folio;
|
||||
return applied * PAGE_SIZE;
|
||||
return damon_pa_core_addr(applied * PAGE_SIZE, addr_unit);
|
||||
}
|
||||
|
||||
static unsigned long damon_pa_stat(struct damon_region *r, struct damos *s,
|
||||
|
|
@ -332,7 +333,7 @@ static unsigned long damon_pa_apply_scheme(struct damon_ctx *ctx,
|
|||
sz_filter_passed);
|
||||
case DAMOS_MIGRATE_HOT:
|
||||
case DAMOS_MIGRATE_COLD:
|
||||
return damon_pa_migrate(r, scheme, sz_filter_passed);
|
||||
return damon_pa_migrate(r, aunit, scheme, sz_filter_passed);
|
||||
case DAMOS_STAT:
|
||||
return damon_pa_stat(r, scheme, sz_filter_passed);
|
||||
default:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user