From: Heinz Graalfs Date: Mon, 28 Oct 2013 23:10:47 +0000 (+1030) Subject: virtio_net: verify if queue is broken after virtqueue_get_buf() X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=047b9b94951dba2e93c65a582ae2bce25c960b86;p=GitHub%2Fexynos8895%2Fandroid_kernel_samsung_universal8895.git 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 Signed-off-by: Rusty Russell --- 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, /* Spin for a response, the kick causes an ioport write, trapping * into the hypervisor, so the request should be handled immediately. */ - while (!virtqueue_get_buf(vi->cvq, &tmp)) + while (!virtqueue_get_buf(vi->cvq, &tmp) && + !virtqueue_is_broken(vi->cvq)) cpu_relax(); return status == VIRTIO_NET_OK;