From: Peter Zijlstra <peterz@infradead.org>
To: tglx@linutronix.de, luto@amacapital.net, peterz@infradead.org
Cc: linux-kernel@vger.kernel.org, x86@kernel.org,
Lai Jiangshan <laijs@linux.alibaba.com>,
sean.j.christopherson@intel.com, andrew.cooper3@citrix.com,
daniel.thompson@linaro.org, a.darwish@linutronix.de,
rostedt@goodmis.org, bigeasy@linutronix.de
Subject: [PATCH 05/14] x86/entry: Introduce local_db_{save,restore}()
Date: Fri, 29 May 2020 23:27:33 +0200 [thread overview]
Message-ID: <20200529213321.012060983@infradead.org> (raw)
In-Reply-To: 20200529212728.795169701@infradead.org
In order to allow other exceptions than #DB to disable breakpoints,
provide common helpers.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/x86/include/asm/debugreg.h | 30 ++++++++++++++++++++++++++++++
arch/x86/kernel/traps.c | 18 ++----------------
2 files changed, 32 insertions(+), 16 deletions(-)
--- a/arch/x86/include/asm/debugreg.h
+++ b/arch/x86/include/asm/debugreg.h
@@ -113,6 +113,36 @@ static inline void debug_stack_usage_inc
static inline void debug_stack_usage_dec(void) { }
#endif /* X86_64 */
+static __always_inline unsigned long local_db_save(void)
+{
+ unsigned long dr7;
+
+ get_debugreg(dr7, 7);
+ dr7 &= ~0x400; /* architecturally set bit */
+ if (dr7)
+ set_debugreg(0, 7);
+ /*
+ * Ensure the compiler doesn't lower the above statements into
+ * the critical section; disabling breakpoints late would not
+ * be good.
+ */
+ barrier();
+
+ return dr7;
+}
+
+static __always_inline void local_db_restore(unsigned long dr7)
+{
+ /*
+ * Ensure the compiler doesn't raise this statement into
+ * the critical section; enabling breakpoints early would
+ * not be good.
+ */
+ barrier();
+ if (dr7)
+ set_debugreg(dr7, 7);
+}
+
#ifdef CONFIG_CPU_SUP_AMD
extern void set_dr_addr_mask(unsigned long mask, int dr);
#else
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -727,15 +727,7 @@ static __always_inline void debug_enter(
* Entry text is excluded for HW_BP_X and cpu_entry_area, which
* includes the entry stack is excluded for everything.
*/
- get_debugreg(*dr7, 7);
- set_debugreg(0, 7);
-
- /*
- * Ensure the compiler doesn't lower the above statements into
- * the critical section; disabling breakpoints late would not
- * be good.
- */
- barrier();
+ *dr7 = local_db_save();
/*
* The Intel SDM says:
@@ -756,13 +748,7 @@ static __always_inline void debug_enter(
static __always_inline void debug_exit(unsigned long dr7)
{
- /*
- * Ensure the compiler doesn't raise this statement into
- * the critical section; enabling breakpoints early would
- * not be good.
- */
- barrier();
- set_debugreg(dr7, 7);
+ local_db_restore(dr7);
}
/*
next prev parent reply other threads:[~2020-05-29 21:35 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-29 21:27 [PATCH 00/14] x86/entry: disallow #DB more and x86/entry lockdep/nmi Peter Zijlstra
2020-05-29 21:27 ` [PATCH 01/14] x86/hw_breakpoint: Add within_area() to check data breakpoints Peter Zijlstra
2020-05-29 21:27 ` [PATCH 02/14] x86/hw_breakpoint: Prevent data breakpoints on direct GDT Peter Zijlstra
2020-05-30 12:45 ` Andrew Cooper
2020-05-30 15:15 ` Lai Jiangshan
2020-05-29 21:27 ` [PATCH 03/14] x86/hw_breakpoint: Prevent data breakpoints on per_cpu cpu_tss_rw Peter Zijlstra
2020-05-29 21:27 ` [PATCH 04/14] x86/hw_breakpoint: Prevent data breakpoints on user_pcid_flush_mask Peter Zijlstra
2020-05-29 21:27 ` Peter Zijlstra [this message]
2020-05-30 9:57 ` [tip: x86/entry] x86/entry: Introduce local_db_{save,restore}() tip-bot2 for Peter Zijlstra
2020-05-29 21:27 ` [PATCH 06/14] x86/entry, nmi: Disable #DB Peter Zijlstra
2020-05-30 9:57 ` [tip: x86/entry] " tip-bot2 for Peter Zijlstra
2020-05-29 21:27 ` [PATCH 07/14] x86/entry, mce: Disallow #DB during #MC Peter Zijlstra
2020-05-30 9:57 ` [tip: x86/entry] " tip-bot2 for Peter Zijlstra
2020-05-29 21:27 ` [PATCH 08/14] x86/entry: Optimize local_db_save() for virt Peter Zijlstra
2020-05-30 9:57 ` [tip: x86/entry] " tip-bot2 for Peter Zijlstra
2020-06-03 1:17 ` [PATCH 08/14] " Sean Christopherson
2020-05-29 21:27 ` [PATCH 09/14] x86/entry: Remove debug IDT frobbing Peter Zijlstra
2020-05-30 9:57 ` [tip: x86/entry] " tip-bot2 for Peter Zijlstra
2020-05-29 21:27 ` [PATCH 10/14] x86/entry: Remove DBn stacks Peter Zijlstra
2020-05-30 9:57 ` [tip: x86/entry] " tip-bot2 for Peter Zijlstra
2020-05-29 21:27 ` [PATCH 11/14] x86/entry: Clarify irq_{enter,exit}_rcu() Peter Zijlstra
2020-05-30 9:57 ` [tip: x86/entry] " tip-bot2 for Peter Zijlstra
2020-06-02 14:42 ` [PATCH 11/14] " Qian Cai
2020-06-02 14:42 ` Qian Cai
2020-06-02 15:05 ` Peter Zijlstra
2020-06-02 15:05 ` Peter Zijlstra
2020-06-02 18:47 ` Qian Cai
2020-06-02 18:47 ` Qian Cai
2020-06-03 17:50 ` [tip: x86/entry] x86/entry: Use __irq_exit_rcu() in irq_exit() tip-bot2 for Peter Zijlstra
2020-05-29 21:27 ` [PATCH 12/14] x86/entry: Rename trace_hardirqs_off_prepare() Peter Zijlstra
2020-05-30 9:57 ` [tip: x86/entry] " tip-bot2 for Peter Zijlstra
2020-05-29 21:27 ` [PATCH 13/14] lockdep: Prepare for NMI IRQ state tracking Peter Zijlstra
2020-05-29 22:14 ` Steven Rostedt
2020-05-29 22:25 ` Peter Zijlstra
2020-05-29 22:28 ` Steven Rostedt
2020-05-29 22:33 ` Peter Zijlstra
2020-06-02 20:00 ` Peter Zijlstra
2020-05-29 21:27 ` [PATCH 14/14] x86/entry: Fix NMI vs " Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200529213321.012060983@infradead.org \
--to=peterz@infradead.org \
--cc=a.darwish@linutronix.de \
--cc=andrew.cooper3@citrix.com \
--cc=bigeasy@linutronix.de \
--cc=daniel.thompson@linaro.org \
--cc=laijs@linux.alibaba.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=rostedt@goodmis.org \
--cc=sean.j.christopherson@intel.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.