[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v3 10/14] plat/drivers: Start virtio block device
Hi Justin,we introduced these operations on the ukblkdev API design on purpose: A reason was that we wanted that there is no predone decision on which devices are initialized. It should happen by libraries using the devices or even at Unikernel application level. This way we make sure that unused devices are not introducing any boot delay or any other unwanted overhead because of their initialization. It may also be easier to implement parallelized device initialization when doing this at a later stage during the Unikernel lifetime. Thanks, Simon Reviewed-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> On 11.03.20 04:49, Justin He wrote: Hi Roxana Although the function of this patch looks good to me, I still prefer let uk_blkdev_start/configure be automatically invoked by virtio_blk device instead of the application itself. But as you once mentioned before, Simon agreed this patch. If that, @Simon Kuenzer Simon, would you please add your reviewed-by to this single patch, thanks. -- Cheers, Justin (Jia He)-----Original Message----- From: Roxana Nicolescu <nicolescu.roxana1996@xxxxxxxxx> Sent: Friday, March 6, 2020 4:30 AM To: minios-devel@xxxxxxxxxxxxx Cc: Justin He <Justin.He@xxxxxxx>; Roxana Nicolescu <nicolescu.roxana1996@xxxxxxxxx> Subject: [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.1IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you. _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |