All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Roger Pau Monne <roger.pau@citrix.com>
Cc: xen-devel@lists.xenproject.org,
	Ian Campbell <ian.campbell@citrix.com>,
	Wei Liu <wei.liu2@citrix.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: [PATCH v5 07/28] libxc: rework BSP initialization
Date: Mon, 24 Aug 2015 14:26:44 -0400	[thread overview]
Message-ID: <20150824182644.GA511@l.oracle.com> (raw)
In-Reply-To: <1440176021-18910-8-git-send-email-roger.pau@citrix.com>

On Fri, Aug 21, 2015 at 06:53:20PM +0200, Roger Pau Monne wrote:
> Place the calls to xc_vcpu_setcontext and the allocation of the hypercall
> buffer into the arch-specific vcpu hooks. This is needed for the next patch,

s/next patch/$title/ please

> so x86 HVM guests can initialize the BSP using XEN_DOMCTL_sethvmcontext
> instead of XEN_DOMCTL_setvcpucontext.
> 
> This patch should not introduce any functional change.
> 
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> Cc: Ian Campbell <ian.campbell@citrix.com>
> Cc: Wei Liu <wei.liu2@citrix.com>
> ---
> Changes since v4:
>  - Add Andrew Cooper Reviewed-by.
> ---
>  tools/libxc/include/xc_dom.h |  2 +-
>  tools/libxc/xc_dom_arm.c     | 22 +++++++++++++++++-----
>  tools/libxc/xc_dom_boot.c    | 23 +----------------------
>  tools/libxc/xc_dom_x86.c     | 26 ++++++++++++++++++++------
>  4 files changed, 39 insertions(+), 34 deletions(-)
> 
> diff --git a/tools/libxc/include/xc_dom.h b/tools/libxc/include/xc_dom.h
> index 5c1bb0f..0245d24 100644
> --- a/tools/libxc/include/xc_dom.h
> +++ b/tools/libxc/include/xc_dom.h
> @@ -221,7 +221,7 @@ struct xc_dom_arch {
>      /* arch-specific data structs setup */
>      int (*start_info) (struct xc_dom_image * dom);
>      int (*shared_info) (struct xc_dom_image * dom, void *shared_info);
> -    int (*vcpu) (struct xc_dom_image * dom, void *vcpu_ctxt);
> +    int (*vcpu) (struct xc_dom_image * dom);
>      int (*bootearly) (struct xc_dom_image * dom);
>      int (*bootlate) (struct xc_dom_image * dom);
>  
> diff --git a/tools/libxc/xc_dom_arm.c b/tools/libxc/xc_dom_arm.c
> index 7548dae..8865097 100644
> --- a/tools/libxc/xc_dom_arm.c
> +++ b/tools/libxc/xc_dom_arm.c
> @@ -119,9 +119,10 @@ static int shared_info_arm(struct xc_dom_image *dom, void *ptr)
>  
>  /* ------------------------------------------------------------------------ */
>  
> -static int vcpu_arm32(struct xc_dom_image *dom, void *ptr)
> +static int vcpu_arm32(struct xc_dom_image *dom)
>  {
> -    vcpu_guest_context_t *ctxt = ptr;
> +    vcpu_guest_context_any_t any_ctx;
> +    vcpu_guest_context_t *ctxt = &any_ctx.c;
>  
>      DOMPRINTF_CALLED(dom->xch);
>  
> @@ -154,12 +155,18 @@ static int vcpu_arm32(struct xc_dom_image *dom, void *ptr)
>      DOMPRINTF("Initial state CPSR %#"PRIx32" PC %#"PRIx32,
>             ctxt->user_regs.cpsr, ctxt->user_regs.pc32);
>  
> -    return 0;
> +    rc = xc_vcpu_setcontext(dom->xch, dom->guest_domid, 0, &any_ctx);
> +    if ( rc != 0 )
> +        xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
> +                     "%s: SETVCPUCONTEXT failed (rc=%d)", __func__, rc);
> +
> +    return rc;
>  }
>  
> -static int vcpu_arm64(struct xc_dom_image *dom, void *ptr)
> +static int vcpu_arm64(struct xc_dom_image *dom)
>  {
> -    vcpu_guest_context_t *ctxt = ptr;
> +    vcpu_guest_context_any_t any_ctx;
> +    vcpu_guest_context_t *ctxt = &any_ctx.c;
>  
>      DOMPRINTF_CALLED(dom->xch);
>      /* clear everything */
> @@ -189,6 +196,11 @@ static int vcpu_arm64(struct xc_dom_image *dom, void *ptr)
>      DOMPRINTF("Initial state CPSR %#"PRIx32" PC %#"PRIx64,
>             ctxt->user_regs.cpsr, ctxt->user_regs.pc64);
>  
> +    rc = xc_vcpu_setcontext(dom->xch, dom->guest_domid, 0, &any_ctx);
> +    if ( rc != 0 )
> +        xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
> +                     "%s: SETVCPUCONTEXT failed (rc=%d)", __func__, rc);
> +
>      return 0;
>  }
>  
> diff --git a/tools/libxc/xc_dom_boot.c b/tools/libxc/xc_dom_boot.c
> index e6f7794..791041b 100644
> --- a/tools/libxc/xc_dom_boot.c
> +++ b/tools/libxc/xc_dom_boot.c
> @@ -62,19 +62,6 @@ static int setup_hypercall_page(struct xc_dom_image *dom)
>      return rc;
>  }
>  
> -static int launch_vm(xc_interface *xch, domid_t domid,
> -                     vcpu_guest_context_any_t *ctxt)
> -{
> -    int rc;
> -
> -    xc_dom_printf(xch, "%s: called, ctxt=%p", __FUNCTION__, ctxt);
> -    rc = xc_vcpu_setcontext(xch, domid, 0, ctxt);
> -    if ( rc != 0 )
> -        xc_dom_panic(xch, XC_INTERNAL_ERROR,
> -                     "%s: SETVCPUCONTEXT failed (rc=%d)", __FUNCTION__, rc);
> -    return rc;
> -}
> -
>  static int clear_page(struct xc_dom_image *dom, xen_pfn_t pfn)
>  {
>      xen_pfn_t dst;
> @@ -197,14 +184,9 @@ void *xc_dom_boot_domU_map(struct xc_dom_image *dom, xen_pfn_t pfn,
>  
>  int xc_dom_boot_image(struct xc_dom_image *dom)
>  {
> -    DECLARE_HYPERCALL_BUFFER(vcpu_guest_context_any_t, ctxt);
>      xc_dominfo_t info;
>      int rc;
>  
> -    ctxt = xc_hypercall_buffer_alloc(dom->xch, ctxt, sizeof(*ctxt));
> -    if ( ctxt == NULL )
> -        return -1;
> -
>      DOMPRINTF_CALLED(dom->xch);
>  
>      /* misc stuff*/
> @@ -259,13 +241,10 @@ int xc_dom_boot_image(struct xc_dom_image *dom)
>          return rc;
>  
>      /* let the vm run */
> -    memset(ctxt, 0, sizeof(*ctxt));
> -    if ( (rc = dom->arch_hooks->vcpu(dom, ctxt)) != 0 )
> +    if ( (rc = dom->arch_hooks->vcpu(dom)) != 0 )
>          return rc;
>      xc_dom_unmap_all(dom);
> -    rc = launch_vm(dom->xch, dom->guest_domid, ctxt);
>  
> -    xc_hypercall_buffer_free(dom->xch, ctxt);
>      return rc;
>  }
>  
> diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c
> index 0f49e27..ae8187f 100644
> --- a/tools/libxc/xc_dom_x86.c
> +++ b/tools/libxc/xc_dom_x86.c
> @@ -583,10 +583,12 @@ static int shared_info_x86_64(struct xc_dom_image *dom, void *ptr)
>  
>  /* ------------------------------------------------------------------------ */
>  
> -static int vcpu_x86_32(struct xc_dom_image *dom, void *ptr)
> +static int vcpu_x86_32(struct xc_dom_image *dom)
>  {
> -    vcpu_guest_context_x86_32_t *ctxt = ptr;
> +    vcpu_guest_context_any_t any_ctx;
> +    vcpu_guest_context_x86_32_t *ctxt = &any_ctx.x32;
>      xen_pfn_t cr3_pfn;
> +    int rc;
>  
>      DOMPRINTF_CALLED(dom->xch);
>  
> @@ -626,13 +628,20 @@ static int vcpu_x86_32(struct xc_dom_image *dom, void *ptr)
>      DOMPRINTF("%s: cr3: pfn 0x%" PRIpfn " mfn 0x%" PRIpfn "",
>                __FUNCTION__, dom->pgtables_seg.pfn, cr3_pfn);
>  
> -    return 0;
> +    rc = xc_vcpu_setcontext(dom->xch, dom->guest_domid, 0, &any_ctx);
> +    if ( rc != 0 )
> +        xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
> +                     "%s: SETVCPUCONTEXT failed (rc=%d)", __func__, rc);
> +
> +    return rc;
>  }
>  
> -static int vcpu_x86_64(struct xc_dom_image *dom, void *ptr)
> +static int vcpu_x86_64(struct xc_dom_image *dom)
>  {
> -    vcpu_guest_context_x86_64_t *ctxt = ptr;
> +    vcpu_guest_context_any_t any_ctx;
> +    vcpu_guest_context_x86_64_t *ctxt = &any_ctx.x64;
>      xen_pfn_t cr3_pfn;
> +    int rc;
>  
>      DOMPRINTF_CALLED(dom->xch);
>  
> @@ -665,7 +674,12 @@ static int vcpu_x86_64(struct xc_dom_image *dom, void *ptr)
>      ctxt->kernel_ss = ctxt->user_regs.ss;
>      ctxt->kernel_sp = ctxt->user_regs.esp;
>  
> -    return 0;
> +    rc = xc_vcpu_setcontext(dom->xch, dom->guest_domid, 0, &any_ctx);
> +    if ( rc != 0 )
> +        xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
> +                     "%s: SETVCPUCONTEXT failed (rc=%d)", __func__, rc);
> +
> +    return rc;
>  }
>  
>  /* ------------------------------------------------------------------------ */
> -- 
> 1.9.5 (Apple Git-50.3)
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel

  reply	other threads:[~2015-08-24 18:26 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-21 16:53 [PATCH v5 00/28] Introduce HVM without dm and new boot ABI Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 01/28] libxc: split x86 HVM setup_guest into smaller logical functions Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 02/28] libxc: unify xc_dom_p2m_{host/guest} Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 03/28] libxc: introduce the notion of a container type Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 04/28] libxc: introduce a domain loader for HVM guest firmware Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 05/28] libxc: make arch_setup_meminit a xc_dom_arch hook Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 06/28] libxc: make arch_setup_boot{init/late} xc_dom_arch hooks Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 07/28] libxc: rework BSP initialization Roger Pau Monne
2015-08-24 18:26   ` Konrad Rzeszutek Wilk [this message]
2015-08-25  8:33     ` Roger Pau Monné
2015-08-25  9:02   ` Wei Liu
2015-08-25  9:22     ` Roger Pau Monné
2015-08-25  9:32       ` Wei Liu
2015-08-25  9:35       ` Andrew Cooper
2015-08-21 16:53 ` [PATCH v5 08/28] libxc: introduce a xc_dom_arch for hvm-3.0-x86_32 guests Roger Pau Monne
2015-08-25  9:17   ` Wei Liu
2015-08-21 16:53 ` [PATCH v5 09/28] libxl: switch HVM domain building to use xc_dom_* helpers Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 10/28] libxc: remove dead HVM building code Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 11/28] xen/x86: add bitmap of enabled emulated devices Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 12/28] xen/x86: allow disabling the emulated local apic Roger Pau Monne
2015-08-31 21:55   ` Boris Ostrovsky
2015-08-21 16:53 ` [PATCH v5 13/28] xen/x86: allow disabling the emulated HPET Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 14/28] xen/x86: allow disabling the pmtimer Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 15/28] xen/x86: allow disabling the emulated RTC Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 16/28] xen/x86: allow disabling the emulated IO APIC Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 17/28] xen/x86: allow disabling the emulated PIC Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 18/28] xen/x86: allow disabling the emulated pmu Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 19/28] xen/x86: allow disabling the emulated VGA Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 20/28] xen/x86: allow disabling the emulated IOMMU Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 21/28] xen/x86: allow disabling all emulated devices inside of Xen Roger Pau Monne
2015-08-21 17:19   ` Andrew Cooper
2015-08-21 16:53 ` [PATCH v5 22/28] elfnotes: intorduce a new PHYS_ENTRY elfnote Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 23/28] libxc: allow creating domains without emulated devices Roger Pau Monne
2015-08-21 17:42   ` Andrew Cooper
2015-08-21 16:53 ` [PATCH v5 24/28] xen/x86: allow HVM guests to use hypercalls to bring up vCPUs Roger Pau Monne
2015-08-21 20:36   ` Andrew Cooper
2015-08-24 10:43     ` Roger Pau Monné
2015-08-24 11:57       ` Andrew Cooper
2015-08-21 16:53 ` [PATCH v5 25/28] xenconsole: try to attach to PV console if HVM fails Roger Pau Monne
2015-08-21 16:53 ` [PATCH v5 26/28] libxc/xen: introduce a start info structure for HVMlite guests Roger Pau Monne
2015-08-21 21:00   ` Andrew Cooper
2015-08-24 15:24     ` Roger Pau Monné
2015-08-21 16:53 ` [PATCH v5 27/28] libxc: switch xc_dom_elfloader to be used with HVMlite domains Roger Pau Monne
2015-08-25  9:32   ` Wei Liu
2015-08-21 16:53 ` [PATCH v5 28/28] libxl: allow the creation of HVM domains without a device model Roger Pau Monne
2015-08-25  9:30   ` Wei Liu

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=20150824182644.GA511@l.oracle.com \
    --to=konrad.wilk@oracle.com \
    --cc=ian.campbell@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=roger.pau@citrix.com \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.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.