Re: [PATCH v6 09/17] virtio: add minimal support for virtqueues

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Il 11/07/2014 11:23, Paolo Bonzini ha scritto:

+static struct virtqueue *vm_setup_vq(struct virtio_device *vdev,
+                     unsigned index,
+                     void (*callback)(struct virtqueue *vq),
+                     const char *name)
+{
+    struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vdev);
+    struct vring_virtqueue *vq;
+    void *queue;
+    unsigned num = VIRTIO_MMIO_QUEUE_NUM_MIN;
+
+    vq = alloc(sizeof(*vq));

You can move the allocation of vq to vm_find_vqs (interleaving alloc and
alloc_aligned causes some fragmentation), allocating a single block
instead of one per vq.

... or even use static storage for the "struct virtqueue". You can just merge "struct vring_virtqueue" and "struct virtqueue", as the idea of other virtqueue transport never materialized. Then:

+static struct virtqueue in_vq;
+static struct virtqueue out_vq;
+
 void chr_testdev_init(void)
 {
 	const char *io_names[] = { "input", "output" };
-	struct virtqueue *vqs[2];
+	struct virtqueue *vqs[2] = { &in_vq, &out_vq };
 	int ret;

 	vcon = virtio_bind(VIRTIO_ID_CONSOLE);
 	if (vcon == NULL) {
 		printf("%s: %s: can't find a virtio-console\n",
 				__func__, TESTDEV_NAME);
 		return;
 	}

 	ret = vcon->config->find_vqs(vcon, 2, vqs, NULL, io_names);
 	if (ret < 0) {
 		printf("%s: %s: can't init virtqueues\n",
 				__func__, TESTDEV_NAME);
 		vcon = NULL;
 		return;
 	}

-	in_vq = vqs[0];
-	out_vq = vqs[1];
 }

Paolo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux