Re: [PATCH V3 1/1] mlx4: trigger IB events needed by SMC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Nov 12, 2018 at 12:41:55PM +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.
>
> v1->v2:
> take into account previous port states (IB_PORT_DOWN vs. IB_PORT_ACTIVE).
>
> v2->v3:
> this change log added.

The changelog should be below "---" line and after SOB.
It ensures that such information won't appear in git log.

I took it for regression.
Thanks a lot for your work.

>
> Signed-off-by: Ursula Braun <ubraun@xxxxxxxxxxxxx>
> ---
>  drivers/infiniband/hw/mlx4/main.c    | 27 +++++++++++++++++++++++++++
>  drivers/infiniband/hw/mlx4/mlx4_ib.h |  1 +
>  2 files changed, 28 insertions(+)
>
> diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
> index 0def2323459c..b73b5fa1822a 100644
> --- a/drivers/infiniband/hw/mlx4/main.c
> +++ b/drivers/infiniband/hw/mlx4/main.c
> @@ -2352,6 +2352,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);
>
> @@ -2710,6 +2736,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 8850dfc3826d..5cb52424912e 100644
> --- a/drivers/infiniband/hw/mlx4/mlx4_ib.h
> +++ b/drivers/infiniband/hw/mlx4/mlx4_ib.h
> @@ -519,6 +519,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 {
> --
> 2.16.4
>

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux