aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/virtio/virtio_ring.c')
-rw-r--r--drivers/virtio/virtio_ring.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
index 51278f8bd3ab..22a4329ed200 100644
--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -1198,7 +1198,7 @@ bool virtqueue_is_broken(struct virtqueue *_vq)
1198{ 1198{
1199 struct vring_virtqueue *vq = to_vvq(_vq); 1199 struct vring_virtqueue *vq = to_vvq(_vq);
1200 1200
1201 return vq->broken; 1201 return READ_ONCE(vq->broken);
1202} 1202}
1203EXPORT_SYMBOL_GPL(virtqueue_is_broken); 1203EXPORT_SYMBOL_GPL(virtqueue_is_broken);
1204 1204
@@ -1212,7 +1212,9 @@ void virtio_break_device(struct virtio_device *dev)
1212 1212
1213 list_for_each_entry(_vq, &dev->vqs, list) { 1213 list_for_each_entry(_vq, &dev->vqs, list) {
1214 struct vring_virtqueue *vq = to_vvq(_vq); 1214 struct vring_virtqueue *vq = to_vvq(_vq);
1215 vq->broken = true; 1215
1216 /* Pairs with READ_ONCE() in virtqueue_is_broken(). */
1217 WRITE_ONCE(vq->broken, true);
1216 } 1218 }
1217} 1219}
1218EXPORT_SYMBOL_GPL(virtio_break_device); 1220EXPORT_SYMBOL_GPL(virtio_break_device);