[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 12/18 V2]:PVH xen: support invalid op, return PVH features etc...
>>> On 16.03.13 at 01:48, Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> wrote: > --- a/xen/arch/x86/traps.c > +++ b/xen/arch/x86/traps.c > @@ -459,6 +459,10 @@ static void instruction_done( > struct cpu_user_regs *regs, unsigned long eip, unsigned int bpmatch) > { > regs->eip = eip; > + > + if ( is_pvh_vcpu(current) ) > + return; So how would breakpoint matching on emulated instructions work? > + > regs->eflags &= ~X86_EFLAGS_RF; > if ( bpmatch || (regs->eflags & X86_EFLAGS_TF) ) > { > @@ -475,6 +479,10 @@ static unsigned int check_guest_io_breakpoint(struct > vcpu *v, > unsigned int width, i, match = 0; > unsigned long start; > > + if ( is_pvh_vcpu(v) ) { > + /* for pvh, ctrlreg field is not implemented/used unless we need to > */ ??? > + return 0; > + } > if ( !(v->arch.debugreg[5]) || > !(v->arch.pv_vcpu.ctrlreg[4] & X86_CR4_DE) ) > return 0; > @@ -908,14 +916,18 @@ static int emulate_invalid_rdtscp(struct cpu_user_regs > *regs) > unsigned long emulate_forced_invalid_op(struct cpu_user_regs *regs) > { > char sig[5], instr[2]; > - unsigned long eip, rc; > + unsigned long eip, rc, addr; > > eip = regs->eip; > > /* Check for forced emulation signature: ud2 ; .ascii "xen". */ > - if ( (rc = copy_from_user(sig, (char *)eip, sizeof(sig))) != 0 ) > + if ( (rc = raw_copy_from_guest(sig, (char *)eip, sizeof(sig))) != 0 ) > { > - propagate_page_fault(eip + sizeof(sig) - rc, 0); > + addr = eip + sizeof(sig) - rc; > + if ( is_pvh_vcpu(current) ) > + return addr; > + > + propagate_page_fault(addr, 0); > return EXCRET_fault_fixed; Returning "addr" here as well as EXCRET_* values, even if you got this properly separated right now, looks like setting us up for future problems. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |