All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ross Lagerwall <ross.lagerwall@citrix.com>
To: xen-devel@lists.xen.org
Cc: Keir Fraser <keir@xen.org>,
	Ian Campbell <ian.campbell@citrix.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Tim Deegan <tim@xen.org>,
	Stefano Stabellini <stefano.stabellini@citrix.com>,
	Jan Beulich <jbeulich@suse.com>
Subject: Re: [PATCH v4] efi: Avoid calling boot services after ExitBootServices()
Date: Tue, 9 Jun 2015 11:36:45 +0100	[thread overview]
Message-ID: <5576C1BD.9020609@citrix.com> (raw)
In-Reply-To: <1433237923-14591-1-git-send-email-ross.lagerwall@citrix.com>

ping

On 06/02/2015 10:38 AM, Ross Lagerwall wrote:
> After the first call to ExitBootServices(), avoid calling any boot
> services by setting setting efi_bs to NULL and halting in blexit().
>
> Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
> ---
>
> * Separated halt into an arch hook.
> * Applies on top of the first patch from v3.
> * Tested on x86, not sure if the ARM version is correct.
>
>   xen/arch/arm/efi/efi-boot.h |  5 +++++
>   xen/arch/x86/efi/efi-boot.h |  7 +++++++
>   xen/common/efi/boot.c       | 13 ++++++++++---
>   3 files changed, 22 insertions(+), 3 deletions(-)
>
> diff --git a/xen/arch/arm/efi/efi-boot.h b/xen/arch/arm/efi/efi-boot.h
> index 3297f27..47efdfc 100644
> --- a/xen/arch/arm/efi/efi-boot.h
> +++ b/xen/arch/arm/efi/efi-boot.h
> @@ -522,6 +522,11 @@ static void __init efi_arch_blexit(void)
>           efi_bs->FreePool(memmap);
>   }
>
> +static void __init efi_arch_halt(void)
> +{
> +    stop_cpu();
> +}
> +
>   static void __init efi_arch_load_addr_check(EFI_LOADED_IMAGE *loaded_image)
>   {
>       if ( (unsigned long)loaded_image->ImageBase & ((1 << 12) - 1) )
> diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h
> index cd14c19..9f41793 100644
> --- a/xen/arch/x86/efi/efi-boot.h
> +++ b/xen/arch/x86/efi/efi-boot.h
> @@ -614,6 +614,13 @@ static void __init efi_arch_blexit(void)
>           efi_bs->FreePages(ucode.addr, PFN_UP(ucode.size));
>   }
>
> +static void __init efi_arch_halt(void)
> +{
> +    local_irq_disable();
> +    for ( ; ; )
> +        halt();
> +}
> +
>   static void __init efi_arch_load_addr_check(EFI_LOADED_IMAGE *loaded_image)
>   {
>       xen_phys_start = (UINTN)loaded_image->ImageBase;
> diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c
> index 60c1b8d..4b816f2 100644
> --- a/xen/common/efi/boot.c
> +++ b/xen/common/efi/boot.c
> @@ -216,6 +216,9 @@ static void __init noreturn blexit(const CHAR16 *str)
>           PrintStr((CHAR16 *)str);
>       PrintStr(newline);
>
> +    if ( !efi_bs )
> +        efi_arch_halt();
> +
>       if ( cfg.addr )
>           efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size));
>       if ( kernel.addr )
> @@ -1063,8 +1066,10 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
>       for ( retry = 0; ; retry = 1 )
>       {
>           efi_memmap_size = map_alloc_size;
> -        status = efi_bs->GetMemoryMap(&efi_memmap_size, efi_memmap, &map_key,
> -                                      &efi_mdesc_size, &mdesc_ver);
> +        status = SystemTable->BootServices->GetMemoryMap(&efi_memmap_size,
> +                                                         efi_memmap, &map_key,
> +                                                         &efi_mdesc_size,
> +                                                         &mdesc_ver);
>           if ( EFI_ERROR(status) )
>               PrintErrMesg(L"Cannot obtain memory map", status);
>
> @@ -1073,7 +1078,9 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
>
>           efi_arch_pre_exit_boot();
>
> -        status = efi_bs->ExitBootServices(ImageHandle, map_key);
> +        status = SystemTable->BootServices->ExitBootServices(ImageHandle,
> +                                                             map_key);
> +        efi_bs = NULL;
>           if ( status != EFI_INVALID_PARAMETER || retry )
>               break;
>       }
>

  reply	other threads:[~2015-06-09 10:36 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-02  9:38 [PATCH v4] efi: Avoid calling boot services after ExitBootServices() Ross Lagerwall
2015-06-09 10:36 ` Ross Lagerwall [this message]
2015-06-09 11:51   ` Jan Beulich
2015-06-09 12:53     ` Ian Campbell
2015-06-09 13:05       ` Ross Lagerwall
2015-06-09 13:24         ` Ian Campbell
2015-06-09 13:26           ` Andrew Cooper
2015-06-09 13:44             ` Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5576C1BD.9020609@citrix.com \
    --to=ross.lagerwall@citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=ian.campbell@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=keir@xen.org \
    --cc=stefano.stabellini@citrix.com \
    --cc=tim@xen.org \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.