The rpmsg_probe() is broken at the moment because virtqueue_add_inbuf() fails due to both virtqueues (Rx and Tx) marked as broken by the __vring_new_virtqueue() function. To solve this, virtio_device_ready() (which unbreaks queues) should be called before virtqueue_add_inbuf(). Fixes: 8b4ec69d7e09 ("virtio: harden vring IRQ") Signed-off-by: Anup Patel <apatel@xxxxxxxxxxxxxxxx> --- drivers/rpmsg/virtio_rpmsg_bus.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c index 905ac7910c98..71a64d2c7644 100644 --- a/drivers/rpmsg/virtio_rpmsg_bus.c +++ b/drivers/rpmsg/virtio_rpmsg_bus.c @@ -929,6 +929,9 @@ static int rpmsg_probe(struct virtio_device *vdev) /* and half is dedicated for TX */ vrp->sbufs = bufs_va + total_buf_space / 2; + /* From this point on, we can notify and get callbacks. */ + virtio_device_ready(vdev); + /* set up the receive buffers */ for (i = 0; i < vrp->num_bufs / 2; i++) { struct scatterlist sg; @@ -983,9 +986,6 @@ static int rpmsg_probe(struct virtio_device *vdev) */ notify = virtqueue_kick_prepare(vrp->rvq); - /* From this point on, we can notify and get callbacks. */ - virtio_device_ready(vdev); - /* tell the remote processor it can start sending messages */ /* * this might be concurrent with callbacks, but we are only -- 2.34.1