Messages in this thread | | | Subject | Re: [PATCH 1/6] x86/entry: Introduce local_db_{save,restore}() | From | Andrew Cooper <> | Date | Thu, 28 May 2020 22:36:54 +0100 |
| |
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
| |