[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 18/18] PVH xen: introduce vmx_pvh.c
On Mon, 8 Jul 2013 16:09:55 -0700 Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> wrote: > On Mon, 08 Jul 2013 09:31:17 +0100 > "Jan Beulich" <JBeulich@xxxxxxxx> wrote: > > > >>> On 06.07.13 at 03:31, Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> > > >>> wrote: > > > Ok, lmk if you are ok with following: > > > > Fundamentally yes. But ... > > > > > --- a/xen/arch/x86/Makefile > > > +++ b/xen/arch/x86/Makefile > > > @@ -41,6 +41,7 @@ obj-y += numa.o > > > obj-y += pci.o > > > obj-y += percpu.o > > > obj-y += physdev.o > > > +obj-y += pvh.o > > > > Does this indeed warrant a separate file? > > yeah, i wasn't sure about that, but was not sure where to put it. I > think we could just have hvm_kernel_mode() next to > hvm_get_segment_register in hvm.h. It can then also be used in HVM > code in various places where it currently checks for dpl/cpl. Actually, not feasible to put anything in any header since regs.h is a pretty early-on header include, and can't include any other headers. So: diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 8284b3b..06f9470 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -4642,6 +4642,14 @@ enum hvm_intblk nhvm_interrupt_blocked(struct vcpu *v) return hvm_funcs.nhvm_intr_blocked(v); } +bool_t hvm_kernel_mode(const struct vcpu *v) +{ + struct segment_register seg; + + hvm_get_segment_register((struct vcpu *)v, x86_seg_ss, &seg); + return (seg.attr.fields.dpl == 0); +} + /* * Local variables: * mode: C diff --git a/xen/include/asm-x86/x86_64/regs.h b/xen/include/asm-x86/x86_64/regs index 2ea49c5..7a9bc44 100644 --- a/xen/include/asm-x86/x86_64/regs.h +++ b/xen/include/asm-x86/x86_64/regs.h @@ -10,8 +10,10 @@ #define ring_2(r) (((r)->cs & 3) == 2) #define ring_3(r) (((r)->cs & 3) == 3) +bool_t hvm_kernel_mode(const struct vcpu *); + #define guest_kernel_mode(v, r) \ - (is_pvh_vcpu(v) ? (ring_0(r)) : \ + (is_pvh_vcpu(v) ? (hvm_kernel_mode(v)) : \ (!is_pv_32bit_vcpu(v) ? \ (ring_3(r) && ((v)->arch.flags & TF_kernel_mode)) : \ (ring_1(r)))) Also, the cast in hvm_get_segment_register((struct vcpu *)v, x86_seg_ss, &seg); is difficult to change since it triggers a chain of events down the stream in *_get_segment_register(). So for now, I'll just leave it. thanks Mukesh _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |