mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 13:41:48 -04:00
LoongArch: Remove unnecessary checks for ORC unwinder
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>
This commit is contained in:
@@ -352,12 +352,6 @@ static inline unsigned long bt_address(unsigned long ra)
|
|||||||
{
|
{
|
||||||
extern unsigned long eentry;
|
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) {
|
if (ra >= eentry && ra < eentry + EXCCODE_INT_END * VECSIZE) {
|
||||||
unsigned long func;
|
unsigned long func;
|
||||||
unsigned long type = (ra - eentry) / VECSIZE;
|
unsigned long type = (ra - eentry) / VECSIZE;
|
||||||
@@ -375,10 +369,13 @@ static inline unsigned long bt_address(unsigned long ra)
|
|||||||
break;
|
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)
|
bool unwind_next_frame(struct unwind_state *state)
|
||||||
@@ -501,9 +498,6 @@ bool unwind_next_frame(struct unwind_state *state)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!__kernel_text_address(state->pc))
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
|||||||
Reference in New Issue
Block a user