powerpc: Move the patch_exception to a common place
So that it can be used by other codes. No function change. Signed-off-by: Kevin Hao <haokexin@gmail.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
Родитель
e9419669fa
Коммит
1e8341ae0c
|
@ -34,6 +34,13 @@ int instr_is_branch_to_addr(const unsigned int *instr, unsigned long addr);
|
|||
unsigned long branch_target(const unsigned int *instr);
|
||||
unsigned int translate_branch(const unsigned int *dest,
|
||||
const unsigned int *src);
|
||||
#ifdef CONFIG_PPC_BOOK3E_64
|
||||
void __patch_exception(int exc, unsigned long addr);
|
||||
#define patch_exception(exc, name) do { \
|
||||
extern unsigned int name; \
|
||||
__patch_exception((exc), (unsigned long)&name); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
static inline unsigned long ppc_function_entry(void *func)
|
||||
{
|
||||
|
|
|
@ -159,6 +159,21 @@ unsigned int translate_branch(const unsigned int *dest, const unsigned int *src)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PPC_BOOK3E_64
|
||||
void __patch_exception(int exc, unsigned long addr)
|
||||
{
|
||||
extern unsigned int interrupt_base_book3e;
|
||||
unsigned int *ibase = &interrupt_base_book3e;
|
||||
|
||||
/* Our exceptions vectors start with a NOP and -then- a branch
|
||||
* to deal with single stepping from userspace which stops on
|
||||
* the second instruction. Thus we need to patch the second
|
||||
* instruction of the exception, not the first one
|
||||
*/
|
||||
|
||||
patch_branch(ibase + (exc / 4) + 1, addr, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CODE_PATCHING_SELFTEST
|
||||
|
||||
|
|
|
@ -518,25 +518,6 @@ static void setup_page_sizes(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void __patch_exception(int exc, unsigned long addr)
|
||||
{
|
||||
extern unsigned int interrupt_base_book3e;
|
||||
unsigned int *ibase = &interrupt_base_book3e;
|
||||
|
||||
/* Our exceptions vectors start with a NOP and -then- a branch
|
||||
* to deal with single stepping from userspace which stops on
|
||||
* the second instruction. Thus we need to patch the second
|
||||
* instruction of the exception, not the first one
|
||||
*/
|
||||
|
||||
patch_branch(ibase + (exc / 4) + 1, addr, 0);
|
||||
}
|
||||
|
||||
#define patch_exception(exc, name) do { \
|
||||
extern unsigned int name; \
|
||||
__patch_exception((exc), (unsigned long)&name); \
|
||||
} while (0)
|
||||
|
||||
static void setup_mmu_htw(void)
|
||||
{
|
||||
/* Check if HW tablewalk is present, and if yes, enable it by:
|
||||
|
|
Загрузка…
Ссылка в новой задаче