"Michael S. Tsirkin" <mst@xxxxxxxxxx> wrote: > According to memory-barriers.txt, an smp memory barrier > should always be paired with another smp memory barrier, > and I quote "a lack of appropriate pairing is almost certainly an > error". > > In case of vhost, failure to flush out used index > update before looking at the interrupt disable flag > could result in missed interrupts, resulting in > networking hang under stress. > > This might happen when flags read bypasses used index write. > So we see interrupts disabled and do not interrupt, at the > same time guest writes flags value to enable interrupt, > reads an old used index value, thinks that > used ring is empty and waits for interrupt. > > Note: the barrier we pair with here is in > drivers/virtio/virtio_ring.c, function > vring_enable_cb. > > Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx> > --- > > Dave, I think this is needed in 2.6.34, I'll send a pull > request after doing some more testing. > > Rusty, Juan, could you take a look as well please? > Thanks! I would have prefered to put it: void vhost_add_used_and_signal(struct vhost_dev *dev, struct vhost_virtqueue *vq, unsigned int head, int len) { vhost_add_used(vq, head, len); >>>> smp_mb(); vhost_signal(dev, vq); } Because it looks strange to have a barrier as the 1st instruction of a function. And this way it is clearer (at least to me) what we are protecting. But on the other hand, we would have to put a comment explainingthat all users of vhost_signal() have to put that smp_mb() so ..... Perhaps just improving the commet stating that the corresponding barrier is there? > Note: the barrier we pair with here is in > drivers/virtio/virtio_ring.c, function > vring_enable_cb. Good catch. Later, Juan. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html