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:
Tiezhu Yang
2025-12-31 15:19:19 +08:00
committed by Huacai Chen
parent 6e5416d63b
commit 4cd641a79e

View File

@@ -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: