1. 11 Jun, 2023 12 commits
    • Saravanan Vajravel's avatar
      IB/isert: Fix incorrect release of isert connection · 699826f4
      Saravanan Vajravel authored
      The ib_isert module is releasing the isert connection both in
      isert_wait_conn() handler as well as isert_free_conn() handler.
      In isert_wait_conn() handler, it is expected to wait for iSCSI
      session logout operation to complete. It should free the isert
      connection only in isert_free_conn() handler.
      
      When a bunch of iSER target is cleared, this issue can lead to
      use-after-free memory issue as isert conn is twice released
      
      Fixes: b02efbfc ("iser-target: Fix implicit termination of connections")
      Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
      Signed-off-by: default avatarSaravanan Vajravel <saravanan.vajravel@broadcom.com>
      Signed-off-by: default avatarSelvin Xavier <selvin.xavier@broadcom.com>
      Link: https://lore.kernel.org/r/20230606102531.162967-4-saravanan.vajravel@broadcom.comSigned-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      699826f4
    • Saravanan Vajravel's avatar
      IB/isert: Fix possible list corruption in CMA handler · 7651e2d6
      Saravanan Vajravel authored
      When ib_isert module receives connection error event, it is
      releasing the isert session and removes corresponding list
      node but it doesn't take appropriate mutex lock to remove
      the list node.  This can lead to linked  list corruption
      
      Fixes: bd379220 ("iser-target: Fix pending connections handling in target stack shutdown sequnce")
      Signed-off-by: default avatarSelvin Xavier <selvin.xavier@broadcom.com>
      Signed-off-by: default avatarSaravanan Vajravel <saravanan.vajravel@broadcom.com>
      Link: https://lore.kernel.org/r/20230606102531.162967-3-saravanan.vajravel@broadcom.comSigned-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      7651e2d6
    • Saravanan Vajravel's avatar
      IB/isert: Fix dead lock in ib_isert · 691b0480
      Saravanan Vajravel authored
      - When a iSER session is released, ib_isert module is taking a mutex
        lock and releasing all pending connections. As part of this, ib_isert
        is destroying rdma cm_id. To destroy cm_id, rdma_cm module is sending
        CM events to CMA handler of ib_isert. This handler is taking same
        mutex lock. Hence it leads to deadlock between ib_isert & rdma_cm
        modules.
      
      - For fix, created local list of pending connections and release the
        connection outside of mutex lock.
      
      Calltrace:
      ---------
      [ 1229.791410] INFO: task kworker/10:1:642 blocked for more than 120 seconds.
      [ 1229.791416]       Tainted: G           OE    --------- -  - 4.18.0-372.9.1.el8.x86_64 #1
      [ 1229.791418] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
      [ 1229.791419] task:kworker/10:1    state:D stack:    0 pid:  642 ppid:     2 flags:0x80004000
      [ 1229.791424] Workqueue: ib_cm cm_work_handler [ib_cm]
      [ 1229.791436] Call Trace:
      [ 1229.791438]  __schedule+0x2d1/0x830
      [ 1229.791445]  ? select_idle_sibling+0x23/0x6f0
      [ 1229.791449]  schedule+0x35/0xa0
      [ 1229.791451]  schedule_preempt_disabled+0xa/0x10
      [ 1229.791453]  __mutex_lock.isra.7+0x310/0x420
      [ 1229.791456]  ? select_task_rq_fair+0x351/0x990
      [ 1229.791459]  isert_cma_handler+0x224/0x330 [ib_isert]
      [ 1229.791463]  ? ttwu_queue_wakelist+0x159/0x170
      [ 1229.791466]  cma_cm_event_handler+0x25/0xd0 [rdma_cm]
      [ 1229.791474]  cma_ib_handler+0xa7/0x2e0 [rdma_cm]
      [ 1229.791478]  cm_process_work+0x22/0xf0 [ib_cm]
      [ 1229.791483]  cm_work_handler+0xf4/0xf30 [ib_cm]
      [ 1229.791487]  ? move_linked_works+0x6e/0xa0
      [ 1229.791490]  process_one_work+0x1a7/0x360
      [ 1229.791491]  ? create_worker+0x1a0/0x1a0
      [ 1229.791493]  worker_thread+0x30/0x390
      [ 1229.791494]  ? create_worker+0x1a0/0x1a0
      [ 1229.791495]  kthread+0x10a/0x120
      [ 1229.791497]  ? set_kthread_struct+0x40/0x40
      [ 1229.791499]  ret_from_fork+0x1f/0x40
      
      [ 1229.791739] INFO: task targetcli:28666 blocked for more than 120 seconds.
      [ 1229.791740]       Tainted: G           OE    --------- -  - 4.18.0-372.9.1.el8.x86_64 #1
      [ 1229.791741] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
      [ 1229.791742] task:targetcli       state:D stack:    0 pid:28666 ppid:  5510 flags:0x00004080
      [ 1229.791743] Call Trace:
      [ 1229.791744]  __schedule+0x2d1/0x830
      [ 1229.791746]  schedule+0x35/0xa0
      [ 1229.791748]  schedule_preempt_disabled+0xa/0x10
      [ 1229.791749]  __mutex_lock.isra.7+0x310/0x420
      [ 1229.791751]  rdma_destroy_id+0x15/0x20 [rdma_cm]
      [ 1229.791755]  isert_connect_release+0x115/0x130 [ib_isert]
      [ 1229.791757]  isert_free_np+0x87/0x140 [ib_isert]
      [ 1229.791761]  iscsit_del_np+0x74/0x120 [iscsi_target_mod]
      [ 1229.791776]  lio_target_np_driver_store+0xe9/0x140 [iscsi_target_mod]
      [ 1229.791784]  configfs_write_file+0xb2/0x110
      [ 1229.791788]  vfs_write+0xa5/0x1a0
      [ 1229.791792]  ksys_write+0x4f/0xb0
      [ 1229.791794]  do_syscall_64+0x5b/0x1a0
      [ 1229.791798]  entry_SYSCALL_64_after_hwframe+0x65/0xca
      
      Fixes: bd379220 ("iser-target: Fix pending connections handling in target stack shutdown sequnce")
      Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
      Signed-off-by: default avatarSelvin Xavier <selvin.xavier@broadcom.com>
      Signed-off-by: default avatarSaravanan Vajravel <saravanan.vajravel@broadcom.com>
      Link: https://lore.kernel.org/r/20230606102531.162967-2-saravanan.vajravel@broadcom.comSigned-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      691b0480
    • Mark Bloch's avatar
      RDMA/mlx5: Fix affinity assignment · 617f5db1
      Mark Bloch authored
      The cited commit aimed to ensure that Virtual Functions (VFs) assign a
      queue affinity to a Queue Pair (QP) to distribute traffic when
      the LAG master creates a hardware LAG. If the affinity was set while
      the hardware was not in LAG, the firmware would ignore the affinity value.
      
      However, this commit unintentionally assigned an affinity to QPs on the LAG
      master's VPORT even if the RDMA device was not marked as LAG-enabled.
      In most cases, this was not an issue because when the hardware entered
      hardware LAG configuration, the RDMA device of the LAG master would be
      destroyed and a new one would be created, marked as LAG-enabled.
      
      The problem arises when a user configures Equal-Cost Multipath (ECMP).
      In ECMP mode, traffic can be directed to different physical ports based on
      the queue affinity, which is intended for use by VPORTS other than the
      E-Switch manager. ECMP mode is supported only if both E-Switch managers are
      in switchdev mode and the appropriate route is configured via IP. In this
      configuration, the RDMA device is not destroyed, and we retain the RDMA
      device that is not marked as LAG-enabled.
      
      To ensure correct behavior, Send Queues (SQs) opened by the E-Switch
      manager through verbs should be assigned strict affinity. This means they
      will only be able to communicate through the native physical port
      associated with the E-Switch manager. This will prevent the firmware from
      assigning affinity and will not allow the SQs to be remapped in case of
      failover.
      
      Fixes: 802dcc7f ("RDMA/mlx5: Support TX port affinity for VF drivers in LAG mode")
      Reviewed-by: default avatarMaor Gottlieb <maorg@nvidia.com>
      Signed-off-by: default avatarMark Bloch <mbloch@nvidia.com>
      Link: https://lore.kernel.org/r/425b05f4da840bc684b0f7e8ebf61aeb5cef09b0.1685960567.git.leon@kernel.orgSigned-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      617f5db1
    • Yishai Hadas's avatar
      IB/uverbs: Fix to consider event queue closing also upon non-blocking mode · 62fab312
      Yishai Hadas authored
      Fix ib_uverbs_event_read() to consider event queue closing also upon
      non-blocking mode.
      
      Once the queue is closed (e.g. hot-plug flow) all the existing events
      are cleaned-up as part of ib_uverbs_free_event_queue().
      
      An application that uses the non-blocking FD mode should get -EIO in
      that case to let it knows that the device was removed already.
      
      Otherwise, it can loose the indication that the device was removed and
      won't recover.
      
      As part of that, refactor the code to have a single flow with regards to
      'is_closed' for both blocking and non-blocking modes.
      
      Fixes: 14e23bd6 ("RDMA/core: Fix locking in ib_uverbs_event_read")
      Reviewed-by: default avatarMaor Gottlieb <maorg@nvidia.com>
      Signed-off-by: default avatarYishai Hadas <yishaih@nvidia.com>
      Link: https://lore.kernel.org/r/97b00116a1e1e13f8dc4ec38a5ea81cf8c030210.1685960567.git.leon@kernel.orgSigned-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      62fab312
    • Edward Srouji's avatar
      RDMA/uverbs: Restrict usage of privileged QKEYs · 0cadb4db
      Edward Srouji authored
      According to the IB specification rel-1.6, section 3.5.3:
      "QKEYs with the most significant bit set are considered controlled
      QKEYs, and a HCA does not allow a consumer to arbitrarily specify a
      controlled QKEY."
      
      Thus, block non-privileged users from setting such a QKEY.
      
      Cc: stable@vger.kernel.org
      Fixes: bc38a6ab ("[PATCH] IB uverbs: core implementation")
      Signed-off-by: default avatarEdward Srouji <edwards@nvidia.com>
      Link: https://lore.kernel.org/r/c00c809ddafaaf87d6f6cb827978670989a511b3.1685960567.git.leon@kernel.orgSigned-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      0cadb4db
    • Mark Zhang's avatar
      RDMA/cma: Always set static rate to 0 for RoCE · 58030c76
      Mark Zhang authored
      Set static rate to 0 as it should be discovered by path query and
      has no meaning for RoCE.
      This also avoid of using the rtnl lock and ethtool API, which is
      a bottleneck when try to setup many rdma-cm connections at the same
      time, especially with multiple processes.
      
      Fixes: 3c86aa70 ("RDMA/cm: Add RDMA CM support for IBoE devices")
      Signed-off-by: default avatarMark Zhang <markzhang@nvidia.com>
      Link: https://lore.kernel.org/r/f72a4f8b667b803aee9fa794069f61afb5839ce4.1685960567.git.leon@kernel.orgSigned-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      58030c76
    • Patrisious Haddad's avatar
      RDMA/mlx5: Fix Q-counters query in LAG mode · 2de43f5b
      Patrisious Haddad authored
      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: d22467a7 ("RDMA/mlx5: Expand switchdev Q-counters to expose representor statistics")
      Signed-off-by: default avatarPatrisious Haddad <phaddad@nvidia.com>
      Reviewed-by: default avatarMark Zhang <markzhang@nvidia.com>
      Link: https://lore.kernel.org/r/778d7d7a24892348d0bdef17d2e5f9e044717e86.1685960567.git.leon@kernel.orgSigned-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      2de43f5b
    • Patrisious Haddad's avatar
      RDMA/mlx5: Remove vport Q-counters dependency on normal Q-counters · e80ef139
      Patrisious Haddad authored
      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: d22467a7 ("RDMA/mlx5: Expand switchdev Q-counters to expose representor statistics")
      Signed-off-by: default avatarPatrisious Haddad <phaddad@nvidia.com>
      Reviewed-by: default avatarMark Zhang <markzhang@nvidia.com>
      Link: https://lore.kernel.org/r/016777b7f16eb6bb178999ff59097d0c0f91f68a.1685960567.git.leon@kernel.orgSigned-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      e80ef139
    • Patrisious Haddad's avatar
      RDMA/mlx5: Fix Q-counters per vport allocation · c2ea687e
      Patrisious Haddad authored
      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: d22467a7 ("RDMA/mlx5: Expand switchdev Q-counters to expose representor statistics")
      Signed-off-by: default avatarPatrisious Haddad <phaddad@nvidia.com>
      Reviewed-by: default avatarMark Zhang <markzhang@nvidia.com>
      Link: https://lore.kernel.org/r/f54671df16e2227a069b229b33b62cd9ee24c475.1685960567.git.leon@kernel.orgSigned-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      c2ea687e
    • Mark Bloch's avatar
      RDMA/mlx5: Create an indirect flow table for steering anchor · e1f4a52a
      Mark Bloch authored
      A misbehaved user can create a steering anchor that points to a kernel
      flow table and then destroy the anchor without freeing the associated
      STC. This creates a problem as the kernel can't destroy the flow
      table since there is still a reference to it. As a result, this can
      exhaust all available flow table resources, preventing other users from
      using the RDMA device.
      
      To prevent this problem, a solution is implemented where a special flow
      table with two steering rules is created when a user creates a steering
      anchor for the first time. The rules include one that drops all traffic
      and another that points to the kernel flow table. If the steering anchor
      is destroyed, only the rule pointing to the kernel's flow table is removed.
      Any traffic reaching the special flow table after that is dropped.
      
      Since the special flow table is not destroyed when the steering anchor is
      destroyed, any issues are prevented from occurring. The remaining resources
      are only destroyed when the RDMA device is destroyed, which happens after
      all DEVX objects are freed, including the STCs, thus mitigating the issue.
      
      Fixes: 0c6ab0ca ("RDMA/mlx5: Expose steering anchor to userspace")
      Signed-off-by: default avatarMark Bloch <mbloch@nvidia.com>
      Reviewed-by: default avatarMaor Gottlieb <maorg@nvidia.com>
      Link: https://lore.kernel.org/r/b4a88a871d651fa4e8f98d552553c1cfe9ba2cd6.1685960567.git.leon@kernel.orgSigned-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      e1f4a52a
    • Maher Sanalla's avatar
      RDMA/mlx5: Initiate dropless RQ for RAW Ethernet functions · ee4d269e
      Maher Sanalla authored
      Delay drop data is initiated for PFs that have the capability of
      rq_delay_drop and are in roce profile.
      
      However, PFs with RAW ethernet profile do not initiate delay drop data
      on function load, causing kernel panic if delay drop struct members are
      accessed later on in case a dropless RQ is created.
      
      Thus, stage the delay drop initialization as part of RAW ethernet
      PF loading process.
      
      Fixes: b5ca15ad ("IB/mlx5: Add proper representors support")
      Signed-off-by: default avatarMaher Sanalla <msanalla@nvidia.com>
      Reviewed-by: default avatarMaor Gottlieb <maorg@nvidia.com>
      Link: https://lore.kernel.org/r/2e9d386785043d48c38711826eb910315c1de141.1685960567.git.leon@kernel.orgSigned-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      ee4d269e
  2. 09 Jun, 2023 1 commit
    • Zhu Yanjun's avatar
      RDMA/rxe: Fix the use-before-initialization error of resp_pkts · 2a62b621
      Zhu Yanjun authored
      In the following:
      
        Call Trace:
         <TASK>
         __dump_stack lib/dump_stack.c:88 [inline]
         dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
         assign_lock_key kernel/locking/lockdep.c:982 [inline]
         register_lock_class+0xdb6/0x1120 kernel/locking/lockdep.c:1295
         __lock_acquire+0x10a/0x5df0 kernel/locking/lockdep.c:4951
         lock_acquire kernel/locking/lockdep.c:5691 [inline]
         lock_acquire+0x1b1/0x520 kernel/locking/lockdep.c:5656
         __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
         _raw_spin_lock_irqsave+0x3d/0x60 kernel/locking/spinlock.c:162
         skb_dequeue+0x20/0x180 net/core/skbuff.c:3639
         drain_resp_pkts drivers/infiniband/sw/rxe/rxe_comp.c:555 [inline]
         rxe_completer+0x250d/0x3cc0 drivers/infiniband/sw/rxe/rxe_comp.c:652
         rxe_qp_do_cleanup+0x1be/0x820 drivers/infiniband/sw/rxe/rxe_qp.c:761
         execute_in_process_context+0x3b/0x150 kernel/workqueue.c:3473
         __rxe_cleanup+0x21e/0x370 drivers/infiniband/sw/rxe/rxe_pool.c:233
         rxe_create_qp+0x3f6/0x5f0 drivers/infiniband/sw/rxe/rxe_verbs.c:583
      
      This is a use-before-initialization problem.
      
      It happens because rxe_qp_do_cleanup is called during error unwind before
      the struct has been fully initialized.
      
      Move the initialization of the skb earlier.
      
      Fixes: 8700e3e7 ("Soft RoCE driver")
      Link: https://lore.kernel.org/r/20230602035408.741534-1-yanjun.zhu@intel.com
      Reported-by: syzbot+eba589d8f49c73d356da@syzkaller.appspotmail.com
      Signed-off-by: default avatarZhu Yanjun <yanjun.zhu@linux.dev>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      2a62b621
  3. 01 Jun, 2023 5 commits
    • Kamal Heib's avatar
      RDMA/bnxt_re: Fix reporting active_{speed,width} attributes · 18e7e3e4
      Kamal Heib authored
      After commit 6d758147 ("RDMA/bnxt_re: Use auxiliary driver interface")
      the active_{speed, width} attributes are reported incorrectly, This is
      happening because ib_get_eth_speed() is called only once from
      bnxt_re_ib_init() - Fix this issue by calling ib_get_eth_speed() from
      bnxt_re_query_port().
      
      Fixes: 6d758147 ("RDMA/bnxt_re: Use auxiliary driver interface")
      Link: https://lore.kernel.org/r/20230529153525.87254-1-kheib@redhat.comSigned-off-by: default avatarKamal Heib <kheib@redhat.com>
      Acked-by: default avatarSelvin Xavier <selvin.xavier@broadcom.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      18e7e3e4
    • Bob Pearson's avatar
      RDMA/rxe: Fix ref count error in check_rkey() · b0068342
      Bob Pearson authored
      There is a reference count error in error path code and a potential race
      in check_rkey() in rxe_resp.c. When looking up the rkey for a memory
      window the reference to the mw from rxe_lookup_mw() is dropped before a
      reference is taken on the mr referenced by the mw. If the mr is destroyed
      immediately after the call to rxe_put(mw) the mr pointer is unprotected
      and may end up pointing at freed memory. The rxe_get(mr) call should take
      place before the rxe_put(mw) call.
      
      All errors in check_rkey() call rxe_put(mw) if mw is not NULL but it was
      already called after the above. The mw pointer should be set to NULL after
      the rxe_put(mw) call to prevent this from happening.
      
      Fixes: cdd0b856 ("RDMA/rxe: Implement memory access through MWs")
      Link: https://lore.kernel.org/r/20230517211509.1819998-1-rpearsonhpe@gmail.comSigned-off-by: default avatarBob Pearson <rpearsonhpe@gmail.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      b0068342
    • Bob Pearson's avatar
      RDMA/rxe: Fix packet length checks · 9a3763e8
      Bob Pearson authored
      In rxe_net.c a received packet, from udp or loopback, is passed to
      rxe_rcv() in rxe_recv.c as a udp packet. I.e. skb->data is pointing at the
      udp header. But rxe_rcv() makes length checks to verify the packet is long
      enough to hold the roce headers as if it were a roce
      packet. I.e. skb->data pointing at the bth header. A runt packet would
      appear to have 8 more bytes than it actually does which may lead to
      incorrect behavior.
      
      This patch calls skb_pull() to adjust the skb to point at the bth header
      before calling rxe_rcv() which fixes this error.
      
      Fixes: 8700e3e7 ("Soft RoCE driver")
      Link: https://lore.kernel.org/r/20230517172242.1806340-1-rpearsonhpe@gmail.comSigned-off-by: default avatarBob Pearson <rpearsonhpe@gmail.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      9a3763e8
    • Li Zhijian's avatar
      RDMA/rtrs: Fix rxe_dealloc_pd warning · 9c29c8c7
      Li Zhijian authored
      In current design:
      1. PD and clt_path->s.dev are shared among connections.
      2. every con[n]'s cleanup phase will call destroy_con_cq_qp()
      3. clt_path->s.dev will be always decreased in destroy_con_cq_qp(), and
         when clt_path->s.dev become zero, it will destroy PD.
      4. when con[1] failed to create, con[1] will not take clt_path->s.dev,
         but it try to decreased clt_path->s.dev
      
      So, in case create_cm(con[0]) succeeds but create_cm(con[1]) fails,
      destroy_con_cq_qp(con[1]) will be called first which will destroy the PD
      while this PD is still taken by con[0].
      
      Here, we refactor the error path of create_cm() and init_conns(), so that
      we do the cleanup in the order they are created.
      
      The warning occurs when destroying RXE PD whose reference count is not
      zero.
      
       rnbd_client L597: Mapping device /dev/nvme0n1 on session client, (access_mode: rw, nr_poll_queues: 0)
       ------------[ cut here ]------------
       WARNING: CPU: 0 PID: 26407 at drivers/infiniband/sw/rxe/rxe_pool.c:256 __rxe_cleanup+0x13a/0x170 [rdma_rxe]
       Modules linked in: rpcrdma rdma_ucm ib_iser rnbd_client libiscsi rtrs_client scsi_transport_iscsi rtrs_core rdma_cm iw_cm ib_cm crc32_generic rdma_rxe udp_tunnel ib_uverbs ib_core kmem device_dax nd_pmem dax_pmem nd_vme crc32c_intel fuse nvme_core nfit libnvdimm dm_multipath scsi_dh_rdac scsi_dh_emc scsi_dh_alua dm_mirror dm_region_hash dm_log dm_mod
       CPU: 0 PID: 26407 Comm: rnbd-client.sh Kdump: loaded Not tainted 6.2.0-rc6-roce-flush+ #53
       Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
       RIP: 0010:__rxe_cleanup+0x13a/0x170 [rdma_rxe]
       Code: 45 84 e4 0f 84 5a ff ff ff 48 89 ef e8 5f 18 71 f9 84 c0 75 90 be c8 00 00 00 48 89 ef e8 be 89 1f fa 85 c0 0f 85 7b ff ff ff <0f> 0b 41 bc ea ff ff ff e9 71 ff ff ff e8 84 7f 1f fa e9 d0 fe ff
       RSP: 0018:ffffb09880b6f5f0 EFLAGS: 00010246
       RAX: 0000000000000000 RBX: ffff99401f15d6a8 RCX: 0000000000000000
       RDX: 0000000000000001 RSI: ffffffffbac8234b RDI: 00000000ffffffff
       RBP: ffff99401f15d6d0 R08: 0000000000000001 R09: 0000000000000001
       R10: 0000000000002d82 R11: 0000000000000000 R12: 0000000000000001
       R13: ffff994101eff208 R14: ffffb09880b6f6a0 R15: 00000000fffffe00
       FS:  00007fe113904740(0000) GS:ffff99413bc00000(0000) knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: 00007ff6cde656c8 CR3: 000000001f108004 CR4: 00000000001706f0
       DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
       DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
       Call Trace:
        <TASK>
        rxe_dealloc_pd+0x16/0x20 [rdma_rxe]
        ib_dealloc_pd_user+0x4b/0x80 [ib_core]
        rtrs_ib_dev_put+0x79/0xd0 [rtrs_core]
        destroy_con_cq_qp+0x8a/0xa0 [rtrs_client]
        init_path+0x1e7/0x9a0 [rtrs_client]
        ? __pfx_autoremove_wake_function+0x10/0x10
        ? lock_is_held_type+0xd7/0x130
        ? rcu_read_lock_sched_held+0x43/0x80
        ? pcpu_alloc+0x3dd/0x7d0
        ? rtrs_clt_init_stats+0x18/0x40 [rtrs_client]
        rtrs_clt_open+0x24f/0x5a0 [rtrs_client]
        ? __pfx_rnbd_clt_link_ev+0x10/0x10 [rnbd_client]
        rnbd_clt_map_device+0x6a5/0xe10 [rnbd_client]
      
      Fixes: 6a98d71d ("RDMA/rtrs: client: main functionality")
      Link: https://lore.kernel.org/r/1682384563-2-4-git-send-email-lizhijian@fujitsu.comSigned-off-by: default avatarLi Zhijian <lizhijian@fujitsu.com>
      Acked-by: default avatarJack Wang <jinpu.wang@ionos.com>
      Tested-by: default avatarJack Wang <jinpu.wang@ionos.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      9c29c8c7
    • Li Zhijian's avatar
      RDMA/rtrs: Fix the last iu->buf leak in err path · 3bf3a7c6
      Li Zhijian authored
      The last iu->buf will leak if ib_dma_mapping_error() fails.
      
      Fixes: c0894b3e ("RDMA/rtrs: core: lib functions shared between client and server modules")
      Link: https://lore.kernel.org/r/1682384563-2-3-git-send-email-lizhijian@fujitsu.comSigned-off-by: default avatarLi Zhijian <lizhijian@fujitsu.com>
      Acked-by: default avatarGuoqing Jiang <guoqing.jiang@linux.dev>
      Acked-by: default avatarJack Wang <jinpu.wang@ionos.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      3bf3a7c6
  4. 29 May, 2023 3 commits
  5. 19 May, 2023 3 commits
  6. 17 May, 2023 5 commits
    • Yangyang Li's avatar
      RDMA/hns: Modify the value of long message loopback slice · 56518a60
      Yangyang Li authored
      Long message loopback slice is used for achieving traffic balance between
      QPs. It prevents the problem that QPs with large traffic occupying the
      hardware pipeline for a long time and QPs with small traffic cannot be
      scheduled.
      
      Currently, its maximum value is set to 16K, which means only after a QP
      sends 16K will the second QP be scheduled. This value is too large, which
      will lead to unbalanced traffic scheduling, and thus it needs to be
      modified.
      
      The setting range of the long message loopback slice is modified to be
      from 1024 (the lower limit supported by hardware) to mtu. Actual testing
      shows that this value can significantly reduce error in hardware traffic
      scheduling.
      
      This solution is compatible with both HIP08 and HIP09. The modified
      lp_pktn_ini has a maximum value of 2 (when mtu is 256), so the range
      checking code for lp_pktn_ini is no longer necessary and needs to be
      deleted.
      
      Fixes: 0e60778e ("RDMA/hns: Modify the value of MAX_LP_MSG_LEN to meet hardware compatibility")
      Link: https://lore.kernel.org/r/20230512092245.344442-4-huangjunxian6@hisilicon.comSigned-off-by: default avatarYangyang Li <liyangyang20@huawei.com>
      Signed-off-by: default avatarJunxian Huang <huangjunxian6@hisilicon.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      56518a60
    • Chengchang Tang's avatar
      RDMA/hns: Fix base address table allocation · 7f3969b1
      Chengchang Tang authored
      For hns, the specification of an entry like resource (E.g. WQE/CQE/EQE)
      depends on BT page size, buf page size and hopnum. For user mode, the buf
      page size depends on UMEM. Therefore, the actual specification is
      controlled by BT page size and hopnum.
      
      The current BT page size and hopnum are obtained from firmware. This makes
      the driver inflexible and introduces unnecessary constraints.  Resource
      allocation failures occur in many scenarios.
      
      This patch will calculate whether the BT page size set by firmware is
      sufficient before allocating BT, and increase the BT page size if it is
      insufficient.
      
      Fixes: 11334014 ("RDMA/hns: Optimize base address table config flow for qp buffer")
      Link: https://lore.kernel.org/r/20230512092245.344442-3-huangjunxian6@hisilicon.comSigned-off-by: default avatarChengchang Tang <tangchengchang@huawei.com>
      Signed-off-by: default avatarJunxian Huang <huangjunxian6@hisilicon.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      7f3969b1
    • Chengchang Tang's avatar
      RDMA/hns: Fix timeout attr in query qp for HIP08 · 58caa2a5
      Chengchang Tang authored
      On HIP08, the queried timeout attr is different from the timeout attr
      configured by the user.
      
      It is found by rdma-core testcase test_rdmacm_async_traffic:
      
      ======================================================================
      FAIL: test_rdmacm_async_traffic (tests.test_rdmacm.CMTestCase)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "./tests/test_rdmacm.py", line 33, in test_rdmacm_async_traffic
          self.two_nodes_rdmacm_traffic(CMAsyncConnection, self.rdmacm_traffic,
        File "./tests/base.py", line 382, in two_nodes_rdmacm_traffic
          raise(res)
      AssertionError
      
      Fixes: 926a01dc ("RDMA/hns: Add QP operations support for hip08 SoC")
      Link: https://lore.kernel.org/r/20230512092245.344442-2-huangjunxian6@hisilicon.comSigned-off-by: default avatarChengchang Tang <tangchengchang@huawei.com>
      Signed-off-by: default avatarJunxian Huang <huangjunxian6@hisilicon.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      58caa2a5
    • Yonatan Nachum's avatar
      RDMA/efa: Fix unsupported page sizes in device · 866422cd
      Yonatan Nachum authored
      Device uses 4KB size blocks for user pages indirect list while the
      driver creates those blocks with the size of PAGE_SIZE of the kernel. On
      kernels with PAGE_SIZE different than 4KB (ARM RHEL), this leads to a
      failure on register MR with indirect list because of the miss
      communication between driver and device.
      
      Fixes: 40909f66 ("RDMA/efa: Add EFA verbs implementation")
      Link: https://lore.kernel.org/r/20230511115103.13876-1-ynachum@amazon.comReviewed-by: default avatarFiras Jahjah <firasj@amazon.com>
      Reviewed-by: default avatarMichael Margolin <mrgolin@amazon.com>
      Signed-off-by: default avatarYonatan Nachum <ynachum@amazon.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      866422cd
    • Guoqing Jiang's avatar
      RDMA/rxe: Convert spin_{lock_bh,unlock_bh} to spin_{lock_irqsave,unlock_irqrestore} · b5f3fe27
      Guoqing Jiang authored
      We need to call spin_lock_irqsave()/spin_unlock_irqrestore() for
      state_lock in rxe, otherwsie the callchain:
      
        ib_post_send_mad
      	-> spin_lock_irqsave
      	-> ib_post_send -> rxe_post_send
      				-> spin_lock_bh
      				-> spin_unlock_bh
      	-> spin_unlock_irqrestore
      
      Causes below traces during run block nvmeof-mp/001 test due to mismatched
      spinlock nesting:
      
        WARNING: CPU: 0 PID: 94794 at kernel/softirq.c:376 __local_bh_enable_ip+0xc2/0x140
        [ ... ]
        CPU: 0 PID: 94794 Comm: kworker/u4:1 Tainted: G            E      6.4.0-rc1 #9
        Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.15.0-0-g2dd4b9b-rebuilt.opensuse.org 04/01/2014
        Workqueue: rdma_cm cma_work_handler [rdma_cm]
        RIP: 0010:__local_bh_enable_ip+0xc2/0x140
        Code: 48 85 c0 74 72 5b 41 5c 5d 31 c0 89 c2 89 c1 89 c6 89 c7 41 89 c0 e9 bd 0e 11 01 65 8b 05 f2 65 72 48 85 c0 0f 85 76 ff ff ff <0f> 0b e9 6f ff ff ff e8 d2 39 1c 00 eb 80 4c 89 e7 e8 68 ad 0a 00
        RSP: 0018:ffffb7cf818539f0 EFLAGS: 00010046
        RAX: 0000000000000000 RBX: 0000000000000201 RCX: 0000000000000000
        RDX: 0000000000000000 RSI: 0000000000000201 RDI: ffffffffc0f25f79
        RBP: ffffb7cf81853a00 R08: 0000000000000000 R09: 0000000000000000
        R10: 0000000000000000 R11: 0000000000000000 R12: ffffffffc0f25f79
        R13: ffff8db1f0fa6000 R14: ffff8db2c63ff000 R15: 00000000000000e8
        FS:  0000000000000000(0000) GS:ffff8db33bc00000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 0000559758db0f20 CR3: 0000000105124000 CR4: 00000000003506f0
        Call Trace:
         <TASK>
         _raw_spin_unlock_bh+0x31/0x40
         rxe_post_send+0x59/0x8b0 [rdma_rxe]
         ib_send_mad+0x26b/0x470 [ib_core]
         ib_post_send_mad+0x150/0xb40 [ib_core]
         ? cm_form_tid+0x5b/0x90 [ib_cm]
         ib_send_cm_req+0x7c8/0xb70 [ib_cm]
         rdma_connect_locked+0x433/0x940 [rdma_cm]
         nvme_rdma_cm_handler+0x5d7/0x9c0 [nvme_rdma]
         cma_cm_event_handler+0x4f/0x170 [rdma_cm]
         cma_work_handler+0x6a/0xe0 [rdma_cm]
         process_one_work+0x2a9/0x580
         worker_thread+0x52/0x3f0
         ? __pfx_worker_thread+0x10/0x10
         kthread+0x109/0x140
         ? __pfx_kthread+0x10/0x10
         ret_from_fork+0x2c/0x50
         </TASK>
      
      
        raw_local_irq_restore() called with IRQs enabled
        WARNING: CPU: 0 PID: 94794 at kernel/locking/irqflag-debug.c:10 warn_bogus_irq_restore+0x37/0x60
        [ ... ]
        CPU: 0 PID: 94794 Comm: kworker/u4:1 Tainted: G        W   E      6.4.0-rc1 #9
        Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.15.0-0-g2dd4b9b-rebuilt.opensuse.org 04/01/2014
        Workqueue: rdma_cm cma_work_handler [rdma_cm]
        RIP: 0010:warn_bogus_irq_restore+0x37/0x60
        Code: fb 01 77 36 83 e3 01 74 0e 48 8b 5d f8 c9 31 f6 89 f7 e9 ac ea 01 00 48 c7 c7 e0 52 33 b9 c6 05 bb 1c 69 01 01 e8 39 24 f0 fe <0f> 0b 48 8b 5d f8 c9 31 f6 89 f7 e9 89 ea 01 00 0f b6 f3 48 c7 c7
        RSP: 0018:ffffb7cf81853a58 EFLAGS: 00010246
        RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
        RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
        RBP: ffffb7cf81853a60 R08: 0000000000000000 R09: 0000000000000000
        R10: 0000000000000000 R11: 0000000000000000 R12: ffff8db2cfb1a9e8
        R13: ffff8db2cfb1a9d8 R14: ffff8db2c63ff000 R15: 0000000000000000
        FS:  0000000000000000(0000) GS:ffff8db33bc00000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 0000559758db0f20 CR3: 0000000105124000 CR4: 00000000003506f0
        Call Trace:
         <TASK>
         _raw_spin_unlock_irqrestore+0x91/0xa0
         ib_send_mad+0x1e3/0x470 [ib_core]
         ib_post_send_mad+0x150/0xb40 [ib_core]
         ? cm_form_tid+0x5b/0x90 [ib_cm]
         ib_send_cm_req+0x7c8/0xb70 [ib_cm]
         rdma_connect_locked+0x433/0x940 [rdma_cm]
         nvme_rdma_cm_handler+0x5d7/0x9c0 [nvme_rdma]
         cma_cm_event_handler+0x4f/0x170 [rdma_cm]
         cma_work_handler+0x6a/0xe0 [rdma_cm]
         process_one_work+0x2a9/0x580
         worker_thread+0x52/0x3f0
         ? __pfx_worker_thread+0x10/0x10
         kthread+0x109/0x140
         ? __pfx_kthread+0x10/0x10
         ret_from_fork+0x2c/0x50
         </TASK>
      
      Fixes: f605f26e ("RDMA/rxe: Protect QP state with qp->state_lock")
      Link: https://lore.kernel.org/r/20230510035056.881196-1-guoqing.jiang@linux.devSigned-off-by: default avatarGuoqing Jiang <guoqing.jiang@linux.dev>
      Reviewed-by: default avatarBob Pearson <rpearsonhpe@gmail.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      b5f3fe27
  7. 16 May, 2023 1 commit
  8. 12 May, 2023 2 commits
  9. 07 May, 2023 8 commits
    • Linus Torvalds's avatar
      Linux 6.4-rc1 · ac9a7868
      Linus Torvalds authored
      ac9a7868
    • Linus Torvalds's avatar
      Merge tag 'perf-tools-for-v6.4-3-2023-05-06' of... · f085df1b
      Linus Torvalds authored
      Merge tag 'perf-tools-for-v6.4-3-2023-05-06' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux
      
      Pull perf tool updates from Arnaldo Carvalho de Melo:
       "Third version of perf tool updates, with the build problems with with
        using a 'vmlinux.h' generated from the main build fixed, and the bpf
        skeleton build disabled by default.
      
        Build:
      
         - Require libtraceevent to build, one can disable it using
           NO_LIBTRACEEVENT=1.
      
           It is required for tools like 'perf sched', 'perf kvm', 'perf
           trace', etc.
      
           libtraceevent is available in most distros so installing
           'libtraceevent-devel' should be a one-time event to continue
           building perf as usual.
      
           Using NO_LIBTRACEEVENT=1 produces tooling that is functional and
           sufficient for lots of users not interested in those libtraceevent
           dependent features.
      
         - Allow Python support in 'perf script' when libtraceevent isn't
           linked, as not all features requires it, for instance Intel PT does
           not use tracepoints.
      
         - Error if the python interpreter needed for jevents to work isn't
           available and NO_JEVENTS=1 isn't set, preventing a build without
           support for JSON vendor events, which is a rare but possible
           condition. The two check error messages:
      
              $(error ERROR: No python interpreter needed for jevents generation. Install python or build with NO_JEVENTS=1.)
              $(error ERROR: Python interpreter needed for jevents generation too old (older than 3.6). Install a newer python or build with NO_JEVENTS=1.)
      
         - Make libbpf 1.0 the minimum required when building with out of
           tree, distro provided libbpf.
      
         - Use libsdtc++'s and LLVM's libcxx's __cxa_demangle, a portable C++
           demangler, add 'perf test' entry for it.
      
         - Make binutils libraries opt in, as distros disable building with it
           due to licensing, they were used for C++ demangling, for instance.
      
         - Switch libpfm4 to opt-out rather than opt-in, if libpfm-devel (or
           equivalent) isn't installed, we'll just have a build warning:
      
             Makefile.config:1144: libpfm4 not found, disables libpfm4 support. Please install libpfm4-dev
      
         - Add a feature test for scandirat(), that is not implemented so far
           in musl and uclibc, disabling features that need it, such as
           scanning for tracepoints in /sys/kernel/tracing/events.
      
        perf BPF filters:
      
         - New feature where BPF can be used to filter samples, for instance:
      
            $ sudo ./perf record -e cycles --filter 'period > 1000' true
            $ sudo ./perf script
                 perf-exec 2273949 546850.708501:       5029 cycles:  ffffffff826f9e25 finish_wait+0x5 ([kernel.kallsyms])
                 perf-exec 2273949 546850.708508:      32409 cycles:  ffffffff826f9e25 finish_wait+0x5 ([kernel.kallsyms])
                 perf-exec 2273949 546850.708526:     143369 cycles:  ffffffff82b4cdbf xas_start+0x5f ([kernel.kallsyms])
                 perf-exec 2273949 546850.708600:     372650 cycles:  ffffffff8286b8f7 __pagevec_lru_add+0x117 ([kernel.kallsyms])
                 perf-exec 2273949 546850.708791:     482953 cycles:  ffffffff829190de __mod_memcg_lruvec_state+0x4e ([kernel.kallsyms])
                      true 2273949 546850.709036:     501985 cycles:  ffffffff828add7c tlb_gather_mmu+0x4c ([kernel.kallsyms])
                      true 2273949 546850.709292:     503065 cycles:      7f2446d97c03 _dl_map_object_deps+0x973 (/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2)
      
         - In addition to 'period' (PERF_SAMPLE_PERIOD), the other
           PERF_SAMPLE_ can be used for filtering, and also some other sample
           accessible values, from tools/perf/Documentation/perf-record.txt:
      
              Essentially the BPF filter expression is:
      
              <term> <operator> <value> (("," | "||") <term> <operator> <value>)*
      
           The <term> can be one of:
              ip, id, tid, pid, cpu, time, addr, period, txn, weight, phys_addr,
              code_pgsz, data_pgsz, weight1, weight2, weight3, ins_lat, retire_lat,
              p_stage_cyc, mem_op, mem_lvl, mem_snoop, mem_remote, mem_lock,
              mem_dtlb, mem_blk, mem_hops
      
           The <operator> can be one of:
              ==, !=, >, >=, <, <=, &
      
           The <value> can be one of:
              <number> (for any term)
              na, load, store, pfetch, exec (for mem_op)
              l1, l2, l3, l4, cxl, io, any_cache, lfb, ram, pmem (for mem_lvl)
              na, none, hit, miss, hitm, fwd, peer (for mem_snoop)
              remote (for mem_remote)
              na, locked (for mem_locked)
              na, l1_hit, l1_miss, l2_hit, l2_miss, any_hit, any_miss, walk, fault (for mem_dtlb)
              na, by_data, by_addr (for mem_blk)
              hops0, hops1, hops2, hops3 (for mem_hops)
      
        perf lock contention:
      
         - Show lock type with address.
      
         - Track and show mmap_lock, siglock and per-cpu rq_lock with address.
           This is done for mmap_lock by following the current->mm pointer:
      
            $ sudo ./perf lock con -abl -- sleep 10
             contended   total wait     max wait     avg wait            address   symbol
             ...
                 16344    312.30 ms      2.22 ms     19.11 us   ffff8cc702595640
                 17686    310.08 ms      1.49 ms     17.53 us   ffff8cc7025952c0
                     3     84.14 ms     45.79 ms     28.05 ms   ffff8cc78114c478   mmap_lock
                  3557     76.80 ms     68.75 us     21.59 us   ffff8cc77ca3af58
                     1     68.27 ms     68.27 ms     68.27 ms   ffff8cda745dfd70
                     9     54.53 ms      7.96 ms      6.06 ms   ffff8cc7642a48b8   mmap_lock
                 14629     44.01 ms     60.00 us      3.01 us   ffff8cc7625f9ca0
                  3481     42.63 ms    140.71 us     12.24 us   ffffffff937906ac   vmap_area_lock
                 16194     38.73 ms     42.15 us      2.39 us   ffff8cd397cbc560
                    11     38.44 ms     10.39 ms      3.49 ms   ffff8ccd6d12fbb8   mmap_lock
                     1      5.43 ms      5.43 ms      5.43 ms   ffff8cd70018f0d8
                  1674      5.38 ms    422.93 us      3.21 us   ffffffff92e06080   tasklist_lock
                   581      4.51 ms    130.68 us      7.75 us   ffff8cc9b1259058
                     5      3.52 ms      1.27 ms    703.23 us   ffff8cc754510070
                   112      3.47 ms     56.47 us     31.02 us   ffff8ccee38b3120
                   381      3.31 ms     73.44 us      8.69 us   ffffffff93790690   purge_vmap_area_lock
                   255      3.19 ms     36.35 us     12.49 us   ffff8d053ce30c80
      
         - Update default map size to 16384.
      
         - Allocate single letter option -M for --map-nr-entries, as it is
           proving being frequently used.
      
         - Fix struct rq lock access for older kernels with BPF's CO-RE
           (Compile once, run everywhere).
      
         - Fix problems found with MSAn.
      
        perf report/top:
      
         - Add inline information when using --call-graph=fp or lbr, as was
           already done to the --call-graph=dwarf callchain mode.
      
         - Improve the 'srcfile' sort key performance by really using an
           optimization introduced in 6.2 for the 'srcline' sort key that
           avoids calling addr2line for comparision with each sample.
      
        perf sched:
      
         - Make 'perf sched latency/map/replay' to use "sched:sched_waking"
           instead of "sched:sched_waking", consistent with 'perf record'
           since d566a9c2 ("perf sched: Prefer sched_waking event when it
           exists").
      
        perf ftrace:
      
         - Make system wide the default target for latency subcommand, run the
           following command then generate some network traffic and press
           control+C:
      
             # perf ftrace latency -T __kfree_skb
           ^C
               DURATION     |      COUNT | GRAPH                                          |
                0 - 1    us |         27 | #############                                  |
                1 - 2    us |         22 | ###########                                    |
                2 - 4    us |          8 | ####                                           |
                4 - 8    us |          5 | ##                                             |
                8 - 16   us |         24 | ############                                   |
               16 - 32   us |          2 | #                                              |
               32 - 64   us |          1 |                                                |
               64 - 128  us |          0 |                                                |
              128 - 256  us |          0 |                                                |
              256 - 512  us |          0 |                                                |
              512 - 1024 us |          0 |                                                |
                1 - 2    ms |          0 |                                                |
                2 - 4    ms |          0 |                                                |
                4 - 8    ms |          0 |                                                |
                8 - 16   ms |          0 |                                                |
               16 - 32   ms |          0 |                                                |
               32 - 64   ms |          0 |                                                |
               64 - 128  ms |          0 |                                                |
              128 - 256  ms |          0 |                                                |
              256 - 512  ms |          0 |                                                |
              512 - 1024 ms |          0 |                                                |
                1 - ...   s |          0 |                                                |
             #
      
        perf top:
      
         - Add --branch-history (LBR: Last Branch Record) option, just like
           already available for 'perf record'.
      
         - Fix segfault in thread__comm_len() where thread->comm was being
           used outside thread->comm_lock.
      
        perf annotate:
      
         - Allow configuring objdump and addr2line in ~/.perfconfig., so that
           you can use alternative binaries, such as llvm's.
      
        perf kvm:
      
         - Add TUI mode for 'perf kvm stat report'.
      
        Reference counting:
      
         - Add reference count checking infrastructure to check for use after
           free, done to the 'cpumap', 'namespaces', 'maps' and 'map' structs,
           more to come.
      
           To build with it use -DREFCNT_CHECKING=1 in the make command line
           to build tools/perf. Documented at:
      
             https://perf.wiki.kernel.org/index.php/Reference_Count_Checking
      
         - The above caught, for instance, fix, present in this series:
      
              - Fix maps use after put in 'perf test "Share thread maps"':
      
                'maps' is copied from leader, but the leader is put on line 79
                and then 'maps' is used to read the reference count below - so
                a use after put, with the put of maps happening within
                thread__put.
      
           Fixed by reversing the order of puts so that the leader is put
           last.
      
         - Also several fixes were made to places where reference counts were
           not being held.
      
         - Make this one of the tests in 'make -C tools/perf build-test' to
           regularly build test it and to make sure no direct access to the
           reference counted structs are made, doing that via accessors to
           check the validity of the struct pointer.
      
        ARM64:
      
         - Fix 'perf report' segfault when filtering coresight traces by
           sparse lists of CPUs.
      
         - Add support for 'simd' as a sort field for 'perf report', to show
           ARM's NEON SIMD's predicate flags: "partial" and "empty".
      
        arm64 vendor events:
      
         - Add N1 metrics.
      
        Intel vendor events:
      
         - Add graniterapids, grandridge and sierraforrest events.
      
         - Refresh events for: alderlake, aldernaken, broadwell, broadwellde,
           broadwellx, cascadelakx, haswell, haswellx, icelake, icelakex,
           jaketown, meteorlake, knightslanding, sandybridge, sapphirerapids,
           silvermont, skylake, tigerlake and westmereep-dp
      
         - Refresh metrics for alderlake-n, broadwell, broadwellde,
           broadwellx, haswell, haswellx, icelakex, ivybridge, ivytown and
           skylakex.
      
        perf stat:
      
         - Implement --topdown using JSON metrics.
      
         - Add TopdownL1 JSON metric as a default if present, but disable it
           for now for some Intel hybrid architectures, a series of patches
           addressing this is being reviewed and will be submitted for v6.5.
      
         - Use metrics for --smi-cost.
      
         - Update topdown documentation.
      
        Vendor events (JSON) infrastructure:
      
         - Add support for computing and printing metric threshold values. For
           instance, here is one found in thesapphirerapids json file:
      
             {
                 "BriefDescription": "Percentage of cycles spent in System Management Interrupts.",
                 "MetricExpr": "((msr@aperf@ - cycles) / msr@aperf@ if msr@smi@ > 0 else 0)",
                 "MetricGroup": "smi",
                 "MetricName": "smi_cycles",
                 "MetricThreshold": "smi_cycles > 0.1",
                 "ScaleUnit": "100%"
             },
      
         - Test parsing metric thresholds with the fake PMU in 'perf test
           pmu-events'.
      
         - Support for printing metric thresholds in 'perf list'.
      
         - Add --metric-no-threshold option to 'perf stat'.
      
         - Add rand (reverse and) and has_pmem (optane memory) support to
           metrics.
      
         - Sort list of input files to avoid depending on the order from
           readdir() helping in obtaining reproducible builds.
      
        S/390:
      
         - Add common metrics: - CPI (cycles per instruction), prbstate (ratio
           of instructions executed in problem state compared to total number
           of instructions), l1mp (Level one instruction and data cache misses
           per 100 instructions).
      
         - Add cache metrics for z13, z14, z15 and z16.
      
         - Add metric for TLB and cache.
      
        ARM:
      
         - Add raw decoding for SPE (Statistical Profiling Extension) v1.3 MTE
           (Memory Tagging Extension) and MOPS (Memory Operations) load/store.
      
        Intel PT hardware tracing:
      
         - Add event type names UINTR (User interrupt delivered) and UIRET
           (Exiting from user interrupt routine), documented in table 32-50
           "CFE Packet Type and Vector Fields Details" in the Intel Processor
           Trace chapter of The Intel SDM Volume 3 version 078.
      
         - Add support for new branch instructions ERETS and ERETU.
      
         - Fix CYC timestamps after standalone CBR
      
        ARM CoreSight hardware tracing:
      
         - Allow user to override timestamp and contextid settings.
      
         - Fix segfault in dso lookup.
      
         - Fix timeless decode mode detection.
      
         - Add separate decode paths for timeless and per-thread modes.
      
        auxtrace:
      
         - Fix address filter entire kernel size.
      
        Miscellaneous:
      
         - Fix use-after-free and unaligned bugs in the PLT handling routines.
      
         - Use zfree() to reduce chances of use after free.
      
         - Add missing 0x prefix for addresses printed in hexadecimal in 'perf
           probe'.
      
         - Suppress massive unsupported target platform errors in the unwind
           code.
      
         - Fix return incorrect build_id size in elf_read_build_id().
      
         - Fix 'perf scripts intel-pt-events.py' IPC output for Python 2 .
      
         - Add missing new parameter in kfree_skb tracepoint to the python
           scripts using it.
      
         - Add 'perf bench syscall fork' benchmark.
      
         - Add support for printing PERF_MEM_LVLNUM_UNC (Uncached access) in
           'perf mem'.
      
         - Fix wrong size expectation for perf test 'Setup struct
           perf_event_attr' caused by the patch adding
           perf_event_attr::config3.
      
         - Fix some spelling mistakes"
      
      * tag 'perf-tools-for-v6.4-3-2023-05-06' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux: (365 commits)
        Revert "perf build: Make BUILD_BPF_SKEL default, rename to NO_BPF_SKEL"
        Revert "perf build: Warn for BPF skeletons if endian mismatches"
        perf metrics: Fix SEGV with --for-each-cgroup
        perf bpf skels: Stop using vmlinux.h generated from BTF, use subset of used structs + CO-RE
        perf stat: Separate bperf from bpf_profiler
        perf test record+probe_libc_inet_pton: Fix call chain match on x86_64
        perf test record+probe_libc_inet_pton: Fix call chain match on s390
        perf tracepoint: Fix memory leak in is_valid_tracepoint()
        perf cs-etm: Add fix for coresight trace for any range of CPUs
        perf build: Fix unescaped # in perf build-test
        perf unwind: Suppress massive unsupported target platform errors
        perf script: Add new parameter in kfree_skb tracepoint to the python scripts using it
        perf script: Print raw ip instead of binary offset for callchain
        perf symbols: Fix return incorrect build_id size in elf_read_build_id()
        perf list: Modify the warning message about scandirat(3)
        perf list: Fix memory leaks in print_tracepoint_events()
        perf lock contention: Rework offset calculation with BPF CO-RE
        perf lock contention: Fix struct rq lock access
        perf stat: Disable TopdownL1 on hybrid
        perf stat: Avoid SEGV on counter->name
        ...
      f085df1b
    • Linus Torvalds's avatar
      Merge tag 'core-debugobjects-2023-05-06' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 17784de6
      Linus Torvalds authored
      Pull debugobjects fix from Thomas Gleixner:
       "A single fix for debugobjects:
      
        The recent fix to ensure atomicity of lookup and allocation
        inadvertently broke the pool refill mechanism, so that debugobject
        OOMs now in certain situations. The reason is that the functions which
        got updated no longer invoke debug_objecs_init(), which is now the
        only place to care about refilling the tracking object pool.
      
        Restore the original behaviour by adding explicit refill opportunities
        to those places"
      
      * tag 'core-debugobjects-2023-05-06' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        debugobject: Ensure pool refill (again)
      17784de6
    • Linus Torvalds's avatar
      Merge tag 'v6.4-p2' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 · 6f69c981
      Linus Torvalds authored
      Pull crypto fixes from Herbert Xu:
      
       - A long-standing bug in crypto_engine
      
       - A buggy but harmless check in the sun8i-ss driver
      
       - A regression in the CRYPTO_USER interface
      
      * tag 'v6.4-p2' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
        crypto: api - Fix CRYPTO_USER checks for report function
        crypto: engine - fix crypto_queue backlog handling
        crypto: sun8i-ss - Fix a test in sun8i_ss_setup_ivs()
      6f69c981
    • Linus Torvalds's avatar
      Merge tag '6.4-rc-smb3-client-fixes-part2' of git://git.samba.org/sfrench/cifs-2.6 · 63342b1d
      Linus Torvalds authored
      Pull cifs fixes from Steve French:
       "smb3 client fixes, mostly DFS or reconnect related:
      
         - Two DFS connection sharing fixes
      
         - DFS refresh fix
      
         - Reconnect fix
      
         - Two potential use after free fixes
      
         - Also print prefix patch in mount debug msg
      
         - Two small cleanup fixes"
      
      * tag '6.4-rc-smb3-client-fixes-part2' of git://git.samba.org/sfrench/cifs-2.6:
        cifs: Remove unneeded semicolon
        cifs: fix sharing of DFS connections
        cifs: avoid potential races when handling multiple dfs tcons
        cifs: protect access of TCP_Server_Info::{origin,leaf}_fullpath
        cifs: fix potential race when tree connecting ipc
        cifs: fix potential use-after-free bugs in TCP_Server_Info::hostname
        cifs: print smb3_fs_context::source when mounting
        cifs: protect session status check in smb2_reconnect()
        SMB3.1.1: correct definition for app_instance_id create contexts
      63342b1d
    • Linus Torvalds's avatar
      Merge tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux · d6b8a8c4
      Linus Torvalds authored
      Pull clk fixes from Stephen Boyd:
       "A couple more patches that would be good to get into -rc1:
      
         - Revert an i.MX patch that's causing video failures because division
           math goes sideways
      
         - Fix a clang + W=1 build isue where FIELD_PREP() is taking a 32-bit
           variable instead of the usual u64 type
      
         - Fix a Kconfig bug in the StarFive JH7110 clk config that selects a
           reset controller when it can't be selected"
      
      * tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux:
        clk: starfive: Fix RESET_STARFIVE_JH7110 can't be selected in a specified case
        clk: sp7021: Adjust width of _m in HWM_FIELD_PREP()
        Revert "clk: imx: composite-8m: Add support to determine_rate"
      d6b8a8c4
    • Linus Torvalds's avatar
      Merge tag 'mailbox-v6.4' of git://git.linaro.org/landing-teams/working/fujitsu/integration · 1c1094e4
      Linus Torvalds authored
      Pull mailbox updates from Jassi Brar:
      
       - mailbox api: allow direct registration to a channel and convert omap
         and pcc to use mbox_bind_client
      
       - omap and hi6220 : use of_property_read_bool
      
       - test: fix double-free and use spinlock header
      
       - rockchip and bcm-pdc: drop of_match_ptr
      
       - mpfs: change config symbol
      
       - mediatek gce: support MT6795
      
       - qcom apcs: consolidate of_device_id and support IPQ9574
      
      * tag 'mailbox-v6.4' of git://git.linaro.org/landing-teams/working/fujitsu/integration:
        dt-bindings: mailbox: qcom: add compatible for IPQ9574 SoC
        mailbox: qcom-apcs-ipc: do not grow the of_device_id
        dt-bindings: mailbox: qcom,apcs-kpss-global: use fallbacks for few variants
        dt-bindings: mailbox: mediatek,gce-mailbox: Add support for MT6795
        mailbox: mpfs: convert SOC_MICROCHIP_POLARFIRE to ARCH_MICROCHIP_POLARFIRE
        mailbox: bcm-pdc: drop of_match_ptr for ID table
        mailbox: rockchip: drop of_match_ptr for ID table
        mailbox: mailbox-test: Fix potential double-free in mbox_test_message_write()
        mailbox: mailbox-test: Explicitly include header for spinlock support
        mailbox: Use of_property_read_bool() for boolean properties
        mailbox: pcc: Use mbox_bind_client
        mailbox: omap: Use mbox_bind_client
        mailbox: Allow direct registration to a channel
      1c1094e4
    • Linus Torvalds's avatar
      Merge tag 'for-6.4/io_uring-2023-05-07' of git://git.kernel.dk/linux · 03e5cb7b
      Linus Torvalds authored
      Pull more io_uring updates from Jens Axboe:
       "Nothing major in here, just two different parts:
      
         - A small series from Breno that enables passing the full SQE down
           for ->uring_cmd().
      
           This is a prerequisite for enabling full network socket operations.
           Queued up a bit late because of some stylistic concerns that got
           resolved, would be nice to have this in 6.4-rc1 so the dependent
           work will be easier to handle for 6.5.
      
         - Fix for the huge page coalescing, which was a regression introduced
           in the 6.3 kernel release (Tobias)"
      
      * tag 'for-6.4/io_uring-2023-05-07' of git://git.kernel.dk/linux:
        io_uring: Remove unnecessary BUILD_BUG_ON
        io_uring: Pass whole sqe to commands
        io_uring: Create a helper to return the SQE size
        io_uring/rsrc: check for nonconsecutive pages
      03e5cb7b