diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-14 07:56:45 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-14 07:56:45 -0700 |
commit | 508ff9d41c9aa7e178f6330e703a22af03090dd5 (patch) | |
tree | d0098fad8ac34f2f3ee7f162a83ba1ae18edd77f | |
parent | 3ac4e829bd8575e9adea2ba1b9329da363881ffb (diff) | |
parent | d77f873fdd21912803836da78f627d2efd267082 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
vhost: fix barrier pairing
-rw-r--r-- | drivers/vhost/vhost.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c index e69d238c5af..49fa953aaf6 100644 --- a/drivers/vhost/vhost.c +++ b/drivers/vhost/vhost.c @@ -1035,7 +1035,12 @@ int vhost_add_used(struct vhost_virtqueue *vq, unsigned int head, int len) /* This actually signals the guest, using eventfd. */ void vhost_signal(struct vhost_dev *dev, struct vhost_virtqueue *vq) { - __u16 flags = 0; + __u16 flags; + /* Flush out used index updates. This is paired + * with the barrier that the Guest executes when enabling + * interrupts. */ + smp_mb(); + if (get_user(flags, &vq->avail->flags)) { vq_err(vq, "Failed to get flags"); return; |