From patchwork Fri Jan 30 13:15:58 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olivier Matz X-Patchwork-Id: 2820 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 70EE65AA1; Fri, 30 Jan 2015 14:16:54 +0100 (CET) Received: from mail-wi0-f182.google.com (mail-wi0-f182.google.com [209.85.212.182]) by dpdk.org (Postfix) with ESMTP id C7AB4234 for ; Fri, 30 Jan 2015 14:16:33 +0100 (CET) Received: by mail-wi0-f182.google.com with SMTP id n3so2593448wiv.3 for ; Fri, 30 Jan 2015 05:16:33 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0Cxnv5wdfhplHhIbTqbYbf7ag2v7uhwF0/L8l4ctjp8=; b=RC3t29CygLIGghM5aZFJW2WUuhW5KLuIZe7CZuEss3OuK9TROHej5pba8LRHNqX6z3 I9d1RFEDe9H8J/5pglK4nWkOIBv4IO+kHHcKhOovCIRu9APvgRkHQ+fAFyl42Ah1PUcM Pei7lsUvtpIlpHEJaWjWMJPJRzmOzjAti7fL9ULIITwVBCMtT0qivSNeCm/527E4dQEC djt4Hsc6WobBLtnlxNV/8gUJf9ezF45WvaBT6VLovVsfflu2wB6Ycl2sAzNi6QIWTXS6 2QoHEy1u/VVxLKDRIPGor0HsKZDoIEju2WEhGTps+RTvAh1HGRXDGvll9vxRLNKMv3zJ wefw== X-Gm-Message-State: ALoCoQm3cafR2FXU9B0tAWccbZuDrcqei8TGAlCvwhc4960VqMi4iQAZBPaggdHuw8ciPy+taelP X-Received: by 10.180.37.197 with SMTP id a5mr4761465wik.2.1422623793682; Fri, 30 Jan 2015 05:16:33 -0800 (PST) Received: from glumotte.dev.6wind.com (6wind.net2.nerim.net. [213.41.180.237]) by mx.google.com with ESMTPSA id li7sm6911300wic.4.2015.01.30.05.16.33 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 30 Jan 2015 05:16:33 -0800 (PST) From: Olivier Matz To: dev@dpdk.org Date: Fri, 30 Jan 2015 14:15:58 +0100 Message-Id: <1422623775-8050-4-git-send-email-olivier.matz@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1422623775-8050-1-git-send-email-olivier.matz@6wind.com> References: <1421883395-27235-1-git-send-email-olivier.matz@6wind.com> <1422623775-8050-1-git-send-email-olivier.matz@6wind.com> Subject: [dpdk-dev] [PATCH 03/20] i40e: call i40e_txd_enable_checksum only for offloaded packets 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" From i40e datasheet: The IP header type and its offload. In case of tunneling, the IIPT relates to the inner IP header. See also EIPT field for the outer (External) IP header offload. 00 - non IP packet or packet type is not defined by software 01 - IPv6 packet 10 - IPv4 packet with no IP checksum offload 11 - IPv4 packet with IP checksum offload Therefore it is not needed to fill the IIPT field if no offload is requested (we can keep the value to 00). For instance, the linux driver code does not set it when (skb->ip_summed != CHECKSUM_PARTIAL). We can do the same in the dpdk driver. The function i40e_txd_enable_checksum() that fills the offload registers can only be called for packets requiring an offload. Signed-off-by: Olivier Matz --- lib/librte_pmd_i40e/i40e_rxtx.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/librte_pmd_i40e/i40e_rxtx.c b/lib/librte_pmd_i40e/i40e_rxtx.c index 8e9df96..9acdeee 100644 --- a/lib/librte_pmd_i40e/i40e_rxtx.c +++ b/lib/librte_pmd_i40e/i40e_rxtx.c @@ -74,6 +74,11 @@ #define I40E_TXD_CMD (I40E_TX_DESC_CMD_EOP | I40E_TX_DESC_CMD_RS) +#define I40E_TX_CKSUM_OFFLOAD_MASK ( \ + PKT_TX_IP_CKSUM | \ + PKT_TX_L4_MASK | \ + PKT_TX_OUTER_IP_CKSUM) + #define RTE_MBUF_DATA_DMA_ADDR_DEFAULT(mb) \ (uint64_t) ((mb)->buf_physaddr + RTE_PKTMBUF_HEADROOM) @@ -1272,10 +1277,12 @@ i40e_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) /* Enable checksum offloading */ cd_tunneling_params = 0; - i40e_txd_enable_checksum(ol_flags, &td_cmd, &td_offset, - l2_len, l3_len, outer_l2_len, - outer_l3_len, - &cd_tunneling_params); + if (ol_flags & I40E_TX_CKSUM_OFFLOAD_MASK) { + i40e_txd_enable_checksum(ol_flags, &td_cmd, &td_offset, + l2_len, l3_len, outer_l2_len, + outer_l3_len, + &cd_tunneling_params); + } if (unlikely(nb_ctx)) { /* Setup TX context descriptor if required */