From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from rcdn-iport-2.cisco.com (rcdn-iport-2.cisco.com [173.37.86.73]) by dpdk.org (Postfix) with ESMTP id 1C8375A8B for ; Fri, 3 Jun 2016 02:23:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=3499; q=dns/txt; s=iport; t=1464913397; x=1466122997; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=r79amywsmOTIenAsWjH6Kjm7Dmb5n1wyBe8q2BxCUHY=; b=U2KOuLH/tsse2T0JD4wL9KA/26138903W0rSC/jZg2vL3xTZ99W91Ngo EHkeppp7RavyCn6uV2BjrHyM8+QGIRXh0b1dnQc37POfIXAY3MKCBb4F6 xR4uxOFINQu64gB/HEB3QuIvKOwb6Gbypg/VxDA0fV1NHY1Lk9HZD0PF8 0=; X-IronPort-AV: E=Sophos;i="5.26,409,1459814400"; d="scan'208";a="113861650" Received: from alln-core-3.cisco.com ([173.36.13.136]) by rcdn-iport-2.cisco.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 03 Jun 2016 00:23:16 +0000 Received: from cisco.com (savbu-usnic-a.cisco.com [10.193.184.48]) by alln-core-3.cisco.com (8.14.5/8.14.5) with ESMTP id u530NFRG011424; Fri, 3 Jun 2016 00:23:15 GMT Received: by cisco.com (Postfix, from userid 392789) id A91AE3FAADEC; Thu, 2 Jun 2016 17:23:15 -0700 (PDT) From: John Daley To: dev@dpdk.org Cc: bruce.richarsdon@intel.com, John Daley , Olivier Matz Date: Thu, 2 Jun 2016 17:22:46 -0700 Message-Id: <1464913377-30879-3-git-send-email-johndale@cisco.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1464913377-30879-1-git-send-email-johndale@cisco.com> References: <1464071579-30072-1-git-send-email-johndale@cisco.com> <1464913377-30879-1-git-send-email-johndale@cisco.com> Subject: [dpdk-dev] [PATCH v3 02/13] enic: drop bad packets and remove unused Rx error flag 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, 03 Jun 2016 00:23:17 -0000 Following the discussions from: http://dpdk.org/ml/archives/dev/2015-July/021721.html http://dpdk.org/ml/archives/dev/2016-April/038143.html Remove the unused flag from enic driver. Also, the enic driver is modified to drop bad packets. Signed-off-by: Olivier Matz Signed-off-by: John Daley --- drivers/net/enic/enic_rx.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/drivers/net/enic/enic_rx.c b/drivers/net/enic/enic_rx.c index 89c62ce..c72a80a 100644 --- a/drivers/net/enic/enic_rx.c +++ b/drivers/net/enic/enic_rx.c @@ -134,20 +134,15 @@ enic_cq_rx_desc_n_bytes(struct cq_desc *cqd) } static inline uint8_t -enic_cq_rx_to_pkt_err_flags(struct cq_desc *cqd, uint64_t *pkt_err_flags_out) +enic_cq_rx_check_err(struct cq_desc *cqd) { struct cq_enet_rq_desc *cqrd = (struct cq_enet_rq_desc *)cqd; uint16_t bwflags; - int ret = 0; - uint64_t pkt_err_flags = 0; bwflags = enic_cq_rx_desc_bwflags(cqrd); - if (unlikely(enic_cq_rx_desc_packet_error(bwflags))) { - pkt_err_flags = PKT_RX_MAC_ERR; - ret = 1; - } - *pkt_err_flags_out = pkt_err_flags; - return ret; + if (unlikely(enic_cq_rx_desc_packet_error(bwflags))) + return 1; + return 0; } /* @@ -243,7 +238,7 @@ enic_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, struct enic *enic = vnic_dev_priv(rq->vdev); unsigned int rx_id; struct rte_mbuf *nmb, *rxmb; - uint16_t nb_rx = 0; + uint16_t nb_rx = 0, nb_err = 0; uint16_t nb_hold; struct vnic_cq *cq; volatile struct cq_desc *cqd_ptr; @@ -259,7 +254,6 @@ enic_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, volatile struct rq_enet_desc *rqd_ptr; dma_addr_t dma_addr; struct cq_desc cqd; - uint64_t ol_err_flags; uint8_t packet_error; /* Check for pkts available */ @@ -280,7 +274,7 @@ enic_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, } /* A packet error means descriptor and data are untrusted */ - packet_error = enic_cq_rx_to_pkt_err_flags(&cqd, &ol_err_flags); + packet_error = enic_cq_rx_check_err(&cqd); /* Get the mbuf to return and replace with one just allocated */ rxmb = rq->mbuf_ring[rx_id]; @@ -307,20 +301,21 @@ enic_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, rqd_ptr->length_type = cpu_to_le16(nmb->buf_len - RTE_PKTMBUF_HEADROOM); + /* Drop incoming bad packet */ + if (unlikely(packet_error)) { + rte_pktmbuf_free(rxmb); + nb_err++; + continue; + } + /* Fill in the rest of the mbuf */ rxmb->data_off = RTE_PKTMBUF_HEADROOM; rxmb->nb_segs = 1; rxmb->next = NULL; rxmb->port = enic->port_id; - if (!packet_error) { - rxmb->pkt_len = enic_cq_rx_desc_n_bytes(&cqd); - rxmb->packet_type = enic_cq_rx_flags_to_pkt_type(&cqd); - enic_cq_rx_to_pkt_flags(&cqd, rxmb); - } else { - rxmb->pkt_len = 0; - rxmb->packet_type = 0; - rxmb->ol_flags = 0; - } + rxmb->pkt_len = enic_cq_rx_desc_n_bytes(&cqd); + rxmb->packet_type = enic_cq_rx_flags_to_pkt_type(&cqd); + enic_cq_rx_to_pkt_flags(&cqd, rxmb); rxmb->data_len = rxmb->pkt_len; /* prefetch mbuf data for caller */ @@ -331,7 +326,7 @@ enic_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, rx_pkts[nb_rx++] = rxmb; } - nb_hold += nb_rx; + nb_hold += nb_rx + nb_err; cq->to_clean = rx_id; if (nb_hold > rq->rx_free_thresh) { -- 2.7.0