Re: [PATCH v1] ACPI: APEI: EINJ: Allow injection on legacy persistent memory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Aug 25, 2025 at 4:13 PM Luck, Tony <tony.luck@xxxxxxxxx> wrote:
>
> On Mon, Aug 25, 2025 at 10:33:48PM +0000, Jiaqi Yan wrote:
> > Legacy persistent memory, e.g. Device DAX configured like the following
> >
> >   440000000-303fffffff : Persistent Memory (legacy)
> >       440000000-47fffffff : dax1.0
> >       480000000-4bfffffff : dax2.0
> >       4c0000000-4ffffffff : dax3.0
> >       500000000-53fffffff : dax4.0
> >       ...
> >
> > can support recover from Machine Check Exception due to memory failure.
> > Therefore there is need to test it by injecting memory error
> > using EINJ to legacy persistent memory.
> >
> > However, current EINJ only check if physical address falls into the
> > IORES_DESC_PERSISTENT_MEMORY_LEGACY region. So attempt to inject
> > error to "Persistent Memory (legacy)" fails with -EINVAL.
> >
> > Allow EINJ to inject at physical address belongin to
> > IORES_DESC_PERSISTENT_MEMORY_LEGACY.
> >
> > Tested on a machine configured with Device DAX:
> >   memmap=4G!12G nd_e820.pmem=12G,4G,mode=fsdax memmap=176G!17G
> >   nd_e820.pmem=17G,1G,mode=devdax,align=1G memmap=176G!209G
> >   nd_e820.pmem=209G,1G,mode=devdax,align=1G memmap=176G!401G
> >   nd_e820.pmem=401G,1G,mode=devdax,align=1G memmap=176G!593G
> >   nd_e820.pmem=593G,1G,mode=devdax,align=1G
> >
> > Injected error at 0x35238d2000, within Device DAX region and
> > allocated to a userspace test process. EINJ driver now issue the
> > injection request to firmware, and firmware logs shows injection
> > at 0x35238d2000 succeeded. The userspace test process then
> > accessed 0x35238d2000, caused a MCE, and killed by SIGBUS.
> >
> > Signed-off-by: Jiaqi Yan <jiaqiyan@xxxxxxxxxx>
> > ---
> >  drivers/acpi/apei/einj-core.c | 2 ++
> >  1 file changed, 2 insertions(+)
> >
> > diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c
> > index 2561b045acc7b..e746fa66f92ff 100644
> > --- a/drivers/acpi/apei/einj-core.c
> > +++ b/drivers/acpi/apei/einj-core.c
> > @@ -712,6 +712,8 @@ int einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, u64 param3,
> >                               != REGION_INTERSECTS) &&
> >            (region_intersects(base_addr, size, IORESOURCE_MEM, IORES_DESC_PERSISTENT_MEMORY)
> >                               != REGION_INTERSECTS) &&
> > +          (region_intersects(base_addr, size, IORESOURCE_MEM, IORES_DESC_PERSISTENT_MEMORY_LEGACY)
> > +                             != REGION_INTERSECTS) &&
>
> I chatted offline with Dan Williams. He wondered whether this sanity
> check should just be reduced to pass through any address except MMIO
> and leave it to the BIOS to decide what is a legitimate injection
> target.

I guess that's fine, but wonder should the EINJ driver still exclude
IORES_DESC_ACPI_TABLES and IORES_DESC_ACPI_NV_STORAGE? to prevent
that, say, by coincidence or not an error "corrupted" EINJ table
itself, or "corrupted" other ACPI data.

>
> >            (region_intersects(base_addr, size, IORESOURCE_MEM, IORES_DESC_SOFT_RESERVED)
> >                               != REGION_INTERSECTS) &&
> >            !arch_is_platform_page(base_addr)))
> > --
> > 2.51.0.268.g9569e192d0-goog
>
> -Tony





[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux