On Mon, Feb 10, 2025 at 10:12 PM Tony Luck <tony.luck@xxxxxxxxx> wrote: > > From: Fenghua Yu <fenghua.yu@xxxxxxxxx> > > The MRRM table describes association between physical address ranges > and "region numbers". This is used by: > > 1) The /sys/fs/resctrl filesystem to report memory traffic per-RMID for > each region. > 2) Perf subsystem to report memory related uncore events per region. > > Structure defined in the Intel Resource Director Technology (RDT) > Architecture specification downloadable from www.intel.com/sdm > > Signed-off-by: Fenghua Yu <fenghua.yu@xxxxxxxxx> > Signed-off-by: Tony Luck <tony.luck@xxxxxxxxx> So the process for ACPICA changes is that they first need to go into the upstream ACPICA project on GitHub. Once merged there, you can submit a corresponding Linux patch pointing to the upstream commit, but submitting it is not mandatory because upstream material lands in the Linux kernel eventually automatically. > --- > include/acpi/actbl3.h | 40 ++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 40 insertions(+) > > diff --git a/include/acpi/actbl3.h b/include/acpi/actbl3.h > index 5cd755143b7d..1b9a03ff73ba 100644 > --- a/include/acpi/actbl3.h > +++ b/include/acpi/actbl3.h > @@ -42,6 +42,7 @@ > #define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Mitigations Table */ > #define ACPI_SIG_XENV "XENV" /* Xen Environment table */ > #define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */ > +#define ACPI_SIG_MRRM "MRRM" /* Memory Range and Region Mapping table */ > > /* > * All tables must be byte-packed to match the ACPI specification, since > @@ -793,6 +794,45 @@ struct acpi_table_xenv { > u8 event_flags; > }; > > +/******************************************************************************* > + * > + * MRRM - Memory Range and Region Mapping (MRRM) table > + * > + ******************************************************************************/ > + > +struct acpi_table_mrrm { > + struct acpi_table_header header; > + u8 max_mem_region; /* Max Memory Regions supported */ > + u8 flags; /* Region assignment type */ > + u8 reserved[26]; > + /* Memory range entry array */ > +}; > +#define ACPI_MRRM_FLAGS_REGION_ASSIGNMENT_OS (1<<0) > + > +/******************************************************************************* > + * > + * Memory Range entry - Memory Range entry in MRRM table > + * > + ******************************************************************************/ > + > +struct acpi_table_mrrm_mem_range_entry { > + u16 type; /* Type 0="MRRM" */ > + u16 length; /* 32B + sizeof(Region-ID Programming Reg[]) */ > + u32 reserved; /* Reserved */ > + u32 base_addr_low; /* Low 32 bits of base addr of the mem range */ > + u32 base_addr_high; /* High 32 bits of base addr of the mem range */ > + u32 len_low; /* Low 32 bits of length of the mem range */ > + u32 len_high; /* High 32 bits of 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[] */ > +}; > + > +#define ACPI_MRRM_VALID_REGION_ID_FLAGS_LOCAL (1<<0) > +#define ACPI_MRRM_VALID_REGION_ID_FLAGS_REMOTE (1<<1) > + > /* Reset to default packing */ > > #pragma pack() > -- > 2.48.1 > >