[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] there is no sysret in X86_emulate, why?
> -----原始邮件----- > 发件人: "Egger, Christoph" <chegger@xxxxxxxxx> > 发送时间: 2014年10月30日 星期四 > 收件人: "Jan Beulich" <JBeulich@xxxxxxxx>, hanyandong <hanyandong@xxxxxxxxx> > 抄送: xen-devel@xxxxxxxxxxxxx > 主题: Re: [Xen-devel] there is no sysret in X86_emulate, why? > > On 2014/10/30 12:04, Jan Beulich wrote: > >>>> On 30.10.14 at 02:46, <hanyandong@xxxxxxxxx> wrote: > >> (1)In x86_emulate(), there are sysenter/sysexit, syscall. But why no sysret? > > > > Perhaps on the basis that this already when introduced was only > > meant to be usable on 64-bit hypervisors, and 64-bit capable CPUs > > always support SYSRET (whereas the scope of support for the > > other three varies)? Christoph, you added that code years ago - is > > there any other explanation for this? > > Back at that time I was working on live migration between AMD and Intel > forth and back. The sysenter/sysexit emulation covers the case of > running 32bit binaries in compat mode in a 64bit DomU. > The syscall emulation also covers a case I do not remember anymore. > > Christoph thank you. if I want to intercept sysenter/sysexit, what I need pay attention to? I set GUEST_SYSENTER_CS to 0x0, then sysenter/sysexit will triggle a #GP, then will trap into Xen. for_each_vcpu(d,v) In xen, at vmx_vmexit_handler(), I hanlde #GP as below caseTRAP_gp_fault: __vmwrite(GUEST_SYSENTER_CS, current->domain->arch.hvm_domain.mitctl_op.imaginary_sysenter_cs); } /* use Xen code to emulated sysenter/syexit */ But after intercept some pairs of sysenter/sysexit, the vm go to crash, and I got the follow dmesg, what's wrong with it? thank you very much #sudo xm dmesg (XEN) event_channel.c:250:d1 EVTCHNOP failure: error -17 (XEN) event_channel.c:250:d1 EVTCHNOP failure: error -17 (XEN) irq.c:1954: dom1: pirq 55 or emuirq 8 already mapped (XEN) irq.c:1954: dom1: pirq 55 or emuirq 12 already mapped (XEN) irq.c:1954: dom1: pirq 55 or emuirq 1 already mapped (XEN) irq.c:1954: dom1: pirq 55 or emuirq 6 already mapped (XEN) irq.c:1954: dom1: pirq 55 or emuirq 4 already mapped (XEN) irq.c:1954: dom1: pirq 55 or emuirq 7 already mapped (XEN) irq.c:1954: dom1: pirq 55 or emuirq 23 already mapped (XEN) irq.c:1954: dom1: pirq 55 or emuirq 28 already mapped > > > > >> (2)I want to iuntercept syscall/sysret, so I unset the EFER.SCE, so > >> syscall/sysret will trap into Xen, then I emulate syscall/sysret. > >> But I only see syscall and did not see one sysret, the guest run as usual. > >> any one can give me an hint? > > > > Assuming you did everything correctly, this seems odd. But in any > > event I'd suggest confirming such behavior in a native environment > > first. > > > > Jan > > > -- Best Regards, yandong _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |