From: "Jan Beulich" <JBeulich@novell.com>
To: "Ian Campbell" <Ian.Campbell@eu.citrix.com>,
"Keir Fraser" <keir.xen@gmail.com>
Cc: "olaf@aepfle.de" <olaf@aepfle.de>,
"xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>,
"Konrad Rzeszutek Wilk" <konrad.wilk@oracle.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"keir@xen.org" <keir@xen.org>
Subject: Re: [Xen-devel] [PATCH] xen: update machine_to_phys_order on resume
Date: Mon, 18 Jul 2011 09:47:25 +0100 [thread overview]
Message-ID: <4E240F3D020000780004DD70@nat28.tlf.novell.com> (raw)
In-Reply-To: <1310977905.20648.26.camel@zakaz.uk.xensource.com>
>>> On 18.07.11 at 10:31, Ian Campbell <Ian.Campbell@eu.citrix.com> wrote:
> Pushing things down at build time is pretty easy. FWIW here's an
> incomplete patch to push the kernel declared features down into the
> hypervisor at build time extracted from some old PV in HVM container
> stuff (so not directly applicable). I can bring it up to date if the
> approach seems useful.
Yes, that looks like what we'd want from a conceptual perspective,
but...
> One thing which is somewhat missing is user control of non-mandatory
> features declared by a kernel, although normally that should be a
> decision made by the tools/hypervisor based upon available features etc.
>
> diff -r a6c4d03b7d45 tools/libxc/xc_dom_core.c
> --- a/tools/libxc/xc_dom_core.c Mon Feb 08 13:05:48 2010 +0000
> +++ b/tools/libxc/xc_dom_core.c Thu Feb 11 12:48:47 2010 +0000
> @@ -609,6 +609,7 @@
>
> int xc_dom_parse_image(struct xc_dom_image *dom)
> {
> + DECLARE_DOMCTL;
> int i;
>
> xc_dom_printf("%s: called\n", __FUNCTION__);
> @@ -629,8 +630,26 @@
> /* check features */
> for ( i = 0; i < XENFEAT_NR_SUBMAPS; i++ )
> {
> - dom->f_active[i] |= dom->f_requested[i]; /* cmd line */
> - dom->f_active[i] |= dom->parms.f_required[i]; /* kernel */
> + domctl.cmd = XEN_DOMCTL_setfeatures;
> + domctl.domain = dom->guest_domid;
> +
> + domctl.u.setfeatures.submap_idx = i;
> + domctl.u.setfeatures.submap = 0;
> +
> + domctl.u.setfeatures.submap |= dom->f_requested[i]; /* cmd line */
> + domctl.u.setfeatures.submap |= dom->parms.f_required[i]; /* kernel */
> +
> + xc_dom_printf("requesting features[%d] = %#x\n", domctl.u.setfeatures.submap_idx, domctl.u.setfeatures.submap);
> + if (do_domctl(dom->guest_xc, &domctl))
> + {
> + xc_dom_panic(XC_INVALID_PARAM,
> + "%s: unable to set requested features\n", __FUNCTION__);
> + goto err;
> + }
> +
> + xc_dom_printf("received features[%d] = %#x\n", domctl.u.setfeatures.submap_idx, domctl.u.setfeatures.submap);
> + dom->f_active[i] = domctl.u.setfeatures.submap;
> +
> if ( (dom->f_active[i] & dom->parms.f_supported[i]) !=
> dom->f_active[i] )
> {
> @@ -639,6 +658,7 @@
> goto err;
> }
> }
> +
> return 0;
>
> err:
> diff -r a6c4d03b7d45 tools/libxl/xl.c
> --- a/tools/libxl/xl.c Mon Feb 08 13:05:48 2010 +0000
> +++ b/tools/libxl/xl.c Thu Feb 11 12:48:47 2010 +0000
> @@ -468,6 +468,8 @@
> }
> if (config_lookup_string (&config, "ramdisk", &buf) == CONFIG_TRUE)
> b_info->u.pv.ramdisk = strdup(buf);
> + if (config_lookup_string (&config, "features", &buf) == CONFIG_TRUE)
> + b_info->u.pv.features = strdup(buf);
> }
>
> if ((vbds = config_lookup (&config, "disk")) != NULL) {
> diff -r a6c4d03b7d45 xen/common/domctl.c
> --- a/xen/common/domctl.c Mon Feb 08 13:05:48 2010 +0000
> +++ b/xen/common/domctl.c Thu Feb 11 12:48:47 2010 +0000
> @@ -23,6 +23,7 @@
> #include <xen/paging.h>
> #include <asm/current.h>
> #include <public/domctl.h>
> +#include <public/features.h>
> #include <xsm/xsm.h>
>
> static DEFINE_SPINLOCK(domctl_lock);
> @@ -960,6 +962,54 @@
> }
> break;
>
> + case XEN_DOMCTL_setfeatures:
> + {
> + struct domain *d;
> + ret = -ESRCH;
> + if ( (d = rcu_lock_domain_by_id(op->domain)) != NULL )
> + {
> + printk("dom%d set features[%d] = %#x\n", d->domain_id, op->u.setfeatures.submap_idx, op->u.setfeatures.submap);
> +
> + switch (op->u.setfeatures.submap_idx) {
> + case 0:
> + if ( !paging_mode_translate(d) )
... this condition looks inverted to me.
> + {
> + op->u.setfeatures.submap &= ~(1U<<XENFEAT_writable_page_tables);
> + op->u.setfeatures.submap &= ~(1U<<XENFEAT_auto_translated_physmap);
> + }
> + if ( !is_pvhvm_domain(d) )
> + {
> + op->u.setfeatures.submap &= ~(1U<<XENFEAT_supervisor_mode_kernel);
> + }
> +
> + op->u.setfeatures.submap &= ~(1U<<XENFEAT_writable_descriptor_tables);
Why do you turn this off unconditionally?
> +
> + /* XXX other features */
That's perhaps also the place holder where the passed in information
would actually get stored?
Jan
> +
> +
> + if ( op->u.setfeatures.submap &(1U<<XENFEAT_supervisor_mode_kernel) )
> + d->arch.pv_kernel_minimum_rpl = 0;
> +
> + ret = 0;
> + break;
> +
> + default:
> + printk("dom%d unknown feature submap %d\n", d->domain_id, op->u.setfeatures.submap_idx);
> + op->u.setfeatures.submap = 0;
> + ret = -EINVAL;
> + break;
> + }
> +
> + rcu_unlock_domain(d);
> + ret = 0;
> +
> + if ( copy_to_guest(u_domctl, op, 1) )
> + ret = -EFAULT;
> +
> + }
> + }
> + break;
> +
> default:
> ret = arch_do_domctl(op, u_domctl);
> break;
> diff -r a6c4d03b7d45 xen/include/public/domctl.h
> --- a/xen/include/public/domctl.h Mon Feb 08 13:05:48 2010 +0000
> +++ b/xen/include/public/domctl.h Thu Feb 11 12:48:47 2010 +0000
> @@ -169,6 +169,13 @@
> XEN_GUEST_HANDLE_64(xen_pfn_t) array;
> };
>
> +/* XEN_DOMCTL_setfeatures */
> +struct xen_domctl_setfeatures {
> + /* IN variables */
> + unsigned int submap_idx; /* which 32-bit submap to return */
> + /* IN/OUT variables */
> + uint32_t submap; /* 32-bit submap, updated with actual
> result. */
> +};
>
> /*
> * Control shadow pagetables operation
> @@ -842,6 +848,7 @@
> #define XEN_DOMCTL_gettscinfo 59
> #define XEN_DOMCTL_settscinfo 60
> #define XEN_DOMCTL_getpageframeinfo3 61
> +#define XEN_DOMCTL_setfeatures 62
> #define XEN_DOMCTL_gdbsx_guestmemio 1000
> #define XEN_DOMCTL_gdbsx_pausevcpu 1001
> #define XEN_DOMCTL_gdbsx_unpausevcpu 1002
> @@ -855,6 +862,7 @@
> struct xen_domctl_getpageframeinfo getpageframeinfo;
> struct xen_domctl_getpageframeinfo2 getpageframeinfo2;
> struct xen_domctl_getpageframeinfo3 getpageframeinfo3;
> + struct xen_domctl_setfeatures setfeatures;
> struct xen_domctl_vcpuaffinity vcpuaffinity;
> struct xen_domctl_shadow_op shadow_op;
> struct xen_domctl_max_mem max_mem;
next prev parent reply other threads:[~2011-07-18 8:47 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4E20873F020000780007307B@nat28.tlf.novell.com>
2011-07-15 18:23 ` Keir Fraser
2011-07-18 7:05 ` Jan Beulich
2011-07-18 7:27 ` Keir Fraser
2011-07-18 8:31 ` Ian Campbell
2011-07-18 8:47 ` Jan Beulich [this message]
2011-07-18 9:05 ` Ian Campbell
2011-07-18 9:50 ` Jan Beulich
[not found] <4E1DB9C70200007800072DCC@nat28.tlf.novell.com>
2011-07-14 10:26 ` Olaf Hering
2011-07-15 8:32 ` Jan Beulich
[not found] <20110701104148.GA32729@aepfle.de>
[not found] ` <20110712164342.GA12867@aepfle.de>
2011-07-12 18:11 ` Konrad Rzeszutek Wilk
2011-07-13 9:12 ` Ian Campbell
2011-07-13 13:20 ` Konrad Rzeszutek Wilk
2011-07-15 8:56 ` Jan Beulich
2011-07-15 16:05 ` 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=4E240F3D020000780004DD70@nat28.tlf.novell.com \
--to=jbeulich@novell.com \
--cc=Ian.Campbell@eu.citrix.com \
--cc=keir.xen@gmail.com \
--cc=keir@xen.org \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=olaf@aepfle.de \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®