fs/resctrl: Add boiler plate for external resctrl code

Add Makefile and Kconfig for fs/resctrl. Add ARCH_HAS_CPU_RESCTRL
for the common parts of the resctrl interface and make X86_CPU_RESCTRL
select this.

Adding an include of asm/resctrl.h to linux/resctrl.h allows the
/fs/resctrl files to switch over to using this header instead.

Co-developed-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: James Morse <james.morse@arm.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com>
Reviewed-by: Tony Luck <tony.luck@intel.com>
Reviewed-by: Fenghua Yu <fenghuay@nvidia.com>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Tested-by: Fenghua Yu <fenghuay@nvidia.com>
Tested-by: Carl Worth <carl@os.amperecomputing.com> # arm64
Tested-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com>
Tested-by: Peter Newman <peternewman@google.com>
Tested-by: Amit Singh Tomar <amitsinght@marvell.com> # arm64
Tested-by: Shanker Donthineni <sdonthineni@nvidia.com> # arm64
Tested-by: Babu Moger <babu.moger@amd.com>
Tested-by: Tony Luck <tony.luck@intel.com>
Link: https://lore.kernel.org/20250515165855.31452-16-james.morse@arm.com
This commit is contained in:
James Morse 2025-05-15 16:58:45 +00:00 committed by Borislav Petkov (AMD)
parent 003e860771
commit bff70402d6
19 changed files with 66 additions and 13 deletions

View File

@ -20427,6 +20427,7 @@ S: Supported
F: Documentation/arch/x86/resctrl*
F: arch/x86/include/asm/resctrl.h
F: arch/x86/kernel/cpu/resctrl/
F: fs/resctrl/
F: include/linux/resctrl*.h
F: tools/testing/selftests/resctrl/

View File

@ -1518,6 +1518,14 @@ config STRICT_MODULE_RWX
config ARCH_HAS_PHYS_TO_DMA
bool
config ARCH_HAS_CPU_RESCTRL
bool
help
An architecture selects this option to indicate that the necessary
hooks are provided to support the common memory system usage
monitoring and control interfaces provided by the 'resctrl'
filesystem (see RESCTRL_FS).
config HAVE_ARCH_COMPILER_H
bool
help

View File

@ -507,8 +507,9 @@ config X86_MPPARSE
config X86_CPU_RESCTRL
bool "x86 CPU resource control support"
depends on X86 && (CPU_SUP_INTEL || CPU_SUP_AMD)
select KERNFS
select PROC_CPU_RESCTRL if PROC_FS
depends on MISC_FILESYSTEMS
select ARCH_HAS_CPU_RESCTRL
select RESCTRL_FS
select RESCTRL_FS_PSEUDO_LOCK
help
Enable x86 CPU resource control support.
@ -526,12 +527,6 @@ config X86_CPU_RESCTRL
Say N if unsure.
config RESCTRL_FS_PSEUDO_LOCK
bool
help
Software mechanism to pin data in a cache portion using
micro-architecture specific knowledge.
config X86_FRED
bool "Flexible Return and Event Delivery"
depends on X86_64

View File

@ -9,8 +9,6 @@
#include <linux/jump_label.h>
#include <linux/tick.h>
#include <asm/resctrl.h>
#define L3_QOS_CDP_ENABLE 0x01ULL
#define L2_QOS_CDP_ENABLE 0x01ULL

View File

@ -19,11 +19,11 @@
#include <linux/cpu.h>
#include <linux/module.h>
#include <linux/resctrl.h>
#include <linux/sizes.h>
#include <linux/slab.h>
#include <asm/cpu_device_id.h>
#include <asm/resctrl.h>
#include "internal.h"

View File

@ -18,12 +18,12 @@
#include <linux/mman.h>
#include <linux/perf_event.h>
#include <linux/pm_qos.h>
#include <linux/resctrl.h>
#include <linux/slab.h>
#include <linux/uaccess.h>
#include <asm/cacheflush.h>
#include <asm/cpu_device_id.h>
#include <asm/resctrl.h>
#include <asm/perf_event.h>
#include "../../events/perf_event.h" /* For X86_CONFIG() */

View File

@ -18,6 +18,7 @@
#include <linux/fs_parser.h>
#include <linux/sysfs.h>
#include <linux/kernfs.h>
#include <linux/resctrl.h>
#include <linux/seq_buf.h>
#include <linux/seq_file.h>
#include <linux/sched/signal.h>
@ -28,7 +29,6 @@
#include <uapi/linux/magic.h>
#include <asm/resctrl.h>
#include "internal.h"
DEFINE_STATIC_KEY_FALSE(rdt_enable_key);

View File

@ -335,6 +335,7 @@ source "fs/omfs/Kconfig"
source "fs/hpfs/Kconfig"
source "fs/qnx4/Kconfig"
source "fs/qnx6/Kconfig"
source "fs/resctrl/Kconfig"
source "fs/romfs/Kconfig"
source "fs/pstore/Kconfig"
source "fs/ufs/Kconfig"

View File

@ -128,3 +128,4 @@ obj-$(CONFIG_EROFS_FS) += erofs/
obj-$(CONFIG_VBOXSF_FS) += vboxsf/
obj-$(CONFIG_ZONEFS_FS) += zonefs/
obj-$(CONFIG_BPF_LSM) += bpf_fs_kfuncs.o
obj-$(CONFIG_RESCTRL_FS) += resctrl/

39
fs/resctrl/Kconfig Normal file
View File

@ -0,0 +1,39 @@
config RESCTRL_FS
bool "CPU Resource Control Filesystem (resctrl)"
depends on ARCH_HAS_CPU_RESCTRL
select KERNFS
select PROC_CPU_RESCTRL if PROC_FS
help
Some architectures provide hardware facilities to group tasks and
monitor and control their usage of memory system resources such as
caches and memory bandwidth. Examples of such facilities include
Intel's Resource Director Technology (Intel(R) RDT) and AMD's
Platform Quality of Service (AMD QoS).
If your system has the necessary support and you want to be able to
assign tasks to groups and manipulate the associated resource
monitors and controls from userspace, say Y here to get a mountable
'resctrl' filesystem that lets you do just that.
If nothing mounts or prods the 'resctrl' filesystem, resource
controls and monitors are left in a quiescent, permissive state.
On architectures where this can be disabled independently, it is
safe to say N.
See <file:Documentation/arch/x86/resctrl.rst> for more information.
config RESCTRL_FS_PSEUDO_LOCK
bool
depends on RESCTRL_FS
help
Software mechanism to pin data in a cache portion using
micro-architecture specific knowledge.
config RESCTRL_RMID_DEPENDS_ON_CLOSID
bool
depends on RESCTRL_FS
help
Enabled by the architecture when the RMID values depend on the CLOSID.
This causes the CLOSID allocator to search for CLOSID with clean
RMID.

6
fs/resctrl/Makefile Normal file
View File

@ -0,0 +1,6 @@
# SPDX-License-Identifier: GPL-2.0
obj-$(CONFIG_RESCTRL_FS) += rdtgroup.o ctrlmondata.o monitor.o
obj-$(CONFIG_RESCTRL_FS_PSEUDO_LOCK) += pseudo_lock.o
# To allow define_trace.h's recursive include:
CFLAGS_monitor.o = -I$(src)

0
fs/resctrl/ctrlmondata.c Normal file
View File

0
fs/resctrl/internal.h Normal file
View File

0
fs/resctrl/monitor.c Normal file
View File

View File

0
fs/resctrl/pseudo_lock.c Normal file
View File

View File

0
fs/resctrl/rdtgroup.c Normal file
View File

View File

@ -8,6 +8,10 @@
#include <linux/pid.h>
#include <linux/resctrl_types.h>
#ifdef CONFIG_ARCH_HAS_CPU_RESCTRL
#include <asm/resctrl.h>
#endif
/* CLOSID, RMID value used by the default control group */
#define RESCTRL_RESERVED_CLOSID 0
#define RESCTRL_RESERVED_RMID 0