On 28/05/2020 22:15, Peter Zijlstra wrote: > On Thu, May 28, 2020 at 09:52:30PM +0100, Andrew Cooper wrote: >> On 28/05/2020 21:19, Peter Zijlstra wrote: >>> --- a/arch/x86/include/asm/debugreg.h >>> +++ b/arch/x86/include/asm/debugreg.h >>> @@ -113,6 +113,31 @@ static inline void debug_stack_usage_inc >>> static inline void debug_stack_usage_dec(void) { } >>> #endif /* X86_64 */ >>> >>> +static __always_inline void local_db_save(unsigned long *dr7) >>> +{ >>> + get_debugreg(*dr7, 7); >>> + if (*dr7) >>> + set_debugreg(0, 7); >> %dr7 has an architecturally stuck bit in it. >> >> You want *dr7 != 0x400 to avoid writing 0 unconditionally. > Do we have to have that bit set when writing it? Otherwise I might > actually prefer masking it out.
Not currently. I guess it depends on how likely %dr7 is to gain an inverted polarity bit like %dr6 did. ~Andrew