[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [V11 PATCH 20/21] PVH xen: introduce vmexit handler for PVH
On Fri, 23 Aug 2013 10:12:16 +0100 "Jan Beulich" <JBeulich@xxxxxxxx> wrote: > >>> On 23.08.13 at 03:19, Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> > >>> wrote: > > Changes in V11: > > - merge this with previous patch "prep changes". > > - allow invalid op emulation for kernel mode also. > > - Use CR0_READ_SHADOW instead of GUEST_CR0. > > > > Signed-off-by: Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> > > Acked-by: Keir Fraser <keir@xxxxxxx> > > Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > > PV-HVM-Regression-Tested-by: Andrew Cooper > > <andrew.cooper3@xxxxxxxxxx> > > Again the changes above void the tags here. > > > +static int vmxit_msr_read(struct cpu_user_regs *regs) > > +{ > > + u64 msr_content = 0; > > + > > + switch ( regs->ecx ) > > Did you mean regs->_ecx? Hmm.. don't understand why? HVM uses ecx: hvm_msr_read_intercept(regs->ecx, &msr_content) == X86EMUL_OKAY ) > > + default: > > + /* PVH fixme: see hvm_msr_read_intercept(). */ > > + rdmsrl(regs->ecx, msr_content); > > So what does this comment refer to? There's no change to the > referred to function here. And it seems rather questionable that > reading the physical MSR values for everything but > MSR_IA32_MISC_ENABLE is correct/secure. I appreciate the > "fixme" annotation, but I'm afraid this is not sufficient here. Yes, it needs to be revisited, best with AMD port so that a good solution can be contrived for PVH. > > +{ > > + int vector = (__vmread(VM_EXIT_INTR_INFO)) & > > INTR_INFO_VECTOR_MASK; > > + int rc = -ENOSYS; > > + > > + dbgp1(" EXCPT: vec:%#x cs:%#lx rip:%#lx\n", vector, > > + __vmread(GUEST_CS_SELECTOR), regs->eip); > > Do you continue to have these funny dbgp constructs in here. Are > they supposed to go away before this gets committed? If not, > please use a model similar to HVM_DBG_LOG(). Like the commit log says, it helps debug, but can be removed anytime. I left it there thinking it might be useful for first couple months while it gets thoroughly tested. > > +static int vmxit_io_instr(struct cpu_user_regs *regs) > > +{ > > + struct segment_register seg; > > + int requested = (regs->rflags & X86_EFLAGS_IOPL) >> 12; > > + int curr_lvl = (regs->rflags & X86_EFLAGS_VM) ? 3 : 0; > > + > > + if ( curr_lvl == 0 ) > > + { > > + hvm_get_segment_register(current, x86_seg_ss, &seg); > > + curr_lvl = seg.attr.fields.dpl; > > + } > > + if ( requested >= curr_lvl && emulate_privileged_op(regs) ) > > + return 0; > > + > > + hvm_inject_hw_exception(TRAP_gp_fault, regs->error_code); > > I don't think reg->error_code is valid here, I think this needs to be > read from the VMCS. Correct. Thats a bug. thanks Mukesh _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |