]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
kvm tools: Move disk_image into virtio-blk
authorSasha Levin <levinsasha928@gmail.com>
Thu, 5 May 2011 10:24:29 +0000 (13:24 +0300)
committerPekka Enberg <penberg@kernel.org>
Thu, 5 May 2011 14:37:02 +0000 (17:37 +0300)
There may be multiple disk images on a running guest,
each associated with a virtio-blk.

Move disk_image into virtio-blk in preperation for
multiple disk images.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
tools/kvm/include/kvm/kvm.h
tools/kvm/include/kvm/virtio-blk.h
tools/kvm/kvm-run.c
tools/kvm/virtio-blk.c

index 327a1ab8975bd70ac76b482f42a39f25b8a0e542..d239f498b527470c58bf6b57b03663c50aeee105 100644 (file)
@@ -16,7 +16,6 @@ struct kvm {
 
        int                     nrcpus;         /* Number of cpus to run */
 
-       struct disk_image       *disk_image;
        uint64_t                ram_size;
        void                    *ram_start;
 
index f82bbc7f6954c606a16d5e243254e0e594a86a29..f21a0e4769ae557a73ee9fee9513c53cd416797e 100644 (file)
@@ -1,8 +1,10 @@
 #ifndef KVM__BLK_VIRTIO_H
 #define KVM__BLK_VIRTIO_H
 
+#include "kvm/disk-image.h"
+
 struct kvm;
 
-void virtio_blk__init(struct kvm *self);
+void virtio_blk__init(struct kvm *self, struct disk_image *disk);
 
 #endif /* KVM__BLK_VIRTIO_H */
index 6fd46ed17b55dd7158be23710c5e8e552acafa98..b92232d8795609838978c9479fee5baf6d017330 100644 (file)
@@ -409,9 +409,11 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
                strlcat(real_cmdline, " root=/dev/vda rw ", sizeof(real_cmdline));
 
        if (image_filename) {
-               kvm->disk_image = disk_image__open(image_filename, readonly_image);
-               if (!kvm->disk_image)
+               struct disk_image *disk = disk_image__open(image_filename, readonly_image);
+               if (!disk)
                        die("unable to load disk image %s", image_filename);
+
+               virtio_blk__init(kvm, disk);
        }
        free(hi);
 
@@ -429,8 +431,6 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
 
        pci__init();
 
-       virtio_blk__init(kvm);
-
        virtio_console__init(kvm);
 
        if (virtio_rng)
@@ -487,7 +487,6 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
                        exit_code       = 1;
        }
 
-       disk_image__close(kvm->disk_image);
        kvm__delete(kvm);
 
        if (!exit_code)
index 9034abdbe13c94a31bdb1b2b89eb0bd0cc315db4..e4a79dd894604d4b72a91ed4ebad846cafd72198 100644 (file)
@@ -28,6 +28,7 @@ struct blk_device {
        pthread_mutex_t                 mutex;
 
        struct virtio_blk_config        blk_config;
+       struct disk_image               *disk;
        uint32_t                        host_features;
        uint32_t                        guest_features;
        uint16_t                        config_vector;
@@ -130,11 +131,11 @@ static bool virtio_blk_do_io_request(struct kvm *self, struct virt_queue *queue)
 
        switch (req->type) {
        case VIRTIO_BLK_T_IN:
-               block_cnt = disk_image__read_sector_iov(self->disk_image, req->sector, iov + 1, in + out - 2);
+               block_cnt = disk_image__read_sector_iov(blk_device.disk, req->sector, iov + 1, in + out - 2);
 
                break;
        case VIRTIO_BLK_T_OUT:
-               block_cnt = disk_image__write_sector_iov(self->disk_image, req->sector, iov + 1, in + out - 2);
+               block_cnt = disk_image__write_sector_iov(blk_device.disk, req->sector, iov + 1, in + out - 2);
 
                break;
 
@@ -243,12 +244,14 @@ static struct pci_device_header virtio_blk_pci_device = {
 
 #define PCI_VIRTIO_BLK_DEVNUM 1
 
-void virtio_blk__init(struct kvm *self)
+void virtio_blk__init(struct kvm *self, struct disk_image *disk)
 {
-       if (!self->disk_image)
+       if (!disk)
                return;
 
-       blk_device.blk_config.capacity = self->disk_image->size / SECTOR_SIZE;
+       blk_device.disk = disk;
+
+       blk_device.blk_config.capacity = disk->size / SECTOR_SIZE;
 
        pci__register(&virtio_blk_pci_device, PCI_VIRTIO_BLK_DEVNUM);