KVM emulation failure with "movups" instruction

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello

I am testing my own x86_64 kernel with QEMU/KVM and it report cryptic
error "KVM internal error. Suberror: 1". I believe this emulation
error happens in Linux kernel most likely in arch/x86/kvm/emulate.c

I tested KVM with Linux 4.4.0, 4.12.3 and both versions return this
emulation error. It is strange as QEMU emulation and VMWare work fine
with the same kernel binary.


How to understand what is the KVM issue and why it fails? Is there a
way to obtain more information about the error?


Here is my code where the issue happens:

0000000000100c20 <console_write>:
  100c20:       48 85 f6                test   %rsi,%rsi
  100c23:       0f 84 11 05 00 00       je     10113a <console_write+0x51a>
  100c29:       45 31 c0                xor    %r8d,%r8d
  100c2c:       b9 0e 8f 0b 00          mov    $0xb8f0e,%ecx
  100c31:       66 66 66 66 66 66 2e    data32 data32 data32 data32
data32 nopw %cs:0x0(%rax,%rax,1)
  100c38:       0f 1f 84 00 00 00 00
  100c3f:       00
  100c40:       0f be 07                movsbl (%rdi),%eax
  100c43:       0f b7 d0                movzwl %ax,%edx
  100c46:       83 fa 0a                cmp    $0xa,%edx
  100c49:       0f 85 91 00 00 00       jne    100ce0 <console_write+0xc0>
  100c4f:       48 8b 05 aa 83 00 00    mov    0x83aa(%rip),%rax
 # 109000 <row>
  100c56:       48 8d 50 01             lea    0x1(%rax),%rdx
  100c5a:       48 89 15 9f 83 00 00    mov    %rdx,0x839f(%rip)
 # 109000 <row>
  100c61:       48 83 fa 19             cmp    $0x19,%rdx
  100c65:       0f 85 35 04 00 00       jne    1010a0 <console_write+0x480>
  100c6b:       31 d2                   xor    %edx,%edx
  100c6d:       0f 1f 00                nopl   (%rax)
  100c70:       0f 10 84 51 92 f1 ff    movups -0xe6e(%rcx,%rdx,2),%xmm0

^^^^^^^^^^^^ KVM error happens here ^^^^^^^ See registers stack below

  100c77:       ff
  100c78:       0f 11 84 51 f2 f0 ff    movups %xmm0,-0xf0e(%rcx,%rdx,2)
  100c7f:       ff
  100c80:       48 83 c2 08             add    $0x8,%rdx
  100c84:       48 81 fa 80 07 00 00    cmp    $0x780,%rdx
  100c8b:       75 e3                   jne    100c70 <console_write+0x50>
  100c8d:       48 89 05 6c 83 00 00    mov    %rax,0x836c(%rip)
 # 109000 <row>
  100c94:       48 c7 05 c1 3b 00 00    movq   $0xb8f00,0x3bc1(%rip)
     # 104860 <cursor>
  100c9b:       00 8f 0b 00
  100c9f:       4c 8b 0d 62 83 00 00    mov    0x8362(%rip),%r9
# 109008 <column>
  100ca6:       4d 85 c9                test   %r9,%r9
  100ca9:       0f 84 71 04 00 00       je     101120 <console_write+0x500>
  100caf:       49 8d 41 ff             lea    -0x1(%r9),%rax
  100cb3:       44 89 ca                mov    %r9d,%edx
  100cb6:       83 e2 07                and    $0x7,%edx
  100cb9:       48 83 f8 07             cmp    $0x7,%rax
  100cbd:       0f 83 f6 03 00 00       jae    1010b9 <console_write+0x499>





Registers at KVM error as reported by QEMU

RAX=0000000000000018 RBX=0000000000000001 RCX=00000000000b8f0e
RDX=0000000000000000
RSI=0000000000000001 RDI=000000000010445a RBP=000000000010445b
RSP=000000000010af78
R8 =0000000000000000 R9 =00000000000b8f56 R10=000000000010445c
R11=0000000000000004
R12=000000000010445a R13=000000007fffffd3 R14=0000000000000001
R15=000000000000002c
RIP=0000000000100c70 RFL=00010246 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0000 0000000000000000 ffffffff 00c00000
CS =0008 0000000000000000 00000000 00209900 DPL=0 CS64 [--A]
SS =0000 0000000000000000 ffffffff 00c00000
DS =0000 0000000000000000 ffffffff 00c00000
FS =0000 0000000000000000 ffffffff 00c00000
GS =0000 0000000000000000 ffffffff 00c00000
LDT=0000 0000000000000000 0000ffff 00008200 DPL=0 LDT
TR =0000 0000000000000000 0000ffff 00008b00 DPL=0 TSS64-busy
GDT=     0000000000104518 0000000f
IDT=     0000000000105030 00000fff
CR0=80000033 CR2=0000000000000000 CR3=0000000000107000 CR4=00000620
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000
DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
EFER=0000000000000500



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux