x86/ACPI: Preserve ACPI-table override during hibernation
authorAmadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Tue, 29 Mar 2022 13:33:52 +0000 (15:33 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 13 Apr 2022 15:01:14 +0000 (17:01 +0200)
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@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
arch/x86/kernel/acpi/boot.c

index 0d01e7f5078c25a6b9d1c933691cebe3b6b30240..2eeca97b730b3c1817c3087cbfc4d93bcb20fdfc 100644 (file)
@@ -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();
 }