Message ID | 20190911233239.5916-1-ard.biesheuvel@linaro.org |
---|---|
State | Accepted |
Commit | c05f8f92b701576b615f30aac31fabdc0648649b |
Headers | show |
Series | efi: don't iterate over EFI vars pointlessly if no SSDT override was specified | expand |
On Thu, 12 Sep 2019, Ard Biesheuvel wrote: > The kernel command line option efivar_ssdt= allows a EFI variable name > to be specified which contains an ACPI SSDT table that will be loaded > into memory by the OS. > > Currently, that code will always iterate over the EFI variables and > compare each name with the provided name, even if the command line > option wasn't set to begin with. > > So bail early when no variable name was provided. > > Cc: Scott Talbert <swt@techie.net> > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > --- > drivers/firmware/efi/efi.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c > index ad3b1f4866b3..8f020827cdd3 100644 > --- a/drivers/firmware/efi/efi.c > +++ b/drivers/firmware/efi/efi.c > @@ -282,6 +282,9 @@ static __init int efivar_ssdt_load(void) > void *data; > int ret; > > + if (!efivar_ssdt[0]) > + return 0; > + > ret = efivar_init(efivar_ssdt_iter, &entries, true, &entries); > > list_for_each_entry_safe(entry, aux, &entries, list) { Thanks for the quick fix! I can confirm this fixes booting on my Mac Pro 2012 system when applied to 5.3-rc7. Whenever this makes it in, if it could be targeted for the stable kernels as well, that would be appreciated. Thanks, Scott
On Thu, 12 Sep 2019 at 20:35, Scott Talbert <swt@techie.net> wrote: > > On Thu, 12 Sep 2019, Ard Biesheuvel wrote: > > > The kernel command line option efivar_ssdt= allows a EFI variable name > > to be specified which contains an ACPI SSDT table that will be loaded > > into memory by the OS. > > > > Currently, that code will always iterate over the EFI variables and > > compare each name with the provided name, even if the command line > > option wasn't set to begin with. > > > > So bail early when no variable name was provided. > > > > Cc: Scott Talbert <swt@techie.net> > > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > > --- > > drivers/firmware/efi/efi.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c > > index ad3b1f4866b3..8f020827cdd3 100644 > > --- a/drivers/firmware/efi/efi.c > > +++ b/drivers/firmware/efi/efi.c > > @@ -282,6 +282,9 @@ static __init int efivar_ssdt_load(void) > > void *data; > > int ret; > > > > + if (!efivar_ssdt[0]) > > + return 0; > > + > > ret = efivar_init(efivar_ssdt_iter, &entries, true, &entries); > > > > list_for_each_entry_safe(entry, aux, &entries, list) { > > Thanks for the quick fix! > > I can confirm this fixes booting on my Mac Pro 2012 system when applied to > 5.3-rc7. > > Whenever this makes it in, if it could be targeted for the stable kernels > as well, that would be appreciated. > I'll send it out as a fix with a cc to -stable. Thanks, Ard.
On Thu, 12 Sep 2019, Ard Biesheuvel wrote: >>> The kernel command line option efivar_ssdt= allows a EFI variable name >>> to be specified which contains an ACPI SSDT table that will be loaded >>> into memory by the OS. >>> >>> Currently, that code will always iterate over the EFI variables and >>> compare each name with the provided name, even if the command line >>> option wasn't set to begin with. >>> >>> So bail early when no variable name was provided. >>> >>> Cc: Scott Talbert <swt@techie.net> >>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> >>> --- >>> drivers/firmware/efi/efi.c | 3 +++ >>> 1 file changed, 3 insertions(+) >>> >>> diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c >>> index ad3b1f4866b3..8f020827cdd3 100644 >>> --- a/drivers/firmware/efi/efi.c >>> +++ b/drivers/firmware/efi/efi.c >>> @@ -282,6 +282,9 @@ static __init int efivar_ssdt_load(void) >>> void *data; >>> int ret; >>> >>> + if (!efivar_ssdt[0]) >>> + return 0; >>> + >>> ret = efivar_init(efivar_ssdt_iter, &entries, true, &entries); >>> >>> list_for_each_entry_safe(entry, aux, &entries, list) { >> >> Thanks for the quick fix! >> >> I can confirm this fixes booting on my Mac Pro 2012 system when applied to >> 5.3-rc7. >> >> Whenever this makes it in, if it could be targeted for the stable kernels >> as well, that would be appreciated. >> > > I'll send it out as a fix with a cc to -stable. Hi - just a quick reminder on this as I don't see it in Linus' tree yet. Not that I need it urgently, but just want to make sure it isn't forgotten. Thanks, Scott
On Thu, 19 Sep 2019 at 20:01, Scott Talbert <swt@techie.net> wrote: > > On Thu, 12 Sep 2019, Ard Biesheuvel wrote: > > >>> The kernel command line option efivar_ssdt= allows a EFI variable name > >>> to be specified which contains an ACPI SSDT table that will be loaded > >>> into memory by the OS. > >>> > >>> Currently, that code will always iterate over the EFI variables and > >>> compare each name with the provided name, even if the command line > >>> option wasn't set to begin with. > >>> > >>> So bail early when no variable name was provided. > >>> > >>> Cc: Scott Talbert <swt@techie.net> > >>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > >>> --- > >>> drivers/firmware/efi/efi.c | 3 +++ > >>> 1 file changed, 3 insertions(+) > >>> > >>> diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c > >>> index ad3b1f4866b3..8f020827cdd3 100644 > >>> --- a/drivers/firmware/efi/efi.c > >>> +++ b/drivers/firmware/efi/efi.c > >>> @@ -282,6 +282,9 @@ static __init int efivar_ssdt_load(void) > >>> void *data; > >>> int ret; > >>> > >>> + if (!efivar_ssdt[0]) > >>> + return 0; > >>> + > >>> ret = efivar_init(efivar_ssdt_iter, &entries, true, &entries); > >>> > >>> list_for_each_entry_safe(entry, aux, &entries, list) { > >> > >> Thanks for the quick fix! > >> > >> I can confirm this fixes booting on my Mac Pro 2012 system when applied to > >> 5.3-rc7. > >> > >> Whenever this makes it in, if it could be targeted for the stable kernels > >> as well, that would be appreciated. > >> > > > > I'll send it out as a fix with a cc to -stable. > > Hi - just a quick reminder on this as I don't see it in Linus' tree yet. > Not that I need it urgently, but just want to make sure it isn't > forgotten. > Hi Scott, This should get sent out in the next couple of day. It usually takes another week or so after that for changes to make it into Linus's tree.
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index ad3b1f4866b3..8f020827cdd3 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -282,6 +282,9 @@ static __init int efivar_ssdt_load(void) void *data; int ret; + if (!efivar_ssdt[0]) + return 0; + ret = efivar_init(efivar_ssdt_iter, &entries, true, &entries); list_for_each_entry_safe(entry, aux, &entries, list) {
The kernel command line option efivar_ssdt= allows a EFI variable name to be specified which contains an ACPI SSDT table that will be loaded into memory by the OS. Currently, that code will always iterate over the EFI variables and compare each name with the provided name, even if the command line option wasn't set to begin with. So bail early when no variable name was provided. Cc: Scott Talbert <swt@techie.net> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- drivers/firmware/efi/efi.c | 3 +++ 1 file changed, 3 insertions(+) -- 2.17.1