From mboxrd@z Thu Jan 1 00:00:00 1970 From: Razvan Cojocaru Subject: Re: (xen 4.6 unstable) triple fault when execute fxsave during the procedure of guest iso install Date: Wed, 24 Jun 2015 13:28:41 +0300 Message-ID: <558A8659.9060705@bitdefender.com> References: <7EE47F9F3BEC294493BA3E433F16E08A3B302953@SZXEMA504-MBX.china.huawei.com> <558A7793.7060903@bitdefender.com> <558A790D.30103@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <558A790D.30103@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Andrew Cooper , Fanhenglong , "xen-devel@lists.xen.org" Cc: "Liuqiming (John)" , Yanqiangjun , "Huangpeng (Peter)" , "Hanweidong (Randy)" List-Id: xen-devel@lists.xenproject.org On 06/24/2015 12:31 PM, Andrew Cooper wrote: > On 24/06/15 10:25, Razvan Cojocaru wrote: >> On 06/24/2015 12:14 PM, Fanhenglong wrote: >>> I want to debug the procedure of windows os install with windbg, >>> >>> windbg executes instruction(fxsave) after the blank vm is started and >>> before guest iso start to install, >>> >>> fxsave trigger the following code path: >>> vmx_vmexit_handler(EXIT_REASON_EPT_VIOLATION) >>> ->ept_handle_violation >>> ->hvm_hap_nested_page_fault >>> ->handle_mmio_with_translation >>> ->handle_mmio >>> ->hvm_emulate_one >>> ->x86_emulate >>> >>> *X86_emulate return X86EMUL_UNHANDLEABLE* >> How are you using Xen in this case? Are you by any chance using the >> vm_event system in a way that sends back an "emulate" vm_event response >> from userspace? >> >> You might want to look at x86_emulate() in >> xen/arch/x86/x86_emulate/x86_emulate.c and see if (and how) fxsave is >> being handled. > > The fxsave instruction has no emulation implementation. > > "0f ae 07" is "fxsave (%rdi)" which means that either introspection is > active, or %rdi is a pointer into an MMIO region. I see, these are the cases we wanted to treat with the old patch (I thick it was called "xen: Handle resumed instruction based on previous mem_event reply" - the early versions, with RFC) that sometimes bypassed the emulator in the introspection case. Without that, there's always going to be a potential current or future instruction not emulated, and then something like this happens. Cheers, Razvan