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 CF3E0C8303C for ; Wed, 9 Jul 2025 01:00:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2208B6B009D; Tue, 8 Jul 2025 21:00:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1CFA06B009E; Tue, 8 Jul 2025 21:00:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0494F6B009F; Tue, 8 Jul 2025 21:00:30 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id E4EAB6B009D for ; Tue, 8 Jul 2025 21:00:30 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id AE872B80B0 for ; Wed, 9 Jul 2025 01:00:30 +0000 (UTC) X-FDA: 83642920620.01.C025160 Received: from mail-yb1-f172.google.com (mail-yb1-f172.google.com [209.85.219.172]) by imf08.hostedemail.com (Postfix) with ESMTP id CE07C160018 for ; Wed, 9 Jul 2025 01:00:28 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=LlIhV4KI; spf=pass (imf08.hostedemail.com: domain of bijan311@gmail.com designates 209.85.219.172 as permitted sender) smtp.mailfrom=bijan311@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752022828; a=rsa-sha256; cv=none; b=VIXq4LloZH7UVLFetqSFaG002z3+41RbKwNDT0lAP1etWLBHc0Ts6OMJVjFFff5+BuJR4O VWR1xizHltGinltjN8RSmBP0H3DV6mbb4bPg7bHshnW2xuZFK+JrjkseaD7vZIipUcHfOb pf2ERuPNSVf2iuRsombllhpSQ7j8a/I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752022828; 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=+TgSHi8o+LhWVBXZHtMiPoCLNZyL4Zo3x7ltlQyypVA=; b=APxar7/xqJ1AmxP3RMvOG5jpKiDJog070ucbtwaRbPNrTvKO1uNoUWVXFwl84s2JzaOOPV KbUcWLccrEEWsDEHMFtSUhgsWj73J8kJ2APq1zjAOqFkOWB4pYUqvf9RUG8wY7ciLa7NER n+IeL6UvP4Z52H80iimjDTrMUhsK/jo= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=LlIhV4KI; spf=pass (imf08.hostedemail.com: domain of bijan311@gmail.com designates 209.85.219.172 as permitted sender) smtp.mailfrom=bijan311@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-yb1-f172.google.com with SMTP id 3f1490d57ef6-e8986a25cbfso3834884276.0 for ; Tue, 08 Jul 2025 18:00:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752022828; x=1752627628; 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=+TgSHi8o+LhWVBXZHtMiPoCLNZyL4Zo3x7ltlQyypVA=; b=LlIhV4KIWm/m/nVTDjRsBfSGGJIOo+Wgf0FV9qDVpmRA+WK71beZYdra5DCiACXL5h TcOAiQd60qUOnKFdSrkHnX4P7Qy7pwcdAAwXgZnCGmfWZtMn1ZHMhTVp5pIJfld6AnW0 FkiQ5OHrNSc7sxwcLcizlJLsOrxhHFh4wY/np1HkHkyjbJkHXvrzAeUppoNPs1QwBGQq cQ4kHh50DkXwh0uKWEtypTdhbRWYB9k4Vi7x2zfpkuQp2qn1kYtxao8irS3AuMzbNpLS 8XdVGBg11oToVDzQ8ld6RGitZmLagPHxU3PY0A0wh+4Tqob8ZqlCSRceN2gnfxFNdHW6 9UCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752022828; x=1752627628; 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=+TgSHi8o+LhWVBXZHtMiPoCLNZyL4Zo3x7ltlQyypVA=; b=pNW9tA5nv3YUY2zveeOSacbjqfpK7ENKLDgWNIk2Z3u+m5bYkTTpCLjzMCsJRJBVuE mp9vKoV6FAxo/VkqdrxmHqv+1GaqmodNMmvBBfzZYved1mWdxV8N48++6+09MRWuLh4R CaIEaNaMR4BQr2LseY8TFiX+UEMz0EixUKI2V8nIiGOp7C1zKpSNHv/wNWxoSRjQQpQE cg4QK3YQZsfxeCXWSSU3mL/yIEmkCbpB59sBc+u42Zf/eigY7LGDVa8rf+GYUIrKI6Oe Urg+wNVQqtIMevRP9PPM7rwHTUoJEaWEFm8tTrVf+RTCO5z6dKr0gE2T0Gj2S/rq7mgZ VhVA== X-Forwarded-Encrypted: i=1; AJvYcCUqOSlyixgjJJEqlVSPYfuEWNkcY6/Jrqk9Ve2uplJsDc1ArlIxyYb8qt/owmkFLePuP/u7HiWezA==@kvack.org X-Gm-Message-State: AOJu0YzIPzwJmx7SQJeYXiXoIGe48RVVi30EwUt/Cl/HMOrTf5WG94FY BpRDtqpTsbU997tNbfu8WXLfKXkFsYDXDlZQLgCdQHOsN9U3hwejolWm X-Gm-Gg: ASbGncv85ML473oZRmWDDaqLiadhEG8QxlZcJYtF1flkSPD5foauuIPKjFQT8KbaygD INXDpX1Ujq/aoQmm3lKwOaVyDqo5PIHjGQ+QcQUG5b7G3/L0wczWvBGmd5iSbjDv34boE1rNK38 8bnEXYJC6LYTIjTMqRxK28CfLDZ6nNF71FQRh30V2iq+WrT6SeY3ob0JCSmd8qGltVTu9+eftN7 z1AE3s6qR+LtDRhgdkpEakJH+CrLEaU6kUwKKK5KONsoNMGVuM3ivp6a/IdrUgk8hGRCyMUvfeQ r8Zkv3Gfg4go5HBTmMjXKLAsQ9faca1Lp/SWkDMYtWnhvrSj8FYUxZFoEH9P4SM5DtQkwx2NJmi XPqQ4lPo= X-Google-Smtp-Source: AGHT+IHKEK977MUyeP+iX8FWA6em280Bb2xxq8On52e+HzVmSP39OMEedbCQWl+WgqWCiO+aaXyLvQ== X-Received: by 2002:a05:6902:18d1:b0:e89:97db:e13a with SMTP id 3f1490d57ef6-e8b6e0bb33emr1141015276.2.1752022823136; Tue, 08 Jul 2025 18:00:23 -0700 (PDT) Received: from bijan-laptop.attlocal.net ([2600:1700:680e:c000:235f:99bb:f36e:a060]) by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-e899c43ed8asm3656043276.26.2025.07.08.18.00.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Jul 2025 18:00:22 -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, bijantabatab@micron.com, venkataravis@micron.com, emirakhur@micron.com, vtavarespetr@micron.com, ajayjoshi@micron.com Subject: [PATCH v4 02/13] mm/damon/core: add damos->migrate_dests field Date: Tue, 8 Jul 2025 19:59:32 -0500 Message-ID: <20250709005952.17776-3-bijan311@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250709005952.17776-1-bijan311@gmail.com> References: <20250709005952.17776-1-bijan311@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: CE07C160018 X-Stat-Signature: xfp585tr8ejqry74o95bs61dtmgdky9w X-HE-Tag: 1752022828-432619 X-HE-Meta: U2FsdGVkX18fyiiRgM+Zt3vWrHfRa59744Y5bLi1yb1iHABC8OqcCXoLTZyVoYrZ120JnqmrN18IpEpFNK+NOuqvT0/oIdC8FusP9MoqrRjpcH+IkcRzhotqEecuBk+e27jYR/f58aC49Sd///DLLmEtewCZQoLnYoxmtSHP40tUfuV9R9bntc6eawEerRUoFqR/2bTNVQOvX9WKHxID/TK5k0005nYkx4rLk8fmoliekd+9inwtnZE29DFAFjFIUuxdkEEsfAVCprrDJZiNMjp+2Ng0iqsKqMg5O5LjbgXLhyCLSEUeqiHt1uXvzIBZ8umHJb8hZZAzjTfWP+HBLPx5peE5jw7MhPBoKqtbDv4F/DfxKuhVIvoLirRIWH2N0EgrDyiv8SBM5ejQfaqHkszkA4PpwqnT3D+1lwUVReZJsxXQMmo5Bnejnr1MCfsVm/sioMNm5c7FhbPRu57wzUvOHVXOkiG1pKcA8dDxVwh3ya6K03i6lRi53N2rQzBdjMY1D9yc6J4jgLXsPQ9xYYGAGMOG4pUAR//il6YR8yo8sficXv+HXWkuMl3C1CEqXbXDFrN6T6QJOpMcgjQnJsLOD0iQzmAG8j0VWVuhXKWdw7tS0kO3VRokfLcoiV4ezXg6ll+MmVsWHoR63RvAXW5JncJaQq0fuu4jXMLgaPR1Gl3uu3X3tL46+r9Q8iLu8OEJcllQMD/OrBJ1lp7/1c2qauPrWgf9Odn334JkiX5G7dNB6M9On9CMEngYYyKBmH35REnh1vfLyQkGLjKO+4eaCHYEu6/5d0CgFSJysijJby7CyTd040sfodJsRp7rmfS7TyldAuASDtXEGNBlv02Fs324vQbETsL7j93/7xRAdsHlKWO0LdHIM3G4eXbSJeJW4rMt3DFJx8WEUhiwZwzgRM4dzhf3D4W0C54H6FXsIMi4RK+IRG6URoaC6bUeC/NfI7IDHPWe7JiW3a7 4B39DmmV Dtq/eiLbubsTzVqLP5H+qDRUfTv2IaAa95iySaZOMOeUdMNyFjyo64sj1JK8ifIlIIb17tXsqVIklbWOLQis1ZgNWfVVZGYDkZYYKfnofBOtJO2uIYbalMFtJR/ZTJrgODYmYUSBZF/UWDsfVmQu/c+nTaKTKz9oFIX0D90vIfJWCJ1Yb/ZoUkOUjSr6fvW82Y+3m0GWf/g46RsTyye7QWNs2m1h/6/V8vigdDXqcylX13MEo5tC9134il/BLVQ28pCoFXgkSmHn8MAT7AE2DPkUgy3f7AM846P+mbYwh/TFKEdK6EOpGc9oGenX1CZ/ngObpUoEDh+KFAWamLkNm+f3qJvKo75PiXPBuXDY6wqC+n+7KZqpNiE9SfnPIGbSO5bbMO7AhU9d3wGpRQd/hnIIfrp7e77npET3veO201RqWIIT72ysn3ZcLSX32PJ7KG7p8lIneBaXrjjLknm/7qwDIL0Y2vypPoBJuS4kH+d9BSACzO5nHxNDmcuOQoyN+WcN/70tXzMBFNHgMYxQDitZsMBo0+ESZzOaXqpYGFysez4iYfDKY+Syzj0mopl8V7sgcEMha99YBBnc56VznT/AoRixrDD3NyLrn 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: SeongJae Park Add a new field to 'struct damos', namely migrate_dests, to allow DAMON API callers specify multiple migration destination nodes and their weights. Also update 'struct damos' creation and destruction functions accordingly to initialize the new field and free up the API caller-allocated buffers on those, respectively. Signed-off-by: SeongJae Park Signed-off-by: Bijan Tabatabai --- include/linux/damon.h | 13 ++++++++++--- mm/damon/core.c | 4 ++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/include/linux/damon.h b/include/linux/damon.h index 07cee590ff09..1f425d830bb9 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -470,6 +470,7 @@ struct damos_migrate_dests { * @apply_interval_us: The time between applying the @action. * @quota: Control the aggressiveness of this scheme. * @wmarks: Watermarks for automated (in)activation of this scheme. + * @migrate_dests: Destination nodes if @action is "migrate_{hot,cold}". * @target_nid: Destination node if @action is "migrate_{hot,cold}". * @filters: Additional set of &struct damos_filter for &action. * @ops_filters: ops layer handling &struct damos_filter objects list. @@ -488,9 +489,12 @@ struct damos_migrate_dests { * monitoring context are inactive, DAMON stops monitoring either, and just * repeatedly checks the watermarks. * + * @migrate_dests specifies multiple migration target nodes with different + * weights for migrate_hot or migrate_cold actions. @target_nid is ignored if + * this is set. + * * @target_nid is used to set the migration target node for migrate_hot or - * migrate_cold actions, which means it's only meaningful when @action is either - * "migrate_hot" or "migrate_cold". + * migrate_cold actions, and @migrate_dests is unset. * * Before applying the &action to a memory region, &struct damon_operations * implementation could check pages of the region and skip &action to respect @@ -533,7 +537,10 @@ struct damos { struct damos_quota quota; struct damos_watermarks wmarks; union { - int target_nid; + struct { + int target_nid; + struct damos_migrate_dests migrate_dests; + }; }; struct list_head filters; struct list_head ops_filters; diff --git a/mm/damon/core.c b/mm/damon/core.c index ab28ab5d08f6..62acfd5cf4ea 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -407,6 +407,7 @@ struct damos *damon_new_scheme(struct damos_access_pattern *pattern, scheme->wmarks = *wmarks; scheme->wmarks.activated = true; + scheme->migrate_dests = (struct damos_migrate_dests){}; scheme->target_nid = target_nid; return scheme; @@ -449,6 +450,9 @@ void damon_destroy_scheme(struct damos *s) damos_for_each_filter_safe(f, next, s) damos_destroy_filter(f); + + kfree(s->migrate_dests.node_id_arr); + kfree(s->migrate_dests.weight_arr); damon_del_scheme(s); damon_free_scheme(s); } -- 2.43.0