aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Jurgens <danielj@mellanox.com>2018-02-25 06:39:53 -0500
committerJason Gunthorpe <jgg@mellanox.com>2018-02-28 14:10:32 -0500
commitaba462134634b502d720e15b23154f21cfa277e5 (patch)
tree769c0625c0793a928262d92e67263d949834b524
parente7b169f34403becd3c9fd3b6e46614ab788f2187 (diff)
{net, IB}/mlx5: Raise fatal IB event when sys error occurs
All other mlx5_events report the port number as 1 based, which is how FW reports it in the port event EQE. Reporting 0 for this event causes mlx5_ib to not raise a fatal event notification to registered clients due to a seemingly invalid port. All switch cases in mlx5_ib_event that go through the port check are supposed to set the port now, so just do it once at variable declaration. Fixes: 89d44f0a6c73("net/mlx5_core: Add pci error handlers to mlx5_core driver") Reviewed-by: Majd Dibbiny <majd@mellanox.com> Signed-off-by: Daniel Jurgens <danielj@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
-rw-r--r--drivers/infiniband/hw/mlx5/main.c11
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/health.c2
2 files changed, 3 insertions, 10 deletions
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 4236c8086820..bab38c6647d7 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -3263,7 +3263,7 @@ static void mlx5_ib_handle_event(struct work_struct *_work)
3263 struct mlx5_ib_dev *ibdev; 3263 struct mlx5_ib_dev *ibdev;
3264 struct ib_event ibev; 3264 struct ib_event ibev;
3265 bool fatal = false; 3265 bool fatal = false;
3266 u8 port = 0; 3266 u8 port = (u8)work->param;
3267 3267
3268 if (mlx5_core_is_mp_slave(work->dev)) { 3268 if (mlx5_core_is_mp_slave(work->dev)) {
3269 ibdev = mlx5_ib_get_ibdev_from_mpi(work->context); 3269 ibdev = mlx5_ib_get_ibdev_from_mpi(work->context);
@@ -3283,8 +3283,6 @@ static void mlx5_ib_handle_event(struct work_struct *_work)
3283 case MLX5_DEV_EVENT_PORT_UP: 3283 case MLX5_DEV_EVENT_PORT_UP:
3284 case MLX5_DEV_EVENT_PORT_DOWN: 3284 case MLX5_DEV_EVENT_PORT_DOWN:
3285 case MLX5_DEV_EVENT_PORT_INITIALIZED: 3285 case MLX5_DEV_EVENT_PORT_INITIALIZED:
3286 port = (u8)work->param;
3287
3288 /* In RoCE, port up/down events are handled in 3286 /* In RoCE, port up/down events are handled in
3289 * mlx5_netdev_event(). 3287 * mlx5_netdev_event().
3290 */ 3288 */
@@ -3298,24 +3296,19 @@ static void mlx5_ib_handle_event(struct work_struct *_work)
3298 3296
3299 case MLX5_DEV_EVENT_LID_CHANGE: 3297 case MLX5_DEV_EVENT_LID_CHANGE:
3300 ibev.event = IB_EVENT_LID_CHANGE; 3298 ibev.event = IB_EVENT_LID_CHANGE;
3301 port = (u8)work->param;
3302 break; 3299 break;
3303 3300
3304 case MLX5_DEV_EVENT_PKEY_CHANGE: 3301 case MLX5_DEV_EVENT_PKEY_CHANGE:
3305 ibev.event = IB_EVENT_PKEY_CHANGE; 3302 ibev.event = IB_EVENT_PKEY_CHANGE;
3306 port = (u8)work->param;
3307
3308 schedule_work(&ibdev->devr.ports[port - 1].pkey_change_work); 3303 schedule_work(&ibdev->devr.ports[port - 1].pkey_change_work);
3309 break; 3304 break;
3310 3305
3311 case MLX5_DEV_EVENT_GUID_CHANGE: 3306 case MLX5_DEV_EVENT_GUID_CHANGE:
3312 ibev.event = IB_EVENT_GID_CHANGE; 3307 ibev.event = IB_EVENT_GID_CHANGE;
3313 port = (u8)work->param;
3314 break; 3308 break;
3315 3309
3316 case MLX5_DEV_EVENT_CLIENT_REREG: 3310 case MLX5_DEV_EVENT_CLIENT_REREG:
3317 ibev.event = IB_EVENT_CLIENT_REREGISTER; 3311 ibev.event = IB_EVENT_CLIENT_REREGISTER;
3318 port = (u8)work->param;
3319 break; 3312 break;
3320 case MLX5_DEV_EVENT_DELAY_DROP_TIMEOUT: 3313 case MLX5_DEV_EVENT_DELAY_DROP_TIMEOUT:
3321 schedule_work(&ibdev->delay_drop.delay_drop_work); 3314 schedule_work(&ibdev->delay_drop.delay_drop_work);
@@ -3327,7 +3320,7 @@ static void mlx5_ib_handle_event(struct work_struct *_work)
3327 ibev.device = &ibdev->ib_dev; 3320 ibev.device = &ibdev->ib_dev;
3328 ibev.element.port_num = port; 3321 ibev.element.port_num = port;
3329 3322
3330 if (port < 1 || port > ibdev->num_ports) { 3323 if (!rdma_is_port_valid(&ibdev->ib_dev, port)) {
3331 mlx5_ib_warn(ibdev, "warning: event on port %d\n", port); 3324 mlx5_ib_warn(ibdev, "warning: event on port %d\n", port);
3332 goto out; 3325 goto out;
3333 } 3326 }
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/health.c b/drivers/net/ethernet/mellanox/mlx5/core/health.c
index 21d29f7936f6..d39b0b7011b2 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/health.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/health.c
@@ -124,7 +124,7 @@ void mlx5_enter_error_state(struct mlx5_core_dev *dev, bool force)
124 trigger_cmd_completions(dev); 124 trigger_cmd_completions(dev);
125 } 125 }
126 126
127 mlx5_core_event(dev, MLX5_DEV_EVENT_SYS_ERROR, 0); 127 mlx5_core_event(dev, MLX5_DEV_EVENT_SYS_ERROR, 1);
128 mlx5_core_err(dev, "end\n"); 128 mlx5_core_err(dev, "end\n");
129 129
130unlock: 130unlock: