From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-000f0801.pphosted.com (mx0b-000f0801.pphosted.com [67.231.152.113]) by dpdk.org (Postfix) with ESMTP id 07F6C93B4 for ; Fri, 13 Nov 2015 10:30:53 +0100 (CET) Received: from pps.filterd (m0048192.ppops.net [127.0.0.1]) by mx0b-000f0801.pphosted.com (8.15.0.59/8.15.0.59) with SMTP id tAD99Ms0020370 for ; Fri, 13 Nov 2015 01:30:53 -0800 Received: from brmwp-exmb11.corp.brocade.com ([208.47.132.227]) by mx0b-000f0801.pphosted.com with ESMTP id 1y53251bv5-1 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT) for ; Fri, 13 Nov 2015 01:30:53 -0800 Received: from EMEAWP-EXMB12.corp.brocade.com (172.29.11.86) by BRMWP-EXMB11.corp.brocade.com (172.16.59.77) with Microsoft SMTP Server (TLS) id 15.0.1104.5; Fri, 13 Nov 2015 02:30:51 -0700 Received: from BRA-19P4P12.brocade.com (10.252.48.12) by EMEAWP-EXMB12.corp.brocade.com (172.29.11.86) with Microsoft SMTP Server (TLS) id 15.0.1104.5; Fri, 13 Nov 2015 10:30:48 +0100 From: Tom Kiely To: Date: Fri, 13 Nov 2015 09:30:13 +0000 Message-ID: <1447407013-6986-1-git-send-email-tkiely@brocade.com> X-Mailer: git-send-email 1.7.10.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.252.48.12] X-ClientProxiedBy: hq1wp-excas14.corp.brocade.com (10.70.38.103) To EMEAWP-EXMB12.corp.brocade.com (172.29.11.86) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.15.21, 1.0.33, 0.0.0000 definitions=2015-11-13_09:2015-11-12,2015-11-13,1970-01-01 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=3 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=7.0.1-1508030000 definitions=main-1511130153 Subject: [dpdk-dev] [PATCH] virtio: fix rx ring descriptor starvation X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Nov 2015 09:30:54 -0000 If all rx descriptors are processed while transient mbuf exhaustion is present, the rx ring ends up with no available descriptors. Thus no packets are received on that ring. Since descriptor refill is performed post rx descriptor processing, in this case no refill is ever subsequently performed resulting in permanent rx traffic drop. Signed-off-by: Tom Kiely --- drivers/net/virtio/virtio_rxtx.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c index 5770fa2..a95e234 100644 --- a/drivers/net/virtio/virtio_rxtx.c +++ b/drivers/net/virtio/virtio_rxtx.c @@ -586,7 +586,8 @@ virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) if (likely(num > DESC_PER_CACHELINE)) num = num - ((rxvq->vq_used_cons_idx + num) % DESC_PER_CACHELINE); - if (num == 0) + /* Refill free descriptors even if no pkts recvd */ + if (num == 0 && virtqueue_full(rxvq)) return 0; num = virtqueue_dequeue_burst_rx(rxvq, rcv_pkts, len, num); @@ -683,7 +684,8 @@ virtio_recv_mergeable_pkts(void *rx_queue, virtio_rmb(); - if (nb_used == 0) + /* Refill free descriptors even if no pkts recvd */ + if (nb_used == 0 && virtqueue_full(rxvq)) return 0; PMD_RX_LOG(DEBUG, "used:%d\n", nb_used); -- 1.7.10.4