Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e0b67765 authored by David Wilder's avatar David Wilder Committed by Greg Kroah-Hartman
Browse files

ibmveth: Identify ingress large send packets.



[ Upstream commit 413f142cc05cb03f2d1ea83388e40c1ddc0d74e9 ]

Ingress large send packets are identified by either:
The IBMVETH_RXQ_LRG_PKT flag in the receive buffer
or with a -1 placed in the ip header checksum.
The method used depends on firmware version. Frame
geometry and sufficient header validation is performed by the
hypervisor eliminating the need for further header checks here.

Fixes: 7b596738 ("ibmveth: set correct gso_size and gso_type")
Signed-off-by: default avatarDavid Wilder <dwilder@us.ibm.com>
Reviewed-by: default avatarThomas Falcon <tlfalcon@linux.ibm.com>
Reviewed-by: default avatarCristobal Forno <cris.forno@ibm.com>
Reviewed-by: default avatarPradeep Satyanarayana <pradeeps@linux.vnet.ibm.com>
Acked-by: default avatarWillem de Bruijn <willemb@google.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 3472a36a
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -1330,6 +1330,7 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)
			int offset = ibmveth_rxq_frame_offset(adapter);
			int csum_good = ibmveth_rxq_csum_good(adapter);
			int lrg_pkt = ibmveth_rxq_large_packet(adapter);
			__sum16 iph_check = 0;

			skb = ibmveth_rxq_get_buffer(adapter);

@@ -1366,7 +1367,17 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)
			skb_put(skb, length);
			skb->protocol = eth_type_trans(skb, netdev);

			if (length > netdev->mtu + ETH_HLEN) {
			/* PHYP without PLSO support places a -1 in the ip
			 * checksum for large send frames.
			 */
			if (skb->protocol == cpu_to_be16(ETH_P_IP)) {
				struct iphdr *iph = (struct iphdr *)skb->data;

				iph_check = iph->check;
			}

			if ((length > netdev->mtu + ETH_HLEN) ||
			    lrg_pkt || iph_check == 0xffff) {
				ibmveth_rx_mss_helper(skb, mss, lrg_pkt);
				adapter->rx_large_packets++;
			}