Message ID | 20181105140730.91583-1-ubraun@linux.ibm.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Leon Romanovsky |
Headers | show |
Series | [V2,1/1] mlx4: trigger IB events needed by SMC | expand |
On Mon, Nov 05, 2018 at 03:07:30PM +0100, Ursula Braun wrote: > The mlx4 driver does not trigger an IB_EVENT_PORT_ACTIVE when the > RoCE network interface is activated. When SMC determines the RoCE > device port to be used, it checks the port states. > This patch triggers IB events for NETDEV_UP and NETDEV_DOWN. > > Signed-off-by: Ursula Braun <ubraun@linux.ibm.com> > --- > drivers/infiniband/hw/mlx4/main.c | 27 +++++++++++++++++++++++++++ > drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 + > 2 files changed, 28 insertions(+) Change log? You never answered Leon in the v1 discussion either. Jason
On 11/06/2018 05:21 PM, Jason Gunthorpe wrote: > On Mon, Nov 05, 2018 at 03:07:30PM +0100, Ursula Braun wrote: >> The mlx4 driver does not trigger an IB_EVENT_PORT_ACTIVE when the >> RoCE network interface is activated. When SMC determines the RoCE >> device port to be used, it checks the port states. >> This patch triggers IB events for NETDEV_UP and NETDEV_DOWN. >> >> Signed-off-by: Ursula Braun <ubraun@linux.ibm.com> >> --- >> drivers/infiniband/hw/mlx4/main.c | 27 +++++++++++++++++++++++++++ >> drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 + >> 2 files changed, 28 insertions(+) > > Change log? I am going to resend the patch as V3 with change log. > > You never answered Leon in the v1 discussion either. I answered late, see: 09/05/2018: Re: [PATCH 1/1] mlx4: trigger IB events needed by SMC 09/05/2018: Re: [RFC PATCH 1/1] mlx4: trigger IB events needed by SMC and Leons reply: 09/11/2018: Re: [RFC PATCH 1/1] mlx4: trigger IB events needed by SMC > > Jason >
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index 0bbeaaae47e0..eea5f07d6214 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c @@ -2442,6 +2442,32 @@ static void mlx4_ib_scan_netdevs(struct mlx4_ib_dev *ibdev, event == NETDEV_UP || event == NETDEV_CHANGE)) update_qps_port = port; + if (dev == iboe->netdevs[port - 1] && + (event == NETDEV_UP || event == NETDEV_DOWN)) { + enum ib_port_state port_state; + struct ib_event ibev = { }; + + if (ib_get_cached_port_state(&ibdev->ib_dev, port, + &port_state)) + continue; + + if (event == NETDEV_UP && + (port_state != IB_PORT_ACTIVE || + iboe->last_port_state[port - 1] != IB_PORT_DOWN)) + continue; + if (event == NETDEV_DOWN && + (port_state != IB_PORT_DOWN || + iboe->last_port_state[port - 1] != IB_PORT_ACTIVE)) + continue; + iboe->last_port_state[port - 1] = port_state; + + ibev.device = &ibdev->ib_dev; + ibev.element.port_num = port; + ibev.event = event == NETDEV_UP ? IB_EVENT_PORT_ACTIVE : + IB_EVENT_PORT_ERR; + ib_dispatch_event(&ibev); + } + } spin_unlock_bh(&iboe->lock); @@ -2801,6 +2827,7 @@ static void *mlx4_ib_add(struct mlx4_dev *dev) for (i = 0; i < ibdev->num_ports; ++i) { mutex_init(&ibdev->counters_table[i].mutex); INIT_LIST_HEAD(&ibdev->counters_table[i].counters_list); + iboe->last_port_state[i] = IB_PORT_DOWN; } num_req_counters = mlx4_is_bonded(dev) ? 1 : ibdev->num_ports; diff --git a/drivers/infiniband/hw/mlx4/mlx4_ib.h b/drivers/infiniband/hw/mlx4/mlx4_ib.h index e10dccc7958f..c74c969f518b 100644 --- a/drivers/infiniband/hw/mlx4/mlx4_ib.h +++ b/drivers/infiniband/hw/mlx4/mlx4_ib.h @@ -524,6 +524,7 @@ struct mlx4_ib_iboe { atomic64_t mac[MLX4_MAX_PORTS]; struct notifier_block nb; struct mlx4_port_gid_table gids[MLX4_MAX_PORTS]; + enum ib_port_state last_port_state[MLX4_MAX_PORTS]; }; struct pkey_mgt {
The mlx4 driver does not trigger an IB_EVENT_PORT_ACTIVE when the RoCE network interface is activated. When SMC determines the RoCE device port to be used, it checks the port states. This patch triggers IB events for NETDEV_UP and NETDEV_DOWN. Signed-off-by: Ursula Braun <ubraun@linux.ibm.com> --- drivers/infiniband/hw/mlx4/main.c | 27 +++++++++++++++++++++++++++ drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 + 2 files changed, 28 insertions(+)