Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp437880ybi; Fri, 26 Jul 2019 12:19:43 -0700 (PDT) X-Google-Smtp-Source: APXvYqwfVPvW8KE1FjlTs6fy0rgOKcrEgDSzebE4fyDETUIt9vdG6+ParBE+vO6A3OzPveu+60QN X-Received: by 2002:a17:902:8689:: with SMTP id g9mr91300966plo.252.1564168783585; Fri, 26 Jul 2019 12:19:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564168783; cv=none; d=google.com; s=arc-20160816; b=a/m4SUDRC3Gbpm9Qi4GnOdUyjaoAO5snlzObJB0C/cjj422yiq5Uvf33L/VL712IfV p38/0UI0bZHzkFw2i2htmLwtnejjEmMn/Nh2G3AFWkfptlhszj3q5yhr4Kao8/0gC21Y TCIzMhqTPfAWlUqXXPIB8NeHcByQjCJvQ4jt5X3XTgsHp3/JfJw+6TonpA3adU0dqi4D ZoCH1l0dweIcCfdekZzEQdjYp0XzUUi4ndXA4ACyxLx1PNUa4K6iFa3oMp/uXxJn3uxA 0/z00982zmYP+VphGB3mEzUHubO8MbaHU0Zgb302rXIorrs6ICuP/v7WKDLiQPMIx9/n q4cA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=OcVtny0VCuGvCXq35LhZnVjYCo5dmnF3YeXA7ktDR78=; b=fjbyfNOB0htXG3Weu0VZGt8cXVnMAuaizQNh2AiUqhj0il9dZgGml92OJg4oDf45cR KHGJoxboMwIqBP2OFge0seNBS43qEBgEI2o3WMzXRdtbWkxBzMTI8xcPsfw5ByfSNnjU BpRIxss4eNacH+MACEyK6Qr9TDaelrBF7Gzg+J+nSu0KamyzA34ViU36vtocDWnB/oX0 yUyDPa31H3lJ2LPBwjSb5PWdiJH9gPklO0hvS7asEC1g7rzeG1HJtFjkrg+QejooCmmY wi0z+N8G04J0o7GkyqlDG9nY6K+cBxjR/nM1nPU6Y99fTb5HsFlf7VFnYPiNXneuWRQ5 BU5A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=j5uF4zVy; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u10si22086348pgj.588.2019.07.26.12.19.15; Fri, 26 Jul 2019 12:19:43 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=j5uF4zVy; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388570AbfGZPg6 (ORCPT + 99 others); Fri, 26 Jul 2019 11:36:58 -0400 Received: from mail.kernel.org ([198.145.29.99]:45364 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388315AbfGZPa2 (ORCPT ); Fri, 26 Jul 2019 11:30:28 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 17D5E205F4; Fri, 26 Jul 2019 15:30:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1564155027; bh=YFQL1Pzr8VccqE6s74auw0DJ9yQhIgPRYDfdxRobNmY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j5uF4zVyA6lrj4Y2boD1Eu7Y4DMKhj+49sXDHJuuJ1LppRPYIKlTiCTIGSPGb7vDg 5HnEPA8JaiBujLkdnu2mAfEt8apgtZTBAhPRkDPLkP66rb4K4fcdTcaygG3HBLErSR NCOyeIzaR8B5irRt6WPJdWNtlZ1I283PYB9fAZIk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Saeed Mahameed Subject: [PATCH 5.1 40/62] net/mlx5e: Rx, Fix checksum calculation for new hardware Date: Fri, 26 Jul 2019 17:24:52 +0200 Message-Id: <20190726152306.179800031@linuxfoundation.org> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190726152301.720139286@linuxfoundation.org> References: <20190726152301.720139286@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Saeed Mahameed [ Upstream commit db849faa9bef993a1379dc510623f750a72fa7ce ] CQE checksum full mode in new HW, provides a full checksum of rx frame. Covering bytes starting from eth protocol up to last byte in the received frame (frame_size - ETH_HLEN), as expected by the stack. Fixing up skb->csum by the driver is not required in such case. This fix is to avoid wrong checksum calculation in drivers which already support the new hardware with the new checksum mode. Fixes: 85327a9c4150 ("net/mlx5: Update the list of the PCI supported devices") Signed-off-by: Saeed Mahameed Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/mellanox/mlx5/core/en.h | 1 + drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 3 +++ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 7 ++++++- include/linux/mlx5/mlx5_ifc.h | 3 ++- 4 files changed, 12 insertions(+), 2 deletions(-) --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h @@ -294,6 +294,7 @@ enum { MLX5E_RQ_STATE_ENABLED, MLX5E_RQ_STATE_AM, MLX5E_RQ_STATE_NO_CSUM_COMPLETE, + MLX5E_RQ_STATE_CSUM_FULL, /* cqe_csum_full hw bit is set */ }; struct mlx5e_cq { --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -948,6 +948,9 @@ static int mlx5e_open_rq(struct mlx5e_ch if (err) goto err_destroy_rq; + if (MLX5_CAP_ETH(c->mdev, cqe_checksum_full)) + __set_bit(MLX5E_RQ_STATE_CSUM_FULL, &c->rq.state); + if (params->rx_dim_enabled) __set_bit(MLX5E_RQ_STATE_AM, &c->rq.state); --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c @@ -829,8 +829,14 @@ static inline void mlx5e_handle_csum(str if (unlikely(get_ip_proto(skb, network_depth, proto) == IPPROTO_SCTP)) goto csum_unnecessary; + stats->csum_complete++; skb->ip_summed = CHECKSUM_COMPLETE; skb->csum = csum_unfold((__force __sum16)cqe->check_sum); + + if (test_bit(MLX5E_RQ_STATE_CSUM_FULL, &rq->state)) + return; /* CQE csum covers all received bytes */ + + /* csum might need some fixups ...*/ if (network_depth > ETH_HLEN) /* CQE csum is calculated from the IP header and does * not cover VLAN headers (if present). This will add @@ -841,7 +847,6 @@ static inline void mlx5e_handle_csum(str skb->csum); mlx5e_skb_padding_csum(skb, network_depth, proto, stats); - stats->csum_complete++; return; } --- a/include/linux/mlx5/mlx5_ifc.h +++ b/include/linux/mlx5/mlx5_ifc.h @@ -716,7 +716,8 @@ struct mlx5_ifc_per_protocol_networking_ u8 swp[0x1]; u8 swp_csum[0x1]; u8 swp_lso[0x1]; - u8 reserved_at_23[0xd]; + u8 cqe_checksum_full[0x1]; + u8 reserved_at_24[0xc]; u8 max_vxlan_udp_ports[0x8]; u8 reserved_at_38[0x6]; u8 max_geneve_opt_len[0x1];