Re: [PATCH v1 1/2] iommu/virtio: Set driver data before enabling virtqueues

From: Will Deacon

Date: Wed Jul 22 2026 - 17:43:51 EST


On Tue, Jul 14, 2026 at 10:59:13AM +0800, weimin xiong wrote:
> From: Xiong Weimin <xiongweimin@xxxxxxxxxx>
>
> The event virtqueue callback retrieves the driver state through
> vq->vdev->priv. viommu_probe() currently initializes that pointer only
> after virtio_device_ready() and after the event queue is populated.
>
> Store the driver data before creating the virtqueues so callbacks always
> see initialized driver state once the device is made ready. Clear the
> pointer again on probe failure.
>
> Signed-off-by: Xiong Weimin <xiongweimin@xxxxxxxxxx>
> ---
> drivers/iommu/virtio-iommu.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/iommu/virtio-iommu.c b/drivers/iommu/virtio-iommu.c
> index 9118377d7..4c91a82d2 100644
> --- a/drivers/iommu/virtio-iommu.c
> +++ b/drivers/iommu/virtio-iommu.c
> @@ -1173,11 +1173,12 @@ static int viommu_probe(struct virtio_device *vdev)
> ida_init(&viommu->domain_ids);
> viommu->dev = dev;
> viommu->vdev = vdev;
> + vdev->priv = viommu;
> INIT_LIST_HEAD(&viommu->requests);
>
> ret = viommu_init_vqs(viommu);
> if (ret)
> - return ret;
> + goto err_clear_priv;

I guess it would make sense to pass the 'vdev' instead of the 'viommu'
pointer to viommu_init_vqs(), now that you have linked them together.

Will