From patchwork Fri Apr 26 19:52:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13645324 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1A509C4345F for ; Fri, 26 Apr 2024 19:53:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 79FD46B0089; Fri, 26 Apr 2024 15:53:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7290B6B0092; Fri, 26 Apr 2024 15:53:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5F0A86B0093; Fri, 26 Apr 2024 15:53:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 3F0FF6B0089 for ; Fri, 26 Apr 2024 15:53:04 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id A7577C0420 for ; Fri, 26 Apr 2024 19:53:03 +0000 (UTC) X-FDA: 82052731446.02.EC2AC81 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf16.hostedemail.com (Postfix) with ESMTP id 0E76F180006 for ; Fri, 26 Apr 2024 19:53:01 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=NuBZFNFW; spf=pass (imf16.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1714161182; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=sUGoYN0Fu2JwJJUX4qzPlBqkcVYVJWabggt2RjrpG48=; b=ynMioeDupgfBG36y5fMvYOZg2efjmRRFsqQ6/mzk3O3wNIlR/tgLU4SxIOQjQLfitRLfjS JOSvcYFbfxvJIO9vApi6rETsyzy9NNtvAUauqIs+ys8Sj+IM/cTvDH/A+6aAucLNuYBE7w CjhjaEoJBsKPR7bdeKzFKgRqQJYdfsc= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=NuBZFNFW; spf=pass (imf16.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714161182; a=rsa-sha256; cv=none; b=Pd5ahaKLCcQuZZ4CcYyZqWx9LKHHTwINuj55KqKw4/TLeOMd+RYeR6Ttg0uVuU0yQNrnX1 s4F6EZwWR1/hwIZRMEEVF+zDGfL5Z5xfYBzMZEEVArEpIsPWqj/x+xd/ckDjLly7xeV9zj R4U/7FLtH2WOoC4LyCA2MDt7MCXIw/c= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 26F2D6212A; Fri, 26 Apr 2024 19:53:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4EF07C2BD10; Fri, 26 Apr 2024 19:53:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1714161180; bh=q0ougyw7Umb7GSxVQouuuoREw7O7beWYRZUPMMfuCtA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NuBZFNFW+n7ysMXFK5xQPz08L8HRsd3vbiGBevHLvdhLazTjRtvHpHpeZTEURwoY6 SIKHqPQbzTtOt5nTuqBxLnRdn2+xnW6Sq5Ehcg9D/xOP10v4Uw2VklESDv5RS5kWLK kCdl7iIr1QMfKYlwBMCTiQISFW7CiIBG0jddZemWXJNNTm9HROiQxlqWr6DvdqefiG gvxDL9uuYv4JeU398CZUPWMGostf6585yV9p1rNjCGF4Jeo6Bo7zHe/KZNW8HbrmOd j/jnPzerkABscsKz8LT5yYfJFhEfikGBob9CzFCIJLZY6utDk+rDtETC8OAoshJzCE SZ8jSW88XABLw== From: SeongJae Park To: Andrew Morton Cc: SeongJae Park , damon@lists.linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Honggyu Kim Subject: [PATCH 1/7] mm/damon/paddr: implement damon_folio_young() Date: Fri, 26 Apr 2024 12:52:40 -0700 Message-Id: <20240426195247.100306-2-sj@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240426195247.100306-1-sj@kernel.org> References: <20240426195247.100306-1-sj@kernel.org> MIME-Version: 1.0 X-Stat-Signature: n5accesc4gwyrf3ror4w6bch5yxdzwaf X-Rspamd-Queue-Id: 0E76F180006 X-Rspamd-Server: rspam10 X-Rspam-User: X-HE-Tag: 1714161181-331449 X-HE-Meta: U2FsdGVkX19Vro1fU7dvsnSMR05kRT1cFXnaCYMQLMQH/wAa6M8QEljOszGC0Kf4ew44t8lf4pRTE58N5vlL5rKICSjju5ErXbhUWOkj6K5JSwiQz8/O1hfejYFXWaukEhrRhFzlE5Hj/04XsGJsYgRP3HeJjl4WHkLivyeyvkQmqExa604eA4qSntLW48yNye0Dn+Ah6X0uf88d9Yulzp3cc1r5aAbunm9s/91wOOzgQJtU0SM6Zbr4ySqhfTQjqZyRYWCbG6Yn0DjvGap8EpF7zWSswopYe7VFOHm+gUJYIwhZ6UhNgFguSGayk8WFvI3pCFsTYUXo9D7+g18+YbLKp/RgTwAbx/qUlfEe46I7G+cO0R0gNFeuS88dO+htYOIY0qsO2/h7YFAFwgIy0O6tYjCkjW/vPcL8myRlTI9xcN7XS/U2w7Hm4rK3wb/+yXwqi/Cg8eK/ChahMfsDEDckgHQTy7swzPJckl+zBLMS/oHZWGT1V5aRXIXBcv+nkguzEyC+UrJRlu6LZLDxl+pZAIF5Ec9FLIBP5WPZihQdlvul/qiXjSj4xlW4bK3hnE4QSbcjRi0PApdgzKVCDkF+xnytc3wRn5H5QEwngKBfAnBk9ZoFPfYZE+1KwD8apLD9oht/aO2E6WaUIGQSDLWDkT487yQGdlV5Kbdpa3z1Raaj8bDMcrOq5YtGkx9ngZQYf3NIzGgoqFPuGb0pxuatPHn66cq1jNySkwOPAT4nb2lsMG4cP2RSHaR6FJMnqma3vUt685ZCPm8wIv45cZ7CH0Kr+IO3Pw6dprwfI7UPOuq3czjARD2RFSeH6rsYTQKh5cx4CEAQYy1OELVIL3dnEj3jJB98gE8xMw0Mv4ep6+kBBVqycJNtg/jyX4S+YWtRbT8BTh1Pc3u3/snkjytw8TPwFHJcELOYZoSJD+YhAVvrt0cXWoD3QlAqC05/Hr6GsBBKqUge/NaDDRI DI+pWXR2 w+kUYawj6yjh38SPLuGvfH/gFyo3Kz0zGSC0Hny+kmKAsSGrtWMP5Zj/nkpGXdSZ84Gb5z35UhlXFkwlKvBS73Re8YbYR8HhxI0gHKnoAuIJebfUyN4GcTVGlbeQavweLyhRuw51upnrz1Hnercetu5bbIPWc+jlauzUfFTlpAcxW19A0HzsaqllcRfjKHWzAW36DM3keKy7isE+uShJU3mQIo3FypvXbn5532uPwDVw/y2Iv0AuT29YkZ0tHQCkA60kmL3IE8I2tggbBBtoWlJ7TgvNQ7rSx73ko6WGnzoSUA38e5KKHmMPh7+IqrPRJxS0DHasENz+1gE5eP8252/Dn4g== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: damon_pa_young() receives physical address, get the folio covering the address, and show if the folio is accessed since the last check. A following commit will reuse the internal logic for checking access to a given folio. To avoid duplication of the code, split the internal logic. Also, change the rmap walker function's name from __damon_pa_young() to damon_folio_young_one(), following the change of the caller's name and the naming rule that more commonly used by other rmap walkers. Signed-off-by: SeongJae Park Tested-by: Honggyu Kim --- mm/damon/paddr.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index 5e6dc312072cd..25c3ba2a9eaf4 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -79,8 +79,8 @@ static void damon_pa_prepare_access_checks(struct damon_ctx *ctx) } } -static bool __damon_pa_young(struct folio *folio, struct vm_area_struct *vma, - unsigned long addr, void *arg) +static bool damon_folio_young_one(struct folio *folio, + struct vm_area_struct *vma, unsigned long addr, void *arg) { bool *accessed = arg; DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, addr, 0); @@ -111,38 +111,44 @@ static bool __damon_pa_young(struct folio *folio, struct vm_area_struct *vma, return *accessed == false; } -static bool damon_pa_young(unsigned long paddr, unsigned long *folio_sz) +static bool damon_folio_young(struct folio *folio) { - struct folio *folio = damon_get_folio(PHYS_PFN(paddr)); bool accessed = false; struct rmap_walk_control rwc = { .arg = &accessed, - .rmap_one = __damon_pa_young, + .rmap_one = damon_folio_young_one, .anon_lock = folio_lock_anon_vma_read, }; bool need_lock; - if (!folio) - return false; - if (!folio_mapped(folio) || !folio_raw_mapping(folio)) { if (folio_test_idle(folio)) - accessed = false; + return false; else - accessed = true; - goto out; + return true; } need_lock = !folio_test_anon(folio) || folio_test_ksm(folio); if (need_lock && !folio_trylock(folio)) - goto out; + return false; rmap_walk(folio, &rwc); if (need_lock) folio_unlock(folio); -out: + return accessed; +} + +static bool damon_pa_young(unsigned long paddr, unsigned long *folio_sz) +{ + struct folio *folio = damon_get_folio(PHYS_PFN(paddr)); + bool accessed; + + if (!folio) + return false; + + accessed = damon_folio_young(folio); *folio_sz = folio_size(folio); folio_put(folio); return accessed;