| From f39c4c3c4af24b8bd616454553800a7bae34bd0b Mon Sep 17 00:00:00 2001 |
| From: Dave Young <dyoung@redhat.com> |
| Date: Wed, 2 Oct 2019 18:59:04 +0200 |
| Subject: [PATCH] efi/x86: Do not clean dummy variable in kexec path |
| |
| commit 2ecb7402cfc7f22764e7bbc80790e66eadb20560 upstream. |
| |
| kexec reboot fails randomly in UEFI based KVM guest. The firmware |
| just resets while calling efi_delete_dummy_variable(); Unfortunately |
| I don't know how to debug the firmware, it is also possible a potential |
| problem on real hardware as well although nobody reproduced it. |
| |
| The intention of the efi_delete_dummy_variable is to trigger garbage collection |
| when entering virtual mode. But SetVirtualAddressMap can only run once |
| for each physical reboot, thus kexec_enter_virtual_mode() is not necessarily |
| a good place to clean a dummy object. |
| |
| Drop the efi_delete_dummy_variable so that kexec reboot can work. |
| |
| Signed-off-by: Dave Young <dyoung@redhat.com> |
| Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> |
| Acked-by: Matthew Garrett <mjg59@google.com> |
| Cc: Ben Dooks <ben.dooks@codethink.co.uk> |
| Cc: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> |
| Cc: Jerry Snitselaar <jsnitsel@redhat.com> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Lukas Wunner <lukas@wunner.de> |
| Cc: Lyude Paul <lyude@redhat.com> |
| Cc: Octavian Purdila <octavian.purdila@intel.com> |
| Cc: Peter Jones <pjones@redhat.com> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Scott Talbert <swt@techie.net> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: linux-efi@vger.kernel.org |
| Cc: linux-integrity@vger.kernel.org |
| Link: https://lkml.kernel.org/r/20191002165904.8819-8-ard.biesheuvel@linaro.org |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c |
| index a7189a3b4d70..3304f61538a2 100644 |
| --- a/arch/x86/platform/efi/efi.c |
| +++ b/arch/x86/platform/efi/efi.c |
| @@ -894,9 +894,6 @@ static void __init kexec_enter_virtual_mode(void) |
| |
| if (efi_enabled(EFI_OLD_MEMMAP) && (__supported_pte_mask & _PAGE_NX)) |
| runtime_code_page_mkexec(); |
| - |
| - /* clean DUMMY object */ |
| - efi_delete_dummy_variable(); |
| #endif |
| } |
| |
| -- |
| 2.7.4 |
| |