Commit 4cd641a7 authored by Tiezhu Yang's avatar Tiezhu Yang Committed by Huacai Chen
Browse files

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: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent 6e5416d6
Loading
Loading
Loading
Loading
+5 −11
Original line number Diff line number Diff line
@@ -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;
	}

	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: