Re: KVM emulation failure with "movups" instruction

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

 



Hi David

On Mon, Aug 7, 2017 at 9:59 AM, David Matlack <dmatlack@xxxxxxxxxx> wrote:
> Likely this instruction is accessing an MMIO region (probably a VGA
> buffer, given "mov    $0xb8f0e,%ecx"). This will cause a trap to KVM
> and KVM will try to emulate the instruction. The instruction doing the
> MMIO access is an SSE instruction,

It is correct. The emulation error happens in printf() kernel function
that formats a string and then prints it VGA area. Compilers (both
clang and gcc) think that SSE instructions are more efficient in
dealing with strings and that's why I have SSE instructions here.

> which KVM does not have support to
> emulate, thus the internal error. If you didn't hand write this
> assembly I would try compiling your kernel with compilation flags to
> disable SSE code generation and see if that fixes your issue.

Adding "-mno-sse" and removing some floating point functionality in my
kernel make the emulation error go away. So it confirms your thesis.

Though I need floating point/SSE in my kernel and I can't disable SSE
completely. Instead I would love to understand why KVM can't use SSE
with VGA memory? I tested my kernel binary with bare hardware, KVM,
VMWare, QEMU and only KVM fails.



[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