diff options
Diffstat (limited to 'drivers/virtio/virtio_ring.c')
-rw-r--r-- | drivers/virtio/virtio_ring.c | 6 |
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 | } |
1203 | EXPORT_SYMBOL_GPL(virtqueue_is_broken); | 1203 | EXPORT_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 | } |
1218 | EXPORT_SYMBOL_GPL(virtio_break_device); | 1220 | EXPORT_SYMBOL_GPL(virtio_break_device); |