From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by dpdk.org (Postfix) with ESMTP id 815A0E07 for ; Mon, 30 Apr 2018 18:29:10 +0200 (CEST) Received: by mail-wm0-f68.google.com with SMTP id a67so6580395wmf.3 for ; Mon, 30 Apr 2018 09:29:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id; bh=MDLM/qQwZoPhDGxRAikboohwbRXOtTMWbUsg6XY+9AE=; b=vAvwGEf5wDHHhAlU0DtYUb112YSJcGPW4ORIow5Dz80yCF5Wa3qosvShzB8wq+5Bj4 DC9SSoU0xuT5SG1koZXO4h+31DNtMCQ8ZqrGXbpaafQ+xLvDuGQpn+AguQ763TIsOouY Wb3rpTRhE3MIAbV/6z4TQrGKSkE+iRPI3tWhsLWBxV8sUyrbVJkVhFOMxFbbe1JyS9lf Hs2a2JN1kCrzYaS5Igm5Az3Et68AFue2FgSoqnAjMxbwFvhMT+77AOhWa66tPFxVoHIW uaZl7eqcBt6wzrUzx4tt8ig5ktP360gOC4hh/6EwtNXl179eLIcfZeJWgUVDj5Xem/3V F/qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=MDLM/qQwZoPhDGxRAikboohwbRXOtTMWbUsg6XY+9AE=; b=P3rRa//W/wPBSBKhpTmChryDwuIn2lHnuPZLbz+OCsxduGP0sE6LGdFI7h7nOYoU1y xAbs+19gqmdeRI4CU/QuwLiOn8a6r3a89Sn/IJU5IZXmNPq8buLJHD2wiUSgk+6TaAJf myTULF/Gccj3/abBC1uNU0XlPy1B3SvsdoNNO0sOiIG5ukxSTmCDOQGf7G081GeRczA+ 6WLNyxAclLP/aVzuLtV8EtUNkivaEGK+w9RvO1AkadR/bfALrvvqx7RFMPrEa+D598rs 0LzfnZ0QCnx5RerP21Y2UIyvw8dZlDEC88HBJfl/GlUNwHhu07vs7rZxMF9lvptHI6YO +XjA== X-Gm-Message-State: ALQs6tBBHz8EjfNVwacFwm/v1k20O7LWy+RVVGxhEbCB1wfbagpIYFRT /2daPuKa1GS3dG9sgbvRQBaR13FT X-Google-Smtp-Source: AB8JxZrnX4etHrIQ+mc7GKo+sat5Vm5iRHgmzUHaKJSGzFrHgyc7+NGPlJi8uGpvoRC2XO8X2Sl07Q== X-Received: by 10.28.136.4 with SMTP id k4mr8266962wmd.133.1525105749232; Mon, 30 Apr 2018 09:29:09 -0700 (PDT) Received: from pala.dev.6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id z5-v6sm8905974wrm.61.2018.04.30.09.29.08 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 30 Apr 2018 09:29:08 -0700 (PDT) From: Didier Pallard To: stable@dpdk.org Date: Mon, 30 Apr 2018 18:28:28 +0200 Message-Id: <20180430162829.11029-1-didier.pallard@6wind.com> X-Mailer: git-send-email 2.11.0 Subject: [dpdk-stable] [18.02 1/2] net/vmxnet3: gather offload data on first and last segment X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 Apr 2018 16:29:10 -0000 [ backported from upstream commit 5e5ac26f958f10ef3f1b443ed74c13898cc82e87 ] Offloads are split between first and last segment of a packet. Call a single vmxnet3_rx_offload function that will contain all offload operations. This patch does not introduce any code modification. Pass a vmxnet3_hw as parameter to the function, it is not presently used in this patch, but will be later used for TSO offloads. Signed-off-by: Didier Pallard Acked-by: Yong Wang Conflicts: drivers/net/vmxnet3/vmxnet3_rxtx.c : do not change packet type behaviour on stable branch; continue to parse packet to return precise RTE_PTYPE_L3_IPV4, rather than returning RTE_PTYPE_L3_IPV4_UNKNOWN like in master branch. --- drivers/net/vmxnet3/vmxnet3_rxtx.c | 66 +++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c index 3a8c62fc16fc..23b69cce1029 100644 --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c @@ -648,34 +648,46 @@ vmxnet3_post_rx_bufs(vmxnet3_rx_queue_t *rxq, uint8_t ring_id) /* Receive side checksum and other offloads */ -static void -vmxnet3_rx_offload(const Vmxnet3_RxCompDesc *rcd, struct rte_mbuf *rxm) +static inline void +vmxnet3_rx_offload(struct vmxnet3_hw *hw, const Vmxnet3_RxCompDesc *rcd, + struct rte_mbuf *rxm, const uint8_t sop) { - /* Check for RSS */ - if (rcd->rssType != VMXNET3_RCD_RSS_TYPE_NONE) { - rxm->ol_flags |= PKT_RX_RSS_HASH; - rxm->hash.rss = rcd->rssHash; - } + (void)hw; + + /* Offloads set in sop */ + if (sop) { + /* Check for RSS */ + if (rcd->rssType != VMXNET3_RCD_RSS_TYPE_NONE) { + rxm->ol_flags |= PKT_RX_RSS_HASH; + rxm->hash.rss = rcd->rssHash; + } - /* Check packet type, checksum errors, etc. Only support IPv4 for now. */ - if (rcd->v4) { - struct ether_hdr *eth = rte_pktmbuf_mtod(rxm, struct ether_hdr *); - struct ipv4_hdr *ip = (struct ipv4_hdr *)(eth + 1); + /* Check packet type, checksum errors. Only IPv4 for now. */ + if (rcd->v4) { + struct ether_hdr *eth = rte_pktmbuf_mtod(rxm, struct ether_hdr *); + struct ipv4_hdr *ip = (struct ipv4_hdr *)(eth + 1); - if (((ip->version_ihl & 0xf) << 2) > (int)sizeof(struct ipv4_hdr)) - rxm->packet_type = RTE_PTYPE_L3_IPV4_EXT; - else - rxm->packet_type = RTE_PTYPE_L3_IPV4; + if (((ip->version_ihl & 0xf) << 2) > (int)sizeof(struct ipv4_hdr)) + rxm->packet_type = RTE_PTYPE_L3_IPV4_EXT; + else + rxm->packet_type = RTE_PTYPE_L3_IPV4; - if (!rcd->cnc) { - if (!rcd->ipc) - rxm->ol_flags |= PKT_RX_IP_CKSUM_BAD; + if (!rcd->cnc) { + if (!rcd->ipc) + rxm->ol_flags |= PKT_RX_IP_CKSUM_BAD; - if ((rcd->tcp || rcd->udp) && !rcd->tuc) - rxm->ol_flags |= PKT_RX_L4_CKSUM_BAD; + if ((rcd->tcp || rcd->udp) && !rcd->tuc) + rxm->ol_flags |= PKT_RX_L4_CKSUM_BAD; + } + } else { + rxm->packet_type = RTE_PTYPE_UNKNOWN; + } + } else { /* Offloads set in eop */ + /* Check for hardware stripped VLAN tag */ + if (rcd->ts) { + rxm->ol_flags |= (PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED); + rxm->vlan_tci = rte_le_to_cpu_16((uint16_t)rcd->tci); } - } else { - rxm->packet_type = RTE_PTYPE_UNKNOWN; } } @@ -807,7 +819,7 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) } rxq->start_seg = rxm; - vmxnet3_rx_offload(rcd, rxm); + vmxnet3_rx_offload(hw, rcd, rxm, 1); } else { struct rte_mbuf *start = rxq->start_seg; @@ -823,13 +835,7 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) if (rcd->eop) { struct rte_mbuf *start = rxq->start_seg; - /* Check for hardware stripped VLAN tag */ - if (rcd->ts) { - start->ol_flags |= (PKT_RX_VLAN | - PKT_RX_VLAN_STRIPPED); - start->vlan_tci = rte_le_to_cpu_16((uint16_t)rcd->tci); - } - + vmxnet3_rx_offload(hw, rcd, start, 0); rx_pkts[nb_rx++] = start; rxq->start_seg = NULL; } -- 2.11.0