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 <ohad@wizery.com>
This commit is contained in:
Родитель
b719587eb4
Коммит
dd6da1c5e9
|
@ -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);
|
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);
|
rproc_virtio_notify, callback, name);
|
||||||
if (!vq) {
|
if (!vq) {
|
||||||
dev_err(rproc->dev, "vring_new_virtqueue %s failed\n", name);
|
dev_err(rproc->dev, "vring_new_virtqueue %s failed\n", name);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче