[PATCH v2 1/2] efi_loader: fix set_capsule_result()

Heinrich Schuchardt xypron.glpk at gmx.de
Thu Jul 1 03:20:48 CEST 2021


Am 1. Juli 2021 02:49:09 MESZ schrieb AKASHI Takahiro <takahiro.akashi at linaro.org>:
>NAK.
>
>On Wed, Jun 30, 2021 at 05:31:15PM +0200, Heinrich Schuchardt wrote:
>> The log category must be LOG_CATEGORY LOGC_EFI.
>> 
>> efi_set_variable() should be called with EFI_CALL(). Use
>> efi_set_variable_int() instead.
>> 
>> A log text "Updating ..." if SetVariable() fails does not make sense
>for a
>> variable that is not required to be preexisting.
>> 
>> CapsuleLast should always be immediately updated.
>
>As I said to your v1 in [1],
>
>You are trying to fix several irrelevant issues here.

Why do you think the changes are irrelevant?

>Please split them into separate patches as you have always
>asked me before.

Splitting does not change relevance.

Do you want to play tit for tat?

Best regards

Heinrich

>
>[1] https://lists.denx.de/pipermail/u-boot/2021-June/453148.html
>
>-Takahiro Akashi
>
>
>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>> ---
>> v2:
>> 	don't update OsIndications in set_capsule_result()
>> 	update CapsuleLast immediately
>> ---
>>  lib/efi_loader/efi_capsule.c | 39
>+++++++++++++++++++-----------------
>>  1 file changed, 21 insertions(+), 18 deletions(-)
>> 
>> diff --git a/lib/efi_loader/efi_capsule.c
>b/lib/efi_loader/efi_capsule.c
>> index 2c37a0d97b..f87ef2a514 100644
>> --- a/lib/efi_loader/efi_capsule.c
>> +++ b/lib/efi_loader/efi_capsule.c
>> @@ -6,6 +6,8 @@
>>   *			Author: AKASHI Takahiro
>>   */
>> 
>> +#define LOG_CATEGORY LOGC_EFI
>> +
>>  #include <common.h>
>>  #include <efi_loader.h>
>>  #include <efi_variable.h>
>> @@ -95,13 +97,25 @@ void set_capsule_result(int index, struct
>efi_capsule_header *capsule,
>>  	else
>>  		memset(&result.capsule_processed, 0, sizeof(time));
>>  	result.capsule_status = return_status;
>> -	ret = efi_set_variable(variable_name16, &efi_guid_capsule_report,
>> -			       EFI_VARIABLE_NON_VOLATILE |
>> -			       EFI_VARIABLE_BOOTSERVICE_ACCESS |
>> -			       EFI_VARIABLE_RUNTIME_ACCESS,
>> -			       sizeof(result), &result);
>> -	if (ret)
>> -		log_err("EFI: creating %ls failed\n", variable_name16);
>> +	ret = efi_set_variable_int(variable_name16,
>&efi_guid_capsule_report,
>> +				   EFI_VARIABLE_NON_VOLATILE |
>> +				   EFI_VARIABLE_BOOTSERVICE_ACCESS |
>> +				   EFI_VARIABLE_RUNTIME_ACCESS,
>> +				   sizeof(result), &result, false);
>> +	if (ret != EFI_SUCCESS) {
>> +		log_err("Setting %ls failed\n", variable_name16);
>> +		return;
>> +	}
>> +
>> +	/* Variable CapsuleLast must not include terminating 0x0000 */
>> +	ret = efi_set_variable_int(L"CapsuleLast",
>&efi_guid_capsule_report,
>> +				   EFI_VARIABLE_READ_ONLY |
>> +				   EFI_VARIABLE_NON_VOLATILE |
>> +				   EFI_VARIABLE_BOOTSERVICE_ACCESS |
>> +				   EFI_VARIABLE_RUNTIME_ACCESS,
>> +				   22, variable_name16, false);
>> +	if (ret != EFI_SUCCESS)
>> +		log_err("Setting %ls failed\n", L"CapsuleLast");
>>  }
>> 
>>  #ifdef CONFIG_EFI_CAPSULE_FIRMWARE_MANAGEMENT
>> @@ -988,7 +1002,6 @@ efi_status_t efi_launch_capsules(void)
>>  	struct efi_capsule_header *capsule = NULL;
>>  	u16 **files;
>>  	unsigned int nfiles, index, i;
>> -	u16 variable_name16[12];
>>  	efi_status_t ret;
>> 
>>  	if (!check_run_capsules())
>> @@ -1045,16 +1058,6 @@ efi_status_t efi_launch_capsules(void)
>>  		free(files[i]);
>>  	free(files);
>> 
>> -	/* CapsuleLast */
>> -	efi_create_indexed_name(variable_name16, sizeof(variable_name16),
>> -				"Capsule", index - 1);
>> -	efi_set_variable_int(L"CapsuleLast", &efi_guid_capsule_report,
>> -			     EFI_VARIABLE_READ_ONLY |
>> -			     EFI_VARIABLE_NON_VOLATILE |
>> -			     EFI_VARIABLE_BOOTSERVICE_ACCESS |
>> -			     EFI_VARIABLE_RUNTIME_ACCESS,
>> -			     22, variable_name16, false);
>> -
>>  	return ret;
>>  }
>>  #endif /* CONFIG_EFI_CAPSULE_ON_DISK */
>> --
>> 2.30.2
>> 



More information about the U-Boot mailing list