* [PATCH v2 0/4] Add interfaces for ACPI MRRM table
@ 2025-02-27 22:48 Tony Luck
2025-02-27 22:48 ` [PATCH v2 1/4] ACPICA: Define MRRM ACPI table Tony Luck
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Tony Luck @ 2025-02-27 22:48 UTC (permalink / raw)
To: Rafael J. Wysocki, Len Brown; +Cc: linux-acpi, linux-kernel, patches, Tony Luck
Memory used to be homogeneous. Then NUMA came along. Later different
types of memory (persistent memory, on-package high bandwidth memory,
CXL attached memory).
Each type of memory has its own performance characteristics, and users
will need to monitor and control access by type.
The MRRM solution is to tag physical address ranges with "region IDs"
so that platform firmware[1] can indicate the type of memory for each
range (with separate tags available for local vs. remote access to
each range). Note that these ranges can include addresses reserved
for future hotplugged memory.
The region IDs will be used to provide separate event counts for each
region for "perf" and for the "resctrl" file system to monitor and
control memory bandwidth in each region.
Users will need to know the address range(s) that are part of each
region. This patch series adds
/sys/firmware/acpi/memory_ranges/rangeX
directories to provide user space accessible enumeration.
-Tony
[1] MRRM definition allow for future expansion for the OS to assign
these region IDs.
Changes since v1 posted at:
https://lore.kernel.org/all/20250210211223.6139-1-tony.luck@intel.com/
1) Target /sys directory for the files moved from
/sys/devices/system/memory to /sys/firmware/acpi/memory.
While the old target had a useful sounding name, it is really all about
hotplug memory while this enumeration is about different types of memory
with hotplug being a non-issue as memory ranges can describe addresses
that are reserved for future addition of different types of memory.
2) The ACPICA changes in patch one have been committed to the acpica
git repository and will make their way into Linux for the next ACPICA
release. Patch included here for convenience.
3) I included a "testing" patch that provides a fake MRRM table so
that anyone can compile and run this series to check things out.
Tony Luck (4):
ACPICA: Define MRRM ACPI table
ACPI/MRRM: Create /sys/firmware/acpi/memory_ranges/rangeX ABI
ACPI: Add documentation for exposing MRRM data
acpi_mrrm: fake for testing, do not apply!
include/linux/acpi.h | 6 +
include/acpi/actbl1.h | 7 +
include/acpi/actbl2.h | 42 ++++
drivers/acpi/acpi_mrrm.c | 185 ++++++++++++++++++
Documentation/ABI/testing/sysfs-firmware-acpi | 16 ++
arch/x86/Kconfig | 1 +
drivers/acpi/Kconfig | 3 +
drivers/acpi/Makefile | 1 +
8 files changed, 261 insertions(+)
create mode 100644 drivers/acpi/acpi_mrrm.c
base-commit: d082ecbc71e9e0bf49883ee4afd435a77a5101b6
--
2.48.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/4] ACPICA: Define MRRM ACPI table
2025-02-27 22:48 [PATCH v2 0/4] Add interfaces for ACPI MRRM table Tony Luck
@ 2025-02-27 22:48 ` Tony Luck
2025-02-27 22:48 ` [PATCH v2 2/4] ACPI/MRRM: Create /sys/firmware/acpi/memory_ranges/rangeX ABI Tony Luck
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Tony Luck @ 2025-02-27 22:48 UTC (permalink / raw)
To: Rafael J. Wysocki, Len Brown; +Cc: linux-acpi, linux-kernel, patches, Tony Luck
Patch for reference, this has already been applied to
https://github.com/acpica/acpica and will in due course make its way
into Linux when the next ACPICA release is ported over.
Signed-off-by: Tony Luck <tony.luck@intel.com>
---
include/acpi/actbl1.h | 7 +++++++
include/acpi/actbl2.h | 42 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+)
diff --git a/include/acpi/actbl1.h b/include/acpi/actbl1.h
index 387fc821703a..07cb62541884 100644
--- a/include/acpi/actbl1.h
+++ b/include/acpi/actbl1.h
@@ -110,6 +110,13 @@ struct acpi_whea_header {
u64 mask; /* Bitmask required for this register instruction */
};
+/* Larger subtable header (when Length can exceed 255) */
+
+struct acpi_subtable_header_16 {
+ u16 type;
+ u16 length;
+};
+
/* https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/acpitabl/ns-acpitabl-aspt_table */
#define ASPT_REVISION_ID 0x01
struct acpi_table_aspt {
diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h
index 2e917a8f8bca..662a1bc927ea 100644
--- a/include/acpi/actbl2.h
+++ b/include/acpi/actbl2.h
@@ -37,6 +37,7 @@
#define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */
#define ACPI_SIG_MPAM "MPAM" /* Memory System Resource Partitioning and Monitoring Table */
#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */
+#define ACPI_SIG_MRRM "MRRM" /* Memory Range and Region Mapping table */
#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */
#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */
#define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */
@@ -1736,6 +1737,47 @@ struct acpi_msct_proximity {
u64 memory_capacity; /* In bytes */
};
+/*******************************************************************************
+ *
+ * MRRM - Memory Range and Region Mapping (MRRM) table
+ * Conforms to "Intel Resource Director Technology Architecture Specification"
+ * Version 1.1, January 2025
+ *
+ ******************************************************************************/
+
+struct acpi_table_mrrm {
+ struct acpi_table_header header; /* Common ACPI table header */
+ u8 max_mem_region; /* Max Memory Regions supported */
+ u8 flags; /* Region assignment type */
+ u8 reserved[26];
+ u8 memory_range_entry[];
+};
+
+/* Flags */
+#define ACPI_MRRM_FLAGS_REGION_ASSIGNMENT_OS (1<<0)
+
+/*******************************************************************************
+ *
+ * Memory Range entry - Memory Range entry in MRRM table
+ *
+ ******************************************************************************/
+
+struct acpi_mrrm_mem_range_entry {
+ struct acpi_subtable_header_16 header;
+ u32 reserved0; /* Reserved */
+ u64 addr_base; /* Base addr of the mem range */
+ u64 addr_len; /* Length of the mem range */
+ u16 region_id_flags; /* Valid local or remote Region-ID */
+ u8 local_region_id; /* Platform-assigned static local Region-ID */
+ u8 remote_region_id; /* Platform-assigned static remote Region-ID */
+ u32 reserved1; /* Reserved */
+ /* Region-ID Programming Registers[] */
+};
+
+/* Values for region_id_flags above */
+#define ACPI_MRRM_VALID_REGION_ID_FLAGS_LOCAL (1<<0)
+#define ACPI_MRRM_VALID_REGION_ID_FLAGS_REMOTE (1<<1)
+
/*******************************************************************************
*
* MSDM - Microsoft Data Management table
--
2.48.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/4] ACPI/MRRM: Create /sys/firmware/acpi/memory_ranges/rangeX ABI
2025-02-27 22:48 [PATCH v2 0/4] Add interfaces for ACPI MRRM table Tony Luck
2025-02-27 22:48 ` [PATCH v2 1/4] ACPICA: Define MRRM ACPI table Tony Luck
@ 2025-02-27 22:48 ` Tony Luck
2025-02-27 22:48 ` [PATCH v2 3/4] ACPI: Add documentation for exposing MRRM data Tony Luck
2025-02-27 22:48 ` [PATCH v2 4/4] acpi_mrrm: fake for testing, do not apply! Tony Luck
3 siblings, 0 replies; 5+ messages in thread
From: Tony Luck @ 2025-02-27 22:48 UTC (permalink / raw)
To: Rafael J. Wysocki, Len Brown; +Cc: linux-acpi, linux-kernel, patches, Tony Luck
Perf and resctrl users need an enumeration of which memory addresses
are bound to which "region" tag.
Parse the ACPI MRRM table and add /sys entries for each memory range
describing base address, length, and which region tags apply for
same-socket and cross-socket access.
[Derived from code developed by Fenghua Yu <fenghua.yu@intel.com>]
Signed-off-by: Tony Luck <tony.luck@intel.com>
---
include/linux/acpi.h | 6 ++
drivers/acpi/acpi_mrrm.c | 161 +++++++++++++++++++++++++++++++++++++++
arch/x86/Kconfig | 1 +
drivers/acpi/Kconfig | 3 +
drivers/acpi/Makefile | 1 +
5 files changed, 172 insertions(+)
create mode 100644 drivers/acpi/acpi_mrrm.c
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 4e495b29c640..677a9c4fa355 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -773,6 +773,12 @@ 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);
+#else
+static inline int acpi_mrrm_max_mem_region(void) { return -ENOENT; }
+#endif
+
#else /* !CONFIG_ACPI */
#define acpi_disabled 1
diff --git a/drivers/acpi/acpi_mrrm.c b/drivers/acpi/acpi_mrrm.c
new file mode 100644
index 000000000000..1f7d0381a628
--- /dev/null
+++ b/drivers/acpi/acpi_mrrm.c
@@ -0,0 +1,161 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2025, Intel Corporation.
+ *
+ * Memory Range and Region Mapping (MRRM) structure
+ *
+ * Parse and report the platform's MRRM table in /sys.
+ */
+
+#define pr_fmt(fmt) "acpi/mrrm: " fmt
+
+#include <linux/acpi.h>
+#include <linux/init.h>
+#include <linux/string.h>
+#include <linux/sysfs.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;
+}
+
+struct mrrm_mem_range_entry {
+ u64 base;
+ u64 length;
+ u8 local_region_id;
+ u8 remote_region_id;
+};
+
+static struct mrrm_mem_range_entry *mrrm_mem_range_entry;
+static u32 mrrm_mem_entry_num;
+
+static __init int acpi_parse_mrrm(struct acpi_table_header *table)
+{
+ struct acpi_mrrm_mem_range_entry *mre_entry;
+ struct acpi_table_mrrm *mrrm;
+ void *mre, *mrrm_end;
+ int mre_count = 0;
+
+ mrrm = (struct acpi_table_mrrm *)table;
+ if (!mrrm)
+ return -ENODEV;
+
+ if (mrrm->flags & ACPI_MRRM_FLAGS_REGION_ASSIGNMENT_OS)
+ return -EOPNOTSUPP;
+
+ mrrm_end = (void *)mrrm + mrrm->header.length - 1;
+ mre = (void *)mrrm + sizeof(struct acpi_table_mrrm);
+ while (mre < mrrm_end) {
+ mre_entry = mre;
+ mre_count++;
+ mre += mre_entry->header.length;
+ }
+ if (!mre_count) {
+ pr_info(FW_BUG "No ranges listed in MRRM table\n");
+ return -EINVAL;
+ }
+
+ mrrm_mem_range_entry = kmalloc_array(mre_count, sizeof(*mrrm_mem_range_entry),
+ GFP_KERNEL | __GFP_ZERO);
+ if (!mrrm_mem_range_entry)
+ return -ENOMEM;
+
+ mre = (void *)mrrm + sizeof(struct acpi_table_mrrm);
+ while (mre < mrrm_end) {
+ struct mrrm_mem_range_entry *e;
+
+ mre_entry = mre;
+ e = mrrm_mem_range_entry + mrrm_mem_entry_num;
+
+ e->base = mre_entry->addr_base;
+ e->length = mre_entry->addr_len;
+
+ if (mre_entry->region_id_flags & ACPI_MRRM_VALID_REGION_ID_FLAGS_LOCAL)
+ e->local_region_id = mre_entry->local_region_id;
+ else
+ e->local_region_id = -1;
+ if (mre_entry->region_id_flags & ACPI_MRRM_VALID_REGION_ID_FLAGS_REMOTE)
+ e->remote_region_id = mre_entry->remote_region_id;
+ else
+ e->remote_region_id = -1;
+
+ mrrm_mem_entry_num++;
+ mre += mre_entry->header.length;
+ }
+
+ max_mem_region = mrrm->max_mem_region;
+
+ return 0;
+}
+
+#define RANGE_ATTR(name) \
+static ssize_t name##_show(struct kobject *kobj, \
+ struct kobj_attribute *attr, char *buf) \
+{ \
+ struct mrrm_mem_range_entry *mre; \
+ const char *kname = kobject_name(kobj); \
+ int n, ret; \
+ \
+ ret = kstrtoint(kname + 5, 10, &n); \
+ if (ret) \
+ return ret; \
+ \
+ mre = mrrm_mem_range_entry + n; \
+ \
+ return sysfs_emit(buf, "0x%lx\n", (unsigned long)mre->name); \
+} \
+static struct kobj_attribute name##_attr = __ATTR_RO(name)
+
+RANGE_ATTR(base);
+RANGE_ATTR(length);
+RANGE_ATTR(local_region_id);
+RANGE_ATTR(remote_region_id);
+
+static struct attribute *memory_range_attrs[] = {
+ &base_attr.attr,
+ &length_attr.attr,
+ &local_region_id_attr.attr,
+ &remote_region_id_attr.attr,
+ NULL
+};
+
+ATTRIBUTE_GROUPS(memory_range);
+
+static __init int add_boot_memory_ranges(void)
+{
+ struct kobject *pkobj, *kobj;
+ int ret = -EINVAL;
+ char *name;
+
+ pkobj = kobject_create_and_add("memory_ranges", acpi_kobj);
+
+ for (int i = 0; i < mrrm_mem_entry_num; i++) {
+ name = kasprintf(GFP_KERNEL, "range%d", i);
+ if (!name)
+ break;
+
+ kobj = kobject_create_and_add(name, pkobj);
+
+ ret = sysfs_create_groups(kobj, memory_range_groups);
+ if (ret)
+ return ret;
+ }
+
+ return ret;
+}
+
+static __init int mrrm_init(void)
+{
+ int ret;
+
+ ret = acpi_table_parse(ACPI_SIG_MRRM, acpi_parse_mrrm);
+
+ if (ret < 0)
+ return ret;
+
+ return add_boot_memory_ranges();
+}
+device_initcall(mrrm_init);
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index be2c311f5118..f77af6b3c6cb 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -36,6 +36,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
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index d81b55f5068c..4f9aea2d0bc8 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -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
diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
index 40208a0f5dfb..5092b518fc9b 100644
--- a/drivers/acpi/Makefile
+++ b/drivers/acpi/Makefile
@@ -62,6 +62,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
--
2.48.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 3/4] ACPI: Add documentation for exposing MRRM data
2025-02-27 22:48 [PATCH v2 0/4] Add interfaces for ACPI MRRM table Tony Luck
2025-02-27 22:48 ` [PATCH v2 1/4] ACPICA: Define MRRM ACPI table Tony Luck
2025-02-27 22:48 ` [PATCH v2 2/4] ACPI/MRRM: Create /sys/firmware/acpi/memory_ranges/rangeX ABI Tony Luck
@ 2025-02-27 22:48 ` Tony Luck
2025-02-27 22:48 ` [PATCH v2 4/4] acpi_mrrm: fake for testing, do not apply! Tony Luck
3 siblings, 0 replies; 5+ messages in thread
From: Tony Luck @ 2025-02-27 22:48 UTC (permalink / raw)
To: Rafael J. Wysocki, Len Brown; +Cc: linux-acpi, linux-kernel, patches, Tony Luck
Initial implementation provides enumeration of the address ranges
and BIOS assigned region IDs for each range.
Signed-off-by: Tony Luck <tony.luck@intel.com>
---
Documentation/ABI/testing/sysfs-firmware-acpi | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-firmware-acpi b/Documentation/ABI/testing/sysfs-firmware-acpi
index 5249ad5a96d9..a3369cf95546 100644
--- a/Documentation/ABI/testing/sysfs-firmware-acpi
+++ b/Documentation/ABI/testing/sysfs-firmware-acpi
@@ -248,3 +248,19 @@ Description:
# cat ff_pwr_btn
7 enabled
+What: /sys/firmware/acpi/memory_ranges/rangeX
+Date: February 2025
+Contact: Tony Luck <tony.luck@intel.com>
+Description:
+ On systems with the ACPI MRRM table reports the
+ parameters for each range.
+
+ base: Starting system physical address.
+
+ length: Length of this range in bytes.
+
+ local_region_id: ID associated with access by agents
+ local to this range of addresses.
+
+ remote_region_id: ID associated with access by agents
+ non-local to this range of addresses.
--
2.48.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 4/4] acpi_mrrm: fake for testing, do not apply!
2025-02-27 22:48 [PATCH v2 0/4] Add interfaces for ACPI MRRM table Tony Luck
` (2 preceding siblings ...)
2025-02-27 22:48 ` [PATCH v2 3/4] ACPI: Add documentation for exposing MRRM data Tony Luck
@ 2025-02-27 22:48 ` Tony Luck
3 siblings, 0 replies; 5+ messages in thread
From: Tony Luck @ 2025-02-27 22:48 UTC (permalink / raw)
To: Rafael J. Wysocki, Len Brown; +Cc: linux-acpi, linux-kernel, patches, Tony Luck
Dummy MRRM table for a 2 socket system with memory map:
LocalAccess RemoteAccess
0-3.5G DDR on socket 0 0 1
2G-512G More DDR on socket 0 0 1
512G-1T DDR on socket 1 0 1
1T-2T Reserved for CXL on socket 0 2 3
2T-3T Reserved for CXL on socket 1 2 3
This tags all local DDR access in region 0, remote DDR in region 1,
local CXL in region 2, and remote CXL in region 3.
Presented to user like this:
$ cd /sys/firmware/acpi
$ grep ^ memory_ranges/*/*
memory_ranges/range0/base:0x0
memory_ranges/range0/length:0xe0000000
memory_ranges/range0/local_region_id:0x0
memory_ranges/range0/remote_region_id:0x1
memory_ranges/range1/base:0x100000000
memory_ranges/range1/length:0x7f00000000
memory_ranges/range1/local_region_id:0x0
memory_ranges/range1/remote_region_id:0x1
memory_ranges/range2/base:0x8000000000
memory_ranges/range2/length:0x8000000000
memory_ranges/range2/local_region_id:0x0
memory_ranges/range2/remote_region_id:0x1
memory_ranges/range3/base:0x10000000000
memory_ranges/range3/length:0x100000000000
memory_ranges/range3/local_region_id:0x2
memory_ranges/range3/remote_region_id:0x3
memory_ranges/range4/base:0x200000000000
memory_ranges/range4/length:0x100000000000
memory_ranges/range4/local_region_id:0x2
memory_ranges/range4/remote_region_id:0x3
Signed-off-by: Tony Luck <tony.luck@intel.com>
---
drivers/acpi/acpi_mrrm.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/drivers/acpi/acpi_mrrm.c b/drivers/acpi/acpi_mrrm.c
index 1f7d0381a628..16f0ca7072e0 100644
--- a/drivers/acpi/acpi_mrrm.c
+++ b/drivers/acpi/acpi_mrrm.c
@@ -147,11 +147,35 @@ static __init int add_boot_memory_ranges(void)
return ret;
}
+#define FAKE 1
+#ifdef FAKE
+static const u8 fake_mrrm[] = {
+ 0x4D,0x52,0x52,0x4D,0xE0,0x00,0x00,0x00,0x01,0x3A,0x49,0x4E,0x54,0x45,0x4C,0x00,
+ 0x49,0x4E,0x54,0x45,0x4C,0x20,0x49,0x44,0x02,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,
+ 0x12,0x12,0x24,0x20,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x03,0x00,0x02,0x03,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x03,0x00,0x02,0x03,0x00,0x00,0x00,0x00
+};
+#endif
+
static __init int mrrm_init(void)
{
int ret;
+#ifdef FAKE
+ ret = acpi_parse_mrrm((struct acpi_table_header *)fake_mrrm);
+#else
ret = acpi_table_parse(ACPI_SIG_MRRM, acpi_parse_mrrm);
+#endif
if (ret < 0)
return ret;
--
2.48.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-02-27 22:48 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-27 22:48 [PATCH v2 0/4] Add interfaces for ACPI MRRM table Tony Luck
2025-02-27 22:48 ` [PATCH v2 1/4] ACPICA: Define MRRM ACPI table Tony Luck
2025-02-27 22:48 ` [PATCH v2 2/4] ACPI/MRRM: Create /sys/firmware/acpi/memory_ranges/rangeX ABI Tony Luck
2025-02-27 22:48 ` [PATCH v2 3/4] ACPI: Add documentation for exposing MRRM data Tony Luck
2025-02-27 22:48 ` [PATCH v2 4/4] acpi_mrrm: fake for testing, do not apply! Tony Luck
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox