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 long branch_target(const unsigned int *instr);
|
||||||
unsigned int translate_branch(const unsigned int *dest,
|
unsigned int translate_branch(const unsigned int *dest,
|
||||||
const unsigned int *src);
|
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)
|
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;
|
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
|
#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)
|
static void setup_mmu_htw(void)
|
||||||
{
|
{
|
||||||
/* Check if HW tablewalk is present, and if yes, enable it by:
|
/* Check if HW tablewalk is present, and if yes, enable it by:
|
||||||
|
|
Загрузка…
Ссылка в новой задаче