mirror of
https://src.fedoraproject.org/rpms/grub2.git
synced 2024-12-01 00:48:18 +00:00
40 lines
1.4 KiB
Diff
40 lines
1.4 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: dann frazier <dann.frazier@canonical.com>
|
||
|
Date: Thu, 25 Aug 2022 17:08:09 -0600
|
||
|
Subject: [PATCH] linuxefi: Invalidate i-cache before starting the kernel
|
||
|
|
||
|
We need to flush the memory range of the code we are about to execute
|
||
|
from the instruction cache before we can safely execute it. Not doing
|
||
|
so appears to be the source of rare synchronous exceptions a user
|
||
|
is seeing on a Cortex-A72-based platform while executing the Linux EFI
|
||
|
stub. Notably they seem to correlate with an instruction on a cache
|
||
|
line boundary.
|
||
|
|
||
|
Signed-off-by: dann frazier <dann.frazier@canonical.com>
|
||
|
---
|
||
|
grub-core/loader/efi/linux.c | 4 ++++
|
||
|
1 file changed, 4 insertions(+)
|
||
|
|
||
|
diff --git a/grub-core/loader/efi/linux.c b/grub-core/loader/efi/linux.c
|
||
|
index 277f352e0c..e413bdcc23 100644
|
||
|
--- a/grub-core/loader/efi/linux.c
|
||
|
+++ b/grub-core/loader/efi/linux.c
|
||
|
@@ -16,6 +16,7 @@
|
||
|
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
+#include <grub/cache.h>
|
||
|
#include <grub/err.h>
|
||
|
#include <grub/mm.h>
|
||
|
#include <grub/types.h>
|
||
|
@@ -210,6 +211,9 @@ grub_efi_linux_boot (grub_addr_t kernel_addr, grub_size_t kernel_size,
|
||
|
asm volatile ("cli");
|
||
|
#endif
|
||
|
|
||
|
+ /* Invalidate the instruction cache */
|
||
|
+ grub_arch_sync_caches((void *)kernel_addr, kernel_size);
|
||
|
+
|
||
|
hf = (handover_func)((char *)kernel_addr + handover_offset + offset);
|
||
|
hf (grub_efi_image_handle, grub_efi_system_table, kernel_params);
|
||
|
|