From nobody Wed Sep 30 05:00:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 8DC203E3160; Thu, 13 Aug 2026 05:44:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786599883; cv=none; b=nvaqFCj8LgWKh34Kj9rDTvLdJzsGYL6Rn5ntc8XZkV4u4YS8Us8v/90qfSy2ehKPieBJwymibCrYJurqIuFvdCf0xue3Ve4fapFqiIV5mWmigV6v+ZL6TFHvot5BIHZnGK+/VoZ7O9XasJ4k8VZleqOoF4UWx4N9fDX6/Ac3k+4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786599883; c=relaxed/simple; bh=akhgfTDbw6hVvE+84o0NhYRf+lwaiCMkUipusX6VUfU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uGH1aML100f7NiB7/4C+W4o/xFpRW8wao2x4UFzQ2Q7jGaBFRv9MzWtRx4BWyh2dz56kFZ5gPhHQ2lha8ceWfBCBWfUFYIxFmgtH76CwqB7qKy5YjggywqB10Lus2Na8mkxVQVoggeYpxKjgvQUwAO9Usr+IzguUqmlOnuAR0lw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nvZ4nl92; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nvZ4nl92" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E6C141F00A3A; Thu, 13 Aug 2026 05:44:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786599882; bh=fXLkVAHbgjaWy56zhYvF1vnHi1V0hiXRFOM3tY/zcKk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=nvZ4nl92JoDuDADgB+BpCGre4XpGPaT+GvKTadtgGwJmhVp055oVE4Q6/YPCaeON1 EcNwwIKapv2jGvsBMANiDwhPdbUznOMpJhbrbEcJQUKoSSIbm8ZAlljPm9u4/miSD3 J3BGXWa5sz9cIYQCmRfF9wwQcZ64GANcp70Yz92DRahvDwaH+SswDKfHBX2JhyiPDc x60IDkf7P2XQS04sG0HD09gFIVkZFxteITGAlVkQUOmNMOYgQujVlENXlF8XLXdV6f u+aP7olg/Vv+o1DTWruYlk7q7V96NWvk1UZfp/GwUCOJbg7cSfzjAbuNVwvfPj4wSN 03yY6NmvtWysQ== From: SJ Park To: Cc: SJ Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 1/3] mm/damon/core: error damos_commit_quota_goal() for zero target_value Date: Wed, 12 Aug 2026 22:44:28 -0700 Message-ID: <20260813054432.101197-2-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260813054432.101197-1-sj@kernel.org> References: <20260813054432.101197-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" If a DAMOS scheme has a damos_quota_goal of zero target_value, damos_quota_goal() could trigger division-by-zero error. Hence each DAMON API callers should do the zero target_value validation. It is easy to make mistakes. Actually such bugs in DAMON_LRU_SORT and DAMON_SAMPLE_MTIER were found and fixed [1]. It is better to handle the corner case only once in the core layer, instead of multiple places in all DAMON API callers. One straightforward option is using an alternative denominator for the corner case in the damos_quota_goal(). However, the zero target_value is meaningless. In this case, the quota goal is always evaluated as achieved or over-achieved. The quota will only keep being reduced. Simply avoid using zero target_value by adding a check in the core layer DAMOS quota goal parameters validation/commit path, damos_commit_quota_goal(). Update it to return an error in the case. Also update its caller to propagate the error. [1] https://lore.kernel.org/20260803134034.15217-1-sj@kernel.org Signed-off-by: SJ Park --- mm/damon/core.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/mm/damon/core.c b/mm/damon/core.c index 5a92e4fac6d92..183d505c08e4e 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1193,15 +1193,18 @@ static void damos_commit_quota_goal_union( } } =20 -static void damos_commit_quota_goal( +static int damos_commit_quota_goal( struct damos_quota_goal *dst, struct damos_quota_goal *src) { + if (!src->target_value) + return -EINVAL; dst->metric =3D src->metric; dst->target_value =3D src->target_value; if (dst->metric =3D=3D DAMOS_QUOTA_USER_INPUT) dst->current_value =3D src->current_value; /* keep last_psi_total as is, since it will be updated in next cycle */ damos_commit_quota_goal_union(dst, src); + return 0; } =20 /** @@ -1219,14 +1222,17 @@ static void damos_commit_quota_goal( int damos_commit_quota_goals(struct damos_quota *dst, struct damos_quota *= src) { struct damos_quota_goal *dst_goal, *next, *src_goal, *new_goal; - int i =3D 0, j =3D 0; + int i =3D 0, j =3D 0, err; =20 damos_for_each_quota_goal_safe(dst_goal, next, dst) { src_goal =3D damos_nth_quota_goal(i++, src); - if (src_goal) - damos_commit_quota_goal(dst_goal, src_goal); - else + if (src_goal) { + err =3D damos_commit_quota_goal(dst_goal, src_goal); + if (err) + return err; + } else { damos_destroy_quota_goal(dst_goal); + } } damos_for_each_quota_goal_safe(src_goal, next, src) { if (j++ < i) @@ -1235,7 +1241,11 @@ int damos_commit_quota_goals(struct damos_quota *dst= , struct damos_quota *src) src_goal->metric, src_goal->target_value); if (!new_goal) return -ENOMEM; - damos_commit_quota_goal(new_goal, src_goal); + err =3D damos_commit_quota_goal(new_goal, src_goal); + if (err) { + damos_free_quota_goal(new_goal); + return err; + } damos_add_quota_goal(dst, new_goal); } return 0; --=20 2.47.3 From nobody Wed Sep 30 05:00:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 BEA4A384232; Thu, 13 Aug 2026 05:44:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786599883; cv=none; b=QcmSRQxawFqQPu5Bf2IOIRDqvvE51kkwbQpLOI1kwHxmIztiDZR3hrWMa/jtv+AShGo62Sut8pmJ1dgI6l0o73ZyN9LK70QbVFf8AQjyD9YHVftJVHUzjAo6uUTdas6+bsJoHvG45fxpUditZxBExQdSssgM0AbXsfcJ2Kqtvs4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786599883; c=relaxed/simple; bh=axZTWAdNkaqbfw81b8HYeJVw703O5s5cDzE+KJ6R1x4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cTbO5501/bE8xhLx32Zjl7cGEAZHjRMmXLXxjn1ZsgUZpGwlbCVBYBCxf0sIsokcsARvo9WDzdJDqIuEoQZEXmxWQhHxJ4fKGd8EiLsxZr7HHJvbmUEp4uKWpLd3LYnu6Q4ps5iBzLvJmu86c1VCn/c2ECDyLvPZU9qnPN1FST0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oTHampD9; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="oTHampD9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 669A81F00A3E; Thu, 13 Aug 2026 05:44:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786599882; bh=3ydKZfv20XDA9Yk9OoF1itUqqkZNlBOcLwEjFDoPApk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=oTHampD9EL+aNZtVjjB2h74cZMpvrG2Rg7tpIUrpaPKwsd7n901RWDPN777SrZlpp oI8yHNzUjhoibL+KXIY8OoCtw7fLy1q4xkmOzn61cs7XR8LIvtnRw9exlUXdWzu28P 0I0iYq0GaEG+7ykgJpjH5p8KgwSKh/Vq6cNjo8gF7e1fHjF8dz56x0b8QG0AlRVwol pJPVD0F9w23zE4wtoIPRzrqBnPDSDPEH5HtePBdwBYbp35i/Hc30kDk/SJy7R6O2dO TFjxV2HyNK9iaD46h9R5UVcTIyDbCkTccqQai9Xm6K9C6ovhC2WyFX6b7qhWDXos1Q CisuQqENrQ94w== From: SJ Park To: Cc: SJ Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 2/3] Revert "mm/damon/lru_sort: error out for >10000 active_mem_bp" Date: Wed, 12 Aug 2026 22:44:29 -0700 Message-ID: <20260813054432.101197-3-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260813054432.101197-1-sj@kernel.org> References: <20260813054432.101197-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" This reverts commit 06befa61c427e74319781e6f35a364cfc32dbae8. The commit was made to avoid zero damos quota goal target value, because it can trigger division-by-zero. Now the core layer handles the corner case. It returns an error for any attempt setting the aero target_value. The corner case handling in DAMON_LRU_SORT is hence no more needed. Remove it. Note that this slightly changes the user behavior. It still disallows active_mem_bp of 10,002. But now it allows other >10,000 active_mem_bp values. Setting >10,000 active_mem_bp makes not much sense. But it doesn't cause critical problems such as memory leak or crash, either. Arguably that doesn't deserve additional code complexity. Just allow it. Signed-off-by: SJ Park --- mm/damon/lru_sort.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/mm/damon/lru_sort.c b/mm/damon/lru_sort.c index f25ee7326e87c..ad8e86dd3a93e 100644 --- a/mm/damon/lru_sort.c +++ b/mm/damon/lru_sort.c @@ -233,8 +233,6 @@ static int damon_lru_sort_add_quota_goals(struct damos = *hot_scheme, =20 if (!active_mem_bp) return 0; - if (10000 < active_mem_bp) - return -EINVAL; goal =3D damos_new_quota_goal(DAMOS_QUOTA_ACTIVE_MEM_BP, active_mem_bp); if (!goal) return -ENOMEM; --=20 2.47.3 From nobody Wed Sep 30 05:00:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 409EC403B11; Thu, 13 Aug 2026 05:44:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786599884; cv=none; b=pH5Pg2AuoyMTWQUVetfVJdyLPaMqHTLFu4tS9BY5lbwl0PtKDlfW3rc7PJRRVjoOeAs6FIHrDzHJ95NnmlSa+Xw8prjByCSBJZVb5V8thTsvPVhM10S1MrfAKXGnpizbnvqx31O8y6rzSn+R57qGsNmbqNbCrrMOZ3ZOg597qfE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786599884; c=relaxed/simple; bh=7BuePdqLsmCrpZcRRQjUY0RK2a5/39HdUmJOLbwdCNU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WFkA57mNwYQRnc+12Y39RJMEJeI+TzzJrt9lEWqq9LIwtBJq+ijmsr1LOX2ueOKOM1pkTigLbpZ+1sjeDf7Wx9ErYliy+Ym39WvA8wyIj49JBz+BVROzverPnd8JnIA4nK/4jKbPOj9izsKiuXFplAFgG4tHTENe631hDoe7RSk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=n0wAvhD2; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="n0wAvhD2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D57AD1F00A3F; Thu, 13 Aug 2026 05:44:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786599883; bh=4SsJPfKsekeE5VptqHXgsGnvsq0lAUhbBGf4TqY9ku8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=n0wAvhD2+L6konNr9qCBUej2g8rzvAzHBd+qRn+PbrtFg4Wu1TUMr4xqr1qP/mvCK mKYzllSCsR5bxeCz3Ptd2hFxfB7pxhbXVhzmXZIBpgnj6oYG1c59NeV1srNnsRP1LI 7NYe8Aj0PvjgqK2NAYCKvKN6AN8nGz9Ok2uraob5AZ7/7YdVrlix0Fi5LbJMGMsiN3 2ptE/rpll7lRuXJ9LCvNE2vkBAr2vTbPa0Qsg5jGxv7zbl+I8bI8XovmpSz/Ypniqr zKSGqgx9/WgXQX2CJBYpQwyH3NTH8e8+kAzeGNTqRR0qZ+7PbuegewHNdt3CL/0gm6 cjddfudU9hQaA== From: SJ Park To: Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 3/3] Revert "samples/damon/mtier: error out for zero quota goal target values" Date: Wed, 12 Aug 2026 22:44:30 -0700 Message-ID: <20260813054432.101197-4-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260813054432.101197-1-sj@kernel.org> References: <20260813054432.101197-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" This reverts commit a16fd3ad9d89b05475864da97327870464611736. The commit was made to avoid zero damos quota goal target value, because it can trigger division-by-zero. Now the core layer handles the corner case. It returns an error for any attempt setting the aero target_value. The corner case handling in DAMON_SAMPLE_MTIER is hence no more needed. Remove it. Signed-off-by: SJ Park --- samples/damon/mtier.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/samples/damon/mtier.c b/samples/damon/mtier.c index bea45c87cc9be..27dc88bdf7a0e 100644 --- a/samples/damon/mtier.c +++ b/samples/damon/mtier.c @@ -161,9 +161,6 @@ static struct damon_ctx *damon_sample_mtier_build_ctx(b= ool promote) if (!scheme) goto free_out; damon_set_schemes(ctx, &scheme, 1); - /* zero target value causes division by zero in damos_quota_store() */ - if (!node0_mem_used_bp || !node0_mem_free_bp) - goto free_out; quota_goal =3D damos_new_quota_goal( promote ? DAMOS_QUOTA_NODE_MEM_USED_BP : DAMOS_QUOTA_NODE_MEM_FREE_BP, --=20 2.47.3