[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 1/2] efi: Move grub_reboot() into kernel
From: |
Alexander Graf |
Subject: |
[PATCH v3 1/2] efi: Move grub_reboot() into kernel |
Date: |
Tue, 29 Aug 2017 18:00:34 +0200 |
The reboot function calls machine_fini() and then reboots the system.
Currently it lives in lib/ which means it gets compiled into the
reboot module which lives on the heap.
In a following patch, I want to free the heap on machine_fini()
though, so we would free the memory that the code is running in. That
obviously breaks with smarter UEFI implementations.
So this patch moves it into the core. That way we ensure that all
code running after machine_fini() in the UEFI case is running from
memory that got allocated (and gets deallocated) by the UEFI core.
Signed-off-by: Alexander Graf <address@hidden>
---
grub-core/Makefile.core.def | 9 +++++----
include/grub/misc.h | 3 ++-
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
index a65c27f7f..d01654b12 100644
--- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def
@@ -235,6 +235,11 @@ kernel = {
arm64_efi = kern/arm64/efi/init.c;
arm64_efi = kern/efi/fdt.c;
+ ia64_efi = lib/efi/reboot.c;
+ x86_64_efi = lib/efi/reboot.c;
+ arm_efi = lib/efi/reboot.c;
+ arm64_efi = lib/efi/reboot.c;
+
i386_pc = kern/i386/pc/init.c;
i386_pc = kern/i386/pc/mmap.c;
i386_pc = term/i386/pc/console.c;
@@ -872,10 +877,6 @@ module = {
name = reboot;
i386 = lib/i386/reboot.c;
i386 = lib/i386/reboot_trampoline.S;
- ia64_efi = lib/efi/reboot.c;
- x86_64_efi = lib/efi/reboot.c;
- arm_efi = lib/efi/reboot.c;
- arm64_efi = lib/efi/reboot.c;
powerpc_ieee1275 = lib/ieee1275/reboot.c;
sparc64_ieee1275 = lib/ieee1275/reboot.c;
mips_arc = lib/mips/arc/reboot.c;
diff --git a/include/grub/misc.h b/include/grub/misc.h
index 2a9f87cc2..372f009e8 100644
--- a/include/grub/misc.h
+++ b/include/grub/misc.h
@@ -396,7 +396,8 @@ grub_abs (int x)
}
/* Reboot the machine. */
-#if defined (GRUB_MACHINE_EMU) || defined (GRUB_MACHINE_QEMU_MIPS)
+#if defined (GRUB_MACHINE_EMU) || defined (GRUB_MACHINE_QEMU_MIPS) || \
+ defined (GRUB_MACHINE_EFI)
void EXPORT_FUNC(grub_reboot) (void) __attribute__ ((noreturn));
#else
void grub_reboot (void) __attribute__ ((noreturn));
--
2.12.3