Commit Graph

18 Commits

Author SHA1 Message Date
Benjamin Poirier 11101a5424 RDMA/mlx5: Add Qcounters req_transport_retries_exceeded/req_rnr_retries_exceeded
JIRA: https://issues.redhat.com/browse/RHEL-52869
Upstream-status: v6.11-rc1

commit b339e0a39dc37726712b9f0485d78fe4306d1667
Author: Patrisious Haddad <phaddad@nvidia.com>
Date:   Thu Jun 13 21:00:04 2024 +0300

    RDMA/mlx5: Add Qcounters req_transport_retries_exceeded/req_rnr_retries_exceeded

    The req_transport_retries_exceeded counter shows the number of times
    requester detected transport retries exceed error.

    The req_rnr_retries_exceeded counter show the number of times the
    requester detected RNR NAKs retries exceed error.

    Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
    Link: https://lore.kernel.org/r/250466af94f4989d638fab168e246035530e912f.1718301543.git.leon@kernel.org
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>

Signed-off-by: Benjamin Poirier <bpoirier@redhat.com>
2024-12-05 10:32:03 -05:00
Benjamin Poirier cdd6466d8d IB/mlx5: Add HW counter called rx_dct_connect
JIRA: https://issues.redhat.com/browse/RHEL-24466
Upstream-status: v6.6-rc1

commit f0ff2a2dd08df50656961c26c06c7091e3792123
Author: Shetu Ayalew <shetu@nvidia.com>
Date:   Sun Jul 23 17:21:14 2023 +0300

    IB/mlx5: Add HW counter called rx_dct_connect

    The rx_dct_connect counter shows the number of received connection
    requests for the associated DCTs.

    Signed-off-by: Shetu Ayalew <shetu@nvidia.com>
    Reviewed-by: Maor Gottlieb <maorg@nvidia.com>
    Link: https://lore.kernel.org/r/01cd24cd7f591734741309921fdc01fc770d84a8.1690121941.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>

Signed-off-by: Benjamin Poirier <bpoirier@redhat.com>
2024-07-22 15:33:39 -04:00
Mohammad Kabat 64ec939211 RDMA/mlx5: Fix Q-counters query in LAG mode
JIRA: https://issues.redhat.com/browse/RHEL-882
Upstream-status: v6.4-rc7

commit 2de43f5b5137e03ef64a2c3f064a01992830c67f
Author: Patrisious Haddad <phaddad@nvidia.com>
Date:   Mon Jun 5 13:33:21 2023 +0300

    RDMA/mlx5: Fix Q-counters query in LAG mode

    Previously we used the core device associated to the IB device in order
    to do the Q-counters query to the FW, but in LAG mode it is possible
    that the core device isn't the one that created this VF.

    Hence instead of using the core device to query the Q-counters
    we use the ESW core device which is guaranteed to be that of the VF.

    Fixes: d22467a71ebe ("RDMA/mlx5: Expand switchdev Q-counters to expose representor statistics")
    Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
    Reviewed-by: Mark Zhang <markzhang@nvidia.com>
    Link: https://lore.kernel.org/r/778d7d7a24892348d0bdef17d2e5f9e044717e86.1685960567.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leon@kernel.org>

Signed-off-by: Mohammad Kabat <mkabat@redhat.com>
2024-01-16 08:58:21 +00:00
Mohammad Kabat af1ba84bc5 RDMA/mlx5: Remove vport Q-counters dependency on normal Q-counters
JIRA: https://issues.redhat.com/browse/RHEL-882
Upstream-status: v6.4-rc7

commit e80ef139488fb4f481c877a81f6ba54f1f0ee416
Author: Patrisious Haddad <phaddad@nvidia.com>
Date:   Mon Jun 5 13:33:20 2023 +0300

    RDMA/mlx5: Remove vport Q-counters dependency on normal Q-counters

    Previously the Q-counters initialization assumed that the vport Q-counters
    structures and the normal Q-counters structures are identical in size,
    and hence when a Q-counter was added to normal Q-counters structure but
    not to the vport Q-counters struct it would lead to that counter name
    being NULL in switchdev mode, which could cause the kernel crash below.

    Currently break the dependency between those two structure and always
    use the appropriate struct size, in order to remove the assumption
    that both structure sizes are equal.

     BUG: kernel NULL pointer dereference, address: 0000000000000000
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
     PGD 20c64a067 P4D 20c64a067 PUD 20152b067 PMD 0
     Oops: 0000 [#1] SMP
     CPU: 19 PID: 11717 Comm: devlink Tainted: G           OE      6.2.0_mlnx #1
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
     RIP: 0010:strlen+0x0/0x20
     Code: 66 2e 0f 1f 84 00 00 00 00 00 48 01 fe eb 0f 0f b6 07 38 d0 74 10 48 83 c7 01 84 c0 74 05 48 39 f7 75 ec 31 c0 c3 48 89 f8 c3 <80> 3f 00 48 89 f8 74 10 48 83 c7 01 80 3f 00 75 f7 48 29 c7 48 89
     RSP: 0018:ffffc9000318b618 EFLAGS: 00010246
     RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000002c00
     RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
     RBP: 0000000000000000 R08: ffff888211918110 R09: ffff888211918000
     R10: 000000000000001e R11: ffff888211918000 R12: 0000000000000000
     R13: 0000000000000000 R14: 0000000000000000 R15: ffff8881038ec250
     FS:  00007fa53342fe80(0000) GS:ffff88885fcc0000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 0000000000000000 CR3: 00000002042b2003 CR4: 0000000000770ee0
     DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     PKRU: 55555554
     Call Trace:
      <TASK>
      kernfs_name_hash+0x12/0x80
      kernfs_find_ns+0x35/0xb0
      kernfs_remove_by_name_ns+0x46/0xc0
      remove_files.isra.1+0x30/0x70
      internal_create_group+0x253/0x380
      internal_create_groups.part.4+0x3e/0xa0
      setup_port+0x27a/0x8c0 [ib_core]
      ib_setup_port_attrs+0x9d/0x300 [ib_core]
      ib_register_device+0x48e/0x550 [ib_core]
      __mlx5_ib_add+0x2b/0x80 [mlx5_ib]
      mlx5_ib_vport_rep_load+0x141/0x360 [mlx5_ib]
      mlx5_esw_offloads_rep_load+0x48/0xa0 [mlx5_core]
      esw_offloads_enable+0x41e/0xd10 [mlx5_core]
      mlx5_eswitch_enable_locked+0x1e3/0x340 [mlx5_core]
      ? __cond_resched+0x15/0x30
      mlx5_devlink_eswitch_mode_set+0x204/0x3c0 [mlx5_core]
      devlink_nl_cmd_eswitch_set_doit+0x8d/0x100
      genl_family_rcv_msg_doit.isra.19+0xea/0x110
      genl_rcv_msg+0x19b/0x290
      ? devlink_nl_cmd_region_read_dumpit+0x760/0x760
      ? devlink_nl_cmd_port_param_get_doit+0x30/0x30
      ? devlink_put+0x50/0x50
      ? genl_get_cmd_both+0x60/0x60
      netlink_rcv_skb+0x54/0x100
      genl_rcv+0x24/0x40
      netlink_unicast+0x1be/0x2a0
      netlink_sendmsg+0x361/0x4d0
      sock_sendmsg+0x30/0x40
      __sys_sendto+0x11a/0x150
      ? handle_mm_fault+0x101/0x2b0
      ? do_user_addr_fault+0x21d/0x720
      __x64_sys_sendto+0x24/0x30
      do_syscall_64+0x34/0x80
      entry_SYSCALL_64_after_hwframe+0x46/0xb0
     RIP: 0033:0x7fa533611cba
     Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 76 c3 0f 1f 44 00 00 55 48 83 ec 30 44 89 4c
     RSP: 002b:00007ffdb6a898a8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
     RAX: ffffffffffffffda RBX: 0000000000daab00 RCX: 00007fa533611cba
     RDX: 0000000000000038 RSI: 0000000000daab00 RDI: 0000000000000003
     RBP: 0000000000daa910 R08: 00007fa533822000 R09: 000000000000000c
     R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
     R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000001
      </TASK>
     Modules linked in: rdma_ucm(OE) rdma_cm(OE) iw_cm(OE) ib_ipoib(OE) ib_cm(OE) ib_umad(OE) mlx5_ib(OE) mlx5_core(OE) mlxdevm(OE) ib_uverbs(OE) ib_core(OE) mlx_compat(OE) mlxfw(OE) memtrack(OE) pci_hyperv_intf nfsv3 nfs_acl rpcsec_gss_krb5 auth_rpcgss nfsv4 xt_conntrack xt_MASQUERADE nf_conntrack_netlink nfnetlink xt_addrtype iptable_filter iptable_nat dns_resolver nf_nat br_netfilter nfs bridge stp llc lockd grace fscache netfs rfkill overlay iTCO_wdt iTCO_vendor_support kvm_intel kvm irqbypass crc32_pclmul ghash_clmulni_intel i2c_i801 sunrpc lpc_ich sha512_ssse3 pcspkr i2c_smbus mfd_core drm sch_fq_codel i2c_core ip_tables fuse crc32c_intel serio_raw virtio_net net_failover failover [last unloaded: mlxfw]
     CR2: 0000000000000000
     ---[ end trace 0000000000000000 ]---
     RIP: 0010:strlen+0x0/0x20
     Code: 66 2e 0f 1f 84 00 00 00 00 00 48 01 fe eb 0f 0f b6 07 38 d0 74 10 48 83 c7 01 84 c0 74 05 48 39 f7 75 ec 31 c0 c3 48 89 f8 c3 <80> 3f 00 48 89 f8 74 10 48 83 c7 01 80 3f 00 75 f7 48 29 c7 48 89
     RSP: 0018:ffffc9000318b618 EFLAGS: 00010246
     RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000002c00
     RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
     RBP: 0000000000000000 R08: ffff888211918110 R09: ffff888211918000
     R10: 000000000000001e R11: ffff888211918000 R12: 0000000000000000
     R13: 0000000000000000 R14: 0000000000000000 R15: ffff8881038ec250
     FS:  00007fa53342fe80(0000) GS:ffff88885fcc0000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 0000000000000000 CR3: 00000002042b2003 CR4: 0000000000770ee0
     DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     PKRU: 55555554
     Kernel panic - not syncing: Fatal exception
     Kernel Offset: disabled
     ---[ end Kernel panic - not syncing: Fatal exception ]---

    Fixes: d22467a71ebe ("RDMA/mlx5: Expand switchdev Q-counters to expose representor statistics")
    Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
    Reviewed-by: Mark Zhang <markzhang@nvidia.com>
    Link: https://lore.kernel.org/r/016777b7f16eb6bb178999ff59097d0c0f91f68a.1685960567.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leon@kernel.org>

Signed-off-by: Mohammad Kabat <mkabat@redhat.com>
2024-01-16 08:58:21 +00:00
Mohammad Kabat 30a6adec14 RDMA/mlx5: Fix Q-counters per vport allocation
JIRA: https://issues.redhat.com/browse/RHEL-882
Upstream-status: v6.4-rc7

commit c2ea687e5e0e29802714a981a1ccdc17c2c4b2be
Author: Patrisious Haddad <phaddad@nvidia.com>
Date:   Mon Jun 5 13:33:19 2023 +0300

    RDMA/mlx5: Fix Q-counters per vport allocation

    Previously Q-counters data was being allocated over the PF for all of
    the available vports, however that isn't necessary.

    Since each VF or SF has a Q-counter allocated for itself.

    So we only need to allocate two counters data structures, one for the
    device counters, and one for all the other vports to expose the
    representors, since they only need to read from it in order to
    determine mainly counters numbers and names, so they can all share.

    This in turn also solves a bug we previously had where we couldn't
    switch the device to switchdev mode when there were more than 128 SF/VFs
    configured, since that is the maximum amount of Q-counters available for
    a single port

    Fixes: d22467a71ebe ("RDMA/mlx5: Expand switchdev Q-counters to expose representor statistics")
    Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
    Reviewed-by: Mark Zhang <markzhang@nvidia.com>
    Link: https://lore.kernel.org/r/f54671df16e2227a069b229b33b62cd9ee24c475.1685960567.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leon@kernel.org>

Signed-off-by: Mohammad Kabat <mkabat@redhat.com>
2024-01-16 08:58:21 +00:00
Mohammad Kabat c2cfb82941 RDMA/mlx5: Expand switchdev Q-counters to expose representor statistics
JIRA: https://issues.redhat.com/browse/RHEL-882
Upstream-status: v6.4-rc1

commit d22467a71ebe96ff5ab7e000dbef60d4ea76e5b0
Author: Patrisious Haddad <phaddad@nvidia.com>
Date:   Thu Mar 23 12:13:52 2023 +0200

    RDMA/mlx5: Expand switchdev Q-counters to expose representor statistics

    Previously for switchdev only per device counters were supported.

    Currently we allocate counters for switchdev per port, which also
    includes the ports that belong to VF representors in order to expose
    them to users through the rdma tool, allowing the host to track the VFs
    statistics through their representors counters.

    Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
    Link: https://lore.kernel.org/r/ea31e1103c125cd27931ba213f307cde30d2eaed.1679566038.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leon@kernel.org>

Signed-off-by: Mohammad Kabat <mkabat@redhat.com>
2024-01-16 08:58:11 +00:00
Mohammad Kabat e38882459e RDMA/mlx5: Fix mlx5_ib_get_hw_stats when used for device
Bugzilla: https://bugzilla.redhat.com/2157856
Upstream-status: v6.2-rc3

commit 38b50aa44495d5eb4218f0b82fc2da76505cec53
Author: Shay Drory <shayd@nvidia.com>
Date:   Wed Dec 28 14:56:09 2022 +0200

    RDMA/mlx5: Fix mlx5_ib_get_hw_stats when used for device

    Currently, when mlx5_ib_get_hw_stats() is used for device (port_num = 0),
    there is a special handling in order to use the correct counters, but,
    port_num is being passed down the stack without any change.  Also, some
    functions assume that port_num >=1. As a result, the following oops can
    occur.

     BUG: unable to handle page fault for address: ffff89510294f1a8
     #PF: supervisor write access in kernel mode
     #PF: error_code(0x0002) - not-present page
     PGD 0 P4D 0
     Oops: 0002 [#1] SMP
     CPU: 8 PID: 1382 Comm: devlink Tainted: G W          6.1.0-rc4_for_upstream_base_2022_11_10_16_12 #1
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
     RIP: 0010:_raw_spin_lock+0xc/0x20
     Call Trace:
      <TASK>
      mlx5_ib_get_native_port_mdev+0x73/0xe0 [mlx5_ib]
      do_get_hw_stats.constprop.0+0x109/0x160 [mlx5_ib]
      mlx5_ib_get_hw_stats+0xad/0x180 [mlx5_ib]
      ib_setup_device_attrs+0xf0/0x290 [ib_core]
      ib_register_device+0x3bb/0x510 [ib_core]
      ? atomic_notifier_chain_register+0x67/0x80
      __mlx5_ib_add+0x2b/0x80 [mlx5_ib]
      mlx5r_probe+0xb8/0x150 [mlx5_ib]
      ? auxiliary_match_id+0x6a/0x90
      auxiliary_bus_probe+0x3c/0x70
      ? driver_sysfs_add+0x6b/0x90
      really_probe+0xcd/0x380
      __driver_probe_device+0x80/0x170
      driver_probe_device+0x1e/0x90
      __device_attach_driver+0x7d/0x100
      ? driver_allows_async_probing+0x60/0x60
      ? driver_allows_async_probing+0x60/0x60
      bus_for_each_drv+0x7b/0xc0
      __device_attach+0xbc/0x200
      bus_probe_device+0x87/0xa0
      device_add+0x404/0x940
      ? dev_set_name+0x53/0x70
      __auxiliary_device_add+0x43/0x60
      add_adev+0x99/0xe0 [mlx5_core]
      mlx5_attach_device+0xc8/0x120 [mlx5_core]
      mlx5_load_one_devl_locked+0xb2/0xe0 [mlx5_core]
      devlink_reload+0x133/0x250
      devlink_nl_cmd_reload+0x480/0x570
      ? devlink_nl_pre_doit+0x44/0x2b0
      genl_family_rcv_msg_doit.isra.0+0xc2/0x110
      genl_rcv_msg+0x180/0x2b0
      ? devlink_nl_cmd_region_read_dumpit+0x540/0x540
      ? devlink_reload+0x250/0x250
      ? devlink_put+0x50/0x50
      ? genl_family_rcv_msg_doit.isra.0+0x110/0x110
      netlink_rcv_skb+0x54/0x100
      genl_rcv+0x24/0x40
      netlink_unicast+0x1f6/0x2c0
      netlink_sendmsg+0x237/0x490
      sock_sendmsg+0x33/0x40
      __sys_sendto+0x103/0x160
      ? handle_mm_fault+0x10e/0x290
      ? do_user_addr_fault+0x1c0/0x5f0
      __x64_sys_sendto+0x25/0x30
      do_syscall_64+0x3d/0x90
      entry_SYSCALL_64_after_hwframe+0x46/0xb0

    Fix it by setting port_num to 1 in order to get device status and remove
    unused variable.

    Fixes: aac4492ef2 ("IB/mlx5: Update counter implementation for dual port RoCE")
    Link: https://lore.kernel.org/r/98b82994c3cd3fa593b8a75ed3f3901e208beb0f.1672231736.git.leonro@nvidia.com
    Signed-off-by: Shay Drory <shayd@nvidia.com>
    Reviewed-by: Patrisious Haddad <phaddad@nvidia.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>

Signed-off-by: Mohammad Kabat <mkabat@redhat.com>
2023-01-19 11:10:13 +00:00
Mohammad Kabat 0e76c31c38 RDMA/mlx5: fix build error with INFINIBAND_USER_ACCESS=n
Bugzilla: https://bugzilla.redhat.com/2049449
Upstream-status: v5.16-rc1

commit 97ad8c8c719d0f7fbf3e828be7e99121b4b05b1f
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Oct 19 08:15:45 2021 +0200

    RDMA/mlx5: fix build error with INFINIBAND_USER_ACCESS=n

    The mlx5_ib_fs_add_op_fc/mlx5_ib_fs_remove_op_fc functions are only
    available when user access is enabled, without that we run into a link
    error:

    ERROR: modpost: "mlx5_ib_fs_add_op_fc" [drivers/infiniband/hw/mlx5/mlx5_ib.ko] undefined!
    ERROR: modpost: "mlx5_ib_fs_remove_op_fc" [drivers/infiniband/hw/mlx5/mlx5_ib.ko] undefined!

    Conditionally compiling the newly added code section makes it build,
    though this is probably not a correct fix.

    Fixes: a29b934ceb4c ("RDMA/mlx5: Add modify_op_stat() support")
    Link: https://lore.kernel.org/r/20211019061602.3062196-1-arnd@kernel.org
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Acked-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>

Signed-off-by: Mohammad Kabat <mkabat@redhat.com>
2022-08-11 06:31:13 -04:00
Mohammad Kabat 36656dbe2f RDMA/mlx5: Add optional counter support in get_hw_stats callback
Bugzilla: https://bugzilla.redhat.com/2049449
Upstream-status: v5.16-rc1

commit a020094090e5293abd5c2ecdcec96a275f56c4ef
Author: Aharon Landau <aharonl@nvidia.com>
Date:   Fri Oct 8 15:24:39 2021 +0300

    RDMA/mlx5: Add optional counter support in get_hw_stats callback

    When get_hw_stats is called, query and return the optional counter
    statistic as well.

    Link: https://lore.kernel.org/r/20211008122439.166063-14-markzhang@nvidia.com
    Signed-off-by: Aharon Landau <aharonl@nvidia.com>
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Mark Zhang <markzhang@nvidia.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>

Signed-off-by: Mohammad Kabat <mkabat@redhat.com>
2022-08-11 06:31:01 -04:00
Mohammad Kabat 9241ac0941 RDMA/mlx5: Add modify_op_stat() support
Bugzilla: https://bugzilla.redhat.com/2049449
Upstream-status: v5.16-rc1

commit a29b934ceb4c8ad8bf6d0486a8c8ef015af494f4
Author: Aharon Landau <aharonl@nvidia.com>
Date:   Fri Oct 8 15:24:38 2021 +0300

    RDMA/mlx5: Add modify_op_stat() support

    Add support for ib callback modify_op_stat() to add or remove an optional
    counter. When adding, a steering flow table is created with a rule that
    catches and counts all the matching packets. When removing, the table and
    flow counter are destroyed.

    Link: https://lore.kernel.org/r/20211008122439.166063-13-markzhang@nvidia.com
    Signed-off-by: Aharon Landau <aharonl@nvidia.com>
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Mark Zhang <markzhang@nvidia.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>

Signed-off-by: Mohammad Kabat <mkabat@redhat.com>
2022-08-11 06:31:00 -04:00
Mohammad Kabat a57c95ab2b RDMA/mlx5: Support optional counters in hw_stats initialization
Bugzilla: https://bugzilla.redhat.com/2049449
Upstream-status: v5.16-rc1

commit 886773d24962799e5eb3a1b31a9b77e32d6c25a1
Author: Aharon Landau <aharonl@nvidia.com>
Date:   Fri Oct 8 15:24:36 2021 +0300

    RDMA/mlx5: Support optional counters in hw_stats initialization

    Add optional counter support when allocate and initialize hw_stats
    structure. Optional counters have IB_STAT_FLAG_OPTIONAL flag set and are
    disabled by default.

    Link: https://lore.kernel.org/r/20211008122439.166063-11-markzhang@nvidia.com
    Signed-off-by: Aharon Landau <aharonl@nvidia.com>
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Mark Zhang <markzhang@nvidia.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>

Signed-off-by: Mohammad Kabat <mkabat@redhat.com>
2022-08-11 06:31:00 -04:00
Kamal Heib 80da9a9c75 RDMA/counter: Add a descriptor in struct rdma_hw_stats
Bugzilla: http://bugzilla.redhat.com/2056770

commit 13f30b0fa0a9fa4f713edbb262f2e451886ce242
Author: Aharon Landau <aharonl@nvidia.com>
Date:   Fri Oct 8 15:24:29 2021 +0300

    RDMA/counter: Add a descriptor in struct rdma_hw_stats

    Add a counter statistic descriptor structure in rdma_hw_stats. In addition
    to the counter name, more meta-information will be added.  This code
    extension is needed for optional-counter support in the following patches.

    Link: https://lore.kernel.org/r/20211008122439.166063-4-markzhang@nvidia.com
    Signed-off-by: Aharon Landau <aharonl@nvidia.com>
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Mark Zhang <markzhang@nvidia.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>

Signed-off-by: Kamal Heib <kheib@redhat.com>
2022-03-23 19:59:10 -04:00
Jason Gunthorpe 4b5f4d3fb4 RDMA: Split the alloc_hw_stats() ops to port and device variants
This is being used to implement both the port and device global stats,
which is causing some confusion in the drivers. For instance EFA and i40iw
both seem to be misusing the device stats.

Split it into two ops so drivers that don't support one or the other can
leave the op NULL'd, making the calling code a little simpler to
understand.

Link: https://lore.kernel.org/r/1955c154197b2a159adc2dc97266ddc74afe420c.1623427137.git.leonro@nvidia.com
Tested-by: Gal Pressman <galpress@amazon.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
2021-06-16 20:58:29 -03:00
Mark Bloch 1fb7f8973f RDMA: Support more than 255 rdma ports
Current code uses many different types when dealing with a port of a RDMA
device: u8, unsigned int and u32. Switch to u32 to clean up the logic.

This allows us to make (at least) the core view consistent and use the
same type. Unfortunately not all places can be converted. Many uverbs
functions expect port to be u8 so keep those places in order not to break
UAPIs.  HW/Spec defined values must also not be changed.

With the switch to u32 we now can support devices with more than 255
ports. U32_MAX is reserved to make control logic a bit easier to deal
with. As a device with U32_MAX ports probably isn't going to happen any
time soon this seems like a non issue.

When a device with more than 255 ports is created uverbs will report the
RDMA device as having 255 ports as this is the max currently supported.

The verbs interface is not changed yet because the IBTA spec limits the
port size in too many places to be u8 and all applications that relies in
verbs won't be able to cope with this change. At this stage, we are
extending the interfaces that are using vendor channel solely

Once the limitation is lifted mlx5 in switchdev mode will be able to have
thousands of SFs created by the device. As the only instance of an RDMA
device that reports more than 255 ports will be a representor device and
it exposes itself as a RAW Ethernet only device CM/MAD/IPoIB and other
ULPs aren't effected by this change and their sysfs/interfaces that are
exposes to userspace can remain unchanged.

While here cleanup some alignment issues and remove unneeded sanity
checks (mainly in rdmavt),

Link: https://lore.kernel.org/r/20210301070420.439400-1-leon@kernel.org
Signed-off-by: Mark Bloch <mbloch@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
2021-03-26 09:31:21 -03:00
Leon Romanovsky e87114022e net/mlx5: Simplify eswitch mode check
Provide mlx5_core device instead of "priv" pointer while checking
eswith mode.

Reviewed-by: Roi Dayan <roid@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
2020-12-06 07:43:54 +02:00
Liu Shixin b942fc0319 RDMA/mlx5: Fix type warning of sizeof in __mlx5_ib_alloc_counters()
sizeof() when applied to a pointer typed expression should give the size
of the pointed data, even if the data is a pointer.

Fixes: e1f24a79f4 ("IB/mlx5: Support congestion related counters")
Link: https://lore.kernel.org/r/20200917081354.2083293-1-liushixin2@huawei.com
Signed-off-by: Liu Shixin <liushixin2@huawei.com>
Acked-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
2020-09-25 09:17:42 -03:00
Leon Romanovsky 71ff3f6268 RDMA: Make counters destroy symmetrical
Change counters to return failure like any other verbs destroy, however
this flow shouldn't return error at all.

Link: https://lore.kernel.org/r/20200907120921.476363-10-leon@kernel.org
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
2020-09-09 14:14:29 -03:00
Leon Romanovsky 64825827ae RDMA/mlx5: Separate counters from main.c
There are number of counters types supported in mlx5_ib: HW counters,
congestion counters, Q-counters and flow counters. Almost all supporting
code was placed in main.c that made almost impossible to maintain the code
anymore. Let's create separate code namespace for the counters to easy
future generalization effort.

Link: https://lore.kernel.org/r/20200702081809.423482-4-leon@kernel.org
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
2020-07-07 14:05:51 -03:00