xref: /kvm-unit-tests/x86/hypercall.c (revision 7d36db351752e29ad27eaafe3f102de7064e429b)
1 #include "libcflat.h"
2 
3 #define KVM_HYPERCALL_INTEL ".byte 0x0f,0x01,0xc1"
4 #define KVM_HYPERCALL_AMD ".byte 0x0f,0x01,0xd9"
5 
6 static inline long kvm_hypercall0_intel(unsigned int nr)
7 {
8 	long ret;
9 	asm volatile(KVM_HYPERCALL_INTEL
10 		     : "=a"(ret)
11 		     : "a"(nr));
12 	return ret;
13 }
14 
15 static inline long kvm_hypercall0_amd(unsigned int nr)
16 {
17 	long ret;
18 	asm volatile(KVM_HYPERCALL_AMD
19 		     : "=a"(ret)
20 		     : "a"(nr));
21 	return ret;
22 }
23 
24 int main(int ac, char **av)
25 {
26 	kvm_hypercall0_intel(-1u);
27 	printf("Hypercall via VMCALL: OK\n");
28 	kvm_hypercall0_amd(-1u);
29 	printf("Hypercall via VMMCALL: OK\n");
30 	return 0;
31 }
32