| From foo@baz Sun May 27 17:33:38 CEST 2018 |
| From: Alex Estrin <alex.estrin@intel.com> |
| Date: Thu, 1 Feb 2018 10:55:41 -0800 |
| Subject: IB/ipoib: Fix for potential no-carrier state |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/infiniband/ulp/ipoib/ipoib_main.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c |
| +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c |
| @@ -2119,6 +2119,9 @@ static struct net_device *ipoib_add_port |
| goto event_failed; |
| } |
| |
| + /* 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", |