All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mukesh Rathor <mukesh.rathor@oracle.com>
To: Ian Campbell <Ian.Campbell@citrix.com>
Cc: "Xen-devel@lists.xensource.com" <Xen-devel@lists.xensource.com>,
	Ian Jackson <Ian.Jackson@eu.citrix.com>
Subject: Re: [PATCH 08/18] PVH xen: tools changes to create PVH domain
Date: Wed, 31 Jul 2013 19:02:13 -0700	[thread overview]
Message-ID: <20130731190213.0b57efd0@mantra.us.oracle.com> (raw)
In-Reply-To: <1375272057.7382.24.camel@kazak.uk.xensource.com>

On Wed, 31 Jul 2013 13:00:57 +0100
Ian Campbell <Ian.Campbell@citrix.com> wrote:

> On Tue, 2013-07-30 at 16:47 -0700, Mukesh Rathor wrote:
> > On Mon, 17 Jun 2013 12:11:34 +0100
> > Ian Campbell <Ian.Campbell@citrix.com> wrote:
......
> 
> I think there's a bit of confusion because the current libxc interface
> is there to support user-driven direct override of the required
> feature flags. IOW a user literally writes "features = FOO" in their
> config file and that ends up being f_requested. Although libxl
> supports this concept it is not plumbed into xl, I don't know/care
> what xend does either.
> 
> In any case this is not the use case you are looking for. What we want
> for PVH is for libxc internally to decide on a set of features which
> are required to launch a domain with a specific configuration, in
> this case PVH. That's slightly orthogonal to the existing stuff. This
> isn't something which has come up yet and so PVH will be the first to
> go down this path, which is why you aren't finding all the necessary
> bits there out of the box.

> I suspect it would be sufficient for libxc (likely xc_dom_allocate) to
> call elf_xen_parse_features a second time (or first if features ==
> NULL) to union the required features into f_requested. You might also
> need to blacklist features which PVH is not comfortable with and
> error out if the user asked for them at the appropriate time. You
> will need to do something similar for kernels which declare a
> requirement for a feature which PVH doesn't coexist with (are there
> any such XENFEAT_*?).

If libxl is already parsing and supposed to be passing features
parameter to xc_dom_allocate(), why can't we just let it set the
string for PVH when calling xc_dom_allocate in libxl__build_pv? That way 
libxc can remain transparent.  For tools, PVH is a PV guest with some 
features like auto-xlate etc.., so the more we hide it, the better IMO.

If the answer is still no,. it appears that xc_dom_allocate is the best 
place to put the feature strings. Since, for PVH, features are pre-determined, 
features not being NULL would be an error. I can juse use the existing 
xc_interface_core.flags? (would like to rename it to xc_flags so one can easily
find its usages please :)). So:

xc_dom_allocate:

    if (xch->flags & PVH)
    {
        if (features)
        {
            error
            return NULL;
        }
        features = writable_descriptor_tables|auto_translated_physmap"
                   "|supervisor_mode_kernel|hvm_callback_vector;
    }
    if ( features )
        elf_xen_parse_features(features, dom->f_requested, NULL);

what do you think?

Acutally, wait! Looking at code more, I think I found the place we need
to put the check.  In xc_dom_parse_elf_kernel:

After:
    if ( elf_xen_feature_get(XENFEAT_dom0, dom->parms.f_required) )
    {
        xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: Kernel does not"
                     " support unprivileged (DomU) operation", __FUNCTION__);
        rc = -EINVAL;
        goto out;
    }
Add:
    if (dom->pvh)
    {
        if ( !elf_xen_feature_get(XENFEAT_hvm_callback_vector, 
                                 dom->parms.f_supported)   ||
             !elf_xen_feature_get(XENFEAT_auto_translated_physmap
                                 dom->parms.f_supported)   ||
             ...
        {
            xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: Kernel does not 
                         support PVH"......
            rc = -EINVAL;
            goto out;
        }
    }

BTW, i think the check should be against f_supported and not f_required.
This seems like the best solution to me. Agree?

Also, it's pvh=yes/no for now. For experimental phases we don't want if 
possible. There was a discussion, and a decision IIRC, about just booting 
PV in PVH mode "if possible" by default in future, but not now when we
are in the experimental phase.

> Actually, I think you might want to add a second array of f_required,
> that is the set of features which absolutely have to be there and
> plumb that down. This corresponds to the third parameter to
> elf_xen_parse_features which is currently unused at the
> xc_dom_allocate call site. The distinction probably becomes relevant
> when you support pvh=no|yes|ifpossible? IOW if yes then the features
> are required, if just ifpossible then they are only requested. Not
> sure, hopefully it will come out in the wash.
> 
> Or maybe it actually makes sense to separate out the user requested
> f_{requested,required} field from the libxc internal feature
> preferences/requirements. I'm not sure. I'd probably start by reusing
> the f_foo ones but if that becomes unwieldy because you find yourself
> needing to know whose preference it is then back off into using a
> separate pair of fields.
> 
> I'm not sure how you are currently signalling to the hypervisor that a
> new domain is a PVH domain? I had a look through this patch and must
> be being thick because I don't see it.

I had a flag set, but it was recommended during RFC to remove it. So,
now in xen, a PV with HAP is a PVH guest:

do_domctl():
         if ( op->u.createdomain.flags & XEN_DOMCTL_CDF_hvm_guest )
             domcr_flags |= DOMCRF_hvm;
+        else if ( op->u.createdomain.flags & XEN_DOMCTL_CDF_hap )
+            domcr_flags |= DOMCRF_pvh;     /* PV with HAP is a PVH guest */
+

thanks for your help.
Mukesh

  reply	other threads:[~2013-08-01  2:02 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-25  1:25 [PATCH 00/18][V6]: PVH xen: version 6 patches Mukesh Rathor
2013-05-25  1:25 ` [PATCH 01/18] PVH xen: turn gdb_frames/gdt_ents into union Mukesh Rathor
2013-05-31  9:13   ` Jan Beulich
2013-05-25  1:25 ` [PATCH 02/18] PVH xen: add XENMEM_add_to_physmap_range Mukesh Rathor
2013-05-31  9:28   ` Jan Beulich
2013-05-31  9:38     ` Ian Campbell
2013-05-31 10:14       ` Jan Beulich
2013-05-31 10:40         ` Ian Campbell
2013-06-05  0:24         ` Mukesh Rathor
2013-06-05  0:31     ` Mukesh Rathor
2013-06-05  7:32       ` Jan Beulich
2013-06-05 20:41         ` Mukesh Rathor
2013-06-06  6:43           ` Jan Beulich
2013-06-06 22:19             ` Mukesh Rathor
2013-06-07  6:13               ` Jan Beulich
2013-06-07 20:46                 ` Mukesh Rathor
2013-06-07 15:08             ` Konrad Rzeszutek Wilk
2013-06-07 15:48               ` Jan Beulich
2013-05-25  1:25 ` [PATCH 03/18] PVH xen: create domctl_memory_mapping() function Mukesh Rathor
2013-05-31  9:46   ` Jan Beulich
2013-06-05  0:47     ` Mukesh Rathor
2013-06-05  7:34       ` Jan Beulich
2013-05-25  1:25 ` [PATCH 04/18] PVH xen: add params to read_segment_register Mukesh Rathor
2013-05-31 10:00   ` Jan Beulich
2013-06-06  1:25     ` Mukesh Rathor
2013-06-06  6:48       ` Jan Beulich
2013-06-07  1:43         ` Mukesh Rathor
2013-06-07  6:29           ` Jan Beulich
2013-06-08  0:45             ` Mukesh Rathor
2013-06-10  8:01               ` Jan Beulich
2013-06-10 23:10                 ` Mukesh Rathor
2013-05-25  1:25 ` [PATCH 05/18] PVH xen: vmx realted preparatory changes for PVH Mukesh Rathor
2013-05-25  1:25 ` [PATCH 06/18] PVH xen: Move e820 fields out of pv_domain struct Mukesh Rathor
2013-06-05 15:33   ` Konrad Rzeszutek Wilk
2013-05-25  1:25 ` [PATCH 07/18] PVH xen: Introduce PVH guest type Mukesh Rathor
2013-05-25  1:25 ` [PATCH 08/18] PVH xen: tools changes to create PVH domain Mukesh Rathor
2013-06-12 14:58   ` Ian Campbell
2013-06-15  0:14     ` Mukesh Rathor
2013-06-17 11:11       ` Ian Campbell
2013-07-30 23:47         ` Mukesh Rathor
2013-07-31 12:00           ` Ian Campbell
2013-08-01  2:02             ` Mukesh Rathor [this message]
2013-08-01  8:01               ` Ian Campbell
2013-08-02  1:12                 ` Mukesh Rathor
2013-08-29  1:51                 ` Mukesh Rathor
2013-08-29  9:01                   ` Ian Campbell
2013-08-30  0:45                     ` Mukesh Rathor
2013-08-30  9:56                       ` Ian Campbell
2013-08-29 11:13               ` George Dunlap
2013-08-29 11:29                 ` Ian Campbell
2013-08-30  1:24                   ` Mukesh Rathor
2013-08-30  9:53                     ` Ian Campbell
2013-08-30 10:22                       ` George Dunlap
2013-08-30 10:27                     ` George Dunlap
2013-08-29  0:14         ` Mukesh Rathor
2013-07-31  1:06     ` Mukesh Rathor
2013-07-31 11:32       ` Ian Campbell
2013-05-25  1:25 ` [PATCH 09/18] PVH xen: domain creation code changes Mukesh Rathor
2013-05-25  1:25 ` [PATCH 10/18] PVH xen: create PVH vmcs, and also initialization Mukesh Rathor
2013-05-25  1:25 ` [PATCH 11/18] PVH xen: create read_descriptor_sel() Mukesh Rathor
2013-05-25  1:25 ` [PATCH 12/18] PVH xen: support hypercalls for PVH Mukesh Rathor
2013-06-05 15:27   ` Konrad Rzeszutek Wilk
2013-05-25  1:25 ` [PATCH 13/18] PVH xen: introduce vmx_pvh.c Mukesh Rathor
2013-05-25  1:25 ` [PATCH 14/18] PVH xen: some misc changes like mtrr, intr, msi Mukesh Rathor
2013-05-25  1:25 ` [PATCH 15/18] PVH xen: hcall page initialize, create PVH guest type, etc Mukesh Rathor
2013-05-25  1:25 ` [PATCH 16/18] PVH xen: Miscellaneous changes Mukesh Rathor
2013-06-05 15:39   ` Konrad Rzeszutek Wilk
2013-05-25  1:25 ` [PATCH 17/18] PVH xen: Introduce p2m_map_foreign Mukesh Rathor
2013-05-25  1:25 ` [PATCH 18/18] PVH xen: Add and remove foreign pages Mukesh Rathor
2013-06-05 15:23 ` [PATCH 00/18][V6]: PVH xen: version 6 patches Konrad Rzeszutek Wilk
2013-06-05 15:25   ` George Dunlap
2013-06-05 15:36   ` Ian Campbell
2013-06-05 18:34     ` Konrad Rzeszutek Wilk
2013-06-05 20:51       ` Ian Campbell
2013-06-05 22:01         ` Mukesh Rathor
2013-06-06  8:46           ` Ian Campbell
2013-06-07 13:56             ` Konrad Rzeszutek Wilk
2013-06-06 10:08     ` George Dunlap
2013-06-05 17:14   ` Tim Deegan
2013-06-06  7:29     ` Jan Beulich

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=20130731190213.0b57efd0@mantra.us.oracle.com \
    --to=mukesh.rathor@oracle.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=Xen-devel@lists.xensource.com \
    /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.