From nobody Sun Feb 8 17:43:45 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A22021B87CC; Fri, 7 Feb 2025 21:20:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738963241; cv=none; b=SfvQt1vnACsZFo8HLRYJnAY7W0kf0b4ycRUHPMsL5cYFkrBdXUgUKpPGt9PBQkqmGj7o0hhka3HfCgnLoeiv4pQSI7lhSxCQC07UugILNOCtCAann5Y3L/30ekrSG3b/khdvA8hJ9gRGKiQvPHws7YbMtjkBuQtwfH7hX0+90WE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738963241; c=relaxed/simple; bh=5eAb6WCJyd/QZQWOfoLnHQEwZBeSQIp9J24NNYIAJsw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=H4ej9iXdGGhH61HPEpWe1j4V0IzQUkP1PodzVEoE112ze5Zvm3nYfYOaZiillfLdCoC6bKtQCBIa1jVtL+du7R1pVyYmb+v5yrYNOF8A4xH2hDeEIizAraBO9q48khX+e4JuVmzZFycKtLX5eOQnObU7SXyja35YOdNqPSIAATI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dj4E40C8; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dj4E40C8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B6096C4CED1; Fri, 7 Feb 2025 21:20:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738963239; bh=5eAb6WCJyd/QZQWOfoLnHQEwZBeSQIp9J24NNYIAJsw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dj4E40C8q0gg3ud86pNgaTm+kbxa71t2XiAGOaMKWerPD4HMKWLzhpR5OcEi1pieM LvSdpdKIOfzfIIiMB/j+G1OcGL+j1k8FEHWrPwhzps3WSQFDeRJ+JRJ3B8ONpNpN2r COTpEwjtAWtj3ET7sA+YfPeQCx4sn7CgXJocQF8NDwo8JB8WGVFcHrHlIfGwg6mGz+ petGKMi5vKt0jKi1NkdjE28Y+2+ohBfFaPRSZGEXe/z937Ej1VA4CvZnOz3JjyAx/c mIi6D+X/jvCNwTiZ/5EqbX7eYmSEquKprB8vy9IVks0wck4efGgRy3FlY6tG03NCs9 jCa5cmMHDpviw== From: SeongJae Park To: Andrew Morton Cc: Usama Arif , SeongJae Park , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, stable@vger.kernel.org Subject: [PATCH 1/2] mm/damon/ops: have damon_get_folio return folio even for tail pages Date: Fri, 7 Feb 2025 13:20:32 -0800 Message-Id: <20250207212033.45269-2-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250207212033.45269-1-sj@kernel.org> References: <20250207212033.45269-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Usama Arif This effectively adds support for large folios in damon for paddr, as damon_pa_mkold/young won't get a null folio from this function and won't ignore it, hence access will be checked and reported. This also means that larger folios will be considered for different DAMOS actions like pageout, prioritization and migration. As these DAMOS actions will consider larger folios, iterate through the region at folio_size and not PAGE_SIZE intervals. This should not have an affect on vaddr, as damon_young_pmd_entry considers pmd entries. Fixes: a28397beb55b ("mm/damon: implement primitives for physical address s= pace monitoring") Cc: Signed-off-by: Usama Arif Reviewed-by: SeongJae Park Signed-off-by: SeongJae Park --- mm/damon/ops-common.c | 2 +- mm/damon/paddr.c | 24 ++++++++++++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/mm/damon/ops-common.c b/mm/damon/ops-common.c index d25d99cb5f2b..d511be201c4c 100644 --- a/mm/damon/ops-common.c +++ b/mm/damon/ops-common.c @@ -24,7 +24,7 @@ struct folio *damon_get_folio(unsigned long pfn) struct page *page =3D pfn_to_online_page(pfn); struct folio *folio; =20 - if (!page || PageTail(page)) + if (!page) return NULL; =20 folio =3D page_folio(page); diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index 0f9ae14f884d..0fb61f6ddb8d 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -266,11 +266,14 @@ static unsigned long damon_pa_pageout(struct damon_re= gion *r, struct damos *s, damos_add_filter(s, filter); } =20 - for (addr =3D r->ar.start; addr < r->ar.end; addr +=3D PAGE_SIZE) { + addr =3D r->ar.start; + while (addr < r->ar.end) { struct folio *folio =3D damon_get_folio(PHYS_PFN(addr)); =20 - if (!folio) + if (!folio) { + addr +=3D PAGE_SIZE; continue; + } =20 if (damos_pa_filter_out(s, folio)) goto put_folio; @@ -286,6 +289,7 @@ static unsigned long damon_pa_pageout(struct damon_regi= on *r, struct damos *s, else list_add(&folio->lru, &folio_list); put_folio: + addr +=3D folio_size(folio); folio_put(folio); } if (install_young_filter) @@ -301,11 +305,14 @@ static inline unsigned long damon_pa_mark_accessed_or= _deactivate( { unsigned long addr, applied =3D 0; =20 - for (addr =3D r->ar.start; addr < r->ar.end; addr +=3D PAGE_SIZE) { + addr =3D r->ar.start; + while (addr < r->ar.end) { struct folio *folio =3D damon_get_folio(PHYS_PFN(addr)); =20 - if (!folio) + if (!folio) { + addr +=3D PAGE_SIZE; continue; + } =20 if (damos_pa_filter_out(s, folio)) goto put_folio; @@ -318,6 +325,7 @@ static inline unsigned long damon_pa_mark_accessed_or_d= eactivate( folio_deactivate(folio); applied +=3D folio_nr_pages(folio); put_folio: + addr +=3D folio_size(folio); folio_put(folio); } return applied * PAGE_SIZE; @@ -464,11 +472,14 @@ static unsigned long damon_pa_migrate(struct damon_re= gion *r, struct damos *s, unsigned long addr, applied; LIST_HEAD(folio_list); =20 - for (addr =3D r->ar.start; addr < r->ar.end; addr +=3D PAGE_SIZE) { + addr =3D r->ar.start; + while (addr < r->ar.end) { struct folio *folio =3D damon_get_folio(PHYS_PFN(addr)); =20 - if (!folio) + if (!folio) { + addr +=3D PAGE_SIZE; continue; + } =20 if (damos_pa_filter_out(s, folio)) goto put_folio; @@ -479,6 +490,7 @@ static unsigned long damon_pa_migrate(struct damon_regi= on *r, struct damos *s, goto put_folio; list_add(&folio->lru, &folio_list); put_folio: + addr +=3D folio_size(folio); folio_put(folio); } applied =3D damon_pa_migrate_pages(&folio_list, s->target_nid); --=20 2.39.5