lkml.org 
[lkml]   [2017]   [Dec]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 150/178] IB/core: Fix calculation of maximum RoCE MTU
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Parav Pandit <parav@mellanox.com>


    [ Upstream commit 99260132fde7bddc6e0132ce53da94d1c9ccabcb ]

    The original code only took into consideration the largest header
    possible after the IB_BTH_BYTES. This was incorrect, as the largest
    possible header size is the largest possible combination of headers we
    might run into. The new code accounts for all possible headers in the
    largest possible combination and subtracts that from the MTU to make
    sure that all packets will fit on the wire.

    Link: https://www.spinics.net/lists/linux-rdma/msg54558.html
    Fixes: 3c86aa70bf67 ("RDMA/cm: Add RDMA CM support for IBoE devices")
    Signed-off-by: Parav Pandit <parav@mellanox.com>
    Reviewed-by: Daniel Jurgens <danielj@mellanox.com>
    Reported-by: Roland Dreier <roland@purestorage.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    include/rdma/ib_addr.h | 7 ++++---
    include/rdma/ib_pack.h | 19 +++++++++++--------
    2 files changed, 15 insertions(+), 11 deletions(-)

    --- a/include/rdma/ib_addr.h
    +++ b/include/rdma/ib_addr.h
    @@ -245,10 +245,11 @@ static inline void rdma_addr_set_dgid(st
    static inline enum ib_mtu iboe_get_mtu(int mtu)
    {
    /*
    - * reduce IB headers from effective IBoE MTU. 28 stands for
    - * atomic header which is the biggest possible header after BTH
    + * Reduce IB headers from effective IBoE MTU.
    */
    - mtu = mtu - IB_GRH_BYTES - IB_BTH_BYTES - 28;
    + mtu = mtu - (IB_GRH_BYTES + IB_UDP_BYTES + IB_BTH_BYTES +
    + IB_EXT_XRC_BYTES + IB_EXT_ATOMICETH_BYTES +
    + IB_ICRC_BYTES);

    if (mtu >= ib_mtu_enum_to_int(IB_MTU_4096))
    return IB_MTU_4096;
    --- a/include/rdma/ib_pack.h
    +++ b/include/rdma/ib_pack.h
    @@ -37,14 +37,17 @@
    #include <uapi/linux/if_ether.h>

    enum {
    - IB_LRH_BYTES = 8,
    - IB_ETH_BYTES = 14,
    - IB_VLAN_BYTES = 4,
    - IB_GRH_BYTES = 40,
    - IB_IP4_BYTES = 20,
    - IB_UDP_BYTES = 8,
    - IB_BTH_BYTES = 12,
    - IB_DETH_BYTES = 8
    + IB_LRH_BYTES = 8,
    + IB_ETH_BYTES = 14,
    + IB_VLAN_BYTES = 4,
    + IB_GRH_BYTES = 40,
    + IB_IP4_BYTES = 20,
    + IB_UDP_BYTES = 8,
    + IB_BTH_BYTES = 12,
    + IB_DETH_BYTES = 8,
    + IB_EXT_ATOMICETH_BYTES = 28,
    + IB_EXT_XRC_BYTES = 4,
    + IB_ICRC_BYTES = 4
    };

    struct ib_field {

    \
     
     \ /
      Last update: 2017-12-18 17:27    [W:4.380 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site