Re: [RFC PATCH v4 4/4] hazptr: Migrate per-CPU slots to backup slot on context switch
Mathieu Desnoyers <[email protected]> Thu, 18 Dec 2025 11:20:01 -0500
| Newsgroups | dev.linux.lists.lkmm,org.kernel.vger.linux-kernel,org.kernel.vger.rcu,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On 2025-12-17 20:45, Mathieu Desnoyers wrote:
[...]
> +static inline
> +void hazptr_note_context_switch(void)
> +{
> + struct hazptr_ctx *ctx;
> +
> + list_for_each_entry(ctx, ¤t->hazptr_ctx_list, preempt_node) {
> + struct hazptr_slot *slot;
> +
> + if (hazptr_slot_is_backup(ctx, ctx->slot))
> + continue;
> + slot = hazptr_chain_backup_slot(ctx);
> + /*
> + * Move hazard pointer from per-CPU slot to backup slot.
> + * This requires hazard pointer synchronize to iterate
> + * on per-CPU slots with load-acquire before iterating
> + * on the overflow list.
> + */
> + WRITE_ONCE(slot->addr, ctx->slot->addr);
> + /*
> + * store-release orders store to backup slot addr before
> + * store to per-CPU slot addr.
> + */
> + smp_store_release(&ctx->slot->addr, NULL);
I missed this:
+ /* Use the backup slot for context. */
+ ctx->slot = slot;
This triggered the hazptr_release WARN_ON_ONCE() within modified
refscale tests.
Thanks,
Mathieu
--
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com