1b8f6afcdSPekka Enberg #include "kvm/cpu.h" 2b8f6afcdSPekka Enberg 3*6c7d8514SPekka 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*6c7d8514SPekka Enberg int fd, ret; 28b8f6afcdSPekka Enberg 29b8f6afcdSPekka Enberg fd = open("/dev/kvm", O_RDWR); 30b8f6afcdSPekka Enberg if (fd < 0) 31b8f6afcdSPekka Enberg die("open"); 32b8f6afcdSPekka Enberg 33*6c7d8514SPekka Enberg ret = ioctl(fd, KVM_GET_API_VERSION, 0); 34*6c7d8514SPekka Enberg if (ret != KVM_API_VERSION) 35*6c7d8514SPekka Enberg die("ioctl"); 36*6c7d8514SPekka Enberg 37b8f6afcdSPekka Enberg cpu = cpu__new(); 38b8f6afcdSPekka Enberg 39b8f6afcdSPekka Enberg cpu__reset(cpu); 40b8f6afcdSPekka Enberg 41b8f6afcdSPekka Enberg return 0; 42b8f6afcdSPekka Enberg } 43