arm64: Add macros to manage processor debug state
Add macros to enable and disable to manage PSTATE.D for debugging. The macros local_dbg_save and local_dbg_restore are moved to irqflags.h file KGDB boot tests fail because of PSTATE.D is masked. unmask it for debugging support Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@caviumnetworks.com> Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
Родитель
cfbf8d4857
Коммит
c7db4ff5d2
|
@ -43,23 +43,6 @@ enum debug_el {
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
struct task_struct;
|
struct task_struct;
|
||||||
|
|
||||||
#define local_dbg_save(flags) \
|
|
||||||
do { \
|
|
||||||
typecheck(unsigned long, flags); \
|
|
||||||
asm volatile( \
|
|
||||||
"mrs %0, daif // local_dbg_save\n" \
|
|
||||||
"msr daifset, #8" \
|
|
||||||
: "=r" (flags) : : "memory"); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define local_dbg_restore(flags) \
|
|
||||||
do { \
|
|
||||||
typecheck(unsigned long, flags); \
|
|
||||||
asm volatile( \
|
|
||||||
"msr daif, %0 // local_dbg_restore\n" \
|
|
||||||
: : "r" (flags) : "memory"); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define DBG_ARCH_ID_RESERVED 0 /* In case of ptrace ABI updates. */
|
#define DBG_ARCH_ID_RESERVED 0 /* In case of ptrace ABI updates. */
|
||||||
|
|
||||||
#define DBG_HOOK_HANDLED 0
|
#define DBG_HOOK_HANDLED 0
|
||||||
|
|
|
@ -90,5 +90,28 @@ static inline int arch_irqs_disabled_flags(unsigned long flags)
|
||||||
return flags & PSR_I_BIT;
|
return flags & PSR_I_BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* save and restore debug state
|
||||||
|
*/
|
||||||
|
#define local_dbg_save(flags) \
|
||||||
|
do { \
|
||||||
|
typecheck(unsigned long, flags); \
|
||||||
|
asm volatile( \
|
||||||
|
"mrs %0, daif // local_dbg_save\n" \
|
||||||
|
"msr daifset, #8" \
|
||||||
|
: "=r" (flags) : : "memory"); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define local_dbg_restore(flags) \
|
||||||
|
do { \
|
||||||
|
typecheck(unsigned long, flags); \
|
||||||
|
asm volatile( \
|
||||||
|
"msr daif, %0 // local_dbg_restore\n" \
|
||||||
|
: : "r" (flags) : "memory"); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define local_dbg_enable() asm("msr daifclr, #8" : : : "memory")
|
||||||
|
#define local_dbg_disable() asm("msr daifset, #8" : : : "memory")
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -138,6 +138,7 @@ static void clear_os_lock(void *unused)
|
||||||
{
|
{
|
||||||
asm volatile("msr oslar_el1, %0" : : "r" (0));
|
asm volatile("msr oslar_el1, %0" : : "r" (0));
|
||||||
isb();
|
isb();
|
||||||
|
local_dbg_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int os_lock_notify(struct notifier_block *self,
|
static int os_lock_notify(struct notifier_block *self,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче