From nobody Tue Apr 7 00:46:11 2026 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) (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 5B9963CE49A for ; Tue, 17 Mar 2026 13:22:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773753730; cv=none; b=JCC7iu5TQKKLiXaQvGbtdeAdY+bqhcQTBjxUSI+vGngUgCUy+6hOCqvfXPjmUBGJzXrV/ApKRQEYEUTPlzeEAoYzquQZrmo7886ptjxF+UOidhBCo/8QSpOvNl2JRoE36HKfcEibaXWUk9KNEwn6b8RmOZufvadNVDlHggftcu0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773753730; c=relaxed/simple; bh=gXKc6xiGrOQDe2rE4ZW/Iq7WjmdBTNcJFRnSUx7/Klw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OJaSFgI+qg7q1EOmnwc+yMHJOQxcjjCLVxBkUiGkvTcXjLXcKHwMCvGOKXTOkSW6DIyBsCaMlhaO9OP7PcjEFvp4Dfz0ZGbsoP/aapRScjbK/rd9lchDOc0saVfUqTbz3Z1sDPw7zA0kfB4sthUAJpPuy71TGrkl6EBBy6F5Vj4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=h-partners.com; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b=djga2MJ+; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b=djga2MJ+; arc=none smtp.client-ip=45.249.212.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=h-partners.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b="djga2MJ+"; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b="djga2MJ+" dkim-signature: v=1; a=rsa-sha256; d=h-partners.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=8Ibjo/AQobb5yHN47S0iXLZ9KLOAjQV8jMQfFXm9LQw=; b=djga2MJ+Jqy/mxs1KhNiW4nSdq7ppMaitLMdK/bImLEn2sje0z3+K2rc1ojEhMSNQg72XCn9+ DQMcbdfmu/3e28wYVzcaXXGZCrQ6u3r3ctiZvsvNGQF9US6iyJkBe5QiaqAvRpxdMWiCwagv5k2 pWZkndUB4Y+w7G3VU1YJD1o= Received: from canpmsgout03.his.huawei.com (unknown [172.19.92.159]) by szxga01-in.huawei.com (SkyGuard) with ESMTPS id 4fZszR5VPNz1BG50 for ; Tue, 17 Mar 2026 21:21:07 +0800 (CST) dkim-signature: v=1; a=rsa-sha256; d=h-partners.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=8Ibjo/AQobb5yHN47S0iXLZ9KLOAjQV8jMQfFXm9LQw=; b=djga2MJ+Jqy/mxs1KhNiW4nSdq7ppMaitLMdK/bImLEn2sje0z3+K2rc1ojEhMSNQg72XCn9+ DQMcbdfmu/3e28wYVzcaXXGZCrQ6u3r3ctiZvsvNGQF9US6iyJkBe5QiaqAvRpxdMWiCwagv5k2 pWZkndUB4Y+w7G3VU1YJD1o= Received: from mail.maildlp.com (unknown [172.19.163.104]) by canpmsgout03.his.huawei.com (SkyGuard) with ESMTPS id 4fZstC0lK7zpSwr; Tue, 17 Mar 2026 21:16:35 +0800 (CST) Received: from kwepemf100008.china.huawei.com (unknown [7.202.181.222]) by mail.maildlp.com (Postfix) with ESMTPS id 500DA404AD; Tue, 17 Mar 2026 21:21:57 +0800 (CST) Received: from huawei.com (10.50.87.109) by kwepemf100008.china.huawei.com (7.202.181.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.36; Tue, 17 Mar 2026 21:21:56 +0800 From: Zeng Heng To: , , , , CC: , , , , , , , , , Subject: [PATCH v3 9/9] arm64/mpam: Add mpam_sync_config() for dynamic rmid expansion Date: Tue, 17 Mar 2026 21:21:41 +0800 Message-ID: <20260317132141.1272506-10-zengheng4@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260317132141.1272506-1-zengheng4@huawei.com> References: <20260317132141.1272506-1-zengheng4@huawei.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 X-ClientProxiedBy: kwepems500002.china.huawei.com (7.221.188.17) To kwepemf100008.china.huawei.com (7.202.181.222) Content-Type: text/plain; charset="utf-8" Add mpam_sync_config() to synchronize configuration when dynamically expanding rmid resources. When binding a new reqpartid to a control group, the driver maps the reqpartid to the corresponding intpartid or applies the control group's existing configuration to new partid if without Narrow partid feature. Extend mpam_apply_config() with 'sync' work mode: * Sync mode: mpam_sync_config() calls this to apply existing configuration without updating config. * Update(Non-sync) mode: resctrl_arch_update_one() calls this to compare, update, and apply configuration. This mode retains the original behavior. Signed-off-by: Zeng Heng --- drivers/resctrl/mpam_devices.c | 23 ++++++++++++++++++----- drivers/resctrl/mpam_internal.h | 2 +- drivers/resctrl/mpam_resctrl.c | 29 ++++++++++++++++++++++++++--- 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c index 20ad06f66b88..b9a9c92a6367 100644 --- a/drivers/resctrl/mpam_devices.c +++ b/drivers/resctrl/mpam_devices.c @@ -1768,6 +1768,7 @@ struct mpam_write_config_arg { struct mpam_msc_ris *ris; struct mpam_component *comp; u16 partid; + bool sync; }; =20 static int __write_config(void *arg) @@ -1776,6 +1777,15 @@ static int __write_config(void *arg) struct mpam_write_config_arg *c =3D arg; u32 reqpartid; =20 + if (c->sync) { + /* c->partid should be within the range of reqPARTIDs */ + WARN_ON_ONCE(c->partid < closid_num); + + mpam_reprogram_ris_partid(c->ris, c->partid, + &c->comp->cfg[req2intpartid(c->partid)]); + return 0; + } + /* c->partid should be within the range of intPARTIDs */ WARN_ON_ONCE(c->partid >=3D closid_num); =20 @@ -3039,7 +3049,7 @@ static bool mpam_update_config(struct mpam_config *cf= g, } =20 int mpam_apply_config(struct mpam_component *comp, u16 partid, - struct mpam_config *cfg) + struct mpam_config *cfg, bool sync) { struct mpam_write_config_arg arg; struct mpam_msc_ris *ris; @@ -3048,14 +3058,17 @@ int mpam_apply_config(struct mpam_component *comp, = u16 partid, =20 lockdep_assert_cpus_held(); =20 - /* Don't pass in the current config! */ - WARN_ON_ONCE(&comp->cfg[partid] =3D=3D cfg); + if (!sync) { + /* The partid is within the range of intPARTIDs */ + WARN_ON_ONCE(partid >=3D resctrl_arch_get_num_closid(NULL)); =20 - if (!mpam_update_config(&comp->cfg[partid], cfg)) - return 0; + if (!mpam_update_config(&comp->cfg[partid], cfg)) + return 0; + } =20 arg.comp =3D comp; arg.partid =3D partid; + arg.sync =3D sync; =20 guard(srcu)(&mpam_srcu); list_for_each_entry_srcu(vmsc, &comp->vmsc, comp_list, diff --git a/drivers/resctrl/mpam_internal.h b/drivers/resctrl/mpam_interna= l.h index 91f6d5f14a9e..321f60e909ba 100644 --- a/drivers/resctrl/mpam_internal.h +++ b/drivers/resctrl/mpam_internal.h @@ -478,7 +478,7 @@ void mpam_disable(struct work_struct *work); void mpam_reset_class_locked(struct mpam_class *class); =20 int mpam_apply_config(struct mpam_component *comp, u16 partid, - struct mpam_config *cfg); + struct mpam_config *cfg, bool sync); =20 int mpam_msmon_read(struct mpam_component *comp, struct mon_cfg *ctx, enum mpam_device_features, u64 *val); diff --git a/drivers/resctrl/mpam_resctrl.c b/drivers/resctrl/mpam_resctrl.c index a91c0e22ef6b..0c6c97a0386f 100644 --- a/drivers/resctrl/mpam_resctrl.c +++ b/drivers/resctrl/mpam_resctrl.c @@ -1488,15 +1488,15 @@ int resctrl_arch_update_one(struct rdt_resource *r,= struct rdt_ctrl_domain *d, */ if (mpam_resctrl_hide_cdp(r->rid)) { partid =3D resctrl_get_config_index(closid, CDP_CODE); - err =3D mpam_apply_config(dom->ctrl_comp, partid, &cfg); + err =3D mpam_apply_config(dom->ctrl_comp, partid, &cfg, false); if (err) return err; =20 partid =3D resctrl_get_config_index(closid, CDP_DATA); - return mpam_apply_config(dom->ctrl_comp, partid, &cfg); + return mpam_apply_config(dom->ctrl_comp, partid, &cfg, false); } =20 - return mpam_apply_config(dom->ctrl_comp, partid, &cfg); + return mpam_apply_config(dom->ctrl_comp, partid, &cfg, false); } =20 int resctrl_arch_update_domains(struct rdt_resource *r, u32 closid) @@ -1877,6 +1877,23 @@ static void update_rmid_entries_for_reqpartid(u32 re= qpartid) rmid_entry_reassign_closid(closid, req_pmg2rmid(reqpartid, pmg)); } =20 +static int mpam_sync_config(u32 reqpartid) +{ + struct mpam_component *comp; + struct mpam_class *class; + int err; + + list_for_each_entry(class, &mpam_classes, classes_list) { + list_for_each_entry(comp, &class->components, class_list) { + err =3D mpam_apply_config(comp, reqpartid, NULL, true); + if (err) + return err; + } + } + + return 0; +} + int resctrl_arch_rmid_expand(u32 closid) { int i; @@ -1890,10 +1907,16 @@ int resctrl_arch_rmid_expand(u32 closid) if (reqpartid_map[i] >=3D resctrl_arch_get_num_closid(NULL)) { if (cdp_enabled) { reqpartid_map[i] =3D resctrl_get_config_index(closid, CDP_DATA); + mpam_sync_config(i); + reqpartid_map[i + 1] =3D resctrl_get_config_index(closid, CDP_CODE); + mpam_sync_config(i + 1); + } else { reqpartid_map[i] =3D resctrl_get_config_index(closid, CDP_NONE); + mpam_sync_config(i); } + update_rmid_entries_for_reqpartid(i); return i; } --=20 2.25.1