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