From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 09CC3286405 for ; Fri, 5 Dec 2025 21:59:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764971957; cv=none; b=Q5HMTQ4s88wtiJ4OM2ClXj4nxl827RniiK2kQef7NADzV20je2YNp9FrquMU1QLOYZB5WuGta95EY0J2oNr+3r5+z6elaQtfucWKidS4fZ0pbKKNJuzwckGtN60+Wx/W82RzeWODSslgn4u/kZIYAAf8Np3bl4zOlCnXjb7xc7k= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764971957; c=relaxed/simple; bh=0sU1EQcdZyezVF337crRRklIk+9wTFCTBFFMQOfna6g=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=CM2zzpWf52KaQbOJJ+PZf2civoe17i6KxFkg7pMXzAx/0nj4N2/fddsX9Otf8JFEhCvYx6e/AyTcw8pa2IJPgZW7/jaelgWFnmeVSGw5RZtLVIHqGbbQ3kijnsJ74XqV+Rx72FoOcvD9wvEVkt4hyvWziuPqmr9cTl62R9dfIA8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 256D01A00; Fri, 5 Dec 2025 13:59:05 -0800 (PST) Received: from merodach.members.linode.com (usa-sjc-mx-foss1.foss.arm.com [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B2F593F740; Fri, 5 Dec 2025 13:59:08 -0800 (PST) From: James Morse To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: James Morse , D Scott Phillips OS , carl@os.amperecomputing.com, lcherian@marvell.com, bobo.shaobowang@huawei.com, tan.shaopeng@fujitsu.com, baolin.wang@linux.alibaba.com, Jamie Iles , Xin Hao , peternewman@google.com, dfustini@baylibre.com, amitsinght@marvell.com, David Hildenbrand , Dave Martin , Koba Ko , Shanker Donthineni , fenghuay@nvidia.com, baisheng.gao@unisoc.com, Jonathan Cameron , Gavin Shan , Ben Horgan , rohit.mathew@arm.com, reinette.chatre@intel.com, Punit Agrawal Subject: [RFC PATCH 00/38] arm_mpam: Add KVM/arm64 and resctrl glue code Date: Fri, 5 Dec 2025 21:58:23 +0000 Message-Id: <20251205215901.17772-1-james.morse@arm.com> X-Mailer: git-send-email 2.20.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit This is the missing piece to make MPAM usable resctrl in user-space. This has shed its debugfs code and the read/write 'event configuration' for the monitors to make the series smaller. This adds the arch code and KVM support first. I anticipate the whole thing going via arm64, but if goes via tip instead, the an immutable branch with those patches should be easy to do. I've not CC'd all the relevant maintainers because its the merge window. (...and yet there are folk chomping at the bit to see this posted...) Generally the resctrl glue code works by picking what MPAM features it can expose from the MPAM drive, then configuring the structs that back the resctrl helpers. If your platform is sufficiently Xeon shaped, you should be able to get L2/L3 CPOR bitmaps exposed via resctrl. CSU counters work if they are on/after the L3. MBWU counters are considerably more hairy, and depend on hueristics around the topology, and a bunch of stuff trying to emulate ABMC. If it didn't pick what you wanted it to, please share the debug messages produced when enabling dynamic debug and booting with: | dyndbg="file mpam_resctrl.c +pl" I've not found a platform that can test all the behaviours around the monitors, so this is where I'd expect the most bugs. The MPAM spec that describes all the system and MMIO registers can be found here: https://developer.arm.com/documentation/ddi0598/db/?lang=en (Ignored the 'RETIRED' warning - that is just arm moving the documentation around. This document has the best overview) This series is based on arm64/for-next/core, and can be retrieved from: https://git.kernel.org/pub/scm/linux/kernel/git/morse/linux.git mpam/glue/rfc There is no snapshot branch - this is it! I'll push the extras branch once I've gotten a handle on the DT shaped mess in there. What is MPAM? Set your time-machine to 2020: https://lore.kernel.org/lkml/20201030161120.227225-1-james.morse@arm.com/ Thanks, James Morse (32): arm64: mpam: Context switch the MPAM registers arm64: mpam: Re-initialise MPAM regs when CPU comes online arm64: mpam: Advertise the CPUs MPAM limits to the driver arm64: mpam: Add cpu_pm notifier to restore MPAM sysregs arm64: mpam: Add helpers to change a task or cpu's MPAM PARTID/PMG values KVM: arm64: Force guest EL1 to use user-space's partid configuration arm_mpam: resctrl: Add boilerplate cpuhp and domain allocation arm_mpam: resctrl: Pick the caches we will use as resctrl resources arm_mpam: resctrl: Implement resctrl_arch_reset_all_ctrls() arm_mpam: resctrl: Add resctrl_arch_get_config() arm_mpam: resctrl: Implement helpers to update configuration arm_mpam: resctrl: Add plumbing against arm64 task and cpu hooks arm_mpam: resctrl: Add CDP emulation arm_mpam: resctrl: Add rmid index helpers arm_mpam: resctrl: Add support for 'MB' resource arm_mpam: resctrl: Add support for csu counters arm_mpam: resctrl: pick classes for use as mbm counters arm_mpam: resctrl: Pre-allocate free running monitors arm_mpam: resctrl: Pre-allocate assignable monitors arm_mpam: resctrl: Add kunit test for ABMC/CDP interactions arm_mpam: resctrl: Add resctrl_arch_config_cntr() for ABMC use arm_mpam: resctrl: Allow resctrl to allocate monitors arm_mpam: resctrl: Add resctrl_arch_rmid_read() and resctrl_arch_reset_rmid() arm_mpam: resctrl: Add resctrl_arch_cntr_read() & resctrl_arch_reset_cntr() arm_mpam: resctrl: Add empty definitions for assorted resctrl functions arm64: mpam: Select ARCH_HAS_CPU_RESCTRL arm_mpam: resctrl: Call resctrl_init() on platforms that can support resctrl arm_mpam: resctrl: Call resctrl_exit() in the event of errors arm_mpam: resctrl: Update the rmid reallocation limit arm_mpam: resctrl: Sort the order of the domain lists arm_mpam: Generate a configuration for min controls arm_mpam: Quirk CMN-650's CSU NRDY behaviour Dave Martin (2): arm_mpam: resctrl: Convert to/from MPAMs fixed-point formats arm_mpam: resctrl: Add kunit test for control format conversions Shanker Donthineni (4): arm_mpam: Add quirk framework arm_mpam: Add workaround for T241-MPAM-1 arm_mpam: Add workaround for T241-MPAM-4 arm_mpam: Add workaround for T241-MPAM-6 Documentation/arch/arm64/silicon-errata.rst | 9 + arch/arm64/Kconfig | 6 +- arch/arm64/include/asm/kvm_host.h | 1 + arch/arm64/include/asm/mpam.h | 105 + arch/arm64/include/asm/resctrl.h | 2 + arch/arm64/include/asm/thread_info.h | 3 + arch/arm64/kernel/Makefile | 1 + arch/arm64/kernel/cpufeature.c | 18 +- arch/arm64/kernel/mpam.c | 55 + arch/arm64/kernel/process.c | 7 + arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h | 16 + arch/arm64/kvm/hyp/nvhe/switch.c | 12 + arch/arm64/kvm/hyp/vhe/sysreg-sr.c | 1 + drivers/resctrl/Kconfig | 9 +- drivers/resctrl/Makefile | 1 + drivers/resctrl/mpam_devices.c | 298 ++- drivers/resctrl/mpam_internal.h | 120 +- drivers/resctrl/mpam_resctrl.c | 1926 +++++++++++++++++++ drivers/resctrl/test_mpam_devices.c | 66 + drivers/resctrl/test_mpam_resctrl.c | 374 ++++ include/linux/arm_mpam.h | 32 + 21 files changed, 3038 insertions(+), 24 deletions(-) create mode 100644 arch/arm64/include/asm/mpam.h create mode 100644 arch/arm64/include/asm/resctrl.h create mode 100644 arch/arm64/kernel/mpam.c create mode 100644 drivers/resctrl/mpam_resctrl.c create mode 100644 drivers/resctrl/test_mpam_resctrl.c -- 2.39.5