答复: KVM Intel graphic passthrough cause qemu pause

Zhenyu Wang zhenyuw at linux.intel.com
Mon Dec 3 04:06:59 UTC 2018


Hi,

Our mail list has limit of attachment for 200KB so I've got two
warnings on big log attachment for this that's blocked now.

Pls follow https://github.com/intel/gvt-linux/wiki to open bug
on bugzilla, or I think new github issue would also be ok.

thanks

On 2018.11.30 00:53:13 +0000, Jianghuaping wrote:
> Hi all
> 
> The attached xml is Guest’s Qemu parameters.
> 
> Thanks
> 
> Jiang huaping
> 
> 发件人: jianghuaping (Cloud)
> 发送时间: 2018年11月29日 18:12
> 收件人: bailin (Cloud); 'Zhang, Xiong Y'; Yuan, Hang;
> 'intel-gvt-dev at lists.freedesktop.org'
> 抄送: Peng, Chao P; wangxuan (Cloud); Zeng, Harris; Wang, Hongbo; wangtao
> (Cloud); daishijun (Cloud); yandehan (CTS)
> 主题: 答复: KVM Intel graphic passthrough cause qemu pause
> 
>  
> 
> Hi Chao and Henry
> 
> Sub error 1 re-appeared after adding Qemu parameter “x-vga=0”, the attached
> is dmesg, syslog and qemu log.
> 
> Thanks
> 
>  
> 
> Jiang
> 
>  
> 
> 发件人: bailin (Cloud)
> 发送时间: 2018年11月29日 10:10
> 收件人: jianghuaping (Cloud); 'Zhang, Xiong Y'; Yuan, Hang;
> 'intel-gvt-dev at lists.freedesktop.org'
> 抄送: Peng, Chao P; wangxuan (Cloud); Zeng, Harris; Wang, Hongbo; wangtao
> (Cloud); daishijun (Cloud); yandehan (CTS)
> 主题: 答复: KVM Intel graphic passthrough cause qemu pause
> 
>  
> 
> Guest os is 32bit  windows 10,  version 1703
> 
>  
> 
>  
> 
>  
> 
> 发件人: jianghuaping (Cloud)
> 发送时间: 2018年11月29日 9:40
> 收件人: 'Zhang, Xiong Y' <xiong.y.zhang at intel.com>; Yuan, Hang <
> hang.yuan at intel.com>; 'intel-gvt-dev at lists.freedesktop.org' <
> intel-gvt-dev at lists.freedesktop.org>
> 抄送: Peng, Chao P <chao.p.peng at intel.com>; wangxuan (Cloud) <wang.xuan at h3c.com
> >; bailin (Cloud) <berlin at h3c.com>; Zeng, Harris <harris.zeng at intel.com>; Wang,
> Hongbo <hongbo.wang at intel.com>; wangtao (Cloud) <wang.taoD at h3c.com>; daishijun
> (Cloud) <daishijun at h3c.com>; yandehan (CTS) <ydhan at h3c.com>
> 主题: 答复: KVM Intel graphic passthrough cause qemu pause
> 
>  
> 
> The guest is windows 10.
> 
> There is no this issue on windows 7 guest.
> 
>  
> 
> 发件人: Zhang, Xiong Y [mailto:xiong.y.zhang at intel.com]
> 发送时间: 2018年11月29日 9:38
> 收件人: jianghuaping (Cloud); Yuan, Hang; 'intel-gvt-dev at lists.freedesktop.org'
> 抄送: Peng, Chao P; wangxuan (Cloud); bailin (Cloud); Zeng, Harris; Wang,
> Hongbo; wangtao (Cloud); daishijun (Cloud); yandehan (CTS); Zhang, Xiong Y
> 主题: RE: KVM Intel graphic passthrough cause qemu pause
> 
>  
> 
> When this issue happens, it seems the guest Win7 OS doesn’t start.
> 
> If this issue happens during guest OS boot up, I suggest to try win8 or win10,
> I never try win7.
> 
>  
> 
> thanks
> 
> From: intel-gvt-dev [mailto:intel-gvt-dev-bounces at lists.freedesktop.org] On
> Behalf Of Jianghuaping
> Sent: Wednesday, November 28, 2018 7:18 PM
> To: Yuan, Hang <hang.yuan at intel.com>; 'intel-gvt-dev at lists.freedesktop.org' <
> intel-gvt-dev at lists.freedesktop.org>
> Cc: Peng, Chao P <chao.p.peng at intel.com>; Wangxuan <wang.xuan at h3c.com>; Bailin
> <berlin at h3c.com>; Zeng, Harris <harris.zeng at intel.com>; Wang, Hongbo <
> hongbo.wang at intel.com>; Wangtao <wang.taoD at h3c.com>; Daishijun <
> daishijun at h3c.com>; Yandehan <ydhan at h3c.com>
> Subject: 答复: KVM Intel graphic passthrough cause qemu pause
> 
>  
> 
> Hi Henry
> 
> Double check,
> 
> What you mean is the syslog under /var/log/syslog? We can get it when this
> issue re-appeared.
> 
>  
> 
> Thanks
> 
> Jiang
> 
>  
> 
> 发件人: Yuan, Hang [mailto:hang.yuan at intel.com]
> 发送时间: 2018年11月28日 18:55
> 收件人: jianghuaping (Cloud); 'intel-gvt-dev at lists.freedesktop.org'
> 抄送: Zeng, Harris; Peng, Chao P; daishijun (Cloud); Wang, Hongbo; bailin
> (Cloud); yandehan (CTS); wangxuan (Cloud); wangtao (Cloud)
> 主题: RE: KVM Intel graphic passthrough cause qemu pause
> 
>  
> 
> Do you have host kernel log? So we can help to take a look from GVT
> perspective.
> 
>  
> 
> Regards,
> 
> Henry
> 
>  
> 
> From: Jianghuaping [mailto:jiang.huaping at h3c.com]
> Sent: Wednesday, November 28, 2018 5:56 PM
> To: Yuan, Hang <hang.yuan at intel.com>; 'intel-gvt-dev at lists.freedesktop.org' <
> intel-gvt-dev at lists.freedesktop.org>
> Cc: Zeng, Harris <harris.zeng at intel.com>; Peng, Chao P <chao.p.peng at intel.com>;
> Daishijun <daishijun at h3c.com>; Wang, Hongbo <hongbo.wang at intel.com>; Bailin <
> berlin at h3c.com>; Yandehan <ydhan at h3c.com>; Wangxuan <wang.xuan at h3c.com>;
> Wangtao <wang.taoD at h3c.com>
> Subject: 答复: KVM Intel graphic passthrough cause qemu pause
> 
>  
> 
> Hi Hang
> 
> The attached is two logs.
> 
> v288C1A78-C34C-11E8-94EF-CEFAE916D900.log : suberror 1   qemu log
> 
> v8FE70BB0-BC03-11E8-874B-B4FF2E460600.log : suberror 3 qemu log
> 
>  
> 
> old kvm parameter is :
> 
> /usr/bin/kvm -name guest=v03000200-0400-0500-0006-000700080009,debug-threads=on
> -S -object secret,id=masterKey0,format=raw,file=/var/run/lib/libvirt/qemu/
> domain-1-v03000200-0400-0500-/master-key.aes -machine pc-i440fx-2.12,accel=
> kvm,usb=off,dump-guest-core=off -cpu host,hv_time,hv_relaxed,hv_spinlocks=
> 0x2000,host-cache-info=on,l3-cache=off -m 3380 -realtime mlock=off -smp
> 2,sockets=1,cores=2,threads=1 -uuid 078fe81f-f60a-45ab-9aaa-b6b97028dc35
> -display none -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/
> var/run/lib/libvirt/qemu/domain-1-v03000200-0400-0500-/
> monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control
> -chardev socket,id=charmonitor_cas,path=/var/run/lib/libvirt/qemu/
> domain-1-v03000200-0400-0500-/monitor.sock.cas,server,nowait -mon chardev=
> charmonitor_cas,id=monitor_cas,mode=control -rtc base=localtime,clock=
> vm,driftfix=slew -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global
> PIIX4_PM.disable_s4=1 -boot strict=on -device piix3-usb-uhci,id=
> usb,pci_hotpluggable=off,bus=pci.0,addr=0x1.0x2 -device usb-ehci,id=
> usb1,pci_hotpluggable=off,bus=pci.0,addr=0x4 -device nec-usb-xhci,id=
> usb2,pci_hotpluggable=off,bus=pci.0,addr=0x5 -device virtio-scsi-pci,id=
> scsi1,pci_hotpluggable=off,bus=pci.0,addr=0x6 -device virtio-serial-pci,id=
> virtio-serial0,pci_hotpluggable=off,bus=pci.0,addr=0x7 -device usb-hub,id=
> hub0,bus=usb.0,port=1 -drive file=/vms/idv/data/win7,format=qcow2,if=none,id=
> drive-virtio-disk0,cache=directsync,aio=native -device virtio-blk-pci,scsi=
> off,bus=pci.0,addr=0x8,pci_hotpluggable=off,drive=drive-virtio-disk0,id=
> virtio-disk0,bootindex=1 -drive file=/vms/isos/virtio-win7.vfd,format=raw,if=
> none,id=drive-fdc0-0-0,readonly=on,cache=directsync,aio=native -global
> isa-fdc.driveA=drive-fdc0-0-0 -global isa-fdc.bootindexA=4 -drive if=none,id=
> drive-ide0-0-0,readonly=on -device ide-cd,bus=ide.0,unit=0,drive=
> drive-ide0-0-0,id=ide0-0-0,bootindex=2 -netdev tap,fd=51,id=hostnet0,vhost=
> on,vhostfd=52 -device virtio-net-pci,pci_hotpluggable=off,netdev=hostnet0,id=
> net0,mac=9c:06:1b:6f:93:5f,bus=pci.0,addr=0x3,bootindex=3 -chardev pty,id=
> charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev
> socket,id=charchannel0,path=/var/lib/libvirt/qemu/
> v03000200-0400-0500-0006-000700080009.agent,server,nowait -device
> virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=
> org.qemu.guest_agent.0 -device usb-tablet,id=input0,bus=usb.0,port=2 -device
> vfio-pci,pci_hotpluggable=off,host=00:02.0,id=hostdev0,bus=pci.0,addr=0x2
> -device vfio-pci,pci_hotpluggable=off,host=00:1f.3,id=hostdev1,bus=pci.0,addr=
> 0x9 -device usb-host,hostbus=1,hostaddr=3,id=hostdev2,bus=usb.0,port=1.1
> -device usb-host,hostbus=1,hostaddr=2,id=hostdev3,bus=usb.0,port=1.2 -set
> device.hostdev0.x-igd-opregion=on -set device.hostdev0.x-igd-gms=1 -msg
> timestamp=on
> 
>  
> 
>  
> 
> Thanks
> 
> Jiang
> 
>  
> 
> 发件人: Yuan, Hang [mailto:hang.yuan at intel.com]
> 发送时间: 2018年11月28日 15:52
> 收件人: jianghuaping (Cloud); 'intel-gvt-dev at lists.freedesktop.org'
> 抄送: Zeng, Harris; Peng, Chao P; daishijun (Cloud); Wang, Hongbo; bailin
> (Cloud)
> 主题: RE: KVM Intel graphic passthrough cause qemu pause
> 
>  
> 
> Hi Huaping,
> 
>  
> 
> What’s your Qemu parameters to create the VM? Do you have host kernel log to
> share?
> 
>  
> 
> Regards,
> 
> Henry
> 
>  
> 
> From: intel-gvt-dev [mailto:intel-gvt-dev-bounces at lists.freedesktop.org] On
> Behalf Of Jianghuaping
> Sent: Wednesday, November 28, 2018 10:34 AM
> To: 'intel-gvt-dev at lists.freedesktop.org' <intel-gvt-dev at lists.freedesktop.org>
> Cc: Zeng, Harris <harris.zeng at intel.com>; Peng, Chao P <chao.p.peng at intel.com>;
> Daishijun <daishijun at h3c.com>; Wang, Hongbo <hongbo.wang at intel.com>; Bailin <
> berlin at h3c.com>
> Subject: KVM Intel graphic passthrough cause qemu pause
> 
>  
> 
> Hello Intel GVT experts.
> 
> we are using Intel skylake I3 processor to run KVM virtualization(1 Centos
> Hypervisor +1  Windows guest). Intel graphic in I3 processor will be passed
> through Qemu guest(this is a Windows 10 1703 guest). We found kvm will appear
> “suberror 3” or “suberror 1”,  and Qemu will pause, when win 10 guest
> reboot or resume from sleep. Looks like this issue related to EPT miconfig,
> could you please help us on this issue? The following are detail information.
> 
> In these days, Intel kvm expert:Peng chao is also helping analyzing this issue.
> 
> ----------------------------------------------------------------------
> 
> Linux Kernel &Kvm version:
> 
> [root at cvknode31 ~]# virsh version
> 
> Compiled against library: libvirt 4.0.0
> 
> Using library: libvirt 4.0.0
> 
> Using API: QEMU 4.0.0
> 
> Running hypervisor: QEMU 2.12.1
> 
> [root at cvknode31 ~]# uname -a
> 
> Linux cvknode31 4.14.0-generic #862.el7 SMP Wed May 23 19:40:09 CST 2018 x86_64
> x86_64 x86_64 GNU/Linux
> 
> [root at cvknode31 ~]# cat /etc/redhat-release
> 
> CentOS Linux release 7.5.1804 (Core)
> 
>  
> 
>  
> 
> -----------------------------------------------------------------------------
> 
> Reboot caused suberror 3 qemu log
> 
> KVM internal error. Suberror: 3
> 
> extra data[0]: 80000b0e
> 
> extra data[1]: 31
> 
> extra data[2]: 683
> 
> extra data[3]: 88c70
> 
> EAX=00000000 EBX=87b84120 ECX=87b862c0 EDX=80843120
> 
> ESI=87b2afac EDI=80843120 EBP=87a3aa44 ESP=87a3aa40
> 
> EIP=873d5cfa EFL=00210202 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
> 
> ES =0023 00000000 ffffffff 00c0f300 DPL=3 DS   [-WA]
> 
> CS =0008 00000000 ffffffff 00c09b00 DPL=0 CS32 [-RA]
> 
> SS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
> 
> DS =0023 00000000 ffffffff 00c0f300 DPL=3 DS   [-WA]
> 
> FS =0030 87b84000 00004a20 00409300 DPL=0 DS   [-WA]
> 
> GS =0000 00000000 ffffffff 00c00000
> 
> LDT=0000 00000000 ffffffff 00c00000
> 
> TR =0028 87b88a40 000020ab 00008b00 DPL=0 TSS32-busy
> 
> GDT=     87b8e5c0 000003ff
> 
> IDT=     87b8e9c0 000007ff
> 
> CR0=80010033 CR2=87b2afb0 CR3=001a8000 CR4=001406e8
> 
> DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=
> 0000000000000000
> 
> DR6=00000000ffff0ff0 DR7=0000000000000400
> 
> EFER=0000000000000800
> 
>  
> 
> ---------------------------------------------------------------------------------------
> 
> Sleep caused suberror 1 qemu log
> 
> KVM internal error. Suberror: 1
> 
> emulation failure
> 
> EAX=00010008 EBX=00000000 ECX=00024000 EDX=00000000
> 
> ESI=00000000 EDI=00000000 EBP=b4237a1c ESP=b42379e8
> 
> EIP=ffd03000 EFL=00010246 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
> 
> ES =0023 00000000 ffffffff 00c0f300 DPL=3 DS   [-WA]
> 
> CS =0008 00000000 ffffffff 00c09b00 DPL=0 CS32 [-RA]
> 
> SS =0010 00000000 ffffffff 00c09300 DPL=0 DS   [-WA]
> 
> DS =0023 00000000 ffffffff 00c0f300 DPL=3 DS   [-WA]
> 
> FS =0030 81158000 00004a60 00409300 DPL=0 DS   [-WA]
> 
> GS =0000 00000000 ffffffff 00c00000
> 
> LDT=0000 00000000 ffffffff 00c00000
> 
> TR =0028 8113f000 000020ab 00008b00 DPL=0 TSS32-busy
> 
> GDT=     81151000 000003ff
> 
> IDT=     81151400 000007ff
> 
> CR0=80010033 CR2=8136b000 CR3=9ffd2320 CR4=001406e9
> 
> DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=
> 0000000000000000
> 
> DR6=00000000ffff0ff0 DR7=0000000000000400
> 
> EFER=0000000000000800
> 
>  
> 
> Thanks
> 
> Jiang huaping
> 
> 发件人: bailin (Cloud)
> 发送时间: 2018年11月28日 8:08
> 收件人: Peng, Chao P; Zeng, Harris
> 抄送: jianghuaping (Cloud); changlimin (Cloud)
> 主题: 答复: 答复: pause问题
> 
>  
> 
> 用户态的堆栈如下,感觉这种操作普遍并且正常.
> 
>  
> 
> 一个cpu在pci的空间访问,导致修改memslot
> 
> #0  0x00007fee3ede95d7 in ioctl () from /lib64/libc.so.6
> 
> #1  0x00005624101a28d7 in kvm_vm_ioctl (s=0x8ec8, s at entry=0x5624132e8e20, type=
> 881622144, type at entry=1075883590)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/accel/kvm/kvm-all.c:2075
> 
> #2  0x00005624101a3207 in kvm_set_user_memory_region (slot=slot at entry=
> 0x5624132ea110, kml=0x5624132e9ec0)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/accel/kvm/kvm-all.c:277
> 
> #3  0x00005624101a3640 in kvm_set_phys_mem (kml=0x5624132e9ec0, section=
> <optimized out>, add=true)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/accel/kvm/kvm-all.c:774
> 
> #4  0x00005624101929e1 in address_space_update_topology_pass (as=as at entry=
> 0x562410e3b5e0 <address_space_memory>, adding=adding at entry=true,
> 
>     new_view=0x7fee106a03d0, new_view=0x7fee106a03d0, old_view=<optimized out>,
> old_view=<optimized out>)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/memory.c:933
> 
> #5  0x0000562410192d94 in address_space_set_flatview (as=as at entry=
> 0x562410e3b5e0 <address_space_memory>)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/memory.c:1008
> 
> #6  0x00005624101959c0 in memory_region_transaction_commit ()
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/memory.c:1060
> 
> #7  0x0000562410391ab8 in pci_update_vga (pci_dev=0x562414c97bc0)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/hw/pci/pci.c:1167
> 
> #8  0x0000562410392913 in pci_update_vga (pci_dev=0x562414c97bc0)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/hw/pci/pci.c:1161
> 
> #9  pci_update_mappings (d=d at entry=0x562414c97bc0)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/hw/pci/pci.c:1333
> 
> #10 0x0000562410392f59 in pci_default_write_config (d=d at entry=0x562414c97bc0,
> addr=addr at entry=4, val_in=val_in at entry=1024, l=2)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/hw/pci/pci.c:1380
> 
> #11 0x00005624101dd49c in vfio_pci_write_config (pdev=0x562414c97bc0, addr=4,
> val=1024, len=<optimized out>)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/hw/vfio/pci.c:1222
> 
> #12 0x00005624103998da in pci_host_config_write_common (pci_dev=0x562414c97bc0,
> addr=4, limit=256, val=1024, len=2)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/hw/pci/pci_host.c:66
> 
> #13 0x000056241019341b in memory_region_write_accessor (mr=0x5624136715b0, addr
> =0, value=<optimized out>, size=2, shift=<optimized out>,
> 
>     mask=<optimized out>, attrs=...) at /home/uis-enterprise/f-idv/daemon/qemu/
> qemu-2.12/rpmbuild/BUILD/qemu-2.12/memory.c:530
> 
> #14 0x0000562410191029 in access_with_adjusted_size (addr=addr at entry=0, value=
> value at entry=0x7fee25dbb4a8, size=size at entry=2,
> 
>     access_size_min=<optimized out>, access_size_max=<optimized out>,
> 
>     access_fn=access_fn at entry=0x5624101933a0 <memory_region_write_accessor>, mr
> =mr at entry=0x5624136715b0, attrs=attrs at entry=...)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/memory.c:597
> 
> #15 0x0000562410195f75 in memory_region_dispatch_write (mr=mr at entry=
> 0x5624136715b0, addr=addr at entry=0, data=1024, size=size at entry=2,
> 
>     attrs=attrs at entry=...) at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/
> rpmbuild/BUILD/qemu-2.12/memory.c:1474
> 
> #16 0x0000562410131342 in flatview_write_continue (mr=0x5624136715b0, l=2,
> addr1=0, len=2, buf=0x7fee459ed000 "", attrs=..., addr=3324,
> 
>     fv=0x7fee1c594e40) at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/
> rpmbuild/BUILD/qemu-2.12/exec.c:3166
> 
> #17 flatview_write (fv=0x7fee1c594e40, addr=<optimized out>, attrs=..., buf=
> <optimized out>, len=<optimized out>)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/exec.c:3216
> 
> #18 0x000056241013507f in address_space_write (as=<optimized out>, addr=
> <optimized out>, attrs=..., buf=<optimized out>, len=<optimized out>)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/exec.c:3332
> 
> #19 0x0000562410135125 in address_space_rw (as=<optimized out>, addr=addr at entry
> =3324, attrs=..., attrs at entry=..., buf=<optimized out>,
> 
>     len=len at entry=2, is_write=is_write at entry=true) at /home/uis-enterprise/
> f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/qemu-2.12/exec.c:3343
> 
> #20 0x00005624101a4ff6 in kvm_handle_io (count=1, size=2, direction=<optimized
> out>, data=<optimized out>, attrs=..., port=3324)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/accel/kvm/kvm-all.c:1730
> 
> #21 kvm_cpu_exec (cpu=cpu at entry=0x56241344c3e0)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/accel/kvm/kvm-all.c:1970
> 
> #22 0x000056241017f9e6 in qemu_kvm_cpu_thread_fn (arg=0x56241344c3e0)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/cpus.c:1229
> 
> #23 0x00007fee3f0c8e25 in start_thread () from /lib64/libpthread.so.0
> 
> #24 0x00007fee3edf2bad in clone () from /lib64/libc.so.6
> 
>  
> 
>  
> 
> 异常的cpu的qemu堆栈
> 
> #0  0x00007fee3ede95d7 in ioctl () from /lib64/libc.so.6
> 
> #1  0x00005624101a4d02 in kvm_vcpu_ioctl (cpu=0x0, cpu at entry=0x5624133fe150,
> type=136, type at entry=44672)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/accel/kvm/kvm-all.c:2093
> 
> #2  0x00005624101a4e5f in kvm_cpu_exec (cpu=cpu at entry=0x5624133fe150)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/accel/kvm/kvm-all.c:1930
> 
> #3  0x000056241017f9e6 in qemu_kvm_cpu_thread_fn (arg=0x5624133fe150)
> 
>     at /home/uis-enterprise/f-idv/daemon/qemu/qemu-2.12/rpmbuild/BUILD/
> qemu-2.12/cpus.c:1229
> 
> #4  0x00007fee3f0c8e25 in start_thread () from /lib64/libpthread.so.0
> 
> #5  0x00007fee3edf2bad in clone () from /lib64/libc.so.6
> 
>  
> 
>  
> 
>  
> 
> 发件人: Peng, Chao P [mailto:chao.p.peng at intel.com]
> 发送时间: 2018年11月26日 16:40
> 收件人: Zeng, Harris <harris.zeng at intel.com>; bailin (Cloud) <berlin at h3c.com>
> 抄送: jianghuaping (Cloud) <jiang.huaping at h3c.com>; changlimin (Cloud) <
> changlimin at h3c.com>
> 主题: RE: 答复: pause问题
> 
>  
> 
> 我看了代码,目前的现象和RCU的本来设计也是吻合的。所以即使memslot 为空,还不好说
> 这是问题。
> 
>  
> 
> 一个思路是看看新添加memslot的操作是什么时机触发,是否与guest的特定行为有关?
> 
>  
> 
> From: Zeng, Harris
> Sent: Saturday, November 24, 2018 10:13 PM
> To: Bailin <berlin at h3c.com>; Peng, Chao P <chao.p.peng at intel.com>
> Cc: Jianghuaping <jiang.huaping at h3c.com>; Changlimin <changlimin at h3c.com>
> Subject: Re: 答复: pause问题
> 
>  
> 
> Hi Chao,
> 
>  
> 
> Can you help to advise?
> 
>  
> 
> Thanks,
> 
> Harris
> 
> Sent from my mobile phone.
> 
> 
> 在 2018年11月22日,上午10:47,Bailin <berlin at h3c.com> 写道:
> 
>     不知道你们那边有没有具体线索,目前我们这边分析是内核函数
>     kvm_vcpu_gfn_to_hva_prot可能有缺陷
> 
>     目前我们这边没有更好的修改思路,也无法确认为什么这里返回错误,会最终导致ept
>     misconfig.
> 
>      
> 
>      
> 
>     出现问题时,memslot为空,但是在coredump中看到的不为空的准确原因明确了
> 
>      
> 
>     出问题的cpu的堆栈
> 
>     #0 [ffffc900009d37a8] machine_kexec at ffffffff8105da32
> 
>     #1 [ffffc900009d3800] __crash_kexec at ffffffff8111a9ad
> 
>     #2 [ffffc900009d38c8] panic at ffffffff81085e2c
> 
>     #3 [ffffc900009d3948] paging64_walk_addr_generic at ffffffffc05cf4b3 [kvm]
> 
>     #4 [ffffc900009d3a30] paging64_gva_to_gpa at ffffffffc05cf6df [kvm]
> 
>     #5 [ffffc900009d3b48] emulator_read_write_onepage at ffffffffc05b6f5b [kvm]
> 
>     #6 [ffffc900009d3ba8] emulator_read_write at ffffffffc05b72d2 [kvm]
> 
>     #7 [ffffc900009d3bf8] segmented_read at ffffffffc05da519 [kvm]
> 
>     #8 [ffffc900009d3c38] x86_emulate_insn at ffffffffc05de3f0 [kvm]
> 
>     #9 [ffffc900009d3c88] x86_emulate_instruction at ffffffffc05c0149 [kvm]
> 
>     #10 [ffffc900009d3cf8] kvm_mmu_page_fault_ept_violation at ffffffffc05cd9ea
>     [kvm]
> 
>     #11 [ffffc900009d3d30] kvm_arch_vcpu_ioctl_run at ffffffffc05c4510 [kvm]
> 
>     #12 [ffffc900009d3df0] kvm_vcpu_ioctl at ffffffffc05aa197 [kvm]
> 
>     #13 [ffffc900009d3e80] do_vfs_ioctl at ffffffff8126bbc9
> 
>     #14 [ffffc900009d3f00] sys_ioctl at ffffffff8126c1b4
> 
>     #15 [ffffc900009d3f38] do_syscall_64 at ffffffff810036fe
> 
>     #16 [ffffc900009d3f50] entry_SYSCALL_64_after_hwframe at ffffffff81a00081
> 
>      
> 
>      
> 
>     发生异常的cpu调用这个函数,获取memslots,是没有问题的,这个函数除了索引数组
>> 
>     主要是在内核的lock debug打开时检查kvm->srcu,kvm->slots_lock的状态,而一般
>     情况下lock debug是不打开的
> 
>     static inline struct kvm_memslots *__kvm_memslots(struct kvm *kvm, int
>     as_id)
> 
>     {
> 
>              return srcu_dereference_check(kvm->memslots[as_id], &kvm->srcu,
> 
>                                 lockdep_is_held(&kvm->slots_lock) ||
> 
>                                 !refcount_read(&kvm->users_count));
> 
>     }
> 
>     实际上是memslots取错了,导致根据gfn查找的memslot错了,修改了调试信息
> 
>     unsigned long kvm_vcpu_gfn_to_hva_prot(struct kvm_vcpu *vcpu, gfn_t gfn,
>     bool *writable)
> 
>     {
> 
>              //struct kvm_memory_slot *slot = kvm_vcpu_gfn_to_memslot(vcpu,
>     gfn);
> 
>              struct kvm_memslots *slots = kvm_vcpu_memslots(vcpu);
> 
>              struct kvm_memory_slot *slot = __gfn_to_memslot(slots, gfn);
> 
>      
> 
>              if(NULL == slot){
> 
>                        printk("%s,%d,slots=%p,vpuid=%d,gfn=%llx\
>     n",__FUNCTION__,__LINE__,slots,vcpu->vcpu_id,gfn);
> 
>              }
> 
>      
> 
>              return gfn_to_hva_memslot_prot(slot, gfn, writable);
> 
>     }
> 
>      
> 
>     出问题时的,memslot为空,但是memslots不为空,但是和当前内存中的不一致,
> 
>     [ 5621.133030] kvm_vcpu_gfn_to_hva_prot,1325,slots=ffff88011b6d0000,vpuid=
>     0,gfn=84
> 
>      
> 
>     而coredump中读出的memslots
> 
>     crash> struct -x kvm.memslots 0xffff880118380000
> 
>       memslots = {0xffff88011ee40000, 0xffff88011ee10000}
> 
>      
> 
>     0xffff88011ee40000这个memslots里面是有对应gfn的memslot,0x ffff88011b6d0000
>     是没有的
> 
>      
> 
>     原因是coredump中看到的是另外一个cpu在install_new_memslots做了更新的memslots
>> 
>     而发生异常时的cpu读取的是更新前的memslots。
> 
>     另外一个cpu的堆栈
> 
>     #0 [ffffc900009ffb08] __schedule at ffffffff818f8c6e
> 
>     #1 [ffffc900009ffb98] preempt_schedule_common at ffffffff818f94ad
> 
>     #2 [ffffc900009ffba8] _cond_resched at ffffffff818f94d8
> 
>     #3 [ffffc900009ffbb0] wait_for_completion at ffffffff818fa69c
> 
>     #4 [ffffc900009ffc08] __synchronize_srcu at ffffffff810f1447
> 
>     #5 [ffffc900009ffc70] install_new_memslots at ffffffffc05a5d89 [kvm]
> 
>     #6 [ffffc900009ffc90] __kvm_set_memory_region at ffffffffc05a7061 [kvm]
> 
>     #7 [ffffc900009ffda0] kvm_set_memory_region at ffffffffc05a72d6 [kvm]
> 
>     #8 [ffffc900009ffdc0] kvm_vm_ioctl at ffffffffc05a994b [kvm]
> 
>     #9 [ffffc900009ffe80] do_vfs_ioctl at ffffffff8126bbc9
> 
>     #10 [ffffc900009fff00] sys_ioctl at ffffffff8126c1b4
> 
>     #11 [ffffc900009fff38] do_syscall_64 at ffffffff810036fe
> 
>     #12 [ffffc900009fff50] entry_SYSCALL_64_after_hwframe at ffffffff81a00081
> 
>      
> 
>      
> 
>     static struct kvm_memslots *install_new_memslots(struct kvm *kvm,
> 
>                        int as_id, struct kvm_memslots *slots)
> 
>     {
> 
>              struct kvm_memslots *old_memslots = __kvm_memslots(kvm, as_id);
> 
>      
> 
>              /*
> 
>              * Set the low bit in the generation, which disables SPTE caching
> 
>              * until the end of synchronize_srcu_expedited.
> 
>              */
> 
>              WARN_ON(old_memslots->generation & 1);
> 
>              slots->generation = old_memslots->generation + 1;
> 
>      
> 
>              rcu_assign_pointer(kvm->memslots[as_id], slots);
> 
>              synchronize_srcu_expedited(&kvm->srcu);
> 
>      
> 
>      
> 
>     实际中另外一个cpu在更新memslots之前是加了slots的锁,lock debug没有打开时其
>     实是检测不到错误的。
> 
>     而更新过程中,数据可能是不准确的。
> 
>     int kvm_set_memory_region(struct kvm *kvm,
> 
>                                   const struct kvm_userspace_memory_region
>     *mem)
> 
>     {
> 
>              int r;
> 
>      
> 
>              mutex_lock(&kvm->slots_lock);
> 
>              r = __kvm_set_memory_region(kvm, mem);
> 
>              mutex_unlock(&kvm->slots_lock);
> 
>              return r;
> 
>     }
> 
>      
> 
>      
> 
>      
> 
>      
> 
>     -------------------------------------------------------------------------------------------------------------------------------------
>     本邮件及其附件含有新华三集团的保密信息,仅限于发送给上面地址中列出
>     的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、
>     复制、
>     或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并
>     删除本
>     邮件!
>     This e-mail and its attachments contain confidential information from New
>     H3C, which is
>     intended only for the person or entity whose address is listed above. Any
>     use of the
>     information contained herein in any way (including, but not limited to,
>     total or partial
>     disclosure, reproduction, or dissemination) by persons other than the
>     intended
>     recipient(s) is prohibited. If you receive this e-mail in error, please
>     notify the sender
>     by phone or email immediately and delete it!
> 


> _______________________________________________
> intel-gvt-dev mailing list
> intel-gvt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev


-- 
Open Source Technology Center, Intel ltd.

$gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gvt-dev/attachments/20181203/574494d5/attachment-0001.sig>


More information about the intel-gvt-dev mailing list