All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mukesh Rathor <mukesh.rathor@oracle.com>
To: George Dunlap <dunlapg@umich.edu>
Cc: "xen-devel@lists.xensource.com" <Xen-devel@lists.xensource.com>,
	"keir.xen@gmail.com" <keir.xen@gmail.com>
Subject: Re: [V10 PATCH 23/23] PVH xen: introduce vmexit handler for PVH
Date: Wed, 21 Aug 2013 18:44:26 -0700	[thread overview]
Message-ID: <20130821184426.08629cdb@mantra.us.oracle.com> (raw)
In-Reply-To: <CAFLBxZYqY29M44S4wmaFbOB3ExbPu7D046D1qdGkr4LztMuLEQ@mail.gmail.com>

On Mon, 12 Aug 2013 17:00:36 +0100
George Dunlap <dunlapg@umich.edu> wrote:

> On Wed, Jul 24, 2013 at 2:59 AM, Mukesh Rathor
....
> > Changes in V8:
> >   - Mainly, don't read selectors on vmexit. The macros now come to
> > VMCS to read selectors on demand.
> 
> Overall I have the same comment here as I had for the VMCS patch: the
> code looks 98% identical.  Substantial differences seem to be:
>  - emulation of privileged ops
>  - cpuid
>  - cr4 handling
> 
> It seems like it would be much better to share the codepath and just
> put "is_pvh_domain()" in the places where it needs to be different.

Depends, and again could be argued either way. The intercepts are so few
for PVH that having a lightweight external handler makes it much easier
to follow and debug. Also, PVH doesn't carry lot of the baggage of HVM,
given we require HAP. Other maintainers I asked had also suggested making
it a separate function.

> > ((uint64_t)regs->edx << 32); +
> > +    dbgp1("PVH: msr write:0x%lx. eax:0x%lx edx:0x%lx\n", regs->ecx,
> > +          regs->eax, regs->edx);
> > +
> > +    if ( hvm_msr_write_intercept(regs->ecx, msr_content) ==
> > X86EMUL_OKAY )
> > +    {
> > +        vmx_update_guest_eip();
> > +        return 0;
> > +    }
> > +    return 1;
> > +}
> > +
> > +static int vmxit_debug(struct cpu_user_regs *regs)
> > +{
> > +    struct vcpu *vp = current;
> > +    unsigned long exit_qualification =
> > __vmread(EXIT_QUALIFICATION); +
> > +    write_debugreg(6, exit_qualification | 0xffff0ff0);
> > +
> > +    /* gdbsx or another debugger. Never pause dom0. */
> > +    if ( vp->domain->domain_id != 0 &&
> > vp->domain->debugger_attached )
> > +        domain_pause_for_debugger();
> > +    else
> > +        hvm_inject_hw_exception(TRAP_debug,
> > HVM_DELIVER_NO_ERROR_CODE);
> 
> Hmm, strangely enough, the HVM handler for this doesn't seem to
> deliver this exception -- or if it does, I can't quite figure out
> where.  What you have here seems like the correct thing to do, but I
> would be interested in knowing the reason for the HVM behavior.

HVM doesn't intercept this trap unless MTF is not available. We just
keep things simple for PVH. Incase of MTF, we just won't get here.

..
> > +/* Just like HVM, PVH should be using "cpuid" from the kernel
> > mode. */ +static int vmxit_invalid_op(struct cpu_user_regs *regs)
> > +{
> > +    if ( guest_kernel_mode(current, regs)
> > || !emulate_forced_invalid_op(regs) )
> > +        hvm_inject_hw_exception(TRAP_invalid_op,
> > HVM_DELIVER_NO_ERROR_CODE); +
> > +    return 0;
> > +}
> > +
> > +/* Returns: rc == 0: handled the exception. */
> > +static int vmxit_exception(struct cpu_user_regs *regs)
> > +{
> > +    int vector = (__vmread(VM_EXIT_INTR_INFO)) &
> > INTR_INFO_VECTOR_MASK;
> > +    int rc = -ENOSYS;
> 
> The vmx code here has some handler for faults that happen during a
> guest IRET -- is that an issue for PVH?

Hmmm... possibly! But reading the SDMs on this is making my head spin. 
Lets not hold the series while I investigate this.

> > +            return -EPERM;
> > +        }
> > +        /* TS going from 1 to 0 */
> > +        if ( (old_cr0 & X86_CR0_TS) && ((new_cr0 & X86_CR0_TS) ==
> > 0) )
> > +            vmx_fpu_enter(vp);
> > +
> > +        vp->arch.hvm_vcpu.hw_cr[0] = vp->arch.hvm_vcpu.guest_cr[0]
> > = new_cr0;
> > +        __vmwrite(GUEST_CR0, new_cr0);
> > +        __vmwrite(CR0_READ_SHADOW, new_cr0);
> > +    }
> > +    else
> > +        *regp = __vmread(GUEST_CR0);
> 
> The HVM code here just uses hvm_vcpu.guest_cr[] -- is there any reason
> not to do the same here?  And in any case, shouldn't it be
> CR0_READ_SHADOW?

They are all the same for PVH.

> > +        if ( !(new & X86_CR4_PAE) && hvm_long_mode_enabled(vp) )
> > +        {
> > +            printk(XENLOG_G_WARNING "Guest cleared CR4.PAE while "
> > +                   "EFER.LMA is set");
> > +            hvm_inject_hw_exception(TRAP_gp_fault, 0);
> > +            return 0;
> > +        }
> > +
> > +        vp->arch.hvm_vcpu.guest_cr[4] = new;
> > +
> > +        if ( (old_val ^ new) & (X86_CR4_PSE | X86_CR4_PGE |
> > X86_CR4_PAE) )
> > +            vpid_sync_all();
> 
> Is it actually allowed for a PVH guest to change modes like this?

The 64bit guest should only change the PGE. 
 
> I realize that at the moment you're only supporting HAP, but that may
> not always be true; would it make sense to call
> paging_update_paging_modes() here instead?

Lets do it in steps. When we support other modes, we can always
update this. Right now, we dont' really keep track of guest CR3 because
we require HAP. Wanting PVH without HAP in future seems extermely low
probability to me at this time. We have lot more work to do for PVH,
like migration etc.. and keeping things simple will only help us IMHO.

> This seems to be a weird way to do things, but I see this is what they
> do in vmx_vmexit_handler() as well, so I guess it makes sense to
> follow suit.
> 
> What about EXIT_REASON_TRIPLE_FAULT?

Would result in domain crash (just like HVM).


thanks
mukesh

  parent reply	other threads:[~2013-08-22  1:44 UTC|newest]

Thread overview: 174+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-24  1:59 [V10 PATCH 00/23]PVH xen: Phase I, Version 10 patches Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 01/23] PVH xen: Add readme docs/misc/pvh-readme.txt Mukesh Rathor
2013-08-16 10:18   ` George Dunlap
2013-08-16 13:17     ` George Dunlap
2013-08-16 14:11       ` Konrad Rzeszutek Wilk
2013-08-16 21:39     ` Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 02/23] PVH xen: turn gdb_frames/gdt_ents into union Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 03/23] PVH xen: add params to read_segment_register Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 04/23] PVH xen: Move e820 fields out of pv_domain struct Mukesh Rathor
2013-07-24 11:29   ` Andrew Cooper
2013-07-24  1:59 ` [V10 PATCH 05/23] PVH xen: hvm related preparatory changes for PVH Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 06/23] PVH xen: vmx " Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 07/23] PVH xen: vmcs " Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 08/23] PVH xen: Introduce PVH guest type and some basic changes Mukesh Rathor
2013-08-06 11:29   ` George Dunlap
2013-08-06 11:47     ` Jan Beulich
2013-08-06 12:06       ` George Dunlap
2013-08-06 23:26         ` Mukesh Rathor
2013-08-07  7:14           ` Jan Beulich
2013-08-07  9:14           ` George Dunlap
2013-08-07 13:10             ` George Dunlap
2013-08-07 22:37               ` Mukesh Rathor
2013-08-08  8:57                 ` George Dunlap
2013-07-24  1:59 ` [V10 PATCH 09/23] PVH xen: introduce pvh_set_vcpu_info() and vmx_pvh_set_vcpu_info() Mukesh Rathor
2013-07-25 13:47   ` Tim Deegan
2013-07-26  0:58     ` Mukesh Rathor
2013-07-26 10:29       ` Tim Deegan
2013-08-05 11:08       ` Jan Beulich
2013-08-06  1:34         ` Mukesh Rathor
2013-08-07  1:53           ` Mukesh Rathor
2013-08-07  6:34             ` Jan Beulich
2013-08-07 10:01             ` Tim Deegan
2013-08-07 10:07               ` Ian Campbell
2013-08-08  1:27               ` Mukesh Rathor
2013-08-05 11:03   ` Jan Beulich
2013-08-05 11:10   ` Jan Beulich
2013-08-08  1:05     ` Mukesh Rathor
2013-08-08  6:56       ` Jan Beulich
2013-08-08 22:07         ` Mukesh Rathor
2013-08-09 23:41         ` Mukesh Rathor
2013-08-12  7:54           ` Jan Beulich
2013-08-12 10:24             ` Tim Deegan
2013-08-12 11:04               ` Jan Beulich
2013-08-12 11:53                 ` Tim Deegan
2013-08-12 13:24                   ` Jan Beulich
2013-08-13  0:28                     ` Mukesh Rathor
2013-08-13  0:27             ` Mukesh Rathor
2013-08-13 10:49               ` Jan Beulich
2013-08-14  2:21                 ` Mukesh Rathor
2013-08-12  9:00           ` Tim Deegan
2013-08-13  0:02             ` Mukesh Rathor
2013-08-13  8:51               ` Tim Deegan
2013-07-24  1:59 ` [V10 PATCH 10/23] PVH xen: domain create, context switch related code changes Mukesh Rathor
2013-07-25 14:01   ` Tim Deegan
2013-07-26  1:02     ` Mukesh Rathor
2013-08-05 11:16     ` Jan Beulich
2013-08-07 10:24   ` George Dunlap
2013-08-08  1:40     ` Mukesh Rathor
2013-08-08  7:29       ` Jan Beulich
2013-08-08  9:02         ` George Dunlap
2013-08-08  9:08           ` Jan Beulich
2013-08-09  0:12         ` Mukesh Rathor
2013-08-07 10:48   ` George Dunlap
2013-08-08  1:42     ` Mukesh Rathor
2013-08-08  9:14       ` George Dunlap
2013-08-16 15:32   ` George Dunlap
2013-08-16 16:11     ` Jan Beulich
2013-08-20  0:52       ` Mukesh Rathor
2013-08-20  9:29         ` George Dunlap
2013-08-22 23:24           ` Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 11/23] PVH xen: support invalid op emulation for PVH Mukesh Rathor
2013-08-07 11:29   ` George Dunlap
2013-08-08  1:49     ` Mukesh Rathor
2013-08-08  8:55       ` George Dunlap
2013-08-09  0:17         ` Mukesh Rathor
2013-08-10  2:13         ` Mukesh Rathor
2013-08-12  7:38           ` Jan Beulich
2013-08-14  1:13             ` Mukesh Rathor
2013-08-12  9:35           ` George Dunlap
2013-07-24  1:59 ` [V10 PATCH 12/23] PVH xen: Support privileged " Mukesh Rathor
2013-08-07 13:49   ` George Dunlap
2013-08-07 14:23     ` Jan Beulich
2013-08-07 14:47       ` George Dunlap
2013-08-08  1:59     ` Mukesh Rathor
2013-08-08  7:35       ` Jan Beulich
2013-08-08 14:21         ` George Dunlap
2013-08-08 14:18       ` George Dunlap
2013-08-08 14:36         ` George Dunlap
2013-08-09  1:32         ` Mukesh Rathor
2013-08-09  6:54           ` Jan Beulich
2013-08-09 18:10             ` Konrad Rzeszutek Wilk
2013-08-09 21:15               ` Keir Fraser
2013-08-12  9:43             ` George Dunlap
2013-07-24  1:59 ` [V10 PATCH 13/23] PVH xen: interrupt/event-channel delivery to PVH Mukesh Rathor
2013-08-07 15:37   ` George Dunlap
2013-08-08  2:05     ` Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 14/23] PVH xen: additional changes to support PVH guest creation and execution Mukesh Rathor
2013-08-07 15:50   ` George Dunlap
2013-08-08  8:21     ` Ian Campbell
2013-08-20 14:13   ` George Dunlap
2013-08-20 21:32     ` Mukesh Rathor
2013-08-21  8:37       ` George Dunlap
2013-08-22 23:27         ` Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 15/23] PVH xen: mapcache and show registers Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 16/23] PVH xen: mtrr, tsc, timers, grant changes Mukesh Rathor
2013-08-07 16:04   ` George Dunlap
2013-07-24  1:59 ` [V10 PATCH 17/23] PVH xen: Checks, asserts, and limitations for PVH Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 18/23] PVH xen: add hypercall support " Mukesh Rathor
2013-08-07 16:43   ` George Dunlap
2013-08-08  2:12     ` Mukesh Rathor
2013-08-08  7:41       ` Jan Beulich
2013-08-08  8:26         ` Ian Campbell
2013-08-09  0:55         ` Mukesh Rathor
2013-08-09  6:56           ` Jan Beulich
2013-08-08  9:20       ` George Dunlap
2013-08-08 10:18         ` Jan Beulich
2013-08-20 21:41         ` Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 19/23] PVH xen: vmcs related changes Mukesh Rathor
2013-08-09 10:25   ` George Dunlap
2013-08-10  0:23     ` Mukesh Rathor
2013-08-12  7:42       ` Jan Beulich
2013-08-12 10:15       ` George Dunlap
2013-08-12 10:17         ` George Dunlap
2013-08-12 11:22           ` George Dunlap
2013-08-12 11:25             ` George Dunlap
2013-08-12 13:53             ` Jan Beulich
2013-08-09 13:39   ` George Dunlap
2013-08-10  0:20     ` Mukesh Rathor
2013-08-19 16:00   ` George Dunlap
2013-08-19 16:03     ` George Dunlap
2013-08-19 22:38       ` Mukesh Rathor
2013-08-19 22:21     ` Mukesh Rathor
2013-08-20 14:27       ` George Dunlap
2013-08-20 22:48         ` Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 20/23] PVH xen: HVM support of PVH guest creation/destruction Mukesh Rathor
2013-07-24  1:59 ` [V10 PATCH 21/23] PVH xen: VMX " Mukesh Rathor
2013-08-05 11:25   ` Jan Beulich
2013-08-09 13:44   ` George Dunlap
2013-08-10  1:59     ` Mukesh Rathor
2013-08-12 10:23       ` George Dunlap
2013-07-24  1:59 ` [V10 PATCH 22/23] PVH xen: preparatory patch for the pvh vmexit handler patch Mukesh Rathor
2013-08-09 14:14   ` George Dunlap
2013-08-09 14:44     ` Konrad Rzeszutek Wilk
2013-08-09 14:47       ` George Dunlap
2013-07-24  1:59 ` [V10 PATCH 23/23] PVH xen: introduce vmexit handler for PVH Mukesh Rathor
2013-07-25 16:28   ` Tim Deegan
2013-07-26  2:30     ` Mukesh Rathor
2013-07-26 10:45       ` Tim Deegan
2013-08-07  0:37         ` Mukesh Rathor
2013-08-07  9:54           ` Tim Deegan
2013-08-15 15:51             ` George Dunlap
2013-08-15 16:37               ` Tim Deegan
2013-08-15 16:44                 ` George Dunlap
2013-08-05 11:37   ` Jan Beulich
2013-08-12 16:00   ` George Dunlap
2013-08-12 16:13     ` George Dunlap
2013-08-12 17:30     ` George Dunlap
2013-08-22  1:44     ` Mukesh Rathor [this message]
2013-08-22 23:22     ` Mukesh Rathor
2013-08-23  7:16       ` Jan Beulich
2013-08-23 22:51         ` Mukesh Rathor
2013-08-26  8:09           ` Jan Beulich
2013-08-12 16:21   ` George Dunlap
2013-08-22  1:46     ` Mukesh Rathor
2013-07-24  6:21 ` [V10 PATCH 00/23]PVH xen: Phase I, Version 10 patches Keir Fraser
2013-07-24 12:24   ` Andrew Cooper
2013-07-24 15:04     ` Konrad Rzeszutek Wilk
2013-07-24 20:25     ` Keir Fraser
2013-07-25  1:07     ` Mukesh Rathor
2013-07-27  1:05       ` Mukesh Rathor
2013-08-05 11:13         ` Jan Beulich
2013-07-25 16:39 ` Tim Deegan
2013-07-26 18:55   ` Mukesh Rathor
2013-07-27  0:59   ` 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=20130821184426.08629cdb@mantra.us.oracle.com \
    --to=mukesh.rathor@oracle.com \
    --cc=Xen-devel@lists.xensource.com \
    --cc=dunlapg@umich.edu \
    --cc=keir.xen@gmail.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 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.