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>
This commit is contained in:
parent
40e4dc5301
commit
047b9b9495
@ -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
|
/* Spin for a response, the kick causes an ioport write, trapping
|
||||||
* into the hypervisor, so the request should be handled immediately.
|
* 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();
|
cpu_relax();
|
||||||
|
|
||||||
return status == VIRTIO_NET_OK;
|
return status == VIRTIO_NET_OK;
|
||||||
|
Loading…
Reference in New Issue
Block a user