Re: [PATCH] do not clean dummy variable in kexec path

From: Dave Young
Date: Mon Aug 05 2019 - 22:41:21 EST


On 08/05/19 at 06:55pm, Ard Biesheuvel wrote:
> On Mon, 5 Aug 2019 at 11:36, Dave Young <dyoung@xxxxxxxxxx> wrote:
> >
> > kexec reboot fails randomly in UEFI based kvm guest. The firmware
> > just reset 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 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 dummy object.
> >
>
> I would argue that this means it is not a good place to *create* the
> dummy variable, and if we don't create it, we don't have to delete it
> either.
>
> > Drop efi_delete_dummy_variable so that kexec reboot can work.
> >
>
> Creating it and not deleting it is bad, so please try and see if we
> can omit the creation on this code path instead.

I'm not sure in this case the var is created or not, the logic seems
tricky to me. It seems to me it is intend to force delete a non-exist
var here.

Matthew, can you comment here about Ard's question?

>
>
> > Signed-off-by: Dave Young <dyoung@xxxxxxxxxx>
> > ---
> > arch/x86/platform/efi/efi.c | 3 ---
> > 1 file changed, 3 deletions(-)
> >
> > --- linux-x86.orig/arch/x86/platform/efi/efi.c
> > +++ linux-x86/arch/x86/platform/efi/efi.c
> > @@ -894,9 +894,6 @@ static void __init kexec_enter_virtual_m
> >
> > if (efi_enabled(EFI_OLD_MEMMAP) && (__supported_pte_mask & _PAGE_NX))
> > runtime_code_page_mkexec();
> > -
> > - /* clean DUMMY object */
> > - efi_delete_dummy_variable();
> > #endif
> > }
> >