Author: slavash
Date: Wed Dec  5 13:40:36 2018
New Revision: 341554
URL: https://svnweb.freebsd.org/changeset/base/341554

Log:
  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.
  
  Linux commit:
  aba462134634b502d720e15b23154f21cfa277e5
  
  Approved by:    hselasky (mentor)
  MFC after:      1 week
  Sponsored by:   Mellanox Technologies

Modified:
  head/sys/dev/mlx5/mlx5_core/mlx5_health.c
  head/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c

Modified: head/sys/dev/mlx5/mlx5_core/mlx5_health.c
==============================================================================
--- head/sys/dev/mlx5/mlx5_core/mlx5_health.c   Wed Dec  5 13:40:05 2018        
(r341553)
+++ head/sys/dev/mlx5/mlx5_core/mlx5_health.c   Wed Dec  5 13:40:36 2018        
(r341554)
@@ -269,7 +269,7 @@ void mlx5_enter_error_state(struct mlx5_core_dev *dev,
        mlx5_core_err(dev, "system error event triggered\n");
 
 err_state_done:
-       mlx5_core_event(dev, MLX5_DEV_EVENT_SYS_ERROR, 0);
+       mlx5_core_event(dev, MLX5_DEV_EVENT_SYS_ERROR, 1);
        mutex_unlock(&dev->intf_state_mutex);
 }
 

Modified: head/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
==============================================================================
--- head/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c    Wed Dec  5 13:40:05 2018        
(r341553)
+++ head/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c    Wed Dec  5 13:40:36 2018        
(r341554)
@@ -2335,7 +2335,7 @@ static void mlx5_ib_event(struct mlx5_core_dev *dev, v
        struct mlx5_ib_dev *ibdev = (struct mlx5_ib_dev *)context;
        struct ib_event ibev;
        bool fatal = false;
-       u8 port = 0;
+       u8 port = (u8)param;
 
        switch (event) {
        case MLX5_DEV_EVENT_SYS_ERROR:
@@ -2347,8 +2347,6 @@ static void mlx5_ib_event(struct mlx5_core_dev *dev, v
        case MLX5_DEV_EVENT_PORT_UP:
        case MLX5_DEV_EVENT_PORT_DOWN:
        case MLX5_DEV_EVENT_PORT_INITIALIZED:
-               port = (u8)param;
-
                /* In RoCE, port up/down events are handled in
                 * mlx5_netdev_event().
                 */
@@ -2362,24 +2360,20 @@ static void mlx5_ib_event(struct mlx5_core_dev *dev, v
 
        case MLX5_DEV_EVENT_LID_CHANGE:
                ibev.event = IB_EVENT_LID_CHANGE;
-               port = (u8)param;
                break;
 
        case MLX5_DEV_EVENT_PKEY_CHANGE:
                ibev.event = IB_EVENT_PKEY_CHANGE;
-               port = (u8)param;
 
                schedule_work(&ibdev->devr.ports[port - 1].pkey_change_work);
                break;
 
        case MLX5_DEV_EVENT_GUID_CHANGE:
                ibev.event = IB_EVENT_GID_CHANGE;
-               port = (u8)param;
                break;
 
        case MLX5_DEV_EVENT_CLIENT_REREG:
                ibev.event = IB_EVENT_CLIENT_REREGISTER;
-               port = (u8)param;
                break;
 
        default:
@@ -2390,7 +2384,7 @@ static void mlx5_ib_event(struct mlx5_core_dev *dev, v
        ibev.device           = &ibdev->ib_dev;
        ibev.element.port_num = port;
 
-       if (port < 1 || port > ibdev->num_ports) {
+       if (!rdma_is_port_valid(&ibdev->ib_dev, port)) {
                mlx5_ib_warn(ibdev, "warning: event(%d) on port %d\n", event, 
port);
                return;
        }
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to