Patch "net/mlx4_en: Fix wrong csum complete report when rxvlan offload is disabled" has been added to the 4.0-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
net/mlx4_en: Fix wrong csum complete report when rxvlan offload is disabled
to the 4.0-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-mlx4_en-fix-wrong-csum-complete-report-when-rxvlan-offload-is-disabled.patch
and it can be found in the queue-4.0 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Fri Jul 3 19:59:52 PDT 2015
From: Ido Shamay <[email protected]>
Date: Thu, 25 Jun 2015 11:29:43 +0300
Subject: net/mlx4_en: Fix wrong csum complete report when rxvlan offload is disabled
From: Ido Shamay <[email protected]>
[ Upstream commit 79a258526ce1051cb9684018c25a89d51ac21be8 ]
The check_csum() function relied on hwtstamp_rx_filter to know if rxvlan offload is disabled. This is wrong since rxvlan offload can be switched on/off regardless of hwtstamp_rx_filter.
Also moved check_csum to query CQE information to identify VLAN packets and removed the check of IP packets, since it has been validated before.
--- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-)
drivers/net/ethernet/mellanox/mlx4/en_rx.c +6 -11
@@ -723,7 +723,7 @@ static int get_fixed_ipv6_csum(__wsum hw }#endif static int check_csum (struct mlx4_cqe *cqe,struct sk_buff *skb,void *va, -int hwtstamp_rx_filter) +netdev_features_t dev_features) {__wsum hw_checksum =0 ;
@@ -731,14 +731,8 @@ static int check_csum(struct mlx4_cqe *c hw_checksum =csum_unfold ((__force __sum16 )cqe->checksum); -if (((struct ethhdr *)va)->h_proto ==htons (ETH_P_8021Q ) && - hwtstamp_rx_filter !=HWTSTAMP_FILTER_NONE ) { -/* next protocol non IPv4 or IPv6 */ -if (((struct vlan_hdr *)hdr)->h_vlan_encapsulated_proto - !=htons (ETH_P_IP ) && - ((struct vlan_hdr *)hdr)->h_vlan_encapsulated_proto - !=htons (ETH_P_IPV6 )) -return -1 ; +if (cqe->vlan_my_qpn &cpu_to_be32 (MLX4_CQE_VLAN_PRESENT_MASK ) && + !(dev_features &NETIF_F_HW_VLAN_CTAG_RX )) { hw_checksum =get_fixed_vlan_csum (hw_checksum, hdr); hdr +=sizeof (struct vlan_hdr ); }
@@ -901,7 +895,8 @@ int mlx4_en_process_rx_cq(struct net_devif (ip_summed ==CHECKSUM_COMPLETE ) {void *va =skb_frag_address (skb_shinfo (gro_skb)->frags); -if (check_csum (cqe, gro_skb, va, ring->hwtstamp_rx_filter)) { +if (check_csum (cqe, gro_skb, va, + dev->features)) { ip_summed =CHECKSUM_NONE ; ring->csum_none++; ring->csum_complete--;
@@ -956,7 +951,7 @@ int mlx4_en_process_rx_cq(struct net_dev }if (ip_summed ==CHECKSUM_COMPLETE ) { -if (check_csum (cqe, skb, skb->data, ring->hwtstamp_rx_filter)) { +if (check_csum (cqe, skb, skb->data, dev->features)) { ip_summed =CHECKSUM_NONE ; ring->csum_complete--; ring->csum_none++;
Patches currently in stable-queue which might be from [email protected] are
queue-4.0/net-mlx4_en-wake-tx-queues-only-when-there-s-enough-room.patch queue-4.0/net-mlx4_en-fix-wrong-csum-complete-report-when-rxvlan-offload-is-disabled.patch