|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC PATCH v3 2/3] x86/acpi: Integrate BGRT preservation with status reporting
Add status reporting for BGRT preservation and integrate with Xen's
ACPI subsystem:
- efi_bgrt_status_info() prints preservation status (success/failure)
- Called from acpi_boot_init() after ACPI tables are processed
- Clarifying comment explains why invalidation code remains
The invalidation code in acpi_invalidate_bgrt() now acts as a safety
net: if preservation fails, the image remains in conventional RAM
and gets invalidated. If preservation succeeds, the image is in
EfiACPIReclaimMemory which won't match the RAM_TYPE_CONVENTIONAL
check, leaving the table valid.
Signed-off-by: Soumyajyotii Ssarkar <soumyajyotisarkar23@xxxxxxxxx>
---
xen/arch/x86/acpi/boot.c | 8 ++++++++
xen/common/efi/boot.c | 16 ++++++++++++++++
xen/include/xen/efi.h | 1 +
3 files changed, 25 insertions(+)
diff --git a/xen/arch/x86/acpi/boot.c b/xen/arch/x86/acpi/boot.c
index 1ca2360e00..20afe79db9 100644
--- a/xen/arch/x86/acpi/boot.c
+++ b/xen/arch/x86/acpi/boot.c
@@ -29,6 +29,7 @@
#include <xen/mm.h>
#include <xen/param.h>
#include <xen/dmi.h>
+#include <xen/efi.h>
#include <asm/fixmap.h>
#include <asm/page.h>
#include <asm/apic.h>
@@ -327,6 +328,11 @@ static int __init cf_check acpi_parse_hpet(struct
acpi_table_header *table)
return 0;
}
+/*
+ * Invalidate BGRT if image is in conventional RAM (preservation failed).
+ * If preservation succeeded, image is in EfiACPIReclaimMemory, which
+ * won't match RAM_TYPE_CONVENTIONAL check, so table remains valid.
+ */
static int __init cf_check acpi_invalidate_bgrt(struct acpi_table_header
*table)
{
struct acpi_table_bgrt *bgrt_tbl =
@@ -754,5 +760,7 @@ int __init acpi_boot_init(void)
acpi_table_parse(ACPI_SIG_BGRT, acpi_invalidate_bgrt);
+ efi_bgrt_status_info();
+
return 0;
}
diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c
index e6451130ce..68e06d707c 100644
--- a/xen/common/efi/boot.c
+++ b/xen/common/efi/boot.c
@@ -1911,6 +1911,22 @@ static bool __init cf_check rt_range_valid(unsigned long
smfn, unsigned long emf
return true;
}
+void __init efi_bgrt_status_info(void)
+{
+ if ( !efi_enabled(EFI_BOOT) )
+ return;
+
+ if ( bgrt_info.preserved )
+ {
+ printk(XENLOG_INFO "EFI: BGRT image preserved: %lu KB\n",
+ bgrt_info.size / 1024);
+ printk(XENLOG_INFO "EFI: BGRT relocated from %p to %p\n",
+ bgrt_info.old_addr, bgrt_info.new_addr);
+ }
+ else if ( bgrt_info.failure_reason[0] )
+ printk(XENLOG_WARNING "EFI: BGRT preservation failed: %s\n",
+ bgrt_info.failure_reason);
+}
void __init efi_init_memory(void)
{
diff --git a/xen/include/xen/efi.h b/xen/include/xen/efi.h
index 723cb80852..e72ab3c6b5 100644
--- a/xen/include/xen/efi.h
+++ b/xen/include/xen/efi.h
@@ -39,6 +39,7 @@ static inline bool efi_enabled(unsigned int feature)
extern bool efi_secure_boot;
void efi_init_memory(void);
+void efi_bgrt_status_info(void);
bool efi_boot_mem_unused(unsigned long *start, unsigned long *end);
bool efi_rs_using_pgtables(void);
unsigned long efi_get_time(void);
--
2.53.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |