xref: /kvmtool/kvm.c (revision 28fa19c020d25eee8370524c13708fb7d9dcb106)
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 
7b8f6afcdSPekka Enberg static void die(const char *s)
8b8f6afcdSPekka Enberg {
9b8f6afcdSPekka Enberg 	perror(s);
10b8f6afcdSPekka Enberg 	exit(1);
11b8f6afcdSPekka Enberg }
12b8f6afcdSPekka Enberg 
13b8f6afcdSPekka Enberg static void cpu__reset(struct cpu *self)
14b8f6afcdSPekka Enberg {
15b8f6afcdSPekka Enberg 	self->regs.eip		= 0x000fff0UL;
16b8f6afcdSPekka Enberg 	self->regs.eflags	= 0x0000002UL;
17b8f6afcdSPekka Enberg }
18b8f6afcdSPekka Enberg 
19b8f6afcdSPekka Enberg static struct cpu *cpu__new(void)
20b8f6afcdSPekka Enberg {
21b8f6afcdSPekka Enberg 	return calloc(1, sizeof(struct cpu));
22b8f6afcdSPekka Enberg }
23b8f6afcdSPekka Enberg 
24b8f6afcdSPekka Enberg int main(int argc, char *argv[])
25b8f6afcdSPekka Enberg {
26b8f6afcdSPekka Enberg 	struct cpu *cpu;
27*28fa19c0SPekka Enberg 	int vmfd;
28*28fa19c0SPekka Enberg 	int ret;
29*28fa19c0SPekka Enberg 	int fd;
30b8f6afcdSPekka Enberg 
31b8f6afcdSPekka Enberg 	fd = open("/dev/kvm", O_RDWR);
32b8f6afcdSPekka Enberg 	if (fd < 0)
33b8f6afcdSPekka Enberg 		die("open");
34b8f6afcdSPekka Enberg 
356c7d8514SPekka Enberg 	ret = ioctl(fd, KVM_GET_API_VERSION, 0);
366c7d8514SPekka Enberg 	if (ret != KVM_API_VERSION)
376c7d8514SPekka Enberg 		die("ioctl");
386c7d8514SPekka Enberg 
39*28fa19c0SPekka Enberg 	vmfd = ioctl(fd, KVM_CREATE_VM, 0);
40*28fa19c0SPekka Enberg 	if (vmfd < 0)
41*28fa19c0SPekka Enberg 		die("open");
42*28fa19c0SPekka Enberg 
43b8f6afcdSPekka Enberg 	cpu = cpu__new();
44b8f6afcdSPekka Enberg 
45b8f6afcdSPekka Enberg 	cpu__reset(cpu);
46b8f6afcdSPekka Enberg 
47b8f6afcdSPekka Enberg 	return 0;
48b8f6afcdSPekka Enberg }
49