From 1a786b400ce9ebde12f1521bcdeb8c93d2892f84 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Thu, 8 Apr 2010 20:42:32 +0300 Subject: [PATCH] kvm: Clean up kvm__reset_vcpu() function This patch splits kvm__reset_vcpu() into three separate helper functions to make the function more readable. Signed-off-by: Pekka Enberg --- tools/kvm/kvm.c | 58 ++++++++++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/tools/kvm/kvm.c b/tools/kvm/kvm.c index 44a38a053c0b..4bea85cd6407 100644 --- a/tools/kvm/kvm.c +++ b/tools/kvm/kvm.c @@ -378,7 +378,36 @@ static inline uint32_t selector_to_base(uint16_t selector) return (uint32_t)selector * 16; } -void kvm__reset_vcpu(struct kvm *self) +static void kvm__setup_fpu(struct kvm *self) +{ + self->fpu = (struct kvm_fpu) { + .fcw = 0x37f, + .mxcsr = 0x1f80, + }; + + if (ioctl(self->vcpu_fd, KVM_SET_FPU, &self->fpu) < 0) + die_perror("KVM_SET_FPU failed"); +} + +static void kvm__setup_regs(struct kvm *self) +{ + self->regs = (struct kvm_regs) { + /* We start the guest in 16-bit real mode */ + .rflags = 0x0000000000000002ULL, + + .rip = self->boot_ip, + .rsp = self->boot_sp, + .rbp = self->boot_sp, + }; + + if (self->regs.rip > USHRT_MAX) + die("ip 0x%" PRIx64 " is too high for real mode", (uint64_t) self->regs.rip); + + if (ioctl(self->vcpu_fd, KVM_SET_REGS, &self->regs) < 0) + die_perror("KVM_SET_REGS failed"); +} + +static void kvm__setup_sregs(struct kvm *self) { self->sregs = (struct kvm_sregs) { .cr0 = 0x60000010ULL, @@ -456,30 +485,15 @@ void kvm__reset_vcpu(struct kvm *self) if (ioctl(self->vcpu_fd, KVM_SET_SREGS, &self->sregs) < 0) die_perror("KVM_SET_SREGS failed"); +} - self->regs = (struct kvm_regs) { - /* We start the guest in 16-bit real mode */ - .rflags = 0x0000000000000002ULL, - - .rip = self->boot_ip, - .rsp = self->boot_sp, - .rbp = self->boot_sp, - }; - - if (self->regs.rip > USHRT_MAX) - die("ip 0x%" PRIx64 " is too high for real mode", (uint64_t) self->regs.rip); - - if (ioctl(self->vcpu_fd, KVM_SET_REGS, &self->regs) < 0) - die_perror("KVM_SET_REGS failed"); - - self->fpu = (struct kvm_fpu) { - .fcw = 0x37f, - .mxcsr = 0x1f80, - }; +void kvm__reset_vcpu(struct kvm *self) +{ + kvm__setup_sregs(self); - if (ioctl(self->vcpu_fd, KVM_SET_FPU, &self->fpu) < 0) - die_perror("KVM_SET_FPU failed"); + kvm__setup_regs(self); + kvm__setup_fpu(self); } void kvm__run(struct kvm *self) -- 2.39.5