[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 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? > + 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. > +/* Returns : 0 == msr written successfully. */ > +static int vmxit_msr_write(struct cpu_user_regs *regs) > +{ > + uint64_t msr_content = regs->eax | (regs->edx << 32); And similarly to the above regs->_eax? > +static int vmxit_debug(struct cpu_user_regs *regs) > +{ > + struct vcpu *vp = current; This variable is to be named either "v" or, preferably, "curr". Same further down. > +static int vmxit_exception(struct cpu_user_regs *regs) > +{ > + 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(). > +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. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |