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

Commit 527b5bae authored by Al Viro's avatar Al Viro
Browse files

powerpc: switch to extable.h



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent d597580d
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
#ifndef _ARCH_POWERPC_EXTABLE_H
#define _ARCH_POWERPC_EXTABLE_H

/*
 * The exception table consists of pairs of relative addresses: the first is
 * the address of an instruction that is allowed to fault, and the second is
 * the address at which the program should continue.  No registers are
 * modified, so it is entirely up to the continuation code to figure out what
 * to do.
 *
 * All the routines below use bits of fixup code that are out of line with the
 * main instruction path.  This means when everything is well, we don't even
 * have to jump over them.  Further, they do not intrude on our cache or tlb
 * entries.
 */

#define ARCH_HAS_RELATIVE_EXTABLE

struct exception_table_entry {
	int insn;
	int fixup;
};

static inline unsigned long extable_fixup(const struct exception_table_entry *x)
{
	return (unsigned long)&x->fixup + x->fixup;
}

#endif
+1 −25
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
#include <asm/ppc_asm.h>
#include <asm/processor.h>
#include <asm/page.h>
#include <asm/extable.h>

/*
 * The fs value determines whether argument validity checking should be
@@ -55,31 +56,6 @@
	(__chk_user_ptr(addr),			\
	 __access_ok((__force unsigned long)(addr), (size), get_fs()))

/*
 * The exception table consists of pairs of relative addresses: the first is
 * the address of an instruction that is allowed to fault, and the second is
 * the address at which the program should continue.  No registers are
 * modified, so it is entirely up to the continuation code to figure out what
 * to do.
 *
 * All the routines below use bits of fixup code that are out of line with the
 * main instruction path.  This means when everything is well, we don't even
 * have to jump over them.  Further, they do not intrude on our cache or tlb
 * entries.
 */

#define ARCH_HAS_RELATIVE_EXTABLE

struct exception_table_entry {
	int insn;
	int fixup;
};

static inline unsigned long extable_fixup(const struct exception_table_entry *x)
{
	return (unsigned long)&x->fixup + x->fixup;
}

/*
 * These are the main single-value transfer routines.  They automatically
 * use the right size if we just have the right pointer type.