All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@suse.com>
To: Mukesh Rathor <mukesh.rathor@oracle.com>
Cc: xen-devel <xen-devel@lists.xen.org>
Subject: Re: [PATCH 09/18] PVH xen: Support privileged op emulation for PVH
Date: Fri, 28 Jun 2013 10:20:47 +0100	[thread overview]
Message-ID: <51CD718F02000078000E17B3@nat28.tlf.novell.com> (raw)
In-Reply-To: <20130627164339.476d2ef3@mantra.us.oracle.com>

>>> On 28.06.13 at 01:43, Mukesh Rathor <mukesh.rathor@oracle.com> wrote:
> On Thu, 27 Jun 2013 08:22:42 +0100
> "Jan Beulich" <JBeulich@suse.com> wrote:
> 
>> >>> On 27.06.13 at 00:41, Mukesh Rathor <mukesh.rathor@oracle.com>
>> >>> wrote:
>> > On Tue, 25 Jun 2013 10:36:41 +0100
>> > "Jan Beulich" <JBeulich@suse.com> wrote:
>> > 
>> >> >>> On 25.06.13 at 02:01, Mukesh Rathor <mukesh.rathor@oracle.com>
>> >> > + * in save_segments(), current has been updated to next, and no
>> >> > longer pointing
>> >> > + * to the PVH.
>> >> > + */
>> >> 
>> >> This is bogus - you shouldn't need any of the {save,load}_segment()
>> >> machinery for PVH, and hence this is not a valid reason for adding
>> >> a vcpu parameter here.
>> > 
>> > Ok, lets revisit this again since it's been few months already: 
>> > 
>> > read_segment_register() is called from few places for PVH, and for
>> > PVH it needs to read the value from regs. So it needs to be
>> > modified to check for PVH. Originally, I had started with checking
>> > for is_pvh_vcpu(current), but that failed quickly because of the
>> > context switch call chain:
>> > 
>> > __context_switch -> ctxt_switch_from --> save_segments ->
>> > read_segment_register
>> > 
>> > In this path, going from PV to PVH, the intention is to save
>> > segments for PV, and since current has already been updated to
>> > point to PVH, the check for current is not correct. Hence, the need
>> > for vcpu parameter. I will enhance my comments in the macro prolog
>> > in the next patch version.
>> 
>> No. I already said that {save,load}_segments() ought to be
>> skipped for PVH, as what it does is already done by VMRESUME/
>> #VMEXIT. And the function is being passed a vCPU pointer, so
>> simply making the single call to save_segments() conditional on
>> is_pv_vcpu(), and converting the !is_hvm_vcpu() around the
>> call to load_LDT() and load_segments() to is_pv_vcpu() (provided
>> the LDT handling isn't needed on the same basis) should eliminate
>> that need.
> 
> They are *not* being called for PVH, where do you see that? Are you 
> looking at the right patches? They are called for PV. Again, going from 
> PV to PVH in context switch, current will be pointing to PVH and not 
> PV when save_segments calls the macro to save segments for PV (not PVH).
> Hence, the VCPU is passed to save_segments, and we need to pass to our
> famed macro above!

But I'm not arguing that the vCPU pointer shouldn't be passed to
this - I'm trying to tell you that having this macro read the selector
values from struct cpu_user_regs in the PVH case is wrong. It was
you continuing to point to the context switch path, making me
believe that so far you don't properly suppress the uses of
{save,load}_segments() for PVH.

>> Furthermore - the reading from struct cpu_user_regs continues
>> to be bogus (read: at least a latent bug) as long as you don't
>> always save the selector registers, which you now validly don't
>> do anymore. 
> 
> Right,  because you made me move it to the path that calls the macro.
> So, for the path that the macro is called, the selectors would have
> been read. So, whats the latent bug?

The problem is that you think that now and forever this macro
will only be used from the MMIO emulation path (or some such, in
any case - just from one very specific path). This is an assumption
you may make while in an early development phase, but not in
patches that you intend to be committed: Someone adding another
use of the macro is _very_ unlikely to go and check what contraints
apply to that use. The macro has to work in the general case.

>>You should be consulting the VMCS instead, i.e. go
>> through hvm_get_segment_register().
>> Whether a more lightweight variant reading just the selector is
>> on order I can't immediately tell.
> 
> Well, that would require v == current always, that is not guaranteed
> in the macro path. What exactly is the problem the way it is?

I think you need to view this slightly differently: At present, the
macro reads the live register values. Which means even if
v != current, we're still in a state where the hardware has the
correct values. This ought to apply in exactly the same way to
PVH - the current VMCS should still be holding the right values.

Furthermore, the case is relatively easy to determine: Instead of
only looking at current, you could also take per_cpu(curr_vcpu, )
into account.

And finally - vmx_get_segment_register() already takes a vCPU
pointer, and uses vmx_vmcs_{enter,exit}(), so there's no
dependency of that function to run in the context of the subject
vCPU. vmx_vmcs_enter() itself checks whether it's running on
the subject vCPU though, so that may need inspection/tweaking
if the context switch path would really ever get you into that
macro (I doubt that it will though, and making assumptions about
the context switch path [not] doing certain things _is_ valid, as
opposed to making such assumptions on arbitrary code).

Jan

  reply	other threads:[~2013-06-28  9:20 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 [this message]
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
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=51CD718F02000078000E17B3@nat28.tlf.novell.com \
    --to=jbeulich@suse.com \
    --cc=mukesh.rathor@oracle.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 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.