diff mbox series

[V2,1/1] mlx4: trigger IB events needed by SMC

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

Commit Message

Ursula Braun Nov. 5, 2018, 2:07 p.m. UTC
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(+)

Comments

Jason Gunthorpe Nov. 6, 2018, 4:21 p.m. UTC | #1
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
Ursula Braun Nov. 12, 2018, 11:41 a.m. UTC | #2
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 mbox series

Patch

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 {