Re: [PATCH v2] x86/acpi: Preserve ACPI-table override during hibernation
From: Rafael J. Wysocki
Date: Wed Apr 13 2022 - 11:02:43 EST
On Tue, Mar 29, 2022 at 3:34 PM Amadeusz Sławiński
<amadeuszx.slawinski@xxxxxxxxxxxxxxx> wrote:
>
> When overriding NHLT ACPI-table tests show that on some platforms
> there is problem that NHLT contains garbage after hibernation/resume
> cycle.
>
> Problem stems from the fact that ACPI override performs early memory
> allocation using memblock_phys_alloc_range() in
> memblock_phys_alloc_range(). This memory block is later being marked as
> ACPI memory block in arch_reserve_mem_area(). Later when memory areas
> are considered for hibernation it is being marked as nosave in
> e820__register_nosave_regions().
>
> Fix this by marking ACPI override memory area as ACPI NVS
> (Non-Volatile-Sleeping), which according to specification needs to be
> saved on entering S4 and restored when leaving and is implemented as
> such in kernel.
>
> Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@xxxxxxxxxxxxxxx>
> ---
>
> Changes in v2:
> * Changed approach as method used in v1 introduced potential for memory
> corruption, which was caught by tests.
> * Adjusted commit message describing above change in approach.
>
> ---
> arch/x86/kernel/acpi/boot.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
> index 0d01e7f5078c..2eeca97b730b 100644
> --- a/arch/x86/kernel/acpi/boot.c
> +++ b/arch/x86/kernel/acpi/boot.c
> @@ -1772,7 +1772,7 @@ int __acpi_release_global_lock(unsigned int *lock)
>
> void __init arch_reserve_mem_area(acpi_physical_address addr, size_t size)
> {
> - e820__range_add(addr, size, E820_TYPE_ACPI);
> + e820__range_add(addr, size, E820_TYPE_NVS);
> e820__update_table_print();
> }
>
> --
Given the lack of objections or concerns, applied as 5.19 material, thanks!