lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 001/112] ibmveth: Identify ingress large send packets.
    Date
    From: David Wilder <dwilder@us.ibm.com>

    [ 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: 7b5967389f5a ("ibmveth: set correct gso_size and gso_type")
    Signed-off-by: David Wilder <dwilder@us.ibm.com>
    Reviewed-by: Thomas Falcon <tlfalcon@linux.ibm.com>
    Reviewed-by: Cristobal Forno <cris.forno@ibm.com>
    Reviewed-by: Pradeep Satyanarayana <pradeeps@linux.vnet.ibm.com>
    Acked-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/ibm/ibmveth.c | 13 ++++++++++++-
    1 file changed, 12 insertions(+), 1 deletion(-)

    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1254,6 +1254,7 @@ static int ibmveth_poll(struct napi_stru
    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);

    @@ -1305,7 +1306,17 @@ static int ibmveth_poll(struct napi_stru
    }
    }

    - 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++;
    }

    \
     
     \ /
      Last update: 2020-10-27 14:57    [W:3.287 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site