diff mbox series

efi/efivars: Set generic ops before loading SSDT

Message ID 20201123172817.124146-1-amadeuszx.slawinski@linux.intel.com
State Accepted
Commit 50bdcf047503e30126327d0be4f0ad7337106d68
Headers show
Series efi/efivars: Set generic ops before loading SSDT | expand

Commit Message

Amadeusz Sławiński Nov. 23, 2020, 5:28 p.m. UTC
Efivar allows for overriding of SSDT tables, however starting with
commit bf67fad19e493b ("efi: Use more granular check for availability for variable services")
this use case is broken. When loading SSDT generic ops should be set
first, however mentioned commit reversed order of operations. Fix this
by restoring original order of operations.

Fixes: bf67fad19e493b ("efi: Use more granular check for availability for variable services")
Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
---
 drivers/firmware/efi/efi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Cezary Rojewski Nov. 25, 2020, 10:18 a.m. UTC | #1
On 2020-11-23 11:53 PM, Ard Biesheuvel wrote:
> On Mon, 23 Nov 2020 at 16:11, Amadeusz Sławiński

> <amadeuszx.slawinski@linux.intel.com> wrote:

>>

>> Efivar allows for overriding of SSDT tables, however starting with

>> commit bf67fad19e493b ("efi: Use more granular check for availability for variable services")

>> this use case is broken. When loading SSDT generic ops should be set

>> first, however mentioned commit reversed order of operations. Fix this

>> by restoring original order of operations.

>>

>> Fixes: bf67fad19e493b ("efi: Use more granular check for availability for variable services")

>> Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>

>> ---

>>   drivers/firmware/efi/efi.c | 2 +-

>>   1 file changed, 1 insertion(+), 1 deletion(-)

>>

>> diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c

>> index 5e5480a0a32d..6c6eec044a97 100644

>> --- a/drivers/firmware/efi/efi.c

>> +++ b/drivers/firmware/efi/efi.c

>> @@ -390,10 +390,10 @@ static int __init efisubsys_init(void)

>>

>>          if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |

>>                                        EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) {

>> -               efivar_ssdt_load();

>>                  error = generic_ops_register();

>>                  if (error)

>>                          goto err_put;

>> +               efivar_ssdt_load();

>>                  platform_device_register_simple("efivars", 0, NULL, 0);

>>          }

>>

> 

> Thanks. Queued as a fix.

> 


Sorry for the late reply. This is a good finding by Amadeo. If in any
case you need more credibility, feel free to apply my:

Tested-by: Cezary Rojewski <cezary.rojewski@intel.com>


Czarek
diff mbox series

Patch

diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
index 5e5480a0a32d..6c6eec044a97 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
@@ -390,10 +390,10 @@  static int __init efisubsys_init(void)
 
 	if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |
 				      EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) {
-		efivar_ssdt_load();
 		error = generic_ops_register();
 		if (error)
 			goto err_put;
+		efivar_ssdt_load();
 		platform_device_register_simple("efivars", 0, NULL, 0);
 	}