From mboxrd@z Thu Jan 1 00:00:00 1970 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 8FAD0C77B7C for ; Wed, 2 Jul 2025 20:15:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2B1CB6B00B1; Wed, 2 Jul 2025 16:15:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 260696B00B2; Wed, 2 Jul 2025 16:15:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 14F946B00B3; Wed, 2 Jul 2025 16:15:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 0111E6B00B1 for ; Wed, 2 Jul 2025 16:15:11 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id AE12B80473 for ; Wed, 2 Jul 2025 20:15:11 +0000 (UTC) X-FDA: 83620428822.28.410FF3D Received: from mail-yw1-f179.google.com (mail-yw1-f179.google.com [209.85.128.179]) by imf13.hostedemail.com (Postfix) with ESMTP id C840520015 for ; Wed, 2 Jul 2025 20:15:09 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=PBBildeQ; spf=pass (imf13.hostedemail.com: domain of bijan311@gmail.com designates 209.85.128.179 as permitted sender) smtp.mailfrom=bijan311@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751487309; 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=NMg5BL0bm2K3XwrpoVYC/9dFOzEmi6T120k7I9qtnC4=; b=P2UrNJIxhUUbOwRkAV5iHNV7hxqOLPy48/uwEdSvdRxRevlHw7ZBqV+zAL5r7k704Ouwvy r2w1F4MCNIPkPX/RGac5CcbnNRqykbnPNfeqnFrfvZ/4L/skL7T4Z56ntFG3UzJA82awOZ MtPHEzp4VSeGeXN7tht0Wyt5iFEN7OU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751487309; a=rsa-sha256; cv=none; b=3sl1T+BMhmVYwNqkwLYAN9NmtiUzWRcUzhKYJCfAQ0erIA/1eBW9ALx5Ar5IsJe04hbX/m kBR/3GuezviRlNt0oSo2NCGmNtyh0sjJU3hVgtw+Dz8oNr9bQnKwd1Ep1g6iQOoXl1Qdjy 21vuKGBKmIhbMn0vE/uXkA52c6NwTMk= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=PBBildeQ; spf=pass (imf13.hostedemail.com: domain of bijan311@gmail.com designates 209.85.128.179 as permitted sender) smtp.mailfrom=bijan311@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-yw1-f179.google.com with SMTP id 00721157ae682-714066c7bbbso82712357b3.3 for ; Wed, 02 Jul 2025 13:15:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751487309; x=1752092109; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NMg5BL0bm2K3XwrpoVYC/9dFOzEmi6T120k7I9qtnC4=; b=PBBildeQXygBUw3T2sXOiC9J3cYuZfnL3DGDRftM1t4xKlA0kG7Fdzxt4UN2A19gJm Ec2krK2+wNCrep1Yiddcn+lkldKOGOQwANtwzMcqbXOvwGXzhl5rBDks345WeEeXsc9P 7iXxm8dl4GZ3A9UY6NgXWCeD/reoK1k73muO6SchvRtmh0F06kqGImkQnvzTE6j0LpRU NepKyI1EqTNrs+4qLmRVdjwBLu6zfSCg8KpcxlKBVlGoJKNwU1xa9AknaXpfu/eOXGbQ eKUUluvugp5EHXdCYexAQ9eTcL0MyXomFstPLh9Em5dV2X/2A01n5uRa8l2uxu/rRj1A YX+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751487309; x=1752092109; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NMg5BL0bm2K3XwrpoVYC/9dFOzEmi6T120k7I9qtnC4=; b=bnBFZaDssXQCRjRxweaRH+fpzGniIB3oYPl+wLX138yN1cy3G29VX609HX0tiBupe3 VjlJckRAjprKHtLlezbKrPV3a0PQHPmoln35syYu/6osmaeovPgPjs/Q9EWfxK3yXHfh DhKZ4Am20VOsi3IwOVHk9O/vYEvh2HvWrJ3JEEx17ecHAGCHbZ5NlN7et6uG3LIt6Yat SUULYOLCvT15VYIpZCLaTa8t8GCVU02VxYQYdAOYu235sRBkGGOl1u7qphn7Hu0DUwRR jbKSL5V6giHDT8EBiYkkonbIU+zm1/CayhVoFXbIeD4Ti4PE+zdzpfEcQGNjAm7P0B46 lsbg== X-Forwarded-Encrypted: i=1; AJvYcCXpfjB5/Df9bHu60tBDpm3lWZ32nfUkM0mxXMWxQMJM9KCfpLAooJiSwXJY5ufwVbpsyVPtVh2ruA==@kvack.org X-Gm-Message-State: AOJu0YzahpCXeyLifZPLYexbqMLwug53pDDmW/QSJhwr1QmSAa7kkA0Z rkz9Idfi8HtXzCxJ7tHn8EHxhThmG7i2hLrAlVUudDsgjZDK2gLf2+kN X-Gm-Gg: ASbGncut/OFK605SGUSYiUpwWgFuAtDsCxyXiOH5EM9vuipDGLKCMnWu2LgFPCDCAgS vD0O66MC3T2H3OARDHFw8dktuYyq4hiPF8xLo+xohWBKSXYrVo7gKByXagcw5KPVDlVuHjT+DRJ 1r6e+lcPcLmBMQsBbrbXyI4FZeFJ4bK2hySK65ZWx5pevj601Ob88QuHOLM60gE+WkKpCBOEs3C HFd80R1Hn9oZinqrfW3JqMzdf7ifbW6iMThaNe2hTKPBtONoaB/sIDN+Ts+KS4HoftIFHiJeWmd DPsytt2vHiFz8W6WRoNkiLP3cH86YMz/FkCRsJS1W6fuKEbb2+1eiYPc2HzjVArHADSkeCJjA9i yv1TVOhY= X-Google-Smtp-Source: AGHT+IGKvPDCimyFCg/hqso7aOb/BUUZpqnaqOXEPoQpEeHLKPtOWIiEclbT23ZwcvqRjO6m/wd+RQ== X-Received: by 2002:a05:690c:6701:b0:70e:a1e:d9c7 with SMTP id 00721157ae682-71658fe3499mr15332597b3.10.1751487308762; Wed, 02 Jul 2025 13:15:08 -0700 (PDT) Received: from bijan-laptop.attlocal.net ([2600:1700:680e:c000:873e:8f35:7cd8:3fe3]) by smtp.gmail.com with ESMTPSA id 00721157ae682-71515cb4347sm26124157b3.83.2025.07.02.13.15.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 13:15:08 -0700 (PDT) From: Bijan Tabatabai To: damon@lists.linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org Cc: sj@kernel.org, akpm@linux-foundation.org, corbet@lwn.net, joshua.hahnjy@gmail.com, bijantabatab@micron.com, venkataravis@micron.com, emirakhur@micron.com, ajayjoshi@micron.com, vtavarespetr@micron.com, Ravi Shankar Jonnalagadda Subject: [RFC PATCH v3 13/13] mm/damon/vaddr: Apply filters in migrate_{hot/cold} Date: Wed, 2 Jul 2025 15:13:36 -0500 Message-ID: <20250702201337.5780-14-bijan311@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250702201337.5780-1-bijan311@gmail.com> References: <20250702201337.5780-1-bijan311@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: C840520015 X-Stat-Signature: efqz4n5g61qj89i9jox5znyjuza1keuh X-Rspam-User: X-HE-Tag: 1751487309-385208 X-HE-Meta: U2FsdGVkX1+0Hx3XLYTNf7KzjDJU/odXMKDdLGWSGu0cZEbZc9ElLA6VauEqkgIA8xyrqPAMl7gXFGwntK9BHlUZz2KIB7OmBq07cdMS86fllXzm6iTzmKz0pSjfUE9Yp4JVomD4y6/ImqHxjBqUXOZl73Izv60p01aVp0kS8B6y80iDg1mMWwkrJo1u9FQNZlDSE4XsOLoecacpUIo2DHzzdnJhqY4koPjBRv9c1rbwtHB9MO6yrZYxYJZcRmEhwmRuy8VX3AphiKoIyMgI65PEgjhklNNouvqSZleJrp39LDbXt4MdYi0SRQmIsV+sIm9BoTaBGhlSZhisGURZpPZSmgbQCixUJNftQt6BYZA2Y0UPv/Pbk2bNtKU9bQ+y96cUjRhxghDGMvweAw5+g1pAHkR0CUgHW0pDAWlBNmNbcFKUGRK7C1pGg7DHceprG3Z1IS6LvRDKCua7CjZS27vmc6jhM7Fzb8d7nUh8P3hR1V8jEpC5AsOeuEJ2zdvoyuA6LwUYxJaUopiMsbYAkF9K5lWk7WcRymKxSr5zC1hkR3izQ+zwfnb2+geKbwBrdyaF7Mqy+L7vxtuVcAqtIBdYYeLksbhtd+/K6LJPtj92/GT1TtGa1gC6YMtXcjH3/Ta7pniCDoSR7QM5FltDvknDjA9L/4qX/vsWifx5I9dr0iUsCMy++4ghd6p+DR0YyV8BVjHTIPAJZk+4mD1ny+l2Ld6XzxAH/WpyGdUreuEnSpxzux2TT7FpHsXKmPq/9pLvQdW/chAX1fbDbRlxhy/u7PXTmn21AuV8RM+VmAJVDsQ7PVGwNieBmSz9GTBuYdM78W8XeI+FQ314EmlyBOQLpjbQzDMNafvR621KwpTus7KTEdwLp1CgpAMVpACXGvBP8ew/g77Qesrw/PrT+5EfSfR7vo4M5VLJzfEbKFrM2M9YQFctkeMtrLabkXwzP1TZsvJvtZvTmeIpXDr EOub9s3i 9nIxEUfZnC0Il0BTFujqipkvCWreLdUunGumveqVzjRcHsKS5LKSiGxxW/YNSD+XSd2+b/uVdTQnA8uSMVbbEGdjmO9XXdv8UKI2AiTQRxNwyb3HwtowHRHuGmTkehp2MKBdlekP9ECVgB8M/dZnzdRI37DVcblG98ejDv77lhEippzDuNK/wCISpaOU1c2kOJZTG+vL39uI8spd18F8DUB7UtZbrwo7RZfX3nlLbAA05CHkhh3FEwQBVtGDXawTDKMJVVTB8zJkY+9MFavtocSy6Pxg4Ly8BInieo7+tdJ9bFhZ+EyCErahhFm31WgXmi3BHV2xQnEKRuaWbO0fdrNgOJG/IEbyvxU1rD6JosXm8BhthN9RV0vKGC8H31F+Be3zf/IHPl6/GKuvYXlwYqLYY8RLAqL58VerRoIeoHBZKaY/uy75TTmywhH+65pa+JEWXBwxWLybFbMqJTXHNtwSFi+WhIJiq1fG0RL21hM5LjyG59jBYQcqnlnt/MdqyDo3LdAd8rTekRkN5MGGiQY6V4JkA+BNtgt+p2tiqmMnOqvEffwvbVYcBUn0dgJioW47mEfeUVWuRCT2XBgNDFhsAv1qTzgIrsFkjehvUgPSfKw0J7/RlLlAmH573jxBairm7AZbT22FthLd2e9TaRMFbrvNbSU1L1LJdJY90NI7/BcbCy5GiiHmgLQ== 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: From: Bijan Tabatabai The paddr versions of migrate_{hot/cold} filter out folios from migration based on the scheme's filters. This patch does the same for the vaddr versions of those schemes. The filtering code is mostly the same for the paddr and vaddr versions. The exception is the young filter. paddr determines if a page is young by doing a folio rmap walk to find the page table entries corresponding to the folio. However, vaddr schemes have easier access to the page tables, so we add some logic to avoid the extra work. Co-developed-by: Ravi Shankar Jonnalagadda Signed-off-by: Ravi Shankar Jonnalagadda Signed-off-by: Bijan Tabatabai --- mm/damon/vaddr.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c index 5f230a427fdc..2a485bf19101 100644 --- a/mm/damon/vaddr.c +++ b/mm/damon/vaddr.c @@ -611,6 +611,62 @@ static unsigned int damon_va_check_accesses(struct damon_ctx *ctx) return max_nr_accesses; } +static bool damos_va_filter_young(struct damos_filter *filter, + struct folio *folio, struct vm_area_struct *vma, + unsigned long addr, pte_t *ptep, pmd_t *pmdp) +{ + bool young; + + if (ptep) { + young = pte_young(*ptep); + } else if (pmdp) { + young = pmd_young(*pmdp); + } else { + WARN_ONCE(1, "Neither ptep nor pmdp provided"); + return false; + } + + young = young || !folio_test_idle(folio) || + mmu_notifier_test_young(vma->vm_mm, addr); + + if (young && ptep) + damon_ptep_mkold(ptep, vma, addr); + else if (young && pmdp) + damon_pmdp_mkold(pmdp, vma, addr); + + return young == filter->matching; +} + +static bool damos_va_filter_out(struct damos *scheme, struct folio *folio, + struct vm_area_struct *vma, unsigned long addr, + pte_t *ptep, pmd_t *pmdp) +{ + struct damos_filter *filter; + bool matched; + + if (scheme->core_filters_allowed) + return false; + + damos_for_each_ops_filter(filter, scheme) { + /* + * damos_folio_filter_match checks the young filter by doing an + * rmap on the folio to find its page table. However, being the + * vaddr scheme, we have direct access to the page tables, so + * use that instead. + */ + if (filter->type == DAMOS_FILTER_TYPE_YOUNG) { + matched = damos_va_filter_young(filter, folio, vma, + addr, ptep, pmdp); + } else { + matched = damos_folio_filter_match(filter, folio); + } + + if (matched) + return !filter->allow; + } + return scheme->ops_filters_default_reject; +} + struct damos_va_migrate_private { struct list_head *migration_lists; struct damos *scheme; @@ -695,8 +751,12 @@ static int damos_va_migrate_pmd_entry(pmd_t *pmd, unsigned long addr, if (!folio) goto unlock; + if (damos_va_filter_out(s, folio, walk->vma, addr, NULL, pmd)) + goto put_folio; + damos_va_migrate_folio(folio, walk->vma, addr, dests, migration_lists); +put_folio: folio_put(folio); unlock: spin_unlock(ptl); @@ -724,8 +784,12 @@ static int damos_va_migrate_pte_entry(pte_t *pte, unsigned long addr, if (!folio) return 0; + if (damos_va_filter_out(s, folio, walk->vma, addr, pte, NULL)) + goto put_folio; + damos_va_migrate_folio(folio, walk->vma, addr, dests, migration_lists); +put_folio: folio_put(folio); return 0; } -- 2.43.5