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

[Minios-devel] [UNIKRAFT PATCH v3 10/14] plat/drivers: Start virtio block device



This patch introduces start/stop operations to virtio device.
This implies connection to backend by setting the DRIVER_OK status
bit.

Signed-off-by: Roxana Nicolescu <nicolescu.roxana1996@xxxxxxxxx>
---
 plat/drivers/virtio/virtio_blk.c | 48 ++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/plat/drivers/virtio/virtio_blk.c b/plat/drivers/virtio/virtio_blk.c
index cb732135..ecd8e691 100644
--- a/plat/drivers/virtio/virtio_blk.c
+++ b/plat/drivers/virtio/virtio_blk.c
@@ -354,6 +354,52 @@ exit:
        return rc;
 }
 
+static int virtio_blkdev_start(struct uk_blkdev *dev)
+{
+       struct virtio_blk_device *d;
+
+       UK_ASSERT(dev != NULL);
+
+       d = to_virtioblkdev(dev);
+       virtio_dev_drv_up(d->vdev);
+
+       uk_pr_info(DRIVER_NAME": %"__PRIu16" started\n", d->uid);
+
+       return 0;
+}
+
+/* If one queue has unconsumed responses it returns -EBUSY
+ * TODO restart doesn't work
+ **/
+static int virtio_blkdev_stop(struct uk_blkdev *dev)
+{
+       struct virtio_blk_device *d;
+       uint16_t q_id;
+       int rc = 0;
+
+       UK_ASSERT(dev != NULL);
+
+       d = to_virtioblkdev(dev);
+       for (q_id = 0; q_id < d->nb_queues; ++q_id) {
+               if (virtqueue_hasdata(d->qs[q_id].vq)) {
+                       uk_pr_err("Queue:%"__PRIu16" has unconsumed 
responses\n",
+                                       q_id);
+                       return -EBUSY;
+               }
+       }
+
+       rc = virtio_dev_reset(d->vdev);
+       if (rc) {
+               uk_pr_info(DRIVER_NAME":%"__PRIu16" stopped", d->uid);
+               goto out;
+       }
+
+       uk_pr_warn(DRIVER_NAME":%"__PRIu16" Start is not allowed!!!", d->uid);
+
+out:
+       return rc;
+}
+
 static int virtio_blkdev_unconfigure(struct uk_blkdev *dev)
 {
        struct virtio_blk_device *d;
@@ -507,6 +553,8 @@ static const struct uk_blkdev_ops virtio_blkdev_ops = {
                .queue_get_info = virtio_blkdev_queue_info_get,
                .queue_setup = virtio_blkdev_queue_setup,
                .queue_intr_enable = virtio_blkdev_queue_intr_enable,
+               .dev_start = virtio_blkdev_start,
+               .dev_stop = virtio_blkdev_stop,
                .queue_intr_disable = virtio_blkdev_queue_intr_disable,
                .queue_release = virtio_blkdev_queue_release,
                .dev_unconfigure = virtio_blkdev_unconfigure,
-- 
2.17.1


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.