From patchwork Fri Feb 28 17:53:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13996864 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 1C163C282C6 for ; Fri, 28 Feb 2025 17:53:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AD3EB280005; Fri, 28 Feb 2025 12:53:43 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A836C280001; Fri, 28 Feb 2025 12:53:43 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9726C280005; Fri, 28 Feb 2025 12:53:43 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 74F97280001 for ; Fri, 28 Feb 2025 12:53:43 -0500 (EST) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 247DFB4F83 for ; Fri, 28 Feb 2025 17:53:43 +0000 (UTC) X-FDA: 83170101126.16.7E91627 Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by imf16.hostedemail.com (Postfix) with ESMTP id 82F70180006 for ; Fri, 28 Feb 2025 17:53:41 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=q9IvHPyT; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf16.hostedemail.com: domain of sj@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740765221; a=rsa-sha256; cv=none; b=jXLKn7fE0cosvIC2e2m+MGFQ5GHCTXnuT8lO15aDAci8p18ZvsWxW14UnrqXjr7prm5juJ 9TdcO5IOQBaDrv843qrVNN+RkhaQh9R/XnecyGC+Jdvo529Lo99za9fNAm8IUYuxIHizgW mI8zH/jRtKXezokfF7VxAcOjiu3Ee/A= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=q9IvHPyT; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf16.hostedemail.com: domain of sj@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740765221; 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:references:dkim-signature; bh=gKT/WZc1TQy/3KZ8xqZkdVM9tGXhqa8E1S/79DHvkOU=; b=Msa7ZHBazUfooO75Iba8AtyUJr4J9FHgDKExWm+jZ8HZa7bL7bkvPNU+ZV8I/lSZgR/61T TOC9xwbWCl8Pi2PzS1FIF4Wl0wC+y6vhgsx35mzB5kMcx+EVeiX2iJvZzlTDL+NGzFgSGB ZWwwaZcHsM+MYL6RMhHLGAvhBfYQzS0= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 581ED6115D; Fri, 28 Feb 2025 17:53:32 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6F633C4CED6; Fri, 28 Feb 2025 17:53:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740765220; bh=lNGI9OmFIX3ROmd0YpW0aM2qLJRXMahB6voPpXPOFSE=; h=From:To:Cc:Subject:Date:From; b=q9IvHPyT1M2YCPvq1IDmlhw8ouy0R0gup7Y6Yd1WpWttU581st2d2ZscKzGNsdfAw 5jjcxvs8Yuru7fhgpcruJYCfNmpeMCPSiA1mFTumnobza5W4GFKdw0pZ9l5uvXz2Ng j2G3uSgLYk+IuYvc51AXOvgfbZE6cV3drkyleOXp5cRLLpTPyKrWp2YCBwufjSppn5 m0QqX9+g9wZqwPMDDzbbslCUD8rUfQuMZ5PjpypZtppA/FZMTPBmBH1bMBJALSQNZw y4z5mLYfAvvzOyV2leDHFdsMA+QoYiKJ70/8wzeMGZSTNzVtymVAOqHgsQZkEFNRtI P5Vcc/rOlmgPA== From: SeongJae Park To: Andrew Morton Cc: 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] mm/damon: respect core layer filters' allowance decision on ops layer Date: Fri, 28 Feb 2025 09:53:36 -0800 Message-Id: <20250228175336.42781-1-sj@kernel.org> X-Mailer: git-send-email 2.39.5 MIME-Version: 1.0 X-Rspamd-Queue-Id: 82F70180006 X-Stat-Signature: 7fcabbbhgigyiu8dzkty5bggh8rrgyyh X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1740765221-112329 X-HE-Meta: U2FsdGVkX18KrhTJSXNQgJPK07dxpxXEoTA8ZEc7LFXCh7IMzWBDMJEGIteKrz3qsxxtad63mrM89ejRamhx1FuxLOWEyDrxQoNmk6HDt40ljmHfmk8B5hTt4bAUZoGHXuRrBlQv2IpNT4X6EN2th3LDuUa9fJTNp12BR1EcPzqpNw8+NjAbbkISao3w4LRNCOxOv8a4juMto7tpYUuyUazPGnKcVJO9S4u8GRtTHLlwm/LNkxOUisQHG2IsWZ9jvRcK5mg3XlH9v4jFIh7EkvIKU8JAnc/QM3J/kGbpw76ZBSS/SyYQYRgMCtOdO78nknsrxBu31vHiouz3rFZ6k0bG6WICEuYbpuSHs1tEL/dOus2aTuUJDYioXedBIlc9Cq7q2ouJ5MbTrX8USNkX/i+oMzU2aSa5Rv83TAkKWoToyFSVu0eahX1qmi+fNalHFJPemTkMmazrRPqgRclQ4WTMtYr4yfqFDccgv8wpaWxszlprHT07tky+7kuVRb7d+SHGgMQFE2yU0GckLk223NcobRbucu57bzZcOuJIn0eadY5ep370Nr4GZse46gNkaZS/Z85XQGsXKDivVEGGgzX3nv8WSKLitApPDCiyQFWv5LgKuQ5KtS4jOTXfTiRKjJCqA2sg0I/6gSz6736rmw6Ie/yD8hJCutQQEmYB85rzzajqCNrymVhcEA52QYbAciIoJsNDIVDCcHXKZhBIKekxQmqrq5tLStfzz/vmrpylSUsEzmTqg94YWM4tS1SxvBEV6LyMMBos5TAyiTtojwNYHDtOCEsCqQUV6l2tFetp6CMrCwzaHP5JxmeNyjFCVu0EF3KdH4xbSi44L2oN6EzePA1gZ29COCb5kzgiV6nHuXU81w+JqHMxS4G56TqGjbWoF/irW3EfRFwpq5isoYLYGqBaHA0vScM4Ff/K55UkIQms+r0IgQYETnWtaqIsRMF0eSHY7buzcpnihLL RW8jbavB XidyTB5fqIG5XUm+gM/QMaVZlxEw6Xd44ISsfVge3CPyDV1qQYJZG8cWEBcDM/zmNJpbKWMBfp455D4Qf0j7UCqan7VPz+lhOfJ9TtzSNPBiPUUplonpeiEN+RjqnEC+nMdOLpaWm/849PqitaxAywcps7YcViW4p2/3/nDFhSFOBy+3aqRK/t2I0maB/rYqpIyh2ndSEGfFXYGW+ZlhNmGp24CVxJUm4JykR+xlboOgmEmc= 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: Filtering decisions are made in filters evaluation order. Once a decision is made by a filter, filters that scheduled to be evaluated after the decision-made filter should just respect it. This is the intended and documented behavior. Since core layer-handled filters are evaluated before operations layer-handled filters, decisions made on core layer should respected by ops layer. In case of reject filters, the decision is respected, since core layer-rejected regions are not passed to ops layer. But in case of allow filters, ops layer filters don't know if the region has passed to them because it was allowed by core filters or just because it didn't match to any core layer. The current wrong implementation assumes it was due to not matched by any core filters. As a reuslt, the decision is not respected. Pass the missing information to ops layer using a new filed in 'struct damos', and make the ops layer filters respect it. Fixes: 491fee286e56 ("mm/damon/core: support damos_filter->allow") Cc: # 6.14.x Signed-off-by: SeongJae Park --- include/linux/damon.h | 5 +++++ mm/damon/core.c | 6 +++++- mm/damon/paddr.c | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) base-commit: c8f5534db6574708eee17fcd416f0a3fb3b45dbd diff --git a/include/linux/damon.h b/include/linux/damon.h index 795ca09b1107..242910b190c9 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -496,6 +496,11 @@ struct damos { unsigned long next_apply_sis; /* informs if ongoing DAMOS walk for this scheme is finished */ bool walk_completed; + /* + * If the current region in the filtering stage is allowed by core + * layer-handled filters. If true, operations layer allows it, too. + */ + bool core_filters_allowed; /* public: */ struct damos_quota quota; struct damos_watermarks wmarks; diff --git a/mm/damon/core.c b/mm/damon/core.c index cfa105ee9610..b1ce072b56f2 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1433,9 +1433,13 @@ static bool damos_filter_out(struct damon_ctx *ctx, struct damon_target *t, { struct damos_filter *filter; + s->core_filters_allowed = false; damos_for_each_filter(filter, s) { - if (damos_filter_match(ctx, t, r, filter)) + if (damos_filter_match(ctx, t, r, filter)) { + if (filter->allow) + s->core_filters_allowed = true; return !filter->allow; + } } return false; } diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index 25090230da17..d5db313ca717 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -253,6 +253,9 @@ static bool damos_pa_filter_out(struct damos *scheme, struct folio *folio) { struct damos_filter *filter; + if (scheme->core_filters_allowed) + return false; + damos_for_each_filter(filter, scheme) { if (damos_pa_filter_match(filter, folio)) return !filter->allow;