On Wed, 12 Jun 2019 at 10:20, <baofeng.tian@xxxxxxxxx> wrote: > > From: Tian Baofeng <baofeng.tian@xxxxxxxxx> > > Replace the variable set function from "efivar_entry_set" to > "efivar_entry_set_safe" in efibc panic notifier. > In safe function parameter "block" will set to false > and will call "efivar_entry_set_nonblocking"to set efi variables. > efivar_entry_set_nonblocking is guaranteed to > not block and is suitable for calling from crash/panic handlers. > In UEFI android platform, when warm reset happens, > with this change, efibc will not block the reboot process. > Otherwise, set variable will call queue work and send to other offlined > cpus then cause another panic, finally will cause reboot failure. > > Signed-off-by: Tian Baofeng <baofeng.tian@xxxxxxxxx> > Signed-off-by: Luo XinanX <xinanx.luo@xxxxxxxxx> Queued as a fix in efi/urgent Thanks > --- > drivers/firmware/efi/efibc.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/drivers/firmware/efi/efibc.c b/drivers/firmware/efi/efibc.c > index 61e099826cbb..35dccc88ac0a 100644 > --- a/drivers/firmware/efi/efibc.c > +++ b/drivers/firmware/efi/efibc.c > @@ -43,11 +43,13 @@ static int efibc_set_variable(const char *name, const char *value) > efibc_str_to_str16(value, (efi_char16_t *)entry->var.Data); > memcpy(&entry->var.VendorGuid, &guid, sizeof(guid)); > > - ret = efivar_entry_set(entry, > - EFI_VARIABLE_NON_VOLATILE > - | EFI_VARIABLE_BOOTSERVICE_ACCESS > - | EFI_VARIABLE_RUNTIME_ACCESS, > - size, entry->var.Data, NULL); > + ret = efivar_entry_set_safe(entry->var.VariableName, > + entry->var.VendorGuid, > + EFI_VARIABLE_NON_VOLATILE > + | EFI_VARIABLE_BOOTSERVICE_ACCESS > + | EFI_VARIABLE_RUNTIME_ACCESS, > + false, size, entry->var.Data); > + > if (ret) > pr_err("failed to set %s EFI variable: 0x%x\n", > name, ret); > -- > 2.21.0 >