From patchwork Tue May 24 06:32:50 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "John Daley (johndale)" X-Patchwork-Id: 12977 X-Patchwork-Delegate: bruce.richardson@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 0BF8B5A9C; Tue, 24 May 2016 08:33:07 +0200 (CEST) Received: from rcdn-iport-2.cisco.com (rcdn-iport-2.cisco.com [173.37.86.73]) by dpdk.org (Postfix) with ESMTP id 6AEDC56B7 for ; Tue, 24 May 2016 08:33:03 +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=1464071583; x=1465281183; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=r79amywsmOTIenAsWjH6Kjm7Dmb5n1wyBe8q2BxCUHY=; b=ADWCsTAIPpE3ZeVgVVagkyd3FTpMRzSjCeWqvbgnYOX0wX7kPjBwuW9s ax8wTgrI3PBed2v6MUUU/FemZdMnwYpmcgrFtp8XIMtkvIjK8SE7mr/dg R4WA3IQ1JhPKWIpsymOF7/PGRYE7n+m7C2JOo96uTcJrqEUDt+w0yP4LF U=; X-IronPort-AV: E=Sophos;i="5.26,359,1459814400"; d="scan'208";a="110342601" Received: from rcdn-core-7.cisco.com ([173.37.93.143]) by rcdn-iport-2.cisco.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 24 May 2016 06:33:02 +0000 Received: from cisco.com (savbu-usnic-a.cisco.com [10.193.184.48]) by rcdn-core-7.cisco.com (8.14.5/8.14.5) with ESMTP id u4O6X2Xd015997; Tue, 24 May 2016 06:33:02 GMT Received: by cisco.com (Postfix, from userid 392789) id 5B98A3FAAE09; Mon, 23 May 2016 23:33:02 -0700 (PDT) From: John Daley To: dev@dpdk.org Cc: John Daley , Olivier Matz Date: Mon, 23 May 2016 23:32:50 -0700 Message-Id: <1464071579-30072-3-git-send-email-johndale@cisco.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1464071579-30072-1-git-send-email-johndale@cisco.com> References: <1464071579-30072-1-git-send-email-johndale@cisco.com> Subject: [dpdk-dev] [PATCH v2 02/11] 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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) {