The virtqueue's vdev points to the functional device, while the MMIO
register base and version are stored in its parent transport device.
Using the child's private data can make queue deletion write to queue
memory instead of MMIO registers.

Get the parent device's private data in virtio_mmio_del_vq().

Fixes: fdc4aca89ecb ("virtio: Add virtio over mmio transport driver")
Signed-off-by: Bin Meng <[email protected]>
---

 drivers/virtio/virtio_mmio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c
index 975f98cd9e5..4b478639fb7 100644
--- a/drivers/virtio/virtio_mmio.c
+++ b/drivers/virtio/virtio_mmio.c
@@ -279,7 +279,7 @@ error_available:
 
 static void virtio_mmio_del_vq(struct virtqueue *vq)
 {
-       struct virtio_mmio_priv *priv = dev_get_priv(vq->vdev);
+       struct virtio_mmio_priv *priv = dev_get_priv(vq->vdev->parent);
        unsigned int index = vq->index;
 
        /* Select and deactivate the queue */
-- 
2.53.0

Reply via email to