summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2016-01-14 18:48:26 +0000
committerGerrit Code Review <gerrit@fd.io>2016-01-14 18:48:26 +0000
commitb1ee7bde52b2adae10335774521ca09d57e32a0a (patch)
tree186398a52ba5f66d96e028d6290388aa5eab4ec4
parent9fb87553bec802552f09818c8fa2eab82c5eae92 (diff)
parent920ecc2e1ff2f1bdbd3698243cd1804b4bc2e269 (diff)
Merge "Avoid crash in vhost-user driver when running multithreaded"
-rw-r--r--vnet/vnet/devices/virtio/vhost-user.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/vnet/vnet/devices/virtio/vhost-user.c b/vnet/vnet/devices/virtio/vhost-user.c
index 20a4c021c6a..8dca33b82af 100644
--- a/vnet/vnet/devices/virtio/vhost-user.c
+++ b/vnet/vnet/devices/virtio/vhost-user.c
@@ -771,6 +771,9 @@ static u32 vhost_user_if_input ( vlib_main_t * vm,
if (PREDICT_FALSE(!txvq->desc))
return 0;
+ if (PREDICT_FALSE(!txvq->avail))
+ return 0;
+
/* do we have pending intterupts ? */
if ((txvq->n_since_last_int) && (txvq->int_deadline < now))
vhost_user_send_call(vm, txvq);
@@ -1037,6 +1040,9 @@ vhost_user_intfc_tx (vlib_main_t * vm,
if (PREDICT_FALSE(!rxvq->desc))
goto done2;
+ if (PREDICT_FALSE(!rxvq->avail))
+ goto done2;
+
if (PREDICT_FALSE(vui->lockp != 0))
{
while (__sync_lock_test_and_set (vui->lockp, 1))