From: Ben Horgan <ben.horgan@arm.com>
To: Fenghua Yu <fenghuay@nvidia.com>
Cc: amitsinght@marvell.com, baisheng.gao@unisoc.com,
baolin.wang@linux.alibaba.com, carl@os.amperecomputing.com,
dave.martin@arm.com, david@kernel.org, dfustini@baylibre.com,
gshan@redhat.com, james.morse@arm.com,
jonathan.cameron@huawei.com, kobak@nvidia.com,
lcherian@marvell.com, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, peternewman@google.com,
punit.agrawal@oss.qualcomm.com, quic_jiles@quicinc.com,
reinette.chatre@intel.com, rohit.mathew@arm.com,
scott@os.amperecomputing.com, sdonthineni@nvidia.com,
tan.shaopeng@fujitsu.com, xhao@linux.alibaba.com,
catalin.marinas@arm.com, will@kernel.org, corbet@lwn.net,
maz@kernel.org, oupton@kernel.org, joey.gouly@arm.com,
suzuki.poulose@arm.com, kvmarm@lists.linux.dev,
zengheng4@huawei.com, linux-doc@vger.kernel.org,
Shaopeng Tan <tan.shaopeng@jp.fujitsu.com>
Subject: Re: [PATCH v4 20/41] arm_mpam: resctrl: Add CDP emulation
Date: Wed, 11 Feb 2026 10:50:38 +0000 [thread overview]
Message-ID: <aYxe_rFXLSru5p-J@e134344.arm.com> (raw)
In-Reply-To: <7a0953ff-6475-4311-b34c-47eed9d38cb1@arm.com>
On Mon, Feb 09, 2026 at 03:36:32PM +0000, Ben Horgan wrote:
> Hi Fenghua,
>
> On 2/9/26 01:16, Fenghua Yu wrote:
> > Hi, Ben,
> >
> > On 2/3/26 13:43, Ben Horgan wrote:
> >> From: James Morse <james.morse@arm.com>
> >>
> >> Intel RDT's CDP feature allows the cache to use a different control value
> >> depending on whether the accesses was for instruction fetch or a data
> >> access. MPAM's equivalent feature is the other way up: the CPU assigns a
> >> different partid label to traffic depending on whether it was instruction
> >> fetch or a data access, which causes the cache to use a different control
> >> value based solely on the partid.
> >>
> >> MPAM can emulate CDP, with the side effect that the alternative partid is
> >> seen by all MSC, it can't be enabled per-MSC.
> >>
> >> Add the resctrl hooks to turn this on or off. Add the helpers that
> >> match a
> >> closid against a task, which need to be aware that the value written to
> >> hardware is not the same as the one resctrl is using.
> >>
> >> Update the 'arm64_mpam_global_default' variable the arch code uses during
> >> context switch to know when the per-cpu value should be used instead.
> >> Also,
> >> update these per-cpu values and sync the resulting mpam partid/pmg
> >> configuration to hardware.
> >>
> >> Awkwardly, the MB controls don't implement CDP. To emulate this, the MPAM
> >> equivalent needs programming twice by the resctrl glue, as resctrl
> >> expects
> >> the bandwidth controls to be applied independently for both data and
> >> instruction-fetch.
> >>
> >> Tested-by: Gavin Shan <gshan@redhat.com>
> >> Tested-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com>
> >> Tested-by: Peter Newman <peternewman@google.com>
> >> CC: Dave Martin <Dave.Martin@arm.com>
> >> CC: Amit Singh Tomar <amitsinght@marvell.com>
> >> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
> >> Signed-off-by: James Morse <james.morse@arm.com>
> >> Signed-off-by: Ben Horgan <ben.horgan@arm.com>
> >> ---
> >> Changes since rfc:
> >> Fail cdp initialisation if there is only one partid
> >> Correct data/code confusion
> >>
> >> Changes since v2:
> >> Don't include unused header
> >>
> >> Changes since v3:
> >> Update the per-cpu values and sync to h/w
> >> ---
> >> arch/arm64/include/asm/mpam.h | 1 +
> >> drivers/resctrl/mpam_resctrl.c | 117 +++++++++++++++++++++++++++++++++
> >> include/linux/arm_mpam.h | 2 +
> >> 3 files changed, 120 insertions(+)
> >>
> >> diff --git a/arch/arm64/include/asm/mpam.h b/arch/arm64/include/asm/
> >> mpam.h
> >> index 05aa71200f61..70d396e7b6da 100644
> >> --- a/arch/arm64/include/asm/mpam.h
> >> +++ b/arch/arm64/include/asm/mpam.h
> >> @@ -4,6 +4,7 @@
> >> #ifndef __ASM__MPAM_H
> >> #define __ASM__MPAM_H
> >> +#include <linux/arm_mpam.h>
> >> #include <linux/bitfield.h>
> >> #include <linux/jump_label.h>
> >> #include <linux/percpu.h>
> >> diff --git a/drivers/resctrl/mpam_resctrl.c b/drivers/resctrl/
> >> mpam_resctrl.c
> >> index cd52ca279651..12017264530a 100644
> >> --- a/drivers/resctrl/mpam_resctrl.c
> >> +++ b/drivers/resctrl/mpam_resctrl.c
> >> @@ -38,6 +38,10 @@ static DEFINE_MUTEX(domain_list_lock);
> >> static bool exposed_alloc_capable;
> >> static bool exposed_mon_capable;
> >> +/*
> >> + * MPAM emulates CDP by setting different PARTID in the I/D fields of
> >> MPAM0_EL1.
> >> + * This applies globally to all traffic the CPU generates.
> >> + */
> >> static bool cdp_enabled;
> >> bool resctrl_arch_alloc_capable(void)
> >> @@ -50,6 +54,72 @@ bool resctrl_arch_mon_capable(void)
> >> return exposed_mon_capable;
> >> }
> >> +bool resctrl_arch_get_cdp_enabled(enum resctrl_res_level rid)
> >> +{
> >> + switch (rid) {
> >> + case RDT_RESOURCE_L2:
> >> + case RDT_RESOURCE_L3:
> >> + return cdp_enabled;
> >> + case RDT_RESOURCE_MBA:
> >> + default:
> >> + /*
> >> + * x86's MBA control doesn't support CDP, so user-space doesn't
> >
> > s/x86's/ARM's/
>
> In CPUs supporting MPAM the instruction/data distinction is made at the
> CPU so doesn't depend on the specific control. The point this comment is
> trying to make is that as x86 doesn't support CDP on MBA, resctrl, which
> was initially x86 specific, expected CDP not to be supported on MBA and
> hence MPAM/ARM64 has to match this behaviour. Therefore, the MPAM driver
> doesn't support CDP on MBA either. In essence, the MPAM driver emulates
> the x86 CDP behaviour. Having said that, this comment relies on the
> reader knowing this historical context, and so I'll update it to not
> reference x86 and just mention that it is the expectation of the resctrl
> interface.
Looking a bit deeper into CDP I notice a couple of issues here that will make
code change. The resctrl mount options for L2 and L3 cdp are separate and so
they need to be considered separately here too. Secondly, as 'CDP' in MPAM is
controlled at the cpu interface rather than the component it needs to be hidden
for the resources that it's not enabled for. (In MPAM, when 'CDP' is enabled
PARTID_D and PARTID_I to different values in MPAMx_ELy and they take the same
value when disabled.) As mbw_max is a per-partid maximum setting the same
configuration for 2 partids is not the same as setting the value for a single
partid. Furthermore, there is no way to pretend convincingly that the 2 partids
are a a single partid. Hence, in MPAM the MBA resource can't hide CDP and needs
to be disabled when MBA is enabled.
In the future, a resctrl mount option to enable CDP for the MBA resource could
be considered. Some more thought is needed here though as it's not obvious how
this would work with the software controller and would likely not work on other
architectures.
>
> >
> > Thanks.
> >
> > -Fenghua
> >
> > [SNIP]
>
> Thanks,
>
> Ben
>
>
next prev parent reply other threads:[~2026-02-11 10:51 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-03 21:43 [PATCH v4 00/41] arm_mpam: Add KVM/arm64 and resctrl glue code Ben Horgan
2026-02-03 21:43 ` [PATCH v4 01/41] arm64/sysreg: Add MPAMSM_EL1 register Ben Horgan
2026-02-03 21:43 ` [PATCH v4 02/41] KVM: arm64: Preserve host MPAM configuration when changing traps Ben Horgan
2026-02-03 21:43 ` [PATCH v4 03/41] KVM: arm64: Make MPAMSM_EL1 accesses UNDEF Ben Horgan
2026-02-03 21:43 ` [PATCH v4 04/41] arm64: mpam: Context switch the MPAM registers Ben Horgan
2026-02-05 16:16 ` Catalin Marinas
2026-02-03 21:43 ` [PATCH v4 05/41] arm64: mpam: Re-initialise MPAM regs when CPU comes online Ben Horgan
2026-02-05 16:20 ` Catalin Marinas
2026-02-03 21:43 ` [PATCH v4 06/41] arm64: mpam: Drop the CONFIG_EXPERT restriction Ben Horgan
2026-02-05 14:08 ` Jonathan Cameron
2026-02-05 16:21 ` Catalin Marinas
2026-02-03 21:43 ` [PATCH v4 07/41] arm64: mpam: Advertise the CPUs MPAM limits to the driver Ben Horgan
2026-02-03 21:43 ` [PATCH v4 08/41] arm64: mpam: Add cpu_pm notifier to restore MPAM sysregs Ben Horgan
2026-02-05 16:54 ` Catalin Marinas
2026-02-03 21:43 ` [PATCH v4 09/41] arm64: mpam: Initialise and context switch the MPAMSM_EL1 register Ben Horgan
2026-02-05 16:55 ` Catalin Marinas
2026-02-03 21:43 ` [PATCH v4 10/41] arm64: mpam: Add helpers to change a task or cpu's MPAM PARTID/PMG values Ben Horgan
2026-02-05 16:56 ` Catalin Marinas
2026-02-03 21:43 ` [PATCH v4 11/41] KVM: arm64: Force guest EL1 to use user-space's partid configuration Ben Horgan
2026-02-03 21:43 ` [PATCH v4 12/41] KVM: arm64: Use kernel-space partid configuration for hypercalls Ben Horgan
2026-02-03 21:43 ` [PATCH v4 13/41] arm_mpam: resctrl: Add boilerplate cpuhp and domain allocation Ben Horgan
2026-02-10 22:57 ` Reinette Chatre
2026-02-11 15:36 ` Ben Horgan
2026-02-03 21:43 ` [PATCH v4 14/41] arm_mpam: resctrl: Sort the order of the domain lists Ben Horgan
2026-02-03 21:43 ` [PATCH v4 15/41] arm_mpam: resctrl: Pick the caches we will use as resctrl resources Ben Horgan
2026-02-10 23:39 ` Reinette Chatre
2026-02-11 11:05 ` Ben Horgan
2026-02-12 16:22 ` Reinette Chatre
2026-02-03 21:43 ` [PATCH v4 16/41] arm_mpam: resctrl: Implement resctrl_arch_reset_all_ctrls() Ben Horgan
2026-02-13 3:32 ` Zeng Heng
2026-02-03 21:43 ` [PATCH v4 17/41] arm_mpam: resctrl: Add resctrl_arch_get_config() Ben Horgan
2026-02-03 21:43 ` [PATCH v4 18/41] arm_mpam: resctrl: Implement helpers to update configuration Ben Horgan
2026-02-14 10:39 ` Zeng Heng
2026-02-16 14:23 ` Ben Horgan
2026-02-25 6:39 ` Zeng Heng
2026-02-03 21:43 ` [PATCH v4 19/41] arm_mpam: resctrl: Add plumbing against arm64 task and cpu hooks Ben Horgan
2026-02-03 21:43 ` [PATCH v4 20/41] arm_mpam: resctrl: Add CDP emulation Ben Horgan
2026-02-09 1:16 ` Fenghua Yu
2026-02-09 15:36 ` Ben Horgan
2026-02-11 10:50 ` Ben Horgan [this message]
2026-02-03 21:43 ` [PATCH v4 21/41] arm_mpam: resctrl: Convert to/from MPAMs fixed-point formats Ben Horgan
2026-02-03 21:43 ` [PATCH v4 22/41] arm_mpam: resctrl: Add kunit test for control format conversions Ben Horgan
2026-02-03 21:43 ` [PATCH v4 23/41] arm_mpam: resctrl: Add rmid index helpers Ben Horgan
2026-02-03 21:43 ` [PATCH v4 24/41] arm_mpam: resctrl: Add kunit test for rmid idx conversions Ben Horgan
2026-02-03 21:43 ` [PATCH v4 25/41] arm_mpam: resctrl: Wait for cacheinfo to be ready Ben Horgan
2026-02-03 21:43 ` [PATCH v4 26/41] arm_mpam: resctrl: Add support for 'MB' resource Ben Horgan
2026-02-05 16:50 ` Jonathan Cameron
2026-02-13 7:38 ` Zeng Heng
2026-02-16 13:54 ` Ben Horgan
2026-02-18 16:22 ` Ben Horgan
2026-02-18 17:17 ` Reinette Chatre
2026-02-25 8:08 ` Zeng Heng
2026-02-18 16:40 ` Ben Horgan
2026-02-10 6:20 ` Shaopeng Tan (Fujitsu)
2026-02-18 16:42 ` Ben Horgan
2026-02-03 21:43 ` [PATCH v4 27/41] arm_mpam: resctrl: Add support for csu counters Ben Horgan
2026-02-05 16:55 ` Jonathan Cameron
2026-02-03 21:43 ` [PATCH v4 28/41] arm_mpam: resctrl: Pick classes for use as mbm counters Ben Horgan
2026-02-05 16:58 ` Jonathan Cameron
2026-02-03 21:43 ` [PATCH v4 29/41] arm_mpam: resctrl: Pre-allocate free running monitors Ben Horgan
2026-02-03 21:43 ` [PATCH v4 30/41] arm_mpam: resctrl: Allow resctrl to allocate monitors Ben Horgan
2026-02-03 21:43 ` [PATCH v4 31/41] arm_mpam: resctrl: Add resctrl_arch_rmid_read() and resctrl_arch_reset_rmid() Ben Horgan
2026-02-03 21:43 ` [PATCH v4 32/41] arm_mpam: resctrl: Update the rmid reallocation limit Ben Horgan
2026-02-03 21:43 ` [PATCH v4 33/41] arm_mpam: resctrl: Add empty definitions for assorted resctrl functions Ben Horgan
2026-02-03 21:43 ` [PATCH v4 34/41] arm64: mpam: Select ARCH_HAS_CPU_RESCTRL Ben Horgan
2026-02-03 21:43 ` [PATCH v4 35/41] arm_mpam: resctrl: Call resctrl_init() on platforms that can support resctrl Ben Horgan
2026-02-03 21:43 ` [PATCH v4 36/41] arm_mpam: Add quirk framework Ben Horgan
2026-02-03 21:43 ` [PATCH v4 37/41] arm_mpam: Add workaround for T241-MPAM-1 Ben Horgan
2026-02-03 21:43 ` [PATCH v4 38/41] arm_mpam: Add workaround for T241-MPAM-4 Ben Horgan
2026-02-13 7:02 ` Shaopeng Tan (Fujitsu)
2026-02-14 1:29 ` Zeng Heng
2026-02-20 2:30 ` Shaopeng Tan (Fujitsu)
2026-02-03 21:43 ` [PATCH v4 39/41] arm_mpam: Add workaround for T241-MPAM-6 Ben Horgan
2026-02-03 21:43 ` [PATCH v4 40/41] arm_mpam: Quirk CMN-650's CSU NRDY behaviour Ben Horgan
2026-02-03 21:43 ` [PATCH v4 41/41] arm64: mpam: Add initial MPAM documentation Ben Horgan
2026-02-05 16:57 ` Catalin Marinas
2026-02-05 17:05 ` Jonathan Cameron
2026-02-18 17:02 ` Ben Horgan
2026-02-09 8:25 ` [PATCH v4 00/41] arm_mpam: Add KVM/arm64 and resctrl glue code Shaopeng Tan (Fujitsu)
2026-02-09 10:04 ` Ben Horgan
2026-02-12 14:51 ` Ben Horgan
2026-02-13 7:18 ` Shaopeng Tan (Fujitsu)
2026-02-14 9:40 ` Zeng Heng
2026-02-16 12:22 ` Ben Horgan
2026-02-24 11:03 ` Zeng Heng
2026-02-24 14:19 ` Ben Horgan
2026-02-24 15:27 ` Ben Horgan
2026-02-24 17:53 ` Ben Horgan
2026-02-26 7:17 ` Zeng Heng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aYxe_rFXLSru5p-J@e134344.arm.com \
--to=ben.horgan@arm.com \
--cc=amitsinght@marvell.com \
--cc=baisheng.gao@unisoc.com \
--cc=baolin.wang@linux.alibaba.com \
--cc=carl@os.amperecomputing.com \
--cc=catalin.marinas@arm.com \
--cc=corbet@lwn.net \
--cc=dave.martin@arm.com \
--cc=david@kernel.org \
--cc=dfustini@baylibre.com \
--cc=fenghuay@nvidia.com \
--cc=gshan@redhat.com \
--cc=james.morse@arm.com \
--cc=joey.gouly@arm.com \
--cc=jonathan.cameron@huawei.com \
--cc=kobak@nvidia.com \
--cc=kvmarm@lists.linux.dev \
--cc=lcherian@marvell.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maz@kernel.org \
--cc=oupton@kernel.org \
--cc=peternewman@google.com \
--cc=punit.agrawal@oss.qualcomm.com \
--cc=quic_jiles@quicinc.com \
--cc=reinette.chatre@intel.com \
--cc=rohit.mathew@arm.com \
--cc=scott@os.amperecomputing.com \
--cc=sdonthineni@nvidia.com \
--cc=suzuki.poulose@arm.com \
--cc=tan.shaopeng@fujitsu.com \
--cc=tan.shaopeng@jp.fujitsu.com \
--cc=will@kernel.org \
--cc=xhao@linux.alibaba.com \
--cc=zengheng4@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox