]> git.droids-corp.org - dpdk.git/commitdiff
vhost: do not stall if guest is slow
authorStephen Hemminger <stephen@networkplumber.org>
Tue, 8 Dec 2015 00:50:21 +0000 (16:50 -0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 9 Dec 2015 21:02:33 +0000 (22:02 +0100)
When guest is booting (or any othertime guest is busy) it is possible
for the small receive ring (256) to get full. If this happens the
vhost library should just return normally. It's current behavior
of logging just creates massive log spew/overflow which could even
act as a DoS attack against host.

Reported-by: Nathan Law <nlaw@brocade.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
lib/librte_vhost/vhost_rxtx.c

index 9322ce6e8497cefd63a31f59a5c924c8ee70d2c5..bbf3fac178015f961acc02d835043132815e9963 100644 (file)
@@ -510,17 +510,12 @@ virtio_dev_merge_rx(struct virtio_net *dev, uint16_t queue_id,
 
                        do {
                                avail_idx = *((volatile uint16_t *)&vq->avail->idx);
-                               if (unlikely(res_cur_idx == avail_idx)) {
-                                       LOG_DEBUG(VHOST_DATA,
-                                               "(%"PRIu64") Failed "
-                                               "to get enough desc from "
-                                               "vring\n",
-                                               dev->device_fh);
+                               if (unlikely(res_cur_idx == avail_idx))
                                        goto merge_rx_exit;
-                               } else {
-                                       update_secure_len(vq, res_cur_idx, &secure_len, &vec_idx);
-                                       res_cur_idx++;
-                               }
+
+                               update_secure_len(vq, res_cur_idx,
+                                                 &secure_len, &vec_idx);
+                               res_cur_idx++;
                        } while (pkt_len > secure_len);
 
                        /* vq->last_used_idx_res is atomically updated. */