This patchset introduces a Force Emulation Prefix (ud2a; .ascii "kvm") 
for "emulate the next instruction", the codes will be executed by emulator 
instead of processor, for testing purposes.

A testcase here:

#include <stdio.h>
#include <string.h>
   
#define HYPERVISOR_INFO 0x40000000
   
#define CPUID(idx, eax, ebx, ecx, edx)\
    asm volatile (\
    "ud2a; .ascii \"kvm\"; 1: cpuid" \
    :"=b" (*ebx), "=a" (*eax),"=c" (*ecx), "=d" (*edx)\
        :"0"(idx) );  
   
void main()  
{  
        unsigned int eax,ebx,ecx,edx;  
        char string[13];  
   
        CPUID(HYPERVISOR_INFO, &eax, &ebx, &ecx, &edx);  
        *(unsigned int *)(string+0) = ebx;  
        *(unsigned int *)(string+4) = ecx;  
        *(unsigned int *)(string+8) = edx;  
   
        string[12] = 0;  
        if (strncmp(string, "KVMKVMKVM\0\0\0",12) == 0)
                printf("kvm guest\n");  
        else  
                printf("bare hardware\n");  
}

Cc: Paolo Bonzini <pbonz...@redhat.com>
Cc: Radim Krčmář <rkrc...@redhat.com>
Cc: Andrew Cooper <andrew.coop...@citrix.com>

Wanpeng Li (2):
  KVM: VMX: Introduce handle_ud()
  KVM: VMX: Add Force Emulation Prefix for "emulate the next instruction"

 arch/x86/kvm/vmx.c | 38 ++++++++++++++++++++++++++++++--------
 1 file changed, 30 insertions(+), 8 deletions(-)

-- 
2.7.4

Reply via email to