lkml.org 
[lkml]   [2018]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.14 110/161] IB/ipoib: Fix for potential no-carrier state
    Date
    From: Alex Estrin <alex.estrin@intel.com>

    [ Upstream commit 1029361084d18cc270f64dfd39529fafa10cfe01 ]

    On reboot SM can program port pkey table before ipoib registered its
    event handler, which could result in missing pkey event and leave root
    interface with initial pkey value from index 0.

    Since OPA port starts with invalid pkey in index 0, root interface will
    fail to initialize and stay down with no-carrier flag.

    For IB ipoib interface may end up with pkey different from value
    opensm put in pkey table idx 0, resulting in connectivity issues
    (different mcast groups, for example).

    Close the window by calling event handler after registration
    to make sure ipoib pkey is in sync with port pkey table.

    Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
    Reviewed-by: Ira Weiny <ira.weiny@intel.com>
    Signed-off-by: Alex Estrin <alex.estrin@intel.com>
    Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/infiniband/ulp/ipoib/ipoib_main.c | 3 +++
    1 file changed, 3 insertions(+)

    diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
    index a009e943362a..6bc9a768f721 100644
    --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
    +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
    @@ -2273,6 +2273,9 @@ static struct net_device *ipoib_add_port(const char *format,
    priv->ca, ipoib_event);
    ib_register_event_handler(&priv->event_handler);

    + /* call event handler to ensure pkey in sync */
    + queue_work(ipoib_workqueue, &priv->flush_heavy);
    +
    result = register_netdev(priv->dev);
    if (result) {
    printk(KERN_WARNING "%s: couldn't register ipoib port %d; error %d\n",
    --
    2.15.1
    \
     
     \ /
      Last update: 2018-04-09 05:03    [W:4.030 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site