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 4E4E3C021BE for ; Thu, 27 Feb 2025 05:51:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D35DB280002; Thu, 27 Feb 2025 00:51:01 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id CE60A280001; Thu, 27 Feb 2025 00:51:01 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BD4E7280002; Thu, 27 Feb 2025 00:51:01 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 9F348280001 for ; Thu, 27 Feb 2025 00:51:01 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 45C458057D for ; Thu, 27 Feb 2025 05:51:01 +0000 (UTC) X-FDA: 83164651122.24.0E956B9 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf01.hostedemail.com (Postfix) with ESMTP id 6D92D40010 for ; Thu, 27 Feb 2025 05:50:59 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Z3iAqjPy; spf=pass (imf01.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740635459; a=rsa-sha256; cv=none; b=sKajNTHQQbPZWZeuDFG7sJ95c6RMq5cZesJ31ZliQms6aLKE3UrKl8gXPNutiKoUvI+Rju PvwDGZKoqe9Uby/NeOF8k3Ei+KoVgDpL25WlQHuf2jgPT5e46Hsxti149dhuY9E3BQEZON 68H160Fd4KeMrv0PYJJn0nNLgVHF9i8= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Z3iAqjPy; spf=pass (imf01.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740635459; 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=TqnCJTRH8tqkEOj+nDxwSp4glFf9lkNcsDS5D4gHFTg=; b=idvGLG5pJbk9bHDT8rW63b7V7uq9l/WthMfPvZS1w/pRCHJGEZvqm2CWrqxk5sUkpApCy6 i6BOqUDJ5qDP7alZ1T1l20+6L2iPjUvJEEK/96JV4Fwn9oZfj5vjIiqjjeXYbPaolR76Ez umUqcTfK+JG0meXz6Ne9CmXeB78Qhfc= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 960CA5C3EB3; Thu, 27 Feb 2025 05:50:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 04DDAC4CEDD; Thu, 27 Feb 2025 05:50:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740635458; bh=JkCJgg3pXcFKl7jwQLtss0Q7N/vh0YlTKOc0U3CUB54=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Z3iAqjPyhw+BgraAZGgf7zQsZiPtqrwhFBzAVPN2s/aWADqK8fJwGd9a95ZBjyyPX fgQitOJ+wPHuUiZTMlbMa9h3F/T7r5QnMZrdtcJ9VqwFDElo7XywCiAp2VMMZS/Qjo 01syAXuMiQnGuEvUS08DeN5M85grmC01TgIiYKeb03Re+mySGYPpEg389ZsaSgHaTj 4xWjcCv9MUayu/NOj7ZCa6qmNFMhR5mdd46dXRO9EUBhsmR274X1G2rm07obWxVmVB C90HerYeOI/+AoqGCv+9+iaW//lDSQFEpM9Ic2ga1PAT8cgtqu+cNVLNZsGszMDbyh Snps/d3ZPtQEg== From: SeongJae Park To: SeongJae Park Cc: Andrew Morton , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [RFC PATCH v2 7/9] mm/damon/core: set damos_filter default allowance behavior based on installed filters Date: Wed, 26 Feb 2025 21:50:54 -0800 Message-Id: <20250227055054.22813-1-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250227015754.38789-8-sj@kernel.org> References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Stat-Signature: wobyndozpaxbje3578trpfderre1w4g9 X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 6D92D40010 X-Rspam-User: X-HE-Tag: 1740635459-984828 X-HE-Meta: U2FsdGVkX19jyZxxzdvQK33f1SaNWZ0AAXNOQFrxspTfoJdCKfdn9PhTmHTxYl2tZr+Zo948mOQZn60cYy/7jpzKa0xsA93Zk3nCxarfr9Eq8EkDbiqQLWeZDPc+KEtKIpEF7Upl25L1Y56JWvnvkAI0e0cBBPBrDycwYVB7BO0QWJLizDVRZAIv454Mm3s5b0OaM7PTKaem0HtEum30ckvUjF1d94rzDaR53/4w/JUYxVEdKX52KcfPzBNLpsMxGRfGklkT8nxxNHMYNI+K5L+i4rpwyWGO8vnL4qOGHmqz0lS0/WSAcf5h86cSTJRCCAqkkLEGwhoEXvyswrFEcpIOOIbv94AX6JGd9RXbzgNSPrQujFEeqNYxudAmgwEVTaNAp3iwHARd1R78kz1T/rfQA4+aJAAKRjSWf4P+NTULa4fgNmCUaAg3gqzXMEQ2tjB2IT2dEj+ycLuk31wLuWaDK62Krl9NDb0wSPhyGFzznmpcGhxJfv9ku3lJtB9aspgOdEH1gWosIgIUhcGUAqN0PGC0xle0biEWLemSMvQiQB92WIN2hzbL01V8zFDyEyyVb01SBy7YzoazN1SR/93GirJohFDZGyUgM/m5s5Mm5izi5ri359s75cOPRvNRW6Sl57VqbP/t0IJmhWbswY+VMTv22Kq/hvTRzkRwLwyBLSDERQVT276Lyc+XztudDwCVygai7ldgjXY2qot1QhsskiVeNloUyw2vjb6I5Dpc4pGfkK/5Ut8MvwdPIW9oO6TJZSnV9O2lblzHV2J1rv+xyUvxNp0Dkm6jX/Bc2aL0sf9++eVP3EQoTkOaPFc0Pfj0hlwS/wabVZMaimZ95kpVgdZqcdwF3clQH6mXD02ue7C6t1mH9R+xmC+tnehQ7KohlrptJNC0xjSJNWNPpnBkj1z157DDZph3vjKlSTi96cGmr6AZ2iDREMD4QVqvIPJoXad/HrrrGsogNWl ocVFRAu1 WXIc53TGE9PnE66VpTCQc4KzuWyUNIQIPmWAvNRHgXeSkqxOea3lcn4qzAbItM50f7vEnb+TxszGJ43iryNUmNae+GBQkbY4eeMN4pnA961rsz/8JSgwdripElW3G8FIKnXNeq2b0bIaCwyppRXQh71pXO9FoLrTjhB+EmieGVZwpDL2iWCJy7FjBMxOw4/uQXCbjSCavldcLjhMBKjUveA+r02D3f06AjJfuxuq2u+x/+m+fkLglZnMCcraL67Pg/QwNWocfyyEG9ZRQLRtkTkYfqw== 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: On Wed, 26 Feb 2025 17:57:52 -0800 SeongJae Park wrote: > Decide whether to allow or reject by default on core and opertions layer > handled filters evaluation stages. It is decided as the opposite of the > last installed filter's behavior. If there is no filter at all, allow > by default. If there is any operations layer handled filters, core > layer's filtering stage sets allowing as the default behavior regardless > of the last filter of core layer-handling ones, since the last filter of > core layer handled filters in the case is not really the last filter of > the entire filtering stage. This is not sufficient enough. Even with this change, core-handled allow filters after core-handled reject filters are still meaningless. If a region is matched to a core layer handled filter, the allow/reject decision should be respected while ignoring all remaining filters, regardless of on what layer those are handled. It works in the way for reect filters, since core layer-rejected regions are not passed to the ops layer at all. In case of allow filter, however, the region is passed to ops layer without the information about whether it has passed to the ops layer because it was allowed, or just not matched to any filter. Hence, all ops filters can be applied to the region. We can implement this missing part by storing the core layer filtering stage decision somewhere and let ops filter filtering stage repsect it. Changes like attached diff at the end of this mail may work. I will add such changes to next version of this patch series. Thanks, SJ [...] =================================== >8 ======================================== diff --git a/include/linux/damon.h b/include/linux/damon.h index b7a4d12ce532..8d8621d8b58d 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -528,6 +528,7 @@ struct damos { unsigned long next_apply_sis; /* informs if ongoing DAMOS walk for this scheme is finished */ bool walk_completed; + bool skip_ops_filters; /* whether to reject core/ops filters umatched regions */ bool core_filters_default_reject; bool ops_filters_default_reject; diff --git a/mm/damon/core.c b/mm/damon/core.c index 783cc05a9fcc..a2e4bdbb6b19 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1662,9 +1662,19 @@ static bool damos_filter_out(struct damon_ctx *ctx, struct damon_target *t, { struct damos_filter *filter; + s->skip_ops_filters = false; damos_for_each_filter(filter, s) { - if (damos_filter_match(ctx, t, r, filter)) + if (damos_filter_match(ctx, t, r, filter)) { + /* + * ops layer filters should also respect the decision. + * Store the information in s->skip_ops_filters. + * If the decision is reject, the region will not be + * passed to ops layer, so no need to set the flag. + */ + if (filter->allow) + s->skip_ops_filters = true; return !filter->allow; + } } return s->core_filters_default_reject; } diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index 4a170086852a..8568b5a34888 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -393,6 +393,9 @@ static bool damos_pa_filter_out(struct damos *scheme, struct folio *folio) { struct damos_filter *filter; + if (scheme->skip_ops_filters) + return false; + damos_for_each_ops_filter(filter, scheme) { if (damos_pa_filter_match(filter, folio)) return !filter->allow;