]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
LoongArch: Remove unnecessary checks for ORC unwinder
authorTiezhu Yang <yangtiezhu@loongson.cn>
Wed, 31 Dec 2025 07:19:19 +0000 (15:19 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Wed, 31 Dec 2025 07:19:19 +0000 (15:19 +0800)
According to the following function definitions, __kernel_text_address()
already checks __module_text_address(), so it should remove the check of
__module_text_address() in bt_address() at least.

int __kernel_text_address(unsigned long addr)
{
if (kernel_text_address(addr))
return 1;
...
return 0;
}

int kernel_text_address(unsigned long addr)
{
bool no_rcu;
int ret = 1;
...
if (is_module_text_address(addr))
goto out;
...
return ret;
}

bool is_module_text_address(unsigned long addr)
{
guard(rcu)();
return __module_text_address(addr) != NULL;
}

Furthermore, there are two checks of __kernel_text_address(), one is in
bt_address() and the other is after calling bt_address(), it looks like
redundant.

Handle the exception address first and then use __kernel_text_address()
to validate the calculated address for exception or the normal address
in bt_address(), then it can remove the check of __kernel_text_address()
after calling bt_address().

Just remove unnecessary checks, no functional changes intended.

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/kernel/unwind_orc.c

index 710f82d73797b1d03d69485ba674f4c4f05079b5..8a6e3429a860e936d99b80f92e6611bad22e6151 100644 (file)
@@ -352,12 +352,6 @@ static inline unsigned long bt_address(unsigned long ra)
 {
        extern unsigned long eentry;
 
-       if (__kernel_text_address(ra))
-               return ra;
-
-       if (__module_text_address(ra))
-               return ra;
-
        if (ra >= eentry && ra < eentry +  EXCCODE_INT_END * VECSIZE) {
                unsigned long func;
                unsigned long type = (ra - eentry) / VECSIZE;
@@ -375,10 +369,13 @@ static inline unsigned long bt_address(unsigned long ra)
                        break;
                }
 
-               return func + offset;
+               ra = func + offset;
        }
 
-       return ra;
+       if (__kernel_text_address(ra))
+               return ra;
+
+       return 0;
 }
 
 bool unwind_next_frame(struct unwind_state *state)
@@ -501,9 +498,6 @@ bool unwind_next_frame(struct unwind_state *state)
                goto err;
        }
 
-       if (!__kernel_text_address(state->pc))
-               goto err;
-
        return true;
 
 err: