mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
ACPI: MRRM: Minimal parse of ACPI MRRM table
The resctrl file system code needs to know how many region tags are supported. Parse the ACPI MRRM table and save the max_mem_region value. Provide a function for resctrl to collect that value. Signed-off-by: Tony Luck <tony.luck@intel.com> Link: https://patch.msgid.link/20250505173819.419271-2-tony.luck@intel.com Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
fec2686d4d
commit
b9020bdb9f
5 changed files with 56 additions and 0 deletions
|
@ -38,6 +38,7 @@ config X86_64
|
|||
select ARCH_HAS_ELFCORE_COMPAT
|
||||
select ZONE_DMA32
|
||||
select EXECMEM if DYNAMIC_FTRACE
|
||||
select ACPI_MRRM if ACPI
|
||||
|
||||
config FORCE_DYNAMIC_FTRACE
|
||||
def_bool y
|
||||
|
|
|
@ -576,6 +576,9 @@ config ACPI_FFH
|
|||
Enable this feature if you want to set up and install the FFH Address
|
||||
Space handler to handle FFH OpRegion in the firmware.
|
||||
|
||||
config ACPI_MRRM
|
||||
bool
|
||||
|
||||
source "drivers/acpi/pmic/Kconfig"
|
||||
|
||||
config ACPI_VIOT
|
||||
|
|
|
@ -66,6 +66,7 @@ acpi-$(CONFIG_ACPI_WATCHDOG) += acpi_watchdog.o
|
|||
acpi-$(CONFIG_ACPI_PRMT) += prmt.o
|
||||
acpi-$(CONFIG_ACPI_PCC) += acpi_pcc.o
|
||||
acpi-$(CONFIG_ACPI_FFH) += acpi_ffh.o
|
||||
acpi-$(CONFIG_ACPI_MRRM) += acpi_mrrm.o
|
||||
|
||||
# Address translation
|
||||
acpi-$(CONFIG_ACPI_ADXL) += acpi_adxl.o
|
||||
|
|
42
drivers/acpi/acpi_mrrm.c
Normal file
42
drivers/acpi/acpi_mrrm.c
Normal file
|
@ -0,0 +1,42 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (c) 2025, Intel Corporation.
|
||||
*
|
||||
* Memory Range and Region Mapping (MRRM) structure
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "acpi/mrrm: " fmt
|
||||
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
static int max_mem_region = -ENOENT;
|
||||
|
||||
/* Access for use by resctrl file system */
|
||||
int acpi_mrrm_max_mem_region(void)
|
||||
{
|
||||
return max_mem_region;
|
||||
}
|
||||
|
||||
static __init int acpi_parse_mrrm(struct acpi_table_header *table)
|
||||
{
|
||||
struct acpi_table_mrrm *mrrm;
|
||||
|
||||
mrrm = (struct acpi_table_mrrm *)table;
|
||||
if (!mrrm)
|
||||
return -ENODEV;
|
||||
|
||||
max_mem_region = mrrm->max_mem_region;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static __init int mrrm_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = acpi_table_parse(ACPI_SIG_MRRM, acpi_parse_mrrm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
device_initcall(mrrm_init);
|
|
@ -772,6 +772,10 @@ int acpi_get_local_u64_address(acpi_handle handle, u64 *addr);
|
|||
int acpi_get_local_address(acpi_handle handle, u32 *addr);
|
||||
const char *acpi_get_subsystem_id(acpi_handle handle);
|
||||
|
||||
#ifdef CONFIG_ACPI_MRRM
|
||||
int acpi_mrrm_max_mem_region(void);
|
||||
#endif
|
||||
|
||||
#else /* !CONFIG_ACPI */
|
||||
|
||||
#define acpi_disabled 1
|
||||
|
@ -1092,6 +1096,11 @@ static inline acpi_handle acpi_get_processor_handle(int cpu)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline int acpi_mrrm_max_mem_region(void)
|
||||
{
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_ACPI */
|
||||
|
||||
#ifdef CONFIG_ACPI_HMAT
|
||||
|
|
Loading…
Add table
Reference in a new issue