Flush instruction cache before starting aa64 kernel

Signed-off-by: Robbie Harwood <rharwood@redhat.com>
This commit is contained in:
Robbie Harwood 2022-10-04 19:42:56 +00:00
parent 7a1af0ff6d
commit 4fa957c61c
3 changed files with 44 additions and 1 deletions

View file

@ -0,0 +1,39 @@
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);

View file

@ -280,3 +280,4 @@ Patch0279: 0279-ieee1275-implement-vec5-for-cas-negotiation.patch
Patch0280: 0280-blscfg-Don-t-root-device-in-emu-builds.patch
Patch0281: 0281-loader-arm64-linux-Remove-magic-number-header-field-.patch
Patch0282: 0282-Correct-BSS-zeroing-on-aarch64.patch
Patch0283: 0283-linuxefi-Invalidate-i-cache-before-starting-the-kern.patch

View file

@ -17,7 +17,7 @@
Name: grub2
Epoch: 1
Version: 2.06
Release: 58%{?dist}
Release: 59%{?dist}
Summary: Bootloader with support for Linux, Multiboot and more
License: GPLv3+
URL: http://www.gnu.org/software/grub/
@ -530,6 +530,9 @@ mv ${EFI_HOME}/grub.cfg.stb ${EFI_HOME}/grub.cfg
%endif
%changelog
* Tue Oct 04 2022 Robbie Harwood <rharwood@redhat.com> - 2.06-59
- Flush instruction cache before starting aa64 kernel
* Fri Sep 09 2022 Robbie Harwood <rharwood@redhat.com> - 2.06-58
- Bump spec for grub.macros gettext changes from Jens