Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Vijaya Kumar K and committed by
Catalin Marinas
c7db4ff5 cfbf8d48

+24 -17
-17
arch/arm64/include/asm/debug-monitors.h
··· 43 43 #ifndef __ASSEMBLY__ 44 44 struct task_struct; 45 45 46 - #define local_dbg_save(flags) \ 47 - do { \ 48 - typecheck(unsigned long, flags); \ 49 - asm volatile( \ 50 - "mrs %0, daif // local_dbg_save\n" \ 51 - "msr daifset, #8" \ 52 - : "=r" (flags) : : "memory"); \ 53 - } while (0) 54 - 55 - #define local_dbg_restore(flags) \ 56 - do { \ 57 - typecheck(unsigned long, flags); \ 58 - asm volatile( \ 59 - "msr daif, %0 // local_dbg_restore\n" \ 60 - : : "r" (flags) : "memory"); \ 61 - } while (0) 62 - 63 46 #define DBG_ARCH_ID_RESERVED 0 /* In case of ptrace ABI updates. */ 64 47 65 48 #define DBG_HOOK_HANDLED 0
+23
arch/arm64/include/asm/irqflags.h
··· 90 90 return flags & PSR_I_BIT; 91 91 } 92 92 93 + /* 94 + * save and restore debug state 95 + */ 96 + #define local_dbg_save(flags) \ 97 + do { \ 98 + typecheck(unsigned long, flags); \ 99 + asm volatile( \ 100 + "mrs %0, daif // local_dbg_save\n" \ 101 + "msr daifset, #8" \ 102 + : "=r" (flags) : : "memory"); \ 103 + } while (0) 104 + 105 + #define local_dbg_restore(flags) \ 106 + do { \ 107 + typecheck(unsigned long, flags); \ 108 + asm volatile( \ 109 + "msr daif, %0 // local_dbg_restore\n" \ 110 + : : "r" (flags) : "memory"); \ 111 + } while (0) 112 + 113 + #define local_dbg_enable() asm("msr daifclr, #8" : : : "memory") 114 + #define local_dbg_disable() asm("msr daifset, #8" : : : "memory") 115 + 93 116 #endif 94 117 #endif
+1
arch/arm64/kernel/debug-monitors.c
··· 138 138 { 139 139 asm volatile("msr oslar_el1, %0" : : "r" (0)); 140 140 isb(); 141 + local_dbg_enable(); 141 142 } 142 143 143 144 static int os_lock_notify(struct notifier_block *self,