@ -64,23 +64,30 @@
__access_ok ( ( __force unsigned long ) ( addr ) , ( size ) , get_fs ( ) ) )
/*
* The exception table consists of pairs of addresses : the first is the
* address of an instruction that is allowed to fault , and the second is
* 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 .
* 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 .
* 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 {
unsigned long insn ;
uns ig ned long fixup ;
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 .