Message ID | 20211115101519.27210-1-jinpu.wang@ionos.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Jason Gunthorpe |
Headers | show |
Series | RDMA/mlx4: Do not fail the registration on port stats | expand |
On Mon, Nov 15, 2021 at 11:15:19AM +0100, Jack Wang wrote: > If the FW doesn't support MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT, > mlx4 driver will fail the ib_setup_port_attrs, which is called > from ib_register_device/enable_device_and_get, in the end leads > to device not detected[1][2] > > To fix it, add a new mlx4_ib_hw_stats_ops1, w/o alloc_hw_port_stats > if FW does not support MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT. > > [1] https://bugzilla.redhat.com/show_bug.cgi?id=2014094 > [2] https://lore.kernel.org/linux-rdma/CAMGffEn2wvEnmzc0xe=xYiCLqpphiHDBxCxqAELrBofbUAMQxw@mail.gmail.com/T/#t > > Fixes: 4b5f4d3fb408 ("RDMA: Split the alloc_hw_stats() ops to port and device variants") > > Signed-off-by: Jack Wang <jinpu.wang@ionos.com> > --- > drivers/infiniband/hw/mlx4/main.c | 18 +++++++++++++++--- > 1 file changed, 15 insertions(+), 3 deletions(-) Just a nitpick, no need for a blank line between Fixes line and SOB. Thanks, Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
On Wed, Nov 17, 2021 at 1:17 PM Leon Romanovsky <leon@kernel.org> wrote: > > On Mon, Nov 15, 2021 at 11:15:19AM +0100, Jack Wang wrote: > > If the FW doesn't support MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT, > > mlx4 driver will fail the ib_setup_port_attrs, which is called > > from ib_register_device/enable_device_and_get, in the end leads > > to device not detected[1][2] > > > > To fix it, add a new mlx4_ib_hw_stats_ops1, w/o alloc_hw_port_stats > > if FW does not support MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT. > > > > [1] https://bugzilla.redhat.com/show_bug.cgi?id=2014094 > > [2] https://lore.kernel.org/linux-rdma/CAMGffEn2wvEnmzc0xe=xYiCLqpphiHDBxCxqAELrBofbUAMQxw@mail.gmail.com/T/#t > > > > Fixes: 4b5f4d3fb408 ("RDMA: Split the alloc_hw_stats() ops to port and device variants") > > > > Signed-off-by: Jack Wang <jinpu.wang@ionos.com> > > --- > > drivers/infiniband/hw/mlx4/main.c | 18 +++++++++++++++--- > > 1 file changed, 15 insertions(+), 3 deletions(-) > > Just a nitpick, no need for a blank line between Fixes line and SOB. > > Thanks, > Reviewed-by: Leon Romanovsky <leonro@nvidia.com> Thanks for the review, I will remember not to add the blank line next time.
On Mon, Nov 15, 2021 at 11:15:19AM +0100, Jack Wang wrote: > If the FW doesn't support MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT, > mlx4 driver will fail the ib_setup_port_attrs, which is called > from ib_register_device/enable_device_and_get, in the end leads > to device not detected[1][2] > > To fix it, add a new mlx4_ib_hw_stats_ops1, w/o alloc_hw_port_stats > if FW does not support MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT. > > [1] https://bugzilla.redhat.com/show_bug.cgi?id=2014094 > [2] https://lore.kernel.org/linux-rdma/CAMGffEn2wvEnmzc0xe=xYiCLqpphiHDBxCxqAELrBofbUAMQxw@mail.gmail.com/T/#t > > Fixes: 4b5f4d3fb408 ("RDMA: Split the alloc_hw_stats() ops to port and device variants") > > Signed-off-by: Jack Wang <jinpu.wang@ionos.com> > Reviewed-by: Leon Romanovsky <leonro@nvidia.com> > --- > drivers/infiniband/hw/mlx4/main.c | 18 +++++++++++++++--- > 1 file changed, 15 insertions(+), 3 deletions(-) Applied to for-rc, thanks Jason
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index f367f4a4abff..2ad9c6d12ac0 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c @@ -2217,6 +2217,12 @@ static const struct ib_device_ops mlx4_ib_hw_stats_ops = { .get_hw_stats = mlx4_ib_get_hw_stats, }; + +static const struct ib_device_ops mlx4_ib_hw_stats_ops1 = { + .alloc_hw_device_stats = mlx4_ib_alloc_hw_device_stats, + .get_hw_stats = mlx4_ib_get_hw_stats, +}; + static int mlx4_ib_alloc_diag_counters(struct mlx4_ib_dev *ibdev) { struct mlx4_ib_diag_counters *diag = ibdev->diag_counters; @@ -2229,9 +2235,15 @@ static int mlx4_ib_alloc_diag_counters(struct mlx4_ib_dev *ibdev) return 0; for (i = 0; i < MLX4_DIAG_COUNTERS_TYPES; i++) { - /* i == 1 means we are building port counters */ - if (i && !per_port) - continue; + /* i == 1 means we are building port counters, set a different + * stats ops without port stats callback. + */ + if (i && !per_port) { + ib_set_device_ops(&ibdev->ib_dev, + &mlx4_ib_hw_stats_ops1); + + return 0; + } ret = __mlx4_ib_alloc_diag_counters(ibdev, &diag[i].name, &diag[i].offset,
If the FW doesn't support MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT, mlx4 driver will fail the ib_setup_port_attrs, which is called from ib_register_device/enable_device_and_get, in the end leads to device not detected[1][2] To fix it, add a new mlx4_ib_hw_stats_ops1, w/o alloc_hw_port_stats if FW does not support MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT. [1] https://bugzilla.redhat.com/show_bug.cgi?id=2014094 [2] https://lore.kernel.org/linux-rdma/CAMGffEn2wvEnmzc0xe=xYiCLqpphiHDBxCxqAELrBofbUAMQxw@mail.gmail.com/T/#t Fixes: 4b5f4d3fb408 ("RDMA: Split the alloc_hw_stats() ops to port and device variants") Signed-off-by: Jack Wang <jinpu.wang@ionos.com> --- drivers/infiniband/hw/mlx4/main.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-)