xref: /kvmtool/kvm.c (revision 9b1fb1c3dc5757e74c7f3f7dba216452bd110414)
1b8f6afcdSPekka Enberg #include "kvm/cpu.h"
2b8f6afcdSPekka Enberg 
36c7d8514SPekka Enberg #include <linux/kvm.h>
4b8f6afcdSPekka Enberg #include <stdlib.h>
5b8f6afcdSPekka Enberg #include <fcntl.h>
6b8f6afcdSPekka Enberg 
7*9b1fb1c3SPekka Enberg struct kvm {
8*9b1fb1c3SPekka Enberg 	int			fd;		/* /dev/kvm */
9*9b1fb1c3SPekka Enberg 	int			vmfd;
10*9b1fb1c3SPekka Enberg };
11*9b1fb1c3SPekka Enberg 
12b8f6afcdSPekka Enberg static void die(const char *s)
13b8f6afcdSPekka Enberg {
14b8f6afcdSPekka Enberg 	perror(s);
15b8f6afcdSPekka Enberg 	exit(1);
16b8f6afcdSPekka Enberg }
17b8f6afcdSPekka Enberg 
18b8f6afcdSPekka Enberg static void cpu__reset(struct cpu *self)
19b8f6afcdSPekka Enberg {
20b8f6afcdSPekka Enberg 	self->regs.eip		= 0x000fff0UL;
21b8f6afcdSPekka Enberg 	self->regs.eflags	= 0x0000002UL;
22b8f6afcdSPekka Enberg }
23b8f6afcdSPekka Enberg 
24b8f6afcdSPekka Enberg static struct cpu *cpu__new(void)
25b8f6afcdSPekka Enberg {
26b8f6afcdSPekka Enberg 	return calloc(1, sizeof(struct cpu));
27b8f6afcdSPekka Enberg }
28b8f6afcdSPekka Enberg 
29b8f6afcdSPekka Enberg int main(int argc, char *argv[])
30b8f6afcdSPekka Enberg {
31b8f6afcdSPekka Enberg 	struct cpu *cpu;
32*9b1fb1c3SPekka Enberg 	struct kvm kvm;
3328fa19c0SPekka Enberg 	int ret;
34b8f6afcdSPekka Enberg 
35*9b1fb1c3SPekka Enberg 	kvm.fd = open("/dev/kvm", O_RDWR);
36*9b1fb1c3SPekka Enberg 	if (kvm.fd < 0)
37b8f6afcdSPekka Enberg 		die("open");
38b8f6afcdSPekka Enberg 
39*9b1fb1c3SPekka Enberg 	ret = ioctl(kvm.fd, KVM_GET_API_VERSION, 0);
406c7d8514SPekka Enberg 	if (ret != KVM_API_VERSION)
416c7d8514SPekka Enberg 		die("ioctl");
426c7d8514SPekka Enberg 
43*9b1fb1c3SPekka Enberg 	kvm.vmfd = ioctl(kvm.fd, KVM_CREATE_VM, 0);
44*9b1fb1c3SPekka Enberg 	if (kvm.vmfd < 0)
4528fa19c0SPekka Enberg 		die("open");
4628fa19c0SPekka Enberg 
47b8f6afcdSPekka Enberg 	cpu = cpu__new();
48b8f6afcdSPekka Enberg 
49b8f6afcdSPekka Enberg 	cpu__reset(cpu);
50b8f6afcdSPekka Enberg 
51b8f6afcdSPekka Enberg 	return 0;
52b8f6afcdSPekka Enberg }
53