Bug 203327 - qemu kvm acceleration broken on 5.0.6 and 5.0.7
Summary: qemu kvm acceleration broken on 5.0.6 and 5.0.7
Status: NEW
Alias: None
Product: Virtualization
Classification: Unclassified
Component: kvm (show other bugs)
Hardware: x86-64 Linux
: P1 normal
Assignee: virtualization_kvm
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-04-15 09:51 UTC by gabriele balducci
Modified: 2019-04-26 15:07 UTC (History)
1 user (show)

See Also:
Kernel Version: 5.0.6 5.0.7
Subsystem:
Regression: No
Bisected commit-id:


Attachments

Description gabriele balducci 2019-04-15 09:51:19 UTC
hello

running on AMD Athlon(tm) X4 860K Quad Core Processor
(complete specs enclosed below)

5.0.6 and 5.0.7 break kvm acceleration for qemu on my machines: an old
windows XP guest, which has worked for 4 years without problems,
suddenly doesn't boot any more.

I'm running qemu like this:

    /usr/bin/qemu -m 2G /opt/windog  \
              -accel kvm,thread=multi \
              -netdev user,id=net0,smb=/home/balducci \
              -device rtl8139,netdev=net0


Facts

```
=>  If I run without kvm acceleration: no problems
    (but then the guest is so slow to be utterly unusable)
=>  problem happens with 5.0.6 and 5.0.7: previous kernels are fine:
            GOOD      BAD
            4.20.14   5.0.6
            5.0.2     5.0.7
            5.0.3     
            5.0.4
            5.0.5
=>  #> zcat /proc/config.gz|egrep KVM
    CONFIG_HAVE_KVM=y
    CONFIG_HAVE_KVM_IRQCHIP=y
    CONFIG_HAVE_KVM_IRQFD=y
    CONFIG_HAVE_KVM_IRQ_ROUTING=y
    CONFIG_HAVE_KVM_EVENTFD=y
    CONFIG_KVM_MMIO=y
    CONFIG_KVM_ASYNC_PF=y
    CONFIG_HAVE_KVM_MSI=y
    CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
    CONFIG_KVM_VFIO=y
    CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
    CONFIG_KVM_COMPAT=y
    CONFIG_HAVE_KVM_IRQ_BYPASS=y
    CONFIG_KVM=y
    # CONFIG_KVM_INTEL is not set
    CONFIG_KVM_AMD=y

    (I can send the whole .config file, if needed)

=>  #> dmesg|egrep -i kvm
    [    0.297108] kvm: Nested Virtualization enabled
    [    0.297149] kvm: Nested Paging enabled

=>  #> strace -o strace.out /usr/bin/qemu -m 2G /opt/windog  \
              -accel kvm,thread=multi \
              -netdev user,id=net0,smb=/home/balducci \
              -device rtl8139,netdev=net0
    #> egrep -i kvm strace.out|uniq
    execve("/usr/bin/qemu", ["/usr/bin/qemu", "-m", "2G", "/opt/windog", "-accel", "kvm,thread=multi", "-netdev", "user,id=net0,smb=/home/balducci", "-device", "rtl8139,netdev=net0"], 0x7ffe38ab37d8 /* 112 vars */) = 0
    openat(AT_FDCWD, "/dev/kvm", O_RDWR|O_CLOEXEC) = 16
    ioctl(16, KVM_GET_API_VERSION, 0)       = 12
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_IMMEDIATE_EXIT) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_NR_MEMSLOTS) = 509
    ioctl(16, KVM_CREATE_VM, 0)             = 18
    ioctl(18, KVM_CHECK_EXTENSION, KVM_CAP_NR_VCPUS) = 240
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_MAX_VCPUS) = 288
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_USER_MEMORY) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_DESTROY_MEMORY_REGION_WORKS) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_JOIN_MEMORY_REGIONS_WORKS) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_SET_TSS_ADDR) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_EXT_CPUID) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_MP_STATE) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_COALESCED_MMIO) = 2
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_COALESCED_PIO) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_VCPU_EVENTS) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_X86_ROBUST_SINGLESTEP) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_DEBUGREGS) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_SIGNAL_MSI) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_PCI_2_3) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_IRQ_INJECT_STATUS) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_READONLY_MEM) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_IOEVENTFD) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_IRQFD) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_IRQFD_RESAMPLE) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_VM_ATTRIBUTES) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_IOEVENTFD_ANY_LENGTH) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_XSAVE) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_XCRS) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_PIT_STATE2) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_HYPERV_VP_INDEX) = 1
    ioctl(16, KVM_GET_MSR_INDEX_LIST, 0x7fff07b89a40) = -1 E2BIG (Argument list too long)
    ioctl(16, KVM_GET_MSR_INDEX_LIST, 0x5570914ab630) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_GET_MSR_FEATURES) = 1
    ioctl(16, KVM_GET_MSR_FEATURE_INDEX_LIST, 0x7fff07b89a40) = -1 E2BIG (Argument list too long)
    ioctl(16, KVM_GET_MSR_FEATURE_INDEX_LIST, 0x5570914a76e0) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_SET_IDENTITY_MAP_ADDR) = 1
    ioctl(18, KVM_SET_IDENTITY_MAP_ADDR, 0x7fff07b899c8) = 0
    ioctl(18, KVM_SET_TSS_ADDR, 0xfeffd000) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_X86_SMM) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_IRQCHIP) = 1
    ioctl(18, KVM_CREATE_IRQCHIP, 0)        = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_IRQ_ROUTING) = 4096
    ioctl(18, KVM_IOEVENTFD, 0x7fff07b89b80) = 0
    ioctl(18, KVM_CHECK_EXTENSION, KVM_CAP_SYNC_MMU) = 1
    ioctl(16, KVM_GET_SUPPORTED_CPUID, 0x55709151f140) = -1 E2BIG (Argument list too long)
    ioctl(16, KVM_GET_SUPPORTED_CPUID, 0x55709151f180) = -1 E2BIG (Argument list too long)
    ioctl(16, KVM_GET_SUPPORTED_CPUID, 0x55709151f1e0) = -1 E2BIG (Argument list too long)
    ioctl(16, KVM_GET_SUPPORTED_CPUID, 0x55709151f140) = -1 E2BIG (Argument list too long)
    ioctl(16, KVM_GET_SUPPORTED_CPUID, 0x55709151f290) = -1 E2BIG (Argument list too long)
    ioctl(16, KVM_GET_SUPPORTED_CPUID, 0x55709151f520) = -1 E2BIG (Argument list too long)
    ioctl(16, KVM_GET_SUPPORTED_CPUID, {nent=49, entries=[...]}) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_TSC_DEADLINE_TIMER) = 1
    ioctl(16, KVM_GET_MSRS, 0x7fff07b89950) = 1
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_IRQ_ROUTING) = 4096
    ioctl(18, KVM_GET_CLOCK, 0x7fff07b899c0) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_ADJUST_CLOCK) = 2
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_IRQ_ROUTING) = 4096
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=0, flags=0, guest_phys_addr=0, memory_size=2147483648, userspace_addr=0x7f070fe00000}) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_IRQ_ROUTING) = 4096
    access("kvmvapic.bin", R_OK)            = -1 ENOENT (No such file or directory)
    access("/opt/stow.d/versions/qemu-4.0.0-rc3/usr/share/qemu-firmware/kvmvapic.bin", R_OK) = -1 ENOENT (No such file or directory)
    access("/opt/stow.d/versions/qemu-4.0.0-rc3/usr/share/qemu/kvmvapic.bin", R_OK) = 0
    openat(AT_FDCWD, "/opt/stow.d/versions/qemu-4.0.0-rc3/usr/share/qemu/kvmvapic.bin", O_RDONLY) = 20
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_IRQ_ROUTING) = 4096
    ioctl(18, KVM_SET_GSI_ROUTING, 0x55709174d6d0) = 0
    ioctl(18, KVM_REGISTER_COALESCED_MMIO, 0x7fff07b898d0) = 0
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=1, flags=KVM_MEM_READONLY, guest_phys_addr=0xfffc0000, memory_size=262144, userspace_addr=0x7f07a4c00000}) = 0
    ioctl(18, KVM_REGISTER_COALESCED_MMIO, 0x7fff07b896e0) = 0
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=0, flags=0, guest_phys_addr=0, memory_size=0, userspace_addr=0x7f070fe00000}) = 0
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=0, flags=0, guest_phys_addr=0, memory_size=786432, userspace_addr=0x7f070fe00000}) = 0
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=2, flags=KVM_MEM_READONLY, guest_phys_addr=0xc0000, memory_size=131072, userspace_addr=0x7f07a4a00000}) = 0
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=3, flags=KVM_MEM_READONLY, guest_phys_addr=0xe0000, memory_size=131072, userspace_addr=0x7f07a4c20000}) = 0
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=4, flags=0, guest_phys_addr=0x100000, memory_size=2146435072, userspace_addr=0x7f070ff00000}) = 0
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=0, flags=0, guest_phys_addr=0, memory_size=0, userspace_addr=0x7f070fe00000}) = 0
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=0, flags=0, guest_phys_addr=0, memory_size=655360, userspace_addr=0x7f070fe00000}) = 0
    ioctl(18, KVM_REGISTER_COALESCED_MMIO, 0x7fff07b897f0) = 0
    ioctl(18, KVM_REGISTER_COALESCED_MMIO, 0x7fff07b89870) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_PIT2) = 1
    ioctl(18, KVM_CREATE_PIT2, 0x7fff07b899a0) = 0
    ioctl(18, KVM_IRQ_LINE_STATUS, 0x7fff07b89960) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_X86_SMM) = 1
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=65536, flags=0, guest_phys_addr=0, memory_size=786432, userspace_addr=0x7f070fe00000}) = 0
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=65537, flags=KVM_MEM_READONLY, guest_phys_addr=0xc0000, memory_size=131072, userspace_addr=0x7f07a4a00000}) = 0
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=65538, flags=KVM_MEM_READONLY, guest_phys_addr=0xe0000, memory_size=131072, userspace_addr=0x7f07a4c20000}) = 0
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=65539, flags=0, guest_phys_addr=0x100000, memory_size=2146435072, userspace_addr=0x7f070ff00000}) = 0
    ioctl(18, KVM_SET_USER_MEMORY_REGION, {slot=65540, flags=KVM_MEM_READONLY, guest_phys_addr=0xfffc0000, memory_size=262144, userspace_addr=0x7f07a4c00000}) = 0
    ioctl(18, KVM_IRQ_LINE_STATUS, 0x7fff07b89cb0) = 0
    ioctl(18, KVM_IRQ_LINE_STATUS, 0x7fff07b89c60) = 0
    ioctl(18, KVM_IRQ_LINE_STATUS, 0x7fff07b89c80) = 0
    ioctl(18, KVM_IRQ_LINE_STATUS, 0x7fff07b89c60) = 0
    ioctl(18, KVM_IRQ_LINE_STATUS, 0x7fff07b89c80) = 0
    ioctl(18, KVM_IRQ_LINE_STATUS, 0x7fff07b89c30) = 0
    ioctl(18, KVM_GET_PIT2, 0x7fff07b89bb0) = 0
    ioctl(18, KVM_SET_PIT2, 0x7fff07b89bd0) = 0
    ioctl(18, KVM_SET_IRQCHIP, 0x7fff07b89a80) = 0
    ioctl(18, KVM_SET_PIT2, 0x7fff07b89ac0) = 0
    ioctl(18, KVM_SET_IRQCHIP, 0x7fff07b89940) = 0
    ioctl(19, KVM_SET_VAPIC_ADDR, 0x7fff07b89c80) = 0
    ioctl(18, KVM_SET_PIT2, 0x7fff07b89c20) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_KVMCLOCK_CTRL) = 1
    ioctl(18, KVM_SET_CLOCK, 0x7fff07b89c60) = 0
    ioctl(18, KVM_GET_DIRTY_LOG, 0x7fff07b899b0) = 0
    ioctl(18, KVM_GET_PIT2, 0x7fff07b89c30) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_KVMCLOCK_CTRL) = 1
    ioctl(18, KVM_GET_CLOCK, 0x7fff07b89bf0) = 0
    ioctl(16, KVM_CHECK_EXTENSION, KVM_CAP_ADJUST_CLOCK) = 2


This problem might be related to 202189, but for me 4.20.14 and 5.0.[2-5]
all work fine

I'm sorry not being able to go deeper than this into the issue...

Thanks
ciao
-gabriele

=====================================================================
                               My specs
=====================================================================

#> uname -sr
Linux 5.0.7

#> cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 21
model           : 16
model name      : AMD Athlon(tm) X4 740 Quad Core Processor
stepping        : 1
microcode       : 0x6001116
cpu MHz         : 3500.044
cache size      : 2048 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 2
apicid          : 16
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 popcnt aes xsave avx f16c lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs xop skinit wdt lwp fma4 tce nodeid_msr tbm topoext perfctr_core perfctr_nb cpb hw_pstate ssbd vmmcall bmi1 arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold
bugs            : fxsave_leak sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 6400.08
TLB size        : 1536 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management: ts ttp tm 100mhzsteps hwpstate cpb eff_freq_ro

[...cpus 1 2 3 omitted...]
```
Comment 1 gabriele balducci 2019-04-26 14:19:06 UTC
Most likely the same problem has been reported here

  http://lists.nongnu.org/archive/html/qemu-devel/2019-04/msg03407.html
Comment 2 Sean Christopherson 2019-04-26 15:07:12 UTC
Yep, and https://bugzilla.suse.com/show_bug.cgi?id=1132694 as well, which has additional info.

Note You need to log in before you can comment on or make changes to this bug.