Skip to contentSkip to conversation

Patch "LoongArch/orc: Use RCU in all users of __module_address()." has been added to the 6.12-stable tree

DISCUSSION Huacai Chen 1 participant 1 message Mar 10 1 message not in the archive Stable branch

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw

Hi, Sasha,

Quoted 8 lines · Sasha Levin

This is a note to let you know that I've just added the patch titled

LoongArch/orc: Use RCU in all users of __module_address().

to the 6.12-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

Quoted 7 lines

The filename of the patch is:
loongarch-orc-use-rcu-in-all-users-of-__module_addre.patch
and it can be found in the queue-6.12 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Is this really needed in 6.12?

Huacai

Quoted 54 lines

commit cb7c7e4265d8d6fbba83f1d4df9a028837702e06

Author: Sebastian Andrzej Siewior <[email protected]>
Date:   Wed Jan 8 10:04:47 2025 +0100

LoongArch/orc: Use RCU in all users of __module_address().

[ Upstream commit f99d27d9feb755aee9350fc89f57814d7e1b4880 ]

__module_address() can be invoked within a RCU section, there is no requirement to have preemption disabled.

Replace the preempt_disable() section around __module_address() with RCU.

Stable-dep-of: 055c7e75190e ("LoongArch: Handle percpu handler address for ORC unwinder")

arch/loongarch/kernel/unwind_orc.c +1 -3
index 471652c0c8653..59809c3406c03 100644
@@ -399,7 +399,7 @@ bool unwind_next_frame(struct unwind_state *state)
                return false;
 
        /* Don't let modules unload while we're reading their ORC data. */
-       preempt_disable();
+       guard(rcu)();
 
        if (is_entry_func(state->pc))
                goto end;
@@ -514,14 +514,12 @@ bool unwind_next_frame(struct unwind_state *state)
        if (!__kernel_text_address(state->pc))
                goto err;
 
-       preempt_enable();
        return true;
 
 err:
        state->error = true;
 
 end:
-       preempt_enable();
        state->stack_info.type = STACK_TYPE_UNKNOWN;
        return false;
 }