From: George Dunlap <george.dunlap@eu.citrix.com>
To: Tim Deegan <tim@xen.org>
Cc: xen-devel@lists.xen.org, "Keir Fraser" <keir@xen.org>,
"Jan Beulich" <jbeulich@suse.com>,
"Roger Pau Monné" <roger.pau@citrix.com>
Subject: Re: [PATCH RFC v13 06/20] pvh: vmx-specific changes
Date: Mon, 7 Oct 2013 17:20:00 +0100 [thread overview]
Message-ID: <5252DF30.5040809@eu.citrix.com> (raw)
In-Reply-To: <20131007161240.GF97760@ocelot.phlegethon.org>
On 07/10/13 17:12, Tim Deegan wrote:
> At 17:06 +0100 on 07 Oct (1381165615), George Dunlap wrote:
>> On 07/10/13 16:55, Roger Pau Monné wrote:
>>> On 23/09/13 18:49, George Dunlap wrote:
>>>> @@ -1028,12 +1129,28 @@ static int construct_vmcs(struct vcpu *v)
>>>> | (1U << TRAP_no_device);
>>>> vmx_update_exception_bitmap(v);
>>>>
>>>> + /* In HVM domains, this happens on the realmode->paging
>>>> + * transition. Since PVH never goes through this transition, we
>>>> + * need to do it at start-of-day. */
>>>> + if ( is_pvh_domain(d) )
>>>> + vmx_update_debug_state(v);
>>>> +
>>>> v->arch.hvm_vcpu.guest_cr[0] = X86_CR0_PE | X86_CR0_ET;
>>>> +
>>>> + /* PVH domains always start in paging mode */
>>>> + if ( is_pvh_domain(d) )
>>>> + v->arch.hvm_vcpu.guest_cr[0] |= X86_CR0_PG | X86_CR0_NE |
>>>> X86_CR0_WP;
>>>> +
>>>> hvm_update_guest_cr(v, 0);
>>>>
>>>> - v->arch.hvm_vcpu.guest_cr[4] = 0;
>>>> + v->arch.hvm_vcpu.guest_cr[4] = is_pvh_domain(d) ?
>>>> + real_cr4_to_pv_guest_cr4(mmu_cr4_features)
>>> Here we need to mask the bits in CR4 that the guest isn't allowed to
>>> set. Right now Xen is setting the VMXE bit by default, which the guest
>>> is not able to modify, so if the guests tries to update CR4 based on the
>>> previous value Xen is going to complain:
>>>
>>> + real_cr4_to_pv_guest_cr4(mmu_cr4_features) &
>>> + ~HVM_CR4_GUEST_RESERVED_BITS(v)
>> Thanks for testing that -- I'll include it in the next spin-up.
> <harping on> This is the sort of thing that would be easier if PVH guests
> were just HVM ones with extra hypercalls. <harping off>
I'm not sure this would have helped -- the issue here is that we start
the guest with long mode and paging enabled, which I think is something
we want to do (rather than having to start in 16-bit mode and level-up
through 32-bit to 64-bit mode). To do that, Mukesh very reasonably
began by setting the guest cr4 to what a PV guest would see of the cr4,
and for him it worked -- apparently because his PVH Linux doesn't touch
cr4. It's possible that his version of the cr4 exit handler tolerated
the VMXE bit being set, in which case it was the reworking I did that
introduced the bug. (Although that demonstrates why having duplicate
code is a really bad idea.)
-George
next prev parent reply other threads:[~2013-10-07 16:20 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 [this message]
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
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=5252DF30.5040809@eu.citrix.com \
--to=george.dunlap@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=keir@xen.org \
--cc=roger.pau@citrix.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).