xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Mukesh Rathor <mukesh.rathor@oracle.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: xen-devel <xen-devel@lists.xen.org>
Subject: Re: [PATCH 18/18] PVH xen: introduce vmx_pvh.c
Date: Thu, 27 Jun 2013 18:28:04 -0700	[thread overview]
Message-ID: <20130627182804.096b59bf@mantra.us.oracle.com> (raw)
In-Reply-To: <51CC08CE02000078000E109B@nat28.tlf.novell.com>

On Thu, 27 Jun 2013 08:41:34 +0100
"Jan Beulich" <JBeulich@suse.com> wrote:

> >>> On 27.06.13 at 05:30, Mukesh Rathor <mukesh.rathor@oracle.com>
> >>> wrote:
> > On Tue, 25 Jun 2013 11:49:57 +0100 "Jan Beulich"
> > <JBeulich@suse.com> wrote:
> >> >>> On 25.06.13 at 02:01, Mukesh Rathor <mukesh.rathor@oracle.com>
> >> >>> wrote:
> >> > +static void read_vmcs_selectors(struct cpu_user_regs *regs)
> >> > +{
> >> > +    regs->ss = __vmread(GUEST_SS_SELECTOR);
> >> > +    regs->ds = __vmread(GUEST_DS_SELECTOR);
> >> > +    regs->es = __vmread(GUEST_ES_SELECTOR);
> >> > +    regs->gs = __vmread(GUEST_GS_SELECTOR);
> >> > +    regs->fs = __vmread(GUEST_FS_SELECTOR);
> >> > +}
> >> 
> >> By only conditionally reading the selector registers, how do you
> >> guarantee that read_segment_register() would always read
> >> valid values? I think that macro needs to not look at "regs->?s"
> >> at all...
> > 
> > read_segment_register() gets called for PVH only for 
> > EXIT_REASON_IO_INSTRUCTION
> > intercept. In this path, we call read all selectors before calling
> > emulate_privileged_op. If someone changes code, they'd have to make
> > sure of that. I can add more comments there, or go back to always
> > read all selectors
> > upon vmexit, but you already made me change that.
> 
> As per my earlier reply, I think this is wrong. Both from a
> conceptual POV and considering that new users of
> read_segment_register() may appear in the future. You
> ought to read the VMCS field in read_segment_register() if
> you want to keep avoiding the saving of the selector fields
> (which I strongly recommend).

I fail to see why saving of selector fields is any worse. New users
of read_segment_register would have to make sure that reading of selector
on demand happens always on current==PVH in the new path. To me that is no 
different than cheking to make sure the selectors are saved on the new call 
path. 

> >> > +static int vmxit_invalid_op(struct cpu_user_regs *regs)
> >> > +{
> >> > +    if ( guest_kernel_mode(current, regs)
> >> > || !emulate_forced_invalid_op(regs) )
> >> 
> >> Did you perhaps mean !guest_kernel_mode()?
> > 
> > No, pvh kernel has been changed to just do cpuid natively.
> > Hopefully, over time, looong time, emulate_forced_invalid_op can
> > just be removed.
> 
> While I don't disagree with a decision like this, the way you present
> this still makes me want to comment: What you do or don't do in
> Linux doesn't matter. What matters is a clear ABI description - what
> are the requirements to a PVH kernel implementation, and in
> particular what are the differences to a PV one? In the case here, a
> requirement would now be to _not_ use the PV form of CPUID (or
> more generally any operation that would result in #UD with the
> expectation that the hypervisor emulates the instruction).
> 
> I don't think I've seen such a formalized list of differences, which
> would make it somewhat difficult for someone else to convert their
> favorite OS to support PVH too.

Correct, I don't think we are at a point where we can create such a
list. It's been six months almost that the patches have been out, and 
right now I'd like to focus on getting them in.

> >> > +          ccpu, exit_reason, regs->rip, regs->rsp, regs->rflags,
> >> > +          __vmread(GUEST_CR0));
> >> > +
> >> > +    /* For guest_kernel_mode which is called from most places
> >> > below. */
> >> > +    regs->cs = __vmread(GUEST_CS_SELECTOR);
> >> 
> >> Which raises the question of whether your uses of
> >> guest_kernel_mode() are appropriate in the first place: Before this
> >> series there's no use at all under xen/arch/x86/hvm/.
> > 
> > HVM should do this for debug intercepts, otherwise it is wrongly 
> > intercepting user level debuggers like gdb.
> 
> And why would intercepting kernel debuggers like kdb or kgdb be
> correct?

The last I checked there were no kernel debuggers supported in domU, so
I wrote gdbsx. If that has changed, then there's some work to do for
gdbsx for both hvm and pvh.

> > HVM can also use this check for emulating forced invalid op for only
> > user levels. Since there's a cpuid intercept, and we are trying to
> > reduce pv-ops, this seems plausible.
> 
> HVM isn't supposed to be using PV CPUID. Ideally the same would
> be true for PVH (i.e. it may be better to make it look to user space
> like HVM, but I'm not sure if there aren't other collisions).

Correct, PVH does not use PV CPUID in PVH kernel. Initially, it was not
supported at all, but you convinced me to support from user level.

thanks
Mukesh

  reply	other threads:[~2013-06-28  1:28 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-25  0:01 [PATCH 00/18][V7]: PVH xen: Phase I, Version 7 patches Mukesh Rathor
2013-06-25  0:01 ` [PATCH 01/18] PVH xen: turn gdb_frames/gdt_ents into union Mukesh Rathor
2013-06-25  8:40   ` Jan Beulich
2013-06-25  0:01 ` [PATCH 02/18] PVH xen: add params to read_segment_register Mukesh Rathor
2013-06-25  0:01 ` [PATCH 03/18] PVH xen: Move e820 fields out of pv_domain struct Mukesh Rathor
2013-06-25  8:44   ` Jan Beulich
2013-06-25  0:01 ` [PATCH 04/18] PVH xen: vmx related preparatory changes for PVH Mukesh Rathor
2013-06-25  8:48   ` Jan Beulich
2013-06-25  0:01 ` [PATCH 05/18] PVH xen: hvm/vmcs " Mukesh Rathor
2013-06-25  8:51   ` Jan Beulich
2013-06-25  0:01 ` [PATCH 06/18] PVH xen: Introduce PVH guest type and some basic changes Mukesh Rathor
2013-06-25  9:01   ` Jan Beulich
2013-06-26  1:14     ` Mukesh Rathor
2013-06-26  8:18       ` Jan Beulich
2013-06-25  0:01 ` [PATCH 07/18] PVH xen: domain create, schedular related code changes Mukesh Rathor
2013-06-25  9:13   ` Jan Beulich
2013-06-25  0:01 ` [PATCH 08/18] PVH xen: support invalid op emulation for PVH Mukesh Rathor
2013-06-25  9:16   ` Jan Beulich
2013-06-25  0:01 ` [PATCH 09/18] PVH xen: Support privileged " Mukesh Rathor
2013-06-25  9:36   ` Jan Beulich
2013-06-26 22:41     ` Mukesh Rathor
2013-06-27  7:22       ` Jan Beulich
2013-06-27 23:43         ` Mukesh Rathor
2013-06-28  9:20           ` Jan Beulich
2013-07-03  1:38             ` Mukesh Rathor
2013-07-03 10:21               ` Jan Beulich
2013-07-04  2:00                 ` Mukesh Rathor
2013-07-04  8:04                   ` Jan Beulich
2013-07-06  1:43                     ` Mukesh Rathor
2013-06-25  0:01 ` [PATCH 10/18] PVH xen: interrupt/event-channel delivery to PVH Mukesh Rathor
2013-06-25 14:29   ` Konrad Rzeszutek Wilk
2013-07-12  0:29     ` Mukesh Rathor
2013-06-25  0:01 ` [PATCH 11/18] PVH xen: additional changes to support PVH guest creation and execution Mukesh Rathor
2013-06-25  0:01 ` [PATCH 12/18] PVH xen: mapcache and show registers Mukesh Rathor
2013-06-25  9:45   ` Jan Beulich
2013-06-25  0:01 ` [PATCH 13/18] PVH xen: mtrr, tsc, grant changes Mukesh Rathor
2013-06-25 14:30   ` Konrad Rzeszutek Wilk
2013-06-25  0:01 ` [PATCH 14/18] PVH xen: Checks, asserts, and limitations for PVH Mukesh Rathor
2013-06-25  9:54   ` Jan Beulich
2013-06-27  2:43     ` Mukesh Rathor
2013-06-27  7:25       ` Jan Beulich
2013-06-25  0:01 ` [PATCH 15/18] PVH xen: add hypercall support " Mukesh Rathor
2013-06-25 10:12   ` Jan Beulich
2013-06-27  3:09     ` Mukesh Rathor
2013-06-27  7:29       ` Jan Beulich
2013-06-25  0:01 ` [PATCH 16/18] PVH xen: vmcs related changes Mukesh Rathor
2013-06-25 10:17   ` Jan Beulich
2013-06-25  0:01 ` [PATCH 17/18] PVH xen: HVM support of PVH guest creation/destruction Mukesh Rathor
2013-06-25  0:01 ` [PATCH 18/18] PVH xen: introduce vmx_pvh.c Mukesh Rathor
2013-06-25 10:49   ` Jan Beulich
2013-06-27  3:30     ` Mukesh Rathor
2013-06-27  7:41       ` Jan Beulich
2013-06-28  1:28         ` Mukesh Rathor [this message]
2013-06-28  9:26           ` Jan Beulich
2013-06-28  1:35     ` Mukesh Rathor
2013-06-28  9:31       ` Jan Beulich
2013-06-29  3:03         ` Mukesh Rathor
2013-07-01  8:49           ` Jan Beulich
2013-07-06  1:31         ` Mukesh Rathor
2013-07-08  8:31           ` Jan Beulich
2013-07-08 23:09             ` Mukesh Rathor
2013-07-09  0:01               ` Mukesh Rathor
2013-07-09  7:31                 ` Jan Beulich
2013-07-10  0:33                   ` Mukesh Rathor
2013-07-10  7:20                     ` Jan Beulich
2013-06-28  2:28     ` Mukesh Rathor
2013-06-28  9:44       ` Jan Beulich
2013-06-29  3:04         ` Mukesh Rathor
2013-07-01  8:54           ` Jan Beulich
2013-07-02  2:01             ` Mukesh Rathor
2013-07-03  1:40         ` Mukesh Rathor
2013-07-03 10:25           ` Jan Beulich
2013-07-04  2:02             ` Mukesh Rathor
2013-07-04  8:07               ` Jan Beulich
2013-07-16  2:00         ` Mukesh Rathor
2013-07-16  6:50           ` Jan Beulich
2013-07-17  0:47             ` Mukesh Rathor
2013-07-17  6:36               ` Jan Beulich
2013-06-25 10:17 ` [PATCH 00/18][V7]: PVH xen: Phase I, Version 7 patches George Dunlap
2013-06-26  0:04   ` Mukesh Rathor

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=20130627182804.096b59bf@mantra.us.oracle.com \
    --to=mukesh.rathor@oracle.com \
    --cc=JBeulich@suse.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 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).