Hi Kuan-Wei,

On 2026-08-29T19:21:13, Kuan-Wei Chiu <[email protected]> wrote:
> virtio: 9p: Add 9P transport driver
>
> Add virtio transport driver for the 9P filesystem.
>
> This driver binds to the virtio-9p device exposed by the hypervisor and
> registers as a DM UCLASS_9P device. It implements the transmit and
> receive routines.
>
> Signed-off-by: Kuan-Wei Chiu <[email protected]>
>
> drivers/virtio/Kconfig         |   7 +++
>  drivers/virtio/Makefile        |   1 +
>  drivers/virtio/virtio-uclass.c |   1 +
>  drivers/virtio/virtio_9p.c     | 119 
> +++++++++++++++++++++++++++++++++++++++++
>  include/virtio.h               |  12 ++++-
>  5 files changed, 139 insertions(+), 1 deletion(-)

> diff --git a/drivers/virtio/virtio_9p.c b/drivers/virtio/virtio_9p.c
> @@ -0,0 +1,119 @@
> +static int virtio_9p_remove(struct udevice *dev)
> +{
> +     return virtio_reset(dev);
> +}
> +
> +U_BOOT_DRIVER(virtio_9p) = {
> +     .name       = VIRTIO_9P_DRV_NAME,
> +     .id         = UCLASS_9P,
> +     .ops        = &virtio_9p_ops,
> +     .bind       = virtio_9p_bind,
> +     .probe      = virtio_9p_probe,
> +     .remove     = virtio_9p_remove,

Sorry, I gave you the wrong function name last time. Other virtio
drivers set .remove = virtio_remove, which calls virtio_del_vqs()
before virtio_reset(). Going straight to virtio_reset() here leaks the
vq allocated in probe(). Please drop the wrapper and use virtio_remove
directly.

> diff --git a/drivers/virtio/virtio_9p.c b/drivers/virtio/virtio_9p.c
> @@ -0,0 +1,119 @@
> +     start = get_timer(0);
> +     while (!virtqueue_get_buf(priv->vq, &len)) {
> +             if (get_timer(start) > VIRTIO_9P_TIMEOUT_MS)
> +                     return -ETIMEDOUT;
> +     }
> +
> +     if (len < (int)sizeof(struct p9_header))
> +             return -EIO;
> +
> +     return 0;
> +}

Looks good, It might be worth returning len to the caller so the
client can cross-check it against the size field in the reply header,
but up to you.

Regards,
Simon

Reply via email to