virtio: ignore corrupted virtqueues rather than spinning.
A corrupt virtqueue (caused by the other end screwing up) can have strange results such as a driver spinning: just bail when we try to get a buffer from a known-broken queue. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
886c35fbcf
commit
5ef827526f
1 changed files with 5 additions and 0 deletions
|
@ -184,6 +184,11 @@ static void *vring_get_buf(struct virtqueue *_vq, unsigned int *len)
|
|||
|
||||
START_USE(vq);
|
||||
|
||||
if (unlikely(vq->broken)) {
|
||||
END_USE(vq);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!more_used(vq)) {
|
||||
pr_debug("No more buffers in queue\n");
|
||||
END_USE(vq);
|
||||
|
|
Loading…
Reference in a new issue