All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: George Dunlap <george.dunlap@eu.citrix.com>
Cc: Ian Jackson <ian.jackson@citrix.com>,
	Ian Campbell <ian.campbell@citrix.com>,
	xen-devel@lists.xen.org
Subject: Re: [PATCH RFC v13 19/20] PVH xen tools: libxc changes to build a PVH guest.
Date: Fri, 27 Sep 2013 14:37:56 -0400	[thread overview]
Message-ID: <20130927183756.GD21364@phenom.dumpdata.com> (raw)
In-Reply-To: <1379955000-11050-20-git-send-email-george.dunlap@eu.citrix.com>

On Mon, Sep 23, 2013 at 05:49:59PM +0100, George Dunlap wrote:
> From: Mukesh Rathor <mukesh.rathor@oracle.com>
> 
> Signed-off-by: Mukesh Rathor <mukesh.rathor@oracle.com>
> 

Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> CC: Ian Jackson <ian.jackson@citrix.com>
> CC: Ian Campbell <ian.campbell@citrix.com>
> ---
>  tools/libxc/xc_dom.h      |    1 +
>  tools/libxc/xc_dom_core.c |    9 +++++
>  tools/libxc/xc_dom_x86.c  |   90 +++++++++++++++++++++++++++++----------------
>  3 files changed, 69 insertions(+), 31 deletions(-)
> 
> diff --git a/tools/libxc/xc_dom.h b/tools/libxc/xc_dom.h
> index 86e23ee..5168bcd 100644
> --- a/tools/libxc/xc_dom.h
> +++ b/tools/libxc/xc_dom.h
> @@ -130,6 +130,7 @@ struct xc_dom_image {
>      domid_t console_domid;
>      domid_t xenstore_domid;
>      xen_pfn_t shared_info_mfn;
> +    int pvh_enabled;
>  
>      xc_interface *xch;
>      domid_t guest_domid;
> diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c
> index 0f367f6..faa7e0f 100644
> --- a/tools/libxc/xc_dom_core.c
> +++ b/tools/libxc/xc_dom_core.c
> @@ -766,6 +766,15 @@ int xc_dom_parse_image(struct xc_dom_image *dom)
>          goto err;
>      }
>  
> +    if ( dom->pvh_enabled )
> +    {
> +        const char *pvh_features = "writable_descriptor_tables|"
> +                                   "auto_translated_physmap|"
> +                                   "supervisor_mode_kernel|"
> +                                   "hvm_callback_vector";
> +        elf_xen_parse_features(pvh_features, dom->f_requested, NULL);
> +    }
> +
>      /* check features */
>      for ( i = 0; i < XENFEAT_NR_SUBMAPS; i++ )
>      {
> diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c
> index 7cc2ff2..f36dfbb 100644
> --- a/tools/libxc/xc_dom_x86.c
> +++ b/tools/libxc/xc_dom_x86.c
> @@ -407,7 +407,8 @@ static int setup_pgtables_x86_64(struct xc_dom_image *dom)
>          pgpfn = (addr - dom->parms.virt_base) >> PAGE_SHIFT_X86;
>          l1tab[l1off] =
>              pfn_to_paddr(xc_dom_p2m_guest(dom, pgpfn)) | L1_PROT;
> -        if ( (addr >= dom->pgtables_seg.vstart) && 
> +        if ( (!dom->pvh_enabled)                && 
> +             (addr >= dom->pgtables_seg.vstart) && 
>               (addr < dom->pgtables_seg.vend) )
>              l1tab[l1off] &= ~_PAGE_RW; /* page tables are r/o */
>  
> @@ -588,6 +589,13 @@ static int vcpu_x86_32(struct xc_dom_image *dom, void *ptr)
>  
>      DOMPRINTF_CALLED(dom->xch);
>  
> +    if ( dom->pvh_enabled )
> +    {
> +        xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
> +                     "%s: PVH not supported for 32bit guests.", __FUNCTION__);
> +        return -1;
> +    }
> +
>      /* clear everything */
>      memset(ctxt, 0, sizeof(*ctxt));
>  
> @@ -630,12 +638,6 @@ static int vcpu_x86_64(struct xc_dom_image *dom, void *ptr)
>      /* clear everything */
>      memset(ctxt, 0, sizeof(*ctxt));
>  
> -    ctxt->user_regs.ds = FLAT_KERNEL_DS_X86_64;
> -    ctxt->user_regs.es = FLAT_KERNEL_DS_X86_64;
> -    ctxt->user_regs.fs = FLAT_KERNEL_DS_X86_64;
> -    ctxt->user_regs.gs = FLAT_KERNEL_DS_X86_64;
> -    ctxt->user_regs.ss = FLAT_KERNEL_SS_X86_64;
> -    ctxt->user_regs.cs = FLAT_KERNEL_CS_X86_64;
>      ctxt->user_regs.rip = dom->parms.virt_entry;
>      ctxt->user_regs.rsp =
>          dom->parms.virt_base + (dom->bootstack_pfn + 1) * PAGE_SIZE_X86;
> @@ -643,15 +645,25 @@ static int vcpu_x86_64(struct xc_dom_image *dom, void *ptr)
>          dom->parms.virt_base + (dom->start_info_pfn) * PAGE_SIZE_X86;
>      ctxt->user_regs.rflags = 1 << 9; /* Interrupt Enable */
>  
> -    ctxt->kernel_ss = ctxt->user_regs.ss;
> -    ctxt->kernel_sp = ctxt->user_regs.esp;
> -
>      ctxt->flags = VGCF_in_kernel_X86_64 | VGCF_online_X86_64;
>      cr3_pfn = xc_dom_p2m_guest(dom, dom->pgtables_seg.pfn);
>      ctxt->ctrlreg[3] = xen_pfn_to_cr3_x86_64(cr3_pfn);
>      DOMPRINTF("%s: cr3: pfn 0x%" PRIpfn " mfn 0x%" PRIpfn "",
>                __FUNCTION__, dom->pgtables_seg.pfn, cr3_pfn);
>  
> +    if ( dom->pvh_enabled )
> +        return 0;
> +
> +    ctxt->user_regs.ds = FLAT_KERNEL_DS_X86_64;
> +    ctxt->user_regs.es = FLAT_KERNEL_DS_X86_64;
> +    ctxt->user_regs.fs = FLAT_KERNEL_DS_X86_64;
> +    ctxt->user_regs.gs = FLAT_KERNEL_DS_X86_64;
> +    ctxt->user_regs.ss = FLAT_KERNEL_SS_X86_64;
> +    ctxt->user_regs.cs = FLAT_KERNEL_CS_X86_64;
> +
> +    ctxt->kernel_ss = ctxt->user_regs.ss;
> +    ctxt->kernel_sp = ctxt->user_regs.esp;
> +
>      return 0;
>  }
>  
> @@ -752,7 +764,7 @@ int arch_setup_meminit(struct xc_dom_image *dom)
>      rc = x86_compat(dom->xch, dom->guest_domid, dom->guest_type);
>      if ( rc )
>          return rc;
> -    if ( xc_dom_feature_translated(dom) )
> +    if ( xc_dom_feature_translated(dom) && !dom->pvh_enabled )
>      {
>          dom->shadow_enabled = 1;
>          rc = x86_shadow(dom->xch, dom->guest_domid);
> @@ -828,6 +840,38 @@ int arch_setup_bootearly(struct xc_dom_image *dom)
>      return 0;
>  }
>  
> +/*
> + * Map grant table frames into guest physmap. PVH manages grant during boot
> + * via HVM mechanisms.
> + */
> +static int map_grant_table_frames(struct xc_dom_image *dom)
> +{
> +    int i, rc;
> +
> +    if ( dom->pvh_enabled )
> +        return 0;
> +
> +    for ( i = 0; ; i++ )
> +    {
> +        rc = xc_domain_add_to_physmap(dom->xch, dom->guest_domid,
> +                                      XENMAPSPACE_grant_table,
> +                                      i, dom->total_pages + i);
> +        if ( rc != 0 )
> +        {
> +            if ( (i > 0) && (errno == EINVAL) )
> +            {
> +                DOMPRINTF("%s: %d grant tables mapped", __FUNCTION__, i);
> +                break;
> +            }
> +            xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
> +                         "%s: mapping grant tables failed " "(pfn=0x%" PRIpfn
> +                         ", rc=%d)", __FUNCTION__, dom->total_pages + i, rc);
> +            return rc;
> +        }
> +    }
> +    return 0;
> +}
> +
>  int arch_setup_bootlate(struct xc_dom_image *dom)
>  {
>      static const struct {
> @@ -866,7 +910,6 @@ int arch_setup_bootlate(struct xc_dom_image *dom)
>      else
>      {
>          /* paravirtualized guest with auto-translation */
> -        int i;
>  
>          /* Map shared info frame into guest physmap. */
>          rc = xc_domain_add_to_physmap(dom->xch, dom->guest_domid,
> @@ -880,25 +923,10 @@ int arch_setup_bootlate(struct xc_dom_image *dom)
>              return rc;
>          }
>  
> -        /* Map grant table frames into guest physmap. */
> -        for ( i = 0; ; i++ )
> -        {
> -            rc = xc_domain_add_to_physmap(dom->xch, dom->guest_domid,
> -                                          XENMAPSPACE_grant_table,
> -                                          i, dom->total_pages + i);
> -            if ( rc != 0 )
> -            {
> -                if ( (i > 0) && (errno == EINVAL) )
> -                {
> -                    DOMPRINTF("%s: %d grant tables mapped", __FUNCTION__, i);
> -                    break;
> -                }
> -                xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
> -                             "%s: mapping grant tables failed " "(pfn=0x%"
> -                             PRIpfn ", rc=%d)", __FUNCTION__, dom->total_pages + i, rc);
> -                return rc;
> -            }
> -        }
> +        rc = map_grant_table_frames(dom);
> +        if ( rc != 0 )
> +            return rc;
> +
>          shinfo = dom->shared_info_pfn;
>      }
>  
> -- 
> 1.7.9.5
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel

  reply	other threads:[~2013-09-27 18:37 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-23 16:49 [PATCH RFC v13 00/20] Introduce PVH domU support George Dunlap
2013-09-23 16:49 ` [PATCH RFC v13 01/20] Allow vmx_update_debug_state to be called when v!=current George Dunlap
2013-09-23 16:49 ` [PATCH RFC v13 02/20] pvh prep: code motion George Dunlap
2013-09-26  9:20   ` Tim Deegan
2013-10-04 15:29   ` Roger Pau Monné
2013-09-23 16:49 ` [PATCH RFC v13 03/20] Introduce pv guest type and has_hvm_container macros George Dunlap
2013-09-26 11:53   ` Tim Deegan
2013-09-26 12:54     ` Ian Campbell
2013-09-26 13:46     ` George Dunlap
2013-09-26 15:31       ` Konrad Rzeszutek Wilk
2013-09-26 16:24       ` Tim Deegan
2013-09-23 16:49 ` [PATCH RFC v13 04/20] pvh: Introduce PVH guest type George Dunlap
2013-09-23 16:49 ` [PATCH RFC v13 05/20] pvh: Disable unneeded features of HVM containers George Dunlap
2013-09-26 15:22   ` Jan Beulich
2013-11-04 12:31     ` George Dunlap
2013-09-23 16:49 ` [PATCH RFC v13 06/20] pvh: vmx-specific changes George Dunlap
2013-09-26 15:29   ` Jan Beulich
2013-11-07 14:14     ` George Dunlap
2013-11-07 14:29       ` Jan Beulich
2013-10-07 15:55   ` Roger Pau Monné
2013-10-07 16:06     ` George Dunlap
2013-10-07 16:12       ` Tim Deegan
2013-10-07 16:20         ` George Dunlap
2013-10-07 17:08           ` Tim Deegan
2013-10-08  8:45         ` Jan Beulich
2013-11-07 12:02           ` George Dunlap
2013-11-07 13:12             ` Jan Beulich
2013-09-23 16:49 ` [PATCH RFC v13 07/20] pvh: Do not allow PVH guests to change paging modes George Dunlap
2013-09-26 15:30   ` Jan Beulich
2013-09-23 16:49 ` [PATCH RFC v13 08/20] pvh: PVH access to hypercalls George Dunlap
2013-09-26 15:33   ` Jan Beulich
2013-09-27 21:15     ` Mukesh Rathor
2013-09-30  6:38       ` Jan Beulich
2013-09-23 16:49 ` [PATCH RFC v13 09/20] pvh: Use PV e820 George Dunlap
2013-09-27 17:57   ` Konrad Rzeszutek Wilk
2013-09-23 16:49 ` [PATCH RFC v13 10/20] pvh: Support guest_kernel_mode for PVH George Dunlap
2013-09-23 16:49 ` [PATCH RFC v13 11/20] pvh: Support read_segment_register " George Dunlap
2013-09-26 15:36   ` Jan Beulich
2013-09-23 16:49 ` [PATCH RFC v13 12/20] pvh: read_descriptor for PVH guests George Dunlap
2013-09-27 18:34   ` Konrad Rzeszutek Wilk
2013-09-23 16:49 ` [PATCH RFC v13 13/20] pvh: Set up more PV stuff in set_info_guest George Dunlap
2013-09-26 15:43   ` Jan Beulich
2013-11-07 15:57     ` George Dunlap
2013-09-23 16:49 ` [PATCH RFC v13 14/20] pvh: Use PV handlers for emulated forced invalid ops, cpuid, and IO George Dunlap
2013-09-26 15:52   ` Jan Beulich
2013-09-23 16:49 ` [PATCH RFC v13 15/20] pvh: Disable 32-bit guest support for now George Dunlap
2013-09-23 16:49 ` [PATCH RFC v13 16/20] pvh: Restrict tsc_mode to NEVER_EMULATE " George Dunlap
2013-09-23 16:49 ` [PATCH RFC v13 17/20] pvh: Disable debug traps when doing pv emulation for PVH domains George Dunlap
2013-09-26 15:55   ` Jan Beulich
2013-09-23 16:49 ` [PATCH RFC v13 18/20] pvh: Documentation George Dunlap
2013-09-23 16:49 ` [PATCH RFC v13 19/20] PVH xen tools: libxc changes to build a PVH guest George Dunlap
2013-09-27 18:37   ` Konrad Rzeszutek Wilk [this message]
2013-10-18 16:45   ` Roger Pau Monné
2013-11-04 11:56     ` George Dunlap
2013-11-04 13:18       ` Roger Pau Monné
2013-09-23 16:50 ` [PATCH RFC v13 20/20] PVH xen tools: libxl changes to create " George Dunlap
2013-09-27 18:38   ` Konrad Rzeszutek Wilk
2013-09-27 13:08 ` [PATCH RFC v13 00/20] Introduce PVH domU support Konrad Rzeszutek Wilk

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=20130927183756.GD21364@phenom.dumpdata.com \
    --to=konrad.wilk@oracle.com \
    --cc=george.dunlap@eu.citrix.com \
    --cc=ian.campbell@citrix.com \
    --cc=ian.jackson@citrix.com \
    --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.