From: Ohad Ben-Cohen Date: Thu, 12 Jan 2012 07:26:57 +0000 (+0200) Subject: remoteproc: don't use virtio's weak barriers X-Git-Tag: v3.4-rc1~87^2~1^2~2 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=dd6da1c5e99a3b736b52370c504a2b8843cbfda6;p=~emulex%2Finfiniband.git remoteproc: don't use virtio's weak barriers When creating a virtqueue for rpmsg, tell virtio we're not interested in "weak" smp barriers, since we're talking to a real device. On ARM, this means using a DSB instead of a DMB, which is needed for platforms that kick the remote processor using some kind of a mailbox device mapped to Device memory (otherwise the kick can jump ahead and wake the remote processor before it has observed the changes to the vrings). Signed-off-by: Ohad Ben-Cohen --- diff --git a/drivers/remoteproc/remoteproc_rpmsg.c b/drivers/remoteproc/remoteproc_rpmsg.c index f30be4c193e..4f73e811bb8 100644 --- a/drivers/remoteproc/remoteproc_rpmsg.c +++ b/drivers/remoteproc/remoteproc_rpmsg.c @@ -96,7 +96,11 @@ static struct virtqueue *rp_find_vq(struct virtio_device *vdev, dev_dbg(rproc->dev, "vring%d: va %p qsz %d\n", id, addr, len); - vq = vring_new_virtqueue(len, AMP_VRING_ALIGN, vdev, addr, + /* + * Create the new vq, and tell virtio we're not interested in + * the 'weak' smp barriers, since we're talking with a real device. + */ + vq = vring_new_virtqueue(len, AMP_VRING_ALIGN, vdev, false, addr, rproc_virtio_notify, callback, name); if (!vq) { dev_err(rproc->dev, "vring_new_virtqueue %s failed\n", name);