summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>2026-07-07 14:34:42 -0700
committerPaul E. McKenney <paulmck@kernel.org>2026-09-03 10:55:25 -0700
commit4bd7f458229a3d63687f9d3178e2e073bcbed47e (patch)
tree35e620cb6eb4fbff55965ff3643ccb497b847092
parentac473729f3d7629199269ceb55922eac77535346 (diff)
downloadlinux-next-4bd7f458229a3d63687f9d3178e2e073bcbed47e.tar.gz
linux-next-4bd7f458229a3d63687f9d3178e2e073bcbed47e.zip
hazptrtorture: Detach deferred and IPIed hazard pointers
Pass to hazptr_detach() those hazard pointers that are to be released in some other task or within the context of an IPI handler. [ paulmck: s/hazptr_detach_from_task/hazptr_detach/ per Mathieu. ] Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org> Cc: Boqun Feng <boqun@kernel.org> Cc: <rcu@vger.kernel.org> Cc: <lkmm@lists.linux.dev>
-rw-r--r--kernel/rcu/hazptrtorture.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/rcu/hazptrtorture.c b/kernel/rcu/hazptrtorture.c
index a72375cb3221..e21c5ce3d4dc 100644
--- a/kernel/rcu/hazptrtorture.c
+++ b/kernel/rcu/hazptrtorture.c
@@ -411,6 +411,7 @@ hazptr_torture_reader_tail(struct hazptr_pending *hppp, struct torture_random_st
preempt_enable();
if (irq_release && !(torture_random(trsp) % irq_release)) {
guard(preempt)();
+ hazptr_detach(&hppp->hpp_hc);
cpu = cpumask_next_wrap(smp_processor_id(), cpu_online_mask);
smp_call_function_single(cpu, hazptr_torture_release, hppp, 1);
} else {
@@ -428,6 +429,7 @@ static void hazptr_torture_defer(struct hazptr_pending *hppp, struct torture_ran
struct llist_head *llhp;
guard(preempt)();
+ hazptr_detach(&hppp->hpp_hc);
cpu = cpumask_next_wrap(cpu, cpu_online_mask);
llhp = per_cpu_ptr(&hazptr_pending, cpu);
llist_add(&hppp->hpp_node, llhp);