]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Initialize RIP before starting to run the guest
authorPekka Enberg <penberg@cs.helsinki.fi>
Wed, 24 Mar 2010 16:13:46 +0000 (18:13 +0200)
committerPekka Enberg <penberg@cs.helsinki.fi>
Wed, 24 Mar 2010 16:13:46 +0000 (18:13 +0200)
Use the return value of load_kernel() to initialize RIP register before
starting the guest with KVM_RUN ioctl().

Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
tools/kvm/kvm.c

index 62f8d04d35459f67e2a64ed169dd7e6d14435cfa..faa5bc1307959c08b765f30840691d39fa1212b2 100644 (file)
@@ -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);