• Parav Pandit's avatar
    IB/mlx5: Fixed reporting counters on 2nd port for Dual port RoCE · 2f40cf30
    Parav Pandit authored
    Currently during dual port IB device registration in below code flow,
    
    ib_register_device()
      ib_device_register_sysfs()
        ib_setup_port_attrs()
          add_port()
            get_counter_table()
              get_perf_mad()
                process_mad()
                  mlx5_ib_process_mad()
    
    mlx5_ib_process_mad() fails on 2nd port when both the ports are not fully
    setup at the device level (because 2nd port is unaffiliated).
    
    As a result, get_perf_mad() registers different PMA counter group for 1st
    and 2nd port, namely pma_counter_ext and pma_counter. However both ports
    have the same capability and counter offsets.
    
    Due to this when counters are read by the user via sysfs in below code
    flow, counters are queried from wrong location from the device mainly from
    PPCNT instead of VPORT counters.
    
    show_pma_counter()
      get_perf_mad()
        process_mad()
          mlx5_ib_process_mad()
            process_pma_cmd()
    
    This shows all zero counters for 2nd port.
    
    To overcome this, process_pma_cmd() is invoked, and when unaffiliated port
    is not yet setup during device registration phase, make the query on the
    first port.  while at it, only process_pma_cmd() needs to work on the
    native port number and underlying mdev, so shift the get, put calls to
    where its needed inside process_pma_cmd().
    
    Fixes: 212f2a87 ("IB/mlx5: Route MADs for dual port RoCE")
    Signed-off-by: default avatarParav Pandit <parav@mellanox.com>
    Reviewed-by: default avatarDaniel Jurgens <danielj@mellanox.com>
    Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    2f40cf30
mad.c 17.8 KB