diff options
author | Heinz Graalfs <graalfs@linux.vnet.ibm.com> | 2013-10-28 19:10:47 -0400 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2013-10-28 20:58:19 -0400 |
commit | 047b9b94951dba2e93c65a582ae2bce25c960b86 (patch) | |
tree | 0164b14f46fb84a8508445611edbbcadc377096e | |
parent | 40e4dc530118dbb79e270d5554ac8415588378d2 (diff) |
virtio_net: verify if queue is broken after virtqueue_get_buf()
If a virtqueue_get_buf() call returns a NULL pointer a possibly endless while
loop should be avoided by checking for a broken virtqueue.
Signed-off-by: Heinz Graalfs <graalfs@linux.vnet.ibm.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-rw-r--r-- | drivers/net/virtio_net.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index ff208d2787d3..057ea133cd2b 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
@@ -825,7 +825,8 @@ static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd, | |||
825 | /* Spin for a response, the kick causes an ioport write, trapping | 825 | /* Spin for a response, the kick causes an ioport write, trapping |
826 | * into the hypervisor, so the request should be handled immediately. | 826 | * into the hypervisor, so the request should be handled immediately. |
827 | */ | 827 | */ |
828 | while (!virtqueue_get_buf(vi->cvq, &tmp)) | 828 | while (!virtqueue_get_buf(vi->cvq, &tmp) && |
829 | !virtqueue_is_broken(vi->cvq)) | ||
829 | cpu_relax(); | 830 | cpu_relax(); |
830 | 831 | ||
831 | return status == VIRTIO_NET_OK; | 832 | return status == VIRTIO_NET_OK; |