1. 07 Jun, 2023 2 commits
    • Paul E. McKenney's avatar
      Merge branches 'doc.2023.05.10a', 'fixes.2023.05.11a', 'kvfree.2023.05.10a',... · 2e31da75
      Paul E. McKenney authored
      Merge branches 'doc.2023.05.10a', 'fixes.2023.05.11a', 'kvfree.2023.05.10a', 'nocb.2023.05.11a', 'rcu-tasks.2023.05.10a', 'torture.2023.05.15a' and 'rcu-urgent.2023.06.06a' into HEAD
      
      doc.2023.05.10a: Documentation updates
      fixes.2023.05.11a: Miscellaneous fixes
      kvfree.2023.05.10a: kvfree_rcu updates
      nocb.2023.05.11a: Callback-offloading updates
      rcu-tasks.2023.05.10a: Tasks RCU updates
      torture.2023.05.15a: Torture-test updates
      rcu-urgent.2023.06.06a: Urgent SRCU fix
      2e31da75
    • Chen-Yu Tsai's avatar
      notifier: Initialize new struct srcu_usage field · de29a96a
      Chen-Yu Tsai authored
      In commit 95433f72 ("srcu: Begin offloading srcu_struct fields to
      srcu_update"), a new struct srcu_usage field was added, but was not
      properly initialized. This led to a "spinlock bad magic" BUG when the
      SRCU notifier was ever used. This was observed in the MediaTek CCI
      devfreq driver on next-20230525. The trimmed stack trace is as follows:
      
          BUG: spinlock bad magic on CPU#4, swapper/0/1
           lock: 0xffffff80ff529ac0, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0
          Call trace:
           spin_bug+0xa4/0xe8
           do_raw_spin_lock+0xec/0x120
           _raw_spin_lock_irqsave+0x78/0xb8
           synchronize_srcu+0x3c/0x168
           srcu_notifier_chain_unregister+0x5c/0xa0
           cpufreq_unregister_notifier+0x94/0xe0
           devfreq_passive_event_handler+0x7c/0x3e0
           devfreq_remove_device+0x48/0xe8
      
      Add __SRCU_USAGE_INIT() to SRCU_NOTIFIER_INIT() so that srcu_usage gets
      initialized properly.
      Reported-by: default avatarJon Hunter <jonathanh@nvidia.com>
      Fixes: 95433f72 ("srcu: Begin offloading srcu_struct fields to srcu_update")
      Signed-off-by: default avatarChen-Yu Tsai <wenst@chromium.org>
      Tested-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
      Cc: Matthias Brugger <matthias.bgg@gmail.com>
      Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
      Cc: "Michał Mirosław" <mirq-linux@rere.qmqm.pl>
      Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com>
      Cc: Sachin Sant <sachinp@linux.ibm.com>
      Cc: Joel Fernandes (Google) <joel@joelfernandes.org
      Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
      Acked-by: default avatarZqiang <qiang.zhang1211@gmail.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      de29a96a
  2. 15 May, 2023 2 commits
    • Zhouyi Zhou's avatar
      torture: Remove duplicated argument -enable-kvm for ppc64 · ce2544b2
      Zhouyi Zhou authored
      The qemu argument -enable-kvm is duplicated because the qemu_args bash
      variable in kvm-test-1-run.sh already provides it.  This commit therefore
      removes the ppc64-specific copy in functions.sh.
      Signed-off-by: default avatarZhouyi Zhou <zhouzhouyi@gmail.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      Reviewed-by: default avatarJoel Fernandes (Google) <joel@joelfernandes.org>
      ce2544b2
    • Zqiang's avatar
      doc/rcutorture: Add description of rcutorture.stall_cpu_block · 9e5d61c0
      Zqiang authored
      If you build a kernel with CONFIG_PREEMPTION=n and CONFIG_PREEMPT_COUNT=y,
      then run the rcutorture tests specifying stalls as follows:
      
      runqemu kvm slirp nographic qemuparams="-m 1024 -smp 4" \
      	bootparams="console=ttyS0 rcutorture.stall_cpu=30 \
      	rcutorture.stall_no_softlockup=1 rcutorture.stall_cpu_block=1" -d
      
      The tests will produce the following splat:
      
      [   10.841071] rcu-torture: rcu_torture_stall begin CPU stall
      [   10.841073] rcu_torture_stall start on CPU 3.
      [   10.841077] BUG: scheduling while atomic: rcu_torture_sta/66/0x0000000
      ....
      [   10.841108] Call Trace:
      [   10.841110]  <TASK>
      [   10.841112]  dump_stack_lvl+0x64/0xb0
      [   10.841118]  dump_stack+0x10/0x20
      [   10.841121]  __schedule_bug+0x8b/0xb0
      [   10.841126]  __schedule+0x2172/0x2940
      [   10.841157]  schedule+0x9b/0x150
      [   10.841160]  schedule_timeout+0x2e8/0x4f0
      [   10.841192]  schedule_timeout_uninterruptible+0x47/0x50
      [   10.841195]  rcu_torture_stall+0x2e8/0x300
      [   10.841199]  kthread+0x175/0x1a0
      [   10.841206]  ret_from_fork+0x2c/0x50
      
      This is because the rcutorture.stall_cpu_block=1 module parameter causes
      rcu_torture_stall() to invoke schedule_timeout_uninterruptible() within
      an RCU read-side critical section.  This in turn results in a quiescent
      state (which prevents the stall) and a sleep in an atomic context (which
      produces the above splat).
      
      Although this code is operating as designed, the design has proven to
      be counterintuitive to many.  This commit therefore updates the description
      in kernel-parameters.txt accordingly.
      
      [ paulmck: Apply Joel Fernandes feedback. ]
      Signed-off-by: default avatarZqiang <qiang1.zhang@intel.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      9e5d61c0
  3. 11 May, 2023 13 commits
    • Qiuxu Zhuo's avatar
      rcu/rcuscale: Stop kfree_scale_thread thread(s) after unloading rcuscale · 23fc8df2
      Qiuxu Zhuo authored
      Running the 'kfree_rcu_test' test case [1] results in a splat [2].
      The root cause is the kfree_scale_thread thread(s) continue running
      after unloading the rcuscale module.  This commit fixes that isue by
      invoking kfree_scale_cleanup() from rcu_scale_cleanup() when removing
      the rcuscale module.
      
      [1] modprobe rcuscale kfree_rcu_test=1
          // After some time
          rmmod rcuscale
          rmmod torture
      
      [2] BUG: unable to handle page fault for address: ffffffffc0601a87
          #PF: supervisor instruction fetch in kernel mode
          #PF: error_code(0x0010) - not-present page
          PGD 11de4f067 P4D 11de4f067 PUD 11de51067 PMD 112f4d067 PTE 0
          Oops: 0010 [#1] PREEMPT SMP NOPTI
          CPU: 1 PID: 1798 Comm: kfree_scale_thr Not tainted 6.3.0-rc1-rcu+ #1
          Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 0.0.0 02/06/2015
          RIP: 0010:0xffffffffc0601a87
          Code: Unable to access opcode bytes at 0xffffffffc0601a5d.
          RSP: 0018:ffffb25bc2e57e18 EFLAGS: 00010297
          RAX: 0000000000000000 RBX: ffffffffc061f0b6 RCX: 0000000000000000
          RDX: 0000000000000000 RSI: ffffffff962fd0de RDI: ffffffff962fd0de
          RBP: ffffb25bc2e57ea8 R08: 0000000000000000 R09: 0000000000000000
          R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
          R13: 0000000000000000 R14: 000000000000000a R15: 00000000001c1dbe
          FS:  0000000000000000(0000) GS:ffff921fa2200000(0000) knlGS:0000000000000000
          CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
          CR2: ffffffffc0601a5d CR3: 000000011de4c006 CR4: 0000000000370ee0
          DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
          DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
          Call Trace:
           <TASK>
           ? kvfree_call_rcu+0xf0/0x3a0
           ? kthread+0xf3/0x120
           ? kthread_complete_and_exit+0x20/0x20
           ? ret_from_fork+0x1f/0x30
           </TASK>
          Modules linked in: rfkill sunrpc ... [last unloaded: torture]
          CR2: ffffffffc0601a87
          ---[ end trace 0000000000000000 ]---
      
      Fixes: e6e78b00 ("rcuperf: Add kfree_rcu() performance Tests")
      Reviewed-by: default avatarDavidlohr Bueso <dave@stgolabs.net>
      Reviewed-by: default avatarJoel Fernandes (Google) <joel@joelfernandes.org>
      Signed-off-by: default avatarQiuxu Zhuo <qiuxu.zhuo@intel.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      23fc8df2
    • Qiuxu Zhuo's avatar
      rcu/rcuscale: Move rcu_scale_*() after kfree_scale_cleanup() · bf5ddd73
      Qiuxu Zhuo authored
      This code-movement-only commit moves the rcu_scale_cleanup() and
      rcu_scale_shutdown() functions to follow kfree_scale_cleanup().
      This is code movement is in preparation for a bug-fix patch that invokes
      kfree_scale_cleanup() from rcu_scale_cleanup().
      Signed-off-by: default avatarQiuxu Zhuo <qiuxu.zhuo@intel.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      Reviewed-by: default avatarJoel Fernandes (Google) <joel@joelfernandes.org>
      bf5ddd73
    • Paul E. McKenney's avatar
      rcutorture: Correct name of use_softirq module parameter · b409afe0
      Paul E. McKenney authored
      The BUSTED-BOOST and TREE03 scenarios specify a mythical tree.use_softirq
      module parameter, which means a failure to get full test coverage.  This
      commit therefore corrects the name to rcutree.use_softirq.
      
      Fixes: e2b949d5 ("rcutorture: Make TREE03 use real-time tree.use_softirq setting")
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      Reviewed-by: default avatarJoel Fernandes (Google) <joel@joelfernandes.org>
      b409afe0
    • Paul E. McKenney's avatar
      locktorture: Add long_hold to adjust lock-hold delays · f8619c30
      Paul E. McKenney authored
      This commit adds a long_hold module parameter to allow testing diagnostics
      for excessive lock-hold times.  Also adjust torture_param() invocations
      for longer line length while in the area.
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      Reviewed-by: default avatarJoel Fernandes (Google) <joel@joelfernandes.org>
      f8619c30
    • Frederic Weisbecker's avatar
      rcu/nocb: Make shrinker iterate only over NOCB CPUs · fbde57d2
      Frederic Weisbecker authored
      Callbacks can only be queued as lazy on NOCB CPUs, therefore iterating
      over the NOCB mask is enough for both counting and scanning. Just lock
      the mostly uncontended barrier mutex on counting as well in order to
      keep rcu_nocb_mask stable.
      Signed-off-by: default avatarFrederic Weisbecker <frederic@kernel.org>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      fbde57d2
    • Paul E. McKenney's avatar
      rcu-tasks: Stop rcu_tasks_invoke_cbs() from using never-onlined CPUs · 401b0de3
      Paul E. McKenney authored
      The rcu_tasks_invoke_cbs() function relies on queue_work_on() to silently
      fall back to WORK_CPU_UNBOUND when the specified CPU is offline.  However,
      the queue_work_on() function's silent fallback mechanism relies on that
      CPU having been online at some time in the past.  When queue_work_on()
      is passed a CPU that has never been online, workqueue lockups ensue,
      which can be bad for your kernel's general health and well-being.
      
      This commit therefore checks whether a given CPU has ever been online,
      and, if not substitutes WORK_CPU_UNBOUND in the subsequent call to
      queue_work_on().  Why not simply omit the queue_work_on() call entirely?
      Because this function is flooding callback-invocation notifications
      to all CPUs, and must deal with possibilities that include a sparse
      cpu_possible_mask.
      
      This commit also moves the setting of the rcu_data structure's
      ->beenonline field to rcu_cpu_starting(), which executes on the
      incoming CPU before that CPU has ever enabled interrupts.  This ensures
      that the required workqueues are present.  In addition, because the
      incoming CPU has not yet enabled its interrupts, there cannot yet have
      been any softirq handlers running on this CPU, which means that the
      WARN_ON_ONCE(!rdp->beenonline) within the RCU_SOFTIRQ handler cannot
      have triggered yet.
      
      Fixes: d363f833 ("rcu-tasks: Use workqueues for multiple rcu_tasks_invoke_cbs() invocations")
      Reported-by: default avatarTejun Heo <tj@kernel.org>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      401b0de3
    • Paul E. McKenney's avatar
      rcu: Make rcu_cpu_starting() rely on interrupts being disabled · 15d44dfa
      Paul E. McKenney authored
      Currently, rcu_cpu_starting() is written so that it might be invoked
      with interrupts enabled.  However, it is always called when interrupts
      are disabled, either by rcu_init(), notify_cpu_starting(), or from a
      call point prior to the call to notify_cpu_starting().
      
      But why bother requiring that interrupts be disabled?  The purpose is
      to allow the rcu_data structure's ->beenonline flag to be set after all
      early processing has completed for the incoming CPU, thus allowing this
      flag to be used to determine when workqueues have been set up for the
      incoming CPU, while still allowing this flag to be used as a diagnostic
      within rcu_core().
      
      This commit therefore makes rcu_cpu_starting() rely on interrupts being
      disabled.
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      15d44dfa
    • Paul E. McKenney's avatar
      rcu: Mark rcu_cpu_kthread() accesses to ->rcu_cpu_has_work · a24c1aab
      Paul E. McKenney authored
      The rcu_data structure's ->rcu_cpu_has_work field can be modified by
      any CPU attempting to wake up the rcuc kthread.  Therefore, this commit
      marks accesses to this field from the rcu_cpu_kthread() function.
      
      This data race was reported by KCSAN.  Not appropriate for backporting
      due to failure being unlikely.
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      a24c1aab
    • Paul E. McKenney's avatar
      rcu: Mark additional concurrent load from ->cpu_no_qs.b.exp · 9146eb25
      Paul E. McKenney authored
      The per-CPU rcu_data structure's ->cpu_no_qs.b.exp field is updated
      only on the instance corresponding to the current CPU, but can be read
      more widely.  Unmarked accesses are OK from the corresponding CPU, but
      only if interrupts are disabled, given that interrupt handlers can and
      do modify this field.
      
      Unfortunately, although the load from rcu_preempt_deferred_qs() is always
      carried out from the corresponding CPU, interrupts are not necessarily
      disabled.  This commit therefore upgrades this load to READ_ONCE.
      
      Similarly, the diagnostic access from synchronize_rcu_expedited_wait()
      might run with interrupts disabled and from some other CPU.  This commit
      therefore marks this load with data_race().
      
      Finally, the C-language access in rcu_preempt_ctxt_queue() is OK as
      is because interrupts are disabled and this load is always from the
      corresponding CPU.  This commit adds a comment giving the rationale for
      this access being safe.
      
      This data race was reported by KCSAN.  Not appropriate for backporting
      due to failure being unlikely.
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      9146eb25
    • Paul E. McKenney's avatar
      rcu: Employ jiffies-based backstop to callback time limit · f51164a8
      Paul E. McKenney authored
      Currently, if there are more than 100 ready-to-invoke RCU callbacks queued
      on a given CPU, the rcu_do_batch() function sets a timeout for invocation
      of the series.  This timeout defaulting to three milliseconds, and may
      be adjusted using the rcutree.rcu_resched_ns kernel boot parameter.
      This timeout is checked using local_clock(), but the overhead of this
      function combined with the common-case very small callback-invocation
      overhead means that local_clock() is checked every 32nd invocation.
      
      This works well except for longer-than average callbacks.  For example,
      a series of 500-microsecond-duration callbacks means that local_clock()
      is checked only once every 16 milliseconds, which makes it difficult to
      enforce a three-millisecond timeout.
      
      This commit therefore adds a Kconfig option RCU_DOUBLE_CHECK_CB_TIME
      that enables backup timeout checking using the coarser grained but
      lighter weight jiffies.  If the jiffies counter detects a timeout,
      then local_clock() is consulted even if this is not the 32nd callback.
      This prevents the aforementioned 16-millisecond latency blow.
      Reported-by: default avatarDomas Mituzas <dmituzas@meta.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      f51164a8
    • Paul E. McKenney's avatar
      rcu: Check callback-invocation time limit for rcuc kthreads · fea1c1f0
      Paul E. McKenney authored
      Currently, a callback-invocation time limit is enforced only for
      callbacks invoked from the softirq environment, the rationale being
      that when callbacks are instead invoked from rcuc and rcuoc kthreads,
      these callbacks cannot be holding up other softirq vectors.
      
      Which is in fact true.  However, if an rcuc kthread spends too much time
      invoking callbacks, it can delay quiescent-state reports from its CPU,
      which can also be a problem.
      
      This commit therefore applies the callback-invocation time limit to
      callback invocation from the rcuc kthreads as well as from softirq.
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      fea1c1f0
    • Peter Zijlstra's avatar
      rcu: Remove RCU_NONIDLE() · 7a3cc291
      Peter Zijlstra authored
      Since there are now exactly _zero_ users of RCU_NONIDLE(), make it go
      away before someone else decides to (ab)use it.
      
      [ paulmck: Remove extraneous whitespace. ]
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
      Acked-by: default avatarFrederic Weisbecker <frederic@kernel.org>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      7a3cc291
    • Paul E. McKenney's avatar
      rcu: Add more RCU files to kernel-api.rst · e1bd2334
      Paul E. McKenney authored
      Recent changes and additions to RCU have not been reflected in
      Documentation/core-api/kernel-api.rst, which makes it harder to find
      the kernel-doc headers in recently added RCU files.
      
      Therefore, add those files.
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Cc: Luis Chamberlain <mcgrof@kernel.org>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Liam Beguin <liambeguin@gmail.com>
      Cc: <linux-doc@vger.kernel.org>
      e1bd2334
  4. 10 May, 2023 17 commits
    • Zqiang's avatar
      rcu-tasks: Clarify the cblist_init_generic() function's pr_info() output · edff5e9a
      Zqiang authored
      This commit uses rtp->name instead of __func__ and outputs the value
      of rcu_task_cb_adjust, thus reducing console-log output.
      Signed-off-by: default avatarZqiang <qiang1.zhang@intel.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      edff5e9a
    • Shigeru Yoshida's avatar
      rcu-tasks: Avoid pr_info() with spin lock in cblist_init_generic() · 5fc8cbe4
      Shigeru Yoshida authored
      pr_info() is called with rtp->cbs_gbl_lock spin lock locked.  Because
      pr_info() calls printk() that might sleep, this will result in BUG
      like below:
      
      [    0.206455] cblist_init_generic: Setting adjustable number of callback queues.
      [    0.206463]
      [    0.206464] =============================
      [    0.206464] [ BUG: Invalid wait context ]
      [    0.206465] 5.19.0-00428-g9de1f9c8 #5 Not tainted
      [    0.206466] -----------------------------
      [    0.206466] swapper/0/1 is trying to lock:
      [    0.206467] ffffffffa0167a58 (&port_lock_key){....}-{3:3}, at: serial8250_console_write+0x327/0x4a0
      [    0.206473] other info that might help us debug this:
      [    0.206473] context-{5:5}
      [    0.206474] 3 locks held by swapper/0/1:
      [    0.206474]  #0: ffffffff9eb597e0 (rcu_tasks.cbs_gbl_lock){....}-{2:2}, at: cblist_init_generic.constprop.0+0x14/0x1f0
      [    0.206478]  #1: ffffffff9eb579c0 (console_lock){+.+.}-{0:0}, at: _printk+0x63/0x7e
      [    0.206482]  #2: ffffffff9ea77780 (console_owner){....}-{0:0}, at: console_emit_next_record.constprop.0+0x111/0x330
      [    0.206485] stack backtrace:
      [    0.206486] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.19.0-00428-g9de1f9c8 #5
      [    0.206488] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.0-1.fc36 04/01/2014
      [    0.206489] Call Trace:
      [    0.206490]  <TASK>
      [    0.206491]  dump_stack_lvl+0x6a/0x9f
      [    0.206493]  __lock_acquire.cold+0x2d7/0x2fe
      [    0.206496]  ? stack_trace_save+0x46/0x70
      [    0.206497]  lock_acquire+0xd1/0x2f0
      [    0.206499]  ? serial8250_console_write+0x327/0x4a0
      [    0.206500]  ? __lock_acquire+0x5c7/0x2720
      [    0.206502]  _raw_spin_lock_irqsave+0x3d/0x90
      [    0.206504]  ? serial8250_console_write+0x327/0x4a0
      [    0.206506]  serial8250_console_write+0x327/0x4a0
      [    0.206508]  console_emit_next_record.constprop.0+0x180/0x330
      [    0.206511]  console_unlock+0xf7/0x1f0
      [    0.206512]  vprintk_emit+0xf7/0x330
      [    0.206514]  _printk+0x63/0x7e
      [    0.206516]  cblist_init_generic.constprop.0.cold+0x24/0x32
      [    0.206518]  rcu_init_tasks_generic+0x5/0xd9
      [    0.206522]  kernel_init_freeable+0x15b/0x2a2
      [    0.206523]  ? rest_init+0x160/0x160
      [    0.206526]  kernel_init+0x11/0x120
      [    0.206527]  ret_from_fork+0x1f/0x30
      [    0.206530]  </TASK>
      [    0.207018] cblist_init_generic: Setting shift to 1 and lim to 1.
      
      This patch moves pr_info() so that it is called without
      rtp->cbs_gbl_lock locked.
      Signed-off-by: default avatarShigeru Yoshida <syoshida@redhat.com>
      Tested-by: default avatar"Zhang, Qiang1" <qiang1.zhang@intel.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      5fc8cbe4
    • Frederic Weisbecker's avatar
      rcu/nocb: Recheck lazy callbacks under the ->nocb_lock from shrinker · b96a8b0b
      Frederic Weisbecker authored
      The ->lazy_len is only checked locklessly. Recheck again under the
      ->nocb_lock to avoid spending more time on flushing/waking if not
      necessary. The ->lazy_len can still increment concurrently (from 1 to
      infinity) but under the ->nocb_lock we at least know for sure if there
      are lazy callbacks at all (->lazy_len > 0).
      Signed-off-by: default avatarFrederic Weisbecker <frederic@kernel.org>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      b96a8b0b
    • Frederic Weisbecker's avatar
      rcu/nocb: Fix shrinker race against callback enqueuer · 76259260
      Frederic Weisbecker authored
      The shrinker resets the lazy callbacks counter in order to trigger the
      pending lazy queue flush though the rcuog kthread. The counter reset is
      protected by the ->nocb_lock against concurrent accesses...except
      for one of them. Here is a list of existing synchronized readers/writer:
      
      1) The first lazy enqueuer (incrementing ->lazy_len to 1) does so under
         ->nocb_lock and ->nocb_bypass_lock.
      
      2) The further lazy enqueuers (incrementing ->lazy_len above 1) do so
         under ->nocb_bypass_lock _only_.
      
      3) The lazy flush checks and resets to 0 under ->nocb_lock and
      	->nocb_bypass_lock.
      
      The shrinker protects its ->lazy_len reset against cases 1) and 3) but
      not against 2). As such, setting ->lazy_len to 0 under the ->nocb_lock
      may be cancelled right away by an overwrite from an enqueuer, leading
      rcuog to ignore the flush.
      
      To avoid that, use the proper bypass flush API which takes care of all
      those details.
      Signed-off-by: default avatarFrederic Weisbecker <frederic@kernel.org>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      76259260
    • Frederic Weisbecker's avatar
      rcu/nocb: Protect lazy shrinker against concurrent (de-)offloading · 5c83cedb
      Frederic Weisbecker authored
      The shrinker may run concurrently with callbacks (de-)offloading. As
      such, calling rcu_nocb_lock() is very dangerous because it does a
      conditional locking. The worst outcome is that rcu_nocb_lock() doesn't
      lock but rcu_nocb_unlock() eventually unlocks, or the reverse, creating
      an imbalance.
      
      Fix this with protecting against (de-)offloading using the barrier mutex.
      Although if the barrier mutex is contended, which should be rare, then
      step aside so as not to trigger a mutex VS allocation
      dependency chain.
      Signed-off-by: default avatarFrederic Weisbecker <frederic@kernel.org>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      5c83cedb
    • Zqiang's avatar
      rcu/kvfree: Make drain_page_cache() take early return if cache is disabled · 6b706e56
      Zqiang authored
      If the rcutree.rcu_min_cached_objs kernel boot parameter is set to zero,
      then krcp->page_cache_work will never be triggered to fill page cache.
      In addition, the put_cached_bnode() will not fill page cache.  As a
      result krcp->bkvcache will always be empty, so there is no need to acquire
      krcp->lock to get page from krcp->bkvcache.  This commit therefore makes
      drain_page_cache() return immediately if the rcu_min_cached_objs is zero.
      Signed-off-by: default avatarZqiang <qiang1.zhang@intel.com>
      Reviewed-by: default avatarUladzislau Rezki (Sony) <urezki@gmail.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      6b706e56
    • Zqiang's avatar
      rcu/kvfree: Make fill page cache start from krcp->nr_bkv_objs · 60888b77
      Zqiang authored
      When the fill_page_cache_func() function is invoked, it assumes that
      the cache of pages is completely empty.  However, there can be some time
      between triggering execution of this function and its actual invocation.
      During this time, kfree_rcu_work() might run, and might fill in part or
      all of this cache of pages, thus invalidating the fill_page_cache_func()
      function's assumption.
      
      This will not overfill the cache because put_cached_bnode() will reject
      the extra page.  However, it will result in a needless allocation and
      freeing of one extra page, which might not be helpful under lowish-memory
      conditions.
      
      This commit therefore causes the fill_page_cache_func() to explicitly
      account for pages that have been placed into the cache shortly before
      it starts running.
      Signed-off-by: default avatarZqiang <qiang1.zhang@intel.com>
      Reviewed-by: default avatarUladzislau Rezki (Sony) <urezki@gmail.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      60888b77
    • Uladzislau Rezki (Sony)'s avatar
      rcu/kvfree: Do not run a page work if a cache is disabled · 021a5ff8
      Uladzislau Rezki (Sony) authored
      By default the cache size is 5 pages per CPU, but it can be disabled at
      boot time by setting the rcu_min_cached_objs to zero.  When that happens,
      the current code will uselessly set an hrtimer to schedule refilling this
      cache with zero pages.  This commit therefore streamlines this process
      by simply refusing the set the hrtimer when rcu_min_cached_objs is zero.
      Signed-off-by: default avatarUladzislau Rezki (Sony) <urezki@gmail.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      021a5ff8
    • Zqiang's avatar
      rcu/kvfree: Use consistent krcp when growing kfree_rcu() page cache · 309a4316
      Zqiang authored
      The add_ptr_to_bulk_krc_lock() function is invoked to allocate a new
      kfree_rcu() page, also known as a kvfree_rcu_bulk_data structure.
      The kfree_rcu_cpu structure's lock is used to protect this operation,
      except that this lock must be momentarily dropped when allocating memory.
      It is clearly important that the lock that is reacquired be the same
      lock that was acquired initially via krc_this_cpu_lock().
      
      Unfortunately, this same krc_this_cpu_lock() function is used to
      re-acquire this lock, and if the task migrated to some other CPU during
      the memory allocation, this will result in the kvfree_rcu_bulk_data
      structure being added to the wrong CPU's kfree_rcu_cpu structure.
      
      This commit therefore replaces that second call to krc_this_cpu_lock()
      with raw_spin_lock_irqsave() in order to explicitly acquire the lock on
      the correct kfree_rcu_cpu structure, thus keeping things straight even
      when the task migrates.
      Signed-off-by: default avatarZqiang <qiang1.zhang@intel.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      309a4316
    • Zqiang's avatar
      rcu/kvfree: Invoke debug_rcu_bhead_unqueue() after checking bnode->gp_snap · 1e237994
      Zqiang authored
      If kvfree_rcu_bulk() sees that the required grace period has failed to
      elapse, it leaks the memory because readers might still be using it.
      But in that case, the debug-objects subsystem still marks the relevant
      structures as having been freed, even though they are instead being
      leaked.
      
      This commit fixes this mismatch by invoking debug_rcu_bhead_unqueue()
      only when we are actually going to free the objects.
      Signed-off-by: default avatarZqiang <qiang1.zhang@intel.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      1e237994
    • Uladzislau Rezki (Sony)'s avatar
      rcu/kvfree: Add debug check for GP complete for kfree_rcu_cpu list · f32276a3
      Uladzislau Rezki (Sony) authored
      Under low-memory conditions, kvfree_rcu() will use each object's
      rcu_head structure to queue objects in a singly linked list headed by
      the kfree_rcu_cpu structure's ->head field.  This list is passed to
      call_rcu() as a unit, but there is no indication of which grace period
      this list needs to wait for.  This in turn prevents adding debug checks
      in the kfree_rcu_work() as was done for the two page-of-pointers channels
      in the kfree_rcu_cpu structure.
      
      This commit therefore adds a ->head_free_gp_snap field to the
      kfree_rcu_cpu_work structure to record this grace-period number.  It also
      adds a WARN_ON_ONCE() to kfree_rcu_monitor() that checks to make sure
      that the required grace period has in fact elapsed.
      
      [ paulmck: Fix kerneldoc issue raised by Stephen Rothwell. ]
      Signed-off-by: default avatarUladzislau Rezki (Sony) <urezki@gmail.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      f32276a3
    • Paul E. McKenney's avatar
      rcu/kvfree: Add debug to check grace periods · cdfa0f6f
      Paul E. McKenney authored
      This commit adds debugging checks to verify that the required RCU
      grace period has elapsed for each kvfree_rcu_bulk_data structure that
      arrives at the kvfree_rcu_bulk() function.  These checks make use
      of that structure's ->gp_snap field, which has been upgraded from an
      unsigned long to an rcu_gp_oldstate structure.  This upgrade reduces
      the chances of false positives to nearly zero, even on 32-bit systems,
      for which this structure carries 64 bits of state.
      
      Cc: Ziwei Dai <ziwei.dai@unisoc.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      cdfa0f6f
    • Uladzislau Rezki (Sony)'s avatar
      rcu/kvfree: Eliminate k[v]free_rcu() single argument macro · 7e3f926b
      Uladzislau Rezki (Sony) authored
      The kvfree_rcu() and kfree_rcu() APIs are hazardous in that if you forget
      the second argument, it works, but might sleep.  This sleeping can be a
      correctness bug from atomic contexts, and even in non-atomic contexts it
      might introduce unacceptable latencies.  This commit therefore removes the
      single-argument kvfree_rcu() and kfree_rcu() macros.  Code that would have
      previously used these single-argument kvfree_rcu() and kfree_rcu() macros
      should instead use kvfree_rcu_mightsleep() or kfree_rcu_mightsleep().
      
      [ paulmck: Apply Joel Fernandes feedback. ]
      Signed-off-by: default avatarUladzislau Rezki (Sony) <urezki@gmail.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      Signed-off-by: default avatarJoel Fernandes (Google) <joel@joelfernandes.org>
      7e3f926b
    • Paul E. McKenney's avatar
      srcu: Remove extraneous parentheses from srcu_read_lock() etc. · 1da82598
      Paul E. McKenney authored
      This commit removes extraneous parentheses from srcu_read_lock(),
      srcu_read_lock_nmisafe(), srcu_read_unlock(), and
      srcu_read_unlock_nmisafe().  Looks like someone was once a macro.
      
      Cc: Christoph Hellwig <hch@lst.de>
      Tested-by: default avatarSachin Sant <sachinp@linux.ibm.com>
      Tested-by: default avatar"Zhang, Qiang1" <qiang1.zhang@intel.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      1da82598
    • Zqiang's avatar
      MAINTAINERS: Update qiang1.zhang@intel.com to qiang.zhang1211@gmail.com · 5d80155b
      Zqiang authored
      The qiang1.zhang@intel.com email address will no longer be used, so this
      commit updates to qiang.zhang1211@gmail.com.
      Signed-off-by: default avatarZqiang <qiang1.zhang@intel.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      5d80155b
    • Paul E. McKenney's avatar
      doc: Document the rcutree.rcu_resched_ns module parameter · fb611249
      Paul E. McKenney authored
      This commit adds kernel-parameters.txt documentation for the
      rcutree.rcu_resched_ns module parameter.
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      fb611249
    • Paul E. McKenney's avatar
      doc: Get rcutree module parameters back into alpha order · 51823ca6
      Paul E. McKenney authored
      This commit puts the rcutree module parameters back into proper
      alphabetical order.
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      51823ca6
  5. 07 May, 2023 6 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