Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a95251b8 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull remoteproc fix from Ohad Ben-Cohen:
 "A single remoteproc fix for an error path issue reported by Ido Yariv."

* tag 'rproc-3.7-fix' of git://git.kernel.org/pub/scm/linux/kernel/git/ohad/remoteproc:
  remoteproc: fix error path of ->find_vqs
parents b45b161d dab55bba
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -120,15 +120,11 @@ static struct virtqueue *rp_find_vq(struct virtio_device *vdev,
	return vq;
}

static void rproc_virtio_del_vqs(struct virtio_device *vdev)
static void __rproc_virtio_del_vqs(struct virtio_device *vdev)
{
	struct virtqueue *vq, *n;
	struct rproc *rproc = vdev_to_rproc(vdev);
	struct rproc_vring *rvring;

	/* power down the remote processor before deleting vqs */
	rproc_shutdown(rproc);

	list_for_each_entry_safe(vq, n, &vdev->vqs, list) {
		rvring = vq->priv;
		rvring->vq = NULL;
@@ -137,6 +133,16 @@ static void rproc_virtio_del_vqs(struct virtio_device *vdev)
	}
}

static void rproc_virtio_del_vqs(struct virtio_device *vdev)
{
	struct rproc *rproc = vdev_to_rproc(vdev);

	/* power down the remote processor before deleting vqs */
	rproc_shutdown(rproc);

	__rproc_virtio_del_vqs(vdev);
}

static int rproc_virtio_find_vqs(struct virtio_device *vdev, unsigned nvqs,
		       struct virtqueue *vqs[],
		       vq_callback_t *callbacks[],
@@ -163,7 +169,7 @@ static int rproc_virtio_find_vqs(struct virtio_device *vdev, unsigned nvqs,
	return 0;

error:
	rproc_virtio_del_vqs(vdev);
	__rproc_virtio_del_vqs(vdev);
	return ret;
}