On Thu, Jul 12, 2018 at 11:41:08AM +0100, Grant Likely wrote:
> Add details on what to do if the platform is unable to set persistent
> variables in runtime services. The idea here is that the GetVariable()
> and SetVariable() APIs should continue to work, and the OS can obtain
> all the variable settings, but if it cannot be written then the
> NON_VOLATILE attribute is cleared so the OS knows that persistence is
> not available.

I'm really struggling to wrap my head around this one.

How does incorrectly describing a non-volatile but non-modifiable 
variable as volatile help the OS do the right thing?

The OS will discover the variable is non-modifiable when it tried to
set it. Won't the current proposal mislead standards compliant use of
GetVariable()? For example does it it makes standards compliant code
*more* likely to call SetVariable() in order to fix up a variable that
it thinks was incorrectly set with the NON_VOLATILE attribute.


Daniel.


> 
> Cc: Dong Wei <dong....@arm.com>
> Cc: Alexander Graf <ag...@suse.de>
> Cc: Peter Robinson <pbrobin...@redhat.com>
> Signed-off-by: Grant Likely <grant.lik...@arm.com>
> ---
> 
> Alex/Peter: Does this approach work for you? I tried to come up with
> something that is faithful to the spec, gives the OS information that
> non-volatile variables aren't available, but still have the ability to
> query the boot environment.
> 
> Dong: Is this an appropriate way to use {Get,Set}Variable()?
> 
> Cheers,
> g.
> 
> ---
>  source/chapter2-uefi.rst | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/source/chapter2-uefi.rst b/source/chapter2-uefi.rst
> index 7b6843e..57594bc 100644
> --- a/source/chapter2-uefi.rst
> +++ b/source/chapter2-uefi.rst
> @@ -197,13 +197,13 @@ command:
>     Operating Systems calls to reset the system will go via Runtime Services
>     and not directly to PSCI.
>  
> -Set Variable
> -------------
> -
> -Non-volatile UEFI variables must persist across reset, and emulated variables
> -in RAM are not permitted.
> -The UEFI Runtime Services must be able to update the variables directly 
> without
> -the aid of the Operating System.
> +Runtime Variable Access
> +-----------------------
>  
> -.. note:: This normally requires dedicated storage for UEFI variables that is
> -   not directly accessible from the Operating System.
> +Non-volatile UEFI variables must persist across reset.
> +If the platform is incapable of updating non-volatile variables from Runtime
> +Services then it must clear the EFI_VARIABLE_NON_VOLATILE attribute from all
> +non-volatile variables when ExitBootServices() is called.
> +Similarly, if non-volatile variables cannot be set from Runtime Services, 
> then
> +SetVariable() must return EFI_INVALID_PARAMETER if the
> +EFI_VARIABLE_NON_VOLATILE attribute is set.
> -- 
> 2.13.0
> 
> _______________________________________________
> Arm.ebbr-discuss mailing list
> arm.ebbr-disc...@arm.com
_______________________________________________
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture

Reply via email to