|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 3/3] xen/efi: use directmap to access runtime services table
It is certainly nice to have less users of the direct map. My non-EFI
builds already work without the direct map now but once I start testing
EFI, it is nice to have one less thing to worry about.
How important and performance-critical is this? If we really want to
avoid switching the page table, we could reserve a virtual range and
map it to runtime services in Xen.
Hongyan
On Thu, 2019-10-24 at 05:45 +0200, Marek Marczykowski-Górecki wrote:
> Do not require switching page tables to access (static) information
> in
> the runtime services table itself, use directmap for this. This
> allows
> exiting early from XEN_EFI_query_capsule_capabilities,
> XEN_EFI_update_capsule and XEN_EFI_query_variable_info (in case of
> not
> supported call) without all the impact of page table switch.
>
> Signed-off-by: Marek Marczykowski-Górecki <
> marmarek@xxxxxxxxxxxxxxxxxxxxxx>
> ---
> New patch in v4. Can be applied independently of the other two.
> Specifically can be defered beyond 4.13.
> I'm also fine with dropping it, if adding directmap users is
> undesired.
>
> Cc: Juergen Gross <jgross@xxxxxxxx>
> ---
> xen/common/efi/boot.c | 1 +
> xen/common/efi/runtime.c | 19 ++++---------------
> 2 files changed, 5 insertions(+), 15 deletions(-)
>
> diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c
> index 9debc5b..89b1c8a 100644
> --- a/xen/common/efi/boot.c
> +++ b/xen/common/efi/boot.c
> @@ -1122,6 +1122,7 @@ static void __init efi_exit_boot(EFI_HANDLE
> ImageHandle, EFI_SYSTEM_TABLE *Syste
>
> /* Adjust pointers into EFI. */
> efi_ct = (void *)efi_ct + DIRECTMAP_VIRT_START;
> + efi_rs = (void *)efi_rs + DIRECTMAP_VIRT_START;
> efi_memmap = (void *)efi_memmap + DIRECTMAP_VIRT_START;
> efi_fw_vendor = (void *)efi_fw_vendor + DIRECTMAP_VIRT_START;
> }
> diff --git a/xen/common/efi/runtime.c b/xen/common/efi/runtime.c
> index ab53ebc..22fd6c9 100644
> --- a/xen/common/efi/runtime.c
> +++ b/xen/common/efi/runtime.c
> @@ -211,12 +211,7 @@ int efi_get_info(uint32_t idx, union
> xenpf_efi_info *info)
> break;
> case XEN_FW_EFI_RT_VERSION:
> {
> - struct efi_rs_state state = efi_rs_enter();
> -
> - if ( !state.cr3 )
> - return -EOPNOTSUPP;
> info->version = efi_rs->Hdr.Revision;
> - efi_rs_leave(&state);
> break;
> }
> case XEN_FW_EFI_CONFIG_TABLE:
> @@ -618,12 +613,11 @@ int efi_runtime_call(struct
> xenpf_efi_runtime_call *op)
> break;
> }
>
> + if ( (efi_rs->Hdr.Revision >> 16) < 2 )
> + return -EOPNOTSUPP;
> state = efi_rs_enter();
> - if ( !state.cr3 || (efi_rs->Hdr.Revision >> 16) < 2 )
> - {
> - efi_rs_leave(&state);
> + if ( !state.cr3 )
> return -EOPNOTSUPP;
> - }
> status = efi_rs->QueryVariableInfo(
> op->u.query_variable_info.attr,
> &op->u.query_variable_info.max_store_size,
> @@ -637,13 +631,8 @@ int efi_runtime_call(struct
> xenpf_efi_runtime_call *op)
> if ( op->misc )
> return -EINVAL;
>
> - state = efi_rs_enter();
> - if ( !state.cr3 || (efi_rs->Hdr.Revision >> 16) < 2 )
> - {
> - efi_rs_leave(&state);
> + if ( (efi_rs->Hdr.Revision >> 16) < 2 )
> return -EOPNOTSUPP;
> - }
> - efi_rs_leave(&state);
> /* XXX fall through for now */
> default:
> return -ENOSYS;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |