All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Ed White <edmund.h.white@intel.com>, xen-devel@lists.xen.org
Cc: ian.jackson@eu.citrix.com, tim@xen.org, keir@xen.org,
	ian.campbell@citrix.com, jbeulich@suse.com
Subject: Re: [PATCH 01/11] VMX: VMFUNC and #VE definitions and detection.
Date: Wed, 14 Jan 2015 14:38:08 +0000	[thread overview]
Message-ID: <54B67F50.2000009@citrix.com> (raw)
In-Reply-To: <54B568D8.6060600@intel.com>

On 13/01/15 18:50, Ed White wrote:
> On 01/12/2015 05:06 AM, Andrew Cooper wrote:
>> On 09/01/15 21:26, Ed White wrote:
>>> Currently, neither is enabled globally but may be enabled on a per-VCPU
>>> basis by the altp2m code.
>>>
>>> Everything can be force-disabled globally by specifying vmfunc=0 on the
>>> Xen command line.
>>>
>>> Remove the check for EPTE bit 63 == zero in ept_split_super_page(), as
>>> that bit is now hardware-defined.
>>>
>>> Signed-off-by: Ed White <edmund.h.white@intel.com>
>>> ---
>>>  docs/misc/xen-command-line.markdown |  7 +++++++
>>>  xen/arch/x86/hvm/vmx/vmcs.c         | 40 +++++++++++++++++++++++++++++++++++++
>>>  xen/arch/x86/mm/p2m-ept.c           |  1 -
>>>  xen/include/asm-x86/hvm/vmx/vmcs.h  | 16 +++++++++++++++
>>>  xen/include/asm-x86/hvm/vmx/vmx.h   | 13 +++++++++++-
>>>  xen/include/asm-x86/msr-index.h     |  1 +
>>>  6 files changed, 76 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/docs/misc/xen-command-line.markdown b/docs/misc/xen-command-line.markdown
>>> index 152ae03..00fbae7 100644
>>> --- a/docs/misc/xen-command-line.markdown
>>> +++ b/docs/misc/xen-command-line.markdown
>>> @@ -1305,6 +1305,13 @@ The optional `keep` parameter causes Xen to continue using the vga
>>>  console even after dom0 has been started.  The default behaviour is to
>>>  relinquish control to dom0.
>>>  
>>> +### vmfunc (Intel)
>>> +> `= <boolean>`
>>> +
>>> +> Default: `true`
>>> +
>>> +Use VMFUNC and #VE support if available.
>>> +
>>>  ### vpid (Intel)
>>>  > `= <boolean>`
>>>  
>>> diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c
>>> index 9d8033e..4274e92 100644
>>> --- a/xen/arch/x86/hvm/vmx/vmcs.c
>>> +++ b/xen/arch/x86/hvm/vmx/vmcs.c
>>> @@ -50,6 +50,9 @@ boolean_param("unrestricted_guest", opt_unrestricted_guest_enabled);
>>>  static bool_t __read_mostly opt_apicv_enabled = 1;
>>>  boolean_param("apicv", opt_apicv_enabled);
>>>  
>>> +static bool_t __read_mostly opt_vmfunc_enabled = 1;
>>> +boolean_param("vmfunc", opt_vmfunc_enabled);
>> Please can experimental features be off by default.  (I am specifically
>> looking to avoid the issues we had with apicv getting into stable
>> releases despite reliably causing problems for migration).
>>
>> I suspect you will have many interested testers for this featureset, and
>> it is fine to patch the default later when the feature gets declared stable.
>>
>> I also wonder whether it might be better to have a "vmx=" command line
>> parameter with "vmfunc" as a subopt, to save gaining an ever increasing
>> set of related top level parameters?
>>
>> Other than this, the content of the rest of the patch appears fine.
>>
> I definitely can change the default to off, but I don't think it will
> have the effect you're expecting.
>
> This patch simply determines whether the hardware supports enabling
> VMFUNC and #VE, but does not enable them. If a domain enters
> alternate p2m mode through the relevant hypercall, at that point
> VMFUNC will be enabled for vcpu's in that domain; and if a vcpu in
> that domain subsequently registers itself to receive #VE through
> another hypercall, #VE will be enabled for that vcpu. Since both
> features are emulated if the hardware doesn't support them, changing
> the default to off will simply force emulation.

Now you mention this, what feature flag should a VM look for to indicate
the availability of vmfunc?

Looking at the manual, it would appear that guest software's only method
of detecting the absence of support is to attempt the instruction can
catch a #UD.  (I also observe that vmfunc 0 has no cpl0 requirements as
described by its pseudocode.)

One way or another the domain needs something akin to a feature flag. 
While I am loathe to suggest it, I think you need two hvm params to
control this.

One HVM param should probably match the vm-function controls, and
identifies which functions are permitted for use, independent of
hardware support vs emulation.  A missing bit here will cause emulated
attempts to fail with #UD.

A second hvmparam should identify the altp2m mode, as one of {off,
identity, unrestricted}

This allows the host admin quite fine grain control over the options
available including absolutely nothing, out-of-guest-only altp2m,
identity altp2m which plays nicely with most other Xen features, or the
full set.  By explicitly choosing the full set, the host admin has to
take a conscious choice to be incompatible with features such as
passthrough and migration.

~Andrew

  reply	other threads:[~2015-01-14 14:38 UTC|newest]

Thread overview: 135+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-09 21:26 [PATCH 00/11] Alternate p2m: support multiple copies of host p2m Ed White
2015-01-09 21:26 ` [PATCH 01/11] VMX: VMFUNC and #VE definitions and detection Ed White
2015-01-12 13:06   ` Andrew Cooper
2015-01-13 18:50     ` Ed White
2015-01-14 14:38       ` Andrew Cooper [this message]
2015-01-09 21:26 ` [PATCH 02/11] VMX: implement suppress #VE Ed White
2015-01-12 16:43   ` Andrew Cooper
2015-01-12 17:45     ` Ed White
2015-01-13 18:36       ` Ed White
2015-01-15 16:25   ` Tim Deegan
2015-01-15 18:46     ` Ed White
2015-01-16 17:22       ` Tim Deegan
2015-03-25 17:30       ` Ed White
2015-03-26 10:15         ` Tim Deegan
2015-01-09 21:26 ` [PATCH 03/11] x86/HVM: Hardware alternate p2m support detection Ed White
2015-01-12 17:08   ` Andrew Cooper
2015-01-12 17:46     ` Ed White
2015-01-15 16:32   ` Tim Deegan
2015-01-09 21:26 ` [PATCH 04/11] x86/MM: Improve p2m type checks Ed White
2015-01-12 17:48   ` Andrew Cooper
2015-01-13 19:39     ` Ed White
2015-01-15 16:36   ` Tim Deegan
2015-01-09 21:26 ` [PATCH 05/11] x86/altp2m: basic data structures and support routines Ed White
2015-01-13 11:28   ` Andrew Cooper
2015-01-13 19:49     ` Ed White
2015-03-25 20:59       ` Ed White
2015-03-26 10:48         ` Tim Deegan
2015-03-26 18:00           ` Ed White
2015-01-15 16:48   ` Tim Deegan
2015-01-15 16:53     ` Jan Beulich
2015-01-15 18:49       ` Ed White
2015-01-16  7:37         ` Jan Beulich
2015-01-16 17:23         ` Tim Deegan
2015-01-09 21:26 ` [PATCH 06/11] VMX/altp2m: add code to support EPTP switching and #VE Ed White
2015-01-13 11:58   ` Andrew Cooper
2015-01-15 16:56   ` Tim Deegan
2015-01-15 18:55     ` Ed White
2015-01-16 17:50       ` Tim Deegan
2015-01-16 17:57         ` Ed White
2015-01-09 21:26 ` [PATCH 07/11] x86/altp2m: introduce p2m_ram_rw_ve type Ed White
2015-01-15 17:03   ` Tim Deegan
2015-01-15 20:38     ` Ed White
2015-01-16  8:20       ` Jan Beulich
2015-01-16 17:14         ` Ed White
2015-01-19  8:49           ` Jan Beulich
2015-01-19 19:53             ` Ed White
2015-01-16 17:52       ` Tim Deegan
2015-01-16 18:35         ` Ed White
2015-01-17  9:37           ` Tim Deegan
2015-01-09 21:26 ` [PATCH 08/11] x86/altp2m: add remaining support routines Ed White
2015-01-15 17:25   ` Tim Deegan
2015-01-15 20:57     ` Ed White
2015-01-16 18:04       ` Tim Deegan
2015-01-15 17:33   ` Tim Deegan
2015-01-15 21:00     ` Ed White
2015-01-16  8:24       ` Jan Beulich
2015-01-16 17:17         ` Ed White
2015-01-19  8:52           ` Jan Beulich
2015-01-16 18:09       ` Tim Deegan
2015-01-09 21:26 ` [PATCH 09/11] x86/altp2m: define and implement alternate p2m HVMOP types Ed White
2015-01-15 17:09   ` Tim Deegan
2015-01-15 20:43     ` Ed White
2015-01-16 17:57       ` Tim Deegan
2015-01-09 21:26 ` [PATCH 10/11] x86/altp2m: fix log-dirty handling Ed White
2015-01-15 17:20   ` Tim Deegan
2015-01-15 20:49     ` Ed White
2015-01-16 17:59       ` Tim Deegan
2015-01-09 21:26 ` [PATCH 11/11] x86/altp2m: alternate p2m memory events Ed White
2015-01-09 22:06 ` [PATCH 00/11] Alternate p2m: support multiple copies of host p2m Andrew Cooper
2015-01-09 22:21   ` Ed White
2015-01-09 22:41     ` Andrew Cooper
2015-01-09 23:04       ` Ed White
2015-01-12 10:00         ` Jan Beulich
2015-01-12 17:36           ` Ed White
2015-01-13  8:56             ` Jan Beulich
2015-01-13 11:28               ` Ian Jackson
2015-01-13 17:42               ` Ed White
2015-01-12 12:17 ` Ian Jackson
2015-01-12 17:39   ` Ed White
2015-01-12 17:43     ` Ian Jackson
2015-01-12 17:50       ` Ed White
2015-01-12 18:00         ` Ian Jackson
2015-01-12 18:31           ` Ed White
2015-01-13 10:21             ` Tamas K Lengyel
2015-01-13 18:25               ` Ed White
2015-01-13 11:16             ` Ian Jackson
2015-01-12 17:51       ` Andrew Cooper
2015-01-13 19:01 ` Andrew Cooper
2015-01-13 20:02   ` Ed White
2015-01-13 20:45     ` Andrew Cooper
2015-01-13 21:30       ` Ed White
2015-01-14  7:04         ` Jan Beulich
2015-01-14 10:31           ` Tamas K Lengyel
2015-01-14 11:09             ` Jan Beulich
2015-01-14 11:28               ` Tamas K Lengyel
2015-01-14 17:35                 ` Ed White
2015-01-15  8:16                   ` Jan Beulich
2015-01-15 17:28                     ` Ed White
2015-01-15 17:45                       ` Tim Deegan
2015-01-15 18:44                         ` Ed White
2015-03-04 23:06                           ` Tamas K Lengyel
2015-03-04 23:41                             ` Ed White
2015-03-05 10:51                               ` Tamas K Lengyel
2015-03-13 17:38                                 ` Ed White
2015-03-05 10:36                             ` Tim Deegan
2015-03-05 10:58                               ` Tamas K Lengyel
2015-03-05 11:13                                 ` Tim Deegan
2015-01-16  7:35                       ` Jan Beulich
2015-01-16 16:54                         ` Ed White
2015-01-15 10:39                   ` Tamas K Lengyel
2015-01-15 17:31                     ` Ed White
2015-01-16 10:43                       ` Tamas K Lengyel
2015-01-16 17:21                         ` Ed White
2015-03-05 13:45       ` Egger, Christoph
2015-01-14  7:01     ` Jan Beulich
2015-01-15 16:15 ` Tim Deegan
2015-01-15 18:23   ` Ed White
2015-01-16  8:12     ` Jan Beulich
2015-01-16 17:01       ` Ed White
2015-01-16 18:33     ` Tim Deegan
2015-01-16 20:32       ` Ed White
2015-01-17  9:34         ` Tim Deegan
2015-01-16 21:43       ` Ed White
2015-01-17  9:49         ` Tim Deegan
2015-01-19 19:35           ` Ed White
2015-01-17  9:31       ` Tim Deegan
2015-01-17 15:01         ` Andrew Cooper
2015-01-19 12:17           ` Tim Deegan
2015-01-19 21:54             ` Ed White
2015-01-20  8:47               ` Jan Beulich
2015-01-20 18:43                 ` Ed White
2015-01-22 15:42               ` Tim Deegan
2015-01-22 19:15                 ` Ed White
2015-03-25 17:41     ` Ed White
2015-03-26 10:40       ` Tim Deegan

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=54B67F50.2000009@citrix.com \
    --to=andrew.cooper3@citrix.com \
    --cc=edmund.h.white@intel.com \
    --cc=ian.campbell@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jbeulich@suse.com \
    --cc=keir@xen.org \
    --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.