Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b3a5acc1 authored by Harvey Harrison's avatar Harvey Harrison Committed by Ingo Molnar
Browse files

x86: use fixup_exception() in traps_64.c



Use the fixup_exception() helper instead of the open-coded
search_extable() users.

Signed-off-by: default avatarHarvey Harrison <harvey.harrison@gmail.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 318aa296
Loading
Loading
Loading
Loading
+15 −32
Original line number Diff line number Diff line
@@ -601,20 +601,13 @@ static void __kprobes do_trap(int trapnr, int signr, char *str,
	}


	/* kernel trap */ 
	{	     
		const struct exception_table_entry *fixup;
		fixup = search_exception_tables(regs->ip);
		if (fixup)
			regs->ip = fixup->fixup;
		else {
	if (!fixup_exception(regs)) {
		tsk->thread.error_code = error_code;
		tsk->thread.trap_no = trapnr;
		die(str, regs, error_code);
	}
	return;
}
}

#define DO_ERROR(trapnr, signr, str, name) \
asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
@@ -703,14 +696,8 @@ asmlinkage void __kprobes do_general_protection(struct pt_regs * regs,
		return;
	} 

	/* kernel gp */
	{
		const struct exception_table_entry *fixup;
		fixup = search_exception_tables(regs->ip);
		if (fixup) {
			regs->ip = fixup->fixup;
	if (fixup_exception(regs))
		return;
		}

	tsk->thread.error_code = error_code;
	tsk->thread.trap_no = 13;
@@ -719,7 +706,6 @@ asmlinkage void __kprobes do_general_protection(struct pt_regs * regs,
		return;
	die("general protection fault", regs, error_code);
}
}

static __kprobes void
mem_parity_error(unsigned char reason, struct pt_regs * regs)
@@ -910,12 +896,9 @@ asmlinkage void __kprobes do_debug(struct pt_regs * regs,

static int kernel_math_error(struct pt_regs *regs, const char *str, int trapnr)
{
	const struct exception_table_entry *fixup;
	fixup = search_exception_tables(regs->ip);
	if (fixup) {
		regs->ip = fixup->fixup;
	if (fixup_exception(regs))
		return 1;
	}

	notify_die(DIE_GPF, str, regs, 0, trapnr, SIGFPE);
	/* Illegal floating point operation in the kernel */
	current->thread.trap_no = trapnr;