From nobody Sun Feb 8 11:26:35 2026 Received: from mail-yw1-f193.google.com (mail-yw1-f193.google.com [209.85.128.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0C25C38B7AD for ; Fri, 23 Jan 2026 04:57:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769144276; cv=none; b=Rz3bsqflnVOuOR0rnVzNssCLjGhwU4nSlSJyI20vbovnxWnhjWfo+vrtqh/x1r2fyQlPFr8to3x+A/h+Aeub2/a/z5iYUnFc0vZN9HUiLsQvOa/+vabeEY5h5NjcNWtwMi7KRaOm6H/OXQdnxBzXDRSg7XkMjx4bR/YtZGH4x38= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769144276; c=relaxed/simple; bh=REwnbFI5Ih419YIeGbeMhAV79Y8hP0BScdx6C3Cv9Aw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PLdVP/rWZBaMbgeA8d77z2GxrJHV8EZDdBrlPgFxIreWk3x/+P8fJ4xxH5cljV6CoLwWxR9jnpPdnHupRzWsq+naVzmim2tMml6b6xsj0nWqnfBfbUMm5ZqsKyXH13NMbmAuEQeuJTFUFzSeMYhw/RFBeXmhiInWRJ4CecV2Cys= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=K11H9JBe; arc=none smtp.client-ip=209.85.128.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="K11H9JBe" Received: by mail-yw1-f193.google.com with SMTP id 00721157ae682-7927b1620ddso26722167b3.0 for ; Thu, 22 Jan 2026 20:57:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769144267; x=1769749067; darn=vger.kernel.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=W2Hj3YMXyp6jb16WaA5iRCtpYS8eji7c2VCvrHXWtMA=; b=K11H9JBeVojbyntf6oi0fQt29BeZMje0EkD0VBnlE8yz+ZAwRXCdYrrXxbyi3itefJ 5BRrQKFuvK6dtXEzYaDw3fGvvh/4cgptfHiiLM/604rXywivNDHwDQLhaIH8V1Wqi/9t eDg+qng07YeYfkerfVImV4KqNefkoQNa12/4zanX1jvTajKkS2En6GPMLlnbXkmNb7gl WhRQf2meFqXK+Mw3q2LU7XxksjK4hQgpgu5UDIC1aI07ORxrwFBOlLnLRuqQ24JS2WZo VsY5hQ7rpbiBaVFMu+kP1TTHyjN4bWtoE898VTeQI5sAE1yuO0ZmOjZttbBjwDknCPzW Uk5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769144267; x=1769749067; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=W2Hj3YMXyp6jb16WaA5iRCtpYS8eji7c2VCvrHXWtMA=; b=lqsIfjb0rh8JPiWBWZdlQkyPWZTD5/AJ6qPcUGa/Ws45KxzFBv+Rhl0+hoH9B0sq21 u1T3E1trR52GUtURkmQdAigMc+8LbxjydrMj2jHzdi+GyTnTa/wD5DH/eygOUkuYp/7h JBdbvQayIi54yVOm38ok3xrIOxB5vGrbxyzcXMhxayJxaAzVkrHi3L9eikuEs/xPs6Qz Tmqv3sR76zGZocnOFJ7nJsKhysBJ3rpAcsbbMlT5rrKtx96otNC2PMJ/jWGye+oGRrAk y3ouu4u/8FIedV3oIhQOfe6hleau7R2oSjMS9Z0ILU6rsl18eAKt/x0OEFct3DFWisdA 7lkA== X-Forwarded-Encrypted: i=1; AJvYcCWMRZOSuUSvXz54EjDLA0peAr++N0ux1iuZWlAm5Q/IF75yTIQ8bYQwW2ZIpRaH0bLGHdX0WG9psxQwILY=@vger.kernel.org X-Gm-Message-State: AOJu0YxNC9ojQOFsr0oPPs8eraTQIenhRPTb9XSGCiqVgY8HQwQSBd9F htkYuN0fF0yyb+FYm+rD5LGHOch5MzJVSDpswNBVIWVOhwtaeaHwO/XQnCDg3N8= X-Gm-Gg: AZuq6aJxgLaqw1JEpzzNbD6BwkZmQEi8m+PZLkBh+6ZXEfJBB9YsqRuXuxRsNjBueDC sUxs/eGtaic9HIuKJS6OG40fmULPhT+g1xjPHXkFHcjyzKzeU9vD2oakal0tOTXaCTJkqtwNty1 TSah/DoO/dpcDvQ5xlFjWKkU4gc4xKTCK9krAK6U0JHA73GlV+g+bx84ZwsO69SKnl2ML8pzR8N qqJuReNEZbGke7VLryUCcChh++EAxIJf16WW08yt3QylIVJ8QRA3DZk6e3BQ56XHZWG87L0s6X3 GRP60xjw+1xFPBA9XcBEnAy+YaC6f6JK16ntYNNV68swrJ9DTe7wde6ZNJO1nT93I46UQBumdcd xdVdrEaS2fv90kXC6wlUzgWDWRnymUZXi/52bANWcsu4Iaa8uUV8ruitvUJU8B8xlYJv74XRqvQ XQrOwhcRpQnGqUOOhDqPtetLGvFZ8XLhrH3bSZVgafxRCKTe/VrmvivhVB0O+p+Q== X-Received: by 2002:a05:690c:688f:b0:794:1f46:79eb with SMTP id 00721157ae682-7942a70b7dcmr45404977b3.5.1769144267450; Thu, 22 Jan 2026 20:57:47 -0800 (PST) Received: from localhost (23-116-43-216.lightspeed.sntcca.sbcglobal.net. [23.116.43.216]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7943af14432sm6354717b3.8.2026.01.22.20.57.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 20:57:47 -0800 (PST) From: Ravi Jonnalagadda 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, bijan311@gmail.com, ajayjoshi@micron.com, Ravi Jonnalagadda Subject: [RFC PATCH 4/5] mm/damon/paddr: capacity clamp and directional early-exit for node_sys_bp Date: Thu, 22 Jan 2026 20:57:27 -0800 Message-ID: <20260123045733.6954-5-ravis.opensrc@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260123045733.6954-1-ravis.opensrc@gmail.com> References: <20260123045733.6954-1-ravis.opensrc@gmail.com> 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" Clamp effective target to node capacity (bp) and skip in-migration if the node already meets/exceeds it. This avoids oscillation and unnecessary work in two-context DRAM/CXL setups when quota goals (e.g., node_sys_bp) are met. Signed-off-by: Ravi Jonnalagadda --- mm/damon/paddr.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index 30e4e5663dcb..64dbdd2196a5 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -300,10 +300,54 @@ static unsigned long damon_pa_deactivate_pages(struct= damon_region *r, sz_filter_passed); } =20 +static unsigned long damon_pa_node_capacity_bp(int nid) +{ + struct pglist_data *pgdat; + unsigned long sys_total =3D damon_pa_totalram_bytes(); + unsigned long node_pages, node_total; + + if (nid < 0 || !sys_total) + return 0; + pgdat =3D NODE_DATA(nid); + if (!pgdat) + return 0; + node_pages =3D pgdat->node_spanned_pages; + node_total =3D node_pages << PAGE_SHIFT; + return div64_u64((u64)node_total * 10000ULL, sys_total); +} + static unsigned long damon_pa_migrate(struct damon_region *r, unsigned long addr_unit, struct damos *s, unsigned long *sz_filter_passed) { + /* + * Capacity clamp + directional early-exit for node_sys_bp goals: + * If we are migrating INTO g->nid and the current bp for that node is + * already >=3D min(target_bp, capacity_bp), skip work this interval. + */ + { + struct damos_quota_goal *g; + + list_for_each_entry(g, &s->quota.goals, list) { + unsigned long cap_bp, effective_target_bp; + + if (g->metric !=3D DAMOS_QUOTA_NODE_SYS_BP) + continue; + if (g->nid < 0) + continue; + + cap_bp =3D damon_pa_node_capacity_bp(g->nid); + if (!cap_bp) + break; + + effective_target_bp =3D min(g->target_value, cap_bp); + if (s->target_nid =3D=3D g->nid && + g->current_value >=3D effective_target_bp) + return 0; + break; + } + } + phys_addr_t addr, applied; LIST_HEAD(folio_list); struct folio *folio; --=20 2.43.0