From 8e126405449e734c33eb09e4deaf2274ccdcd345 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Wed, 24 Mar 2010 18:13:46 +0200 Subject: [PATCH] Initialize RIP before starting to run the guest Use the return value of load_kernel() to initialize RIP register before starting the guest with KVM_RUN ioctl(). Signed-off-by: Pekka Enberg --- kvm.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/kvm.c b/kvm.c index 62f8d04..faa5bc1 100644 --- a/kvm.c +++ b/kvm.c @@ -27,6 +27,8 @@ struct kvm { uint64_t ram_size; void *ram_start; + + struct kvm_regs regs; }; static void die_perror(const char *s) @@ -134,11 +136,11 @@ static struct kvm *kvm__init(void) static void kvm__run(struct kvm *self) { - int ret; + if (ioctl(self->vcpu_fd, KVM_SET_REGS, &self->regs) < 0) + die_perror("KVM_SET_REGS failed"); - ret = ioctl(self->vcpu_fd, KVM_RUN, 0); - if (ret < 0) - die_perror("KVM_RUN ioctl"); + if (ioctl(self->vcpu_fd, KVM_RUN, 0) < 0) + die_perror("KVM_RUN failed"); } static void kvm__show_registers(struct kvm *self) @@ -257,7 +259,7 @@ int main(int argc, char *argv[]) kvm = kvm__init(); - kvm__load_kernel(kvm, kernel_filename); + kvm->regs.rip = kvm__load_kernel(kvm, kernel_filename); kvm__run(kvm);