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