mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Frederic Weisbecker <fweisbec@gmail.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: LKML <linux-kernel@vger.kernel.org>,
	"K.Prasad" <prasad@linux.vnet.ibm.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Alan Stern <stern@rowland.harvard.edu>,
	Frederic Weisbecker <fweisbec@gmail.com>
Subject: [PATCH 05/12] hw-breakpoints: use wrapper routines around debug registers in processor related functions
Date: Wed,  3 Jun 2009 00:43:29 +0200	[thread overview]
Message-ID: <1243982616-18212-6-git-send-email-fweisbec@gmail.com> (raw)
In-Reply-To: <1243982616-18212-1-git-send-email-fweisbec@gmail.com>

From: K.Prasad <prasad@linux.vnet.ibm.com>

This patch enables the use of wrapper routines to access the debug/breakpoint
registers on cpu management.

The hardcoded debug registers save and restore operations for threads
breakpoints are replaced by wrappers.

And now that we handle the kernel breakpoints too, we also need to handle them
on cpu hotplug operations.

[ Impact: adapt new hardware breakpoint api to cpu hotplug ]

Original-patch-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: K.Prasad <prasad@linux.vnet.ibm.com>
Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
---
 arch/x86/kernel/smpboot.c |    3 +++
 arch/x86/power/cpu_32.c   |   13 +++----------
 arch/x86/power/cpu_64.c   |   12 +++---------
 3 files changed, 9 insertions(+), 19 deletions(-)

diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index 58d24ef..2b2652d 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -63,6 +63,7 @@
 #include <asm/apic.h>
 #include <asm/setup.h>
 #include <asm/uv/uv.h>
+#include <asm/debugreg.h>
 #include <linux/mc146818rtc.h>
 
 #include <asm/smpboot_hooks.h>
@@ -326,6 +327,7 @@ notrace static void __cpuinit start_secondary(void *unused)
 	setup_secondary_clock();
 
 	wmb();
+	load_debug_registers();
 	cpu_idle();
 }
 
@@ -1250,6 +1252,7 @@ void cpu_disable_common(void)
 	remove_cpu_from_maps(cpu);
 	unlock_vector_lock();
 	fixup_irqs();
+	hw_breakpoint_disable();
 }
 
 int native_cpu_disable(void)
diff --git a/arch/x86/power/cpu_32.c b/arch/x86/power/cpu_32.c
index 5199139..2bc3b01 100644
--- a/arch/x86/power/cpu_32.c
+++ b/arch/x86/power/cpu_32.c
@@ -13,6 +13,7 @@
 #include <asm/mce.h>
 #include <asm/xcr.h>
 #include <asm/suspend.h>
+#include <asm/debugreg.h>
 
 static struct saved_context saved_context;
 
@@ -48,6 +49,7 @@ static void __save_processor_state(struct saved_context *ctxt)
 	ctxt->cr2 = read_cr2();
 	ctxt->cr3 = read_cr3();
 	ctxt->cr4 = read_cr4_safe();
+	hw_breakpoint_disable();
 }
 
 /* Needed by apm.c */
@@ -83,16 +85,7 @@ static void fix_processor_context(void)
 	/*
 	 * Now maybe reload the debug registers
 	 */
-	if (current->thread.debugreg7) {
-		set_debugreg(current->thread.debugreg[0], 0);
-		set_debugreg(current->thread.debugreg[1], 1);
-		set_debugreg(current->thread.debugreg[2], 2);
-		set_debugreg(current->thread.debugreg[3], 3);
-		/* no 4 and 5 */
-		set_debugreg(current->thread.debugreg6, 6);
-		set_debugreg(current->thread.debugreg7, 7);
-	}
-
+	load_debug_registers();
 }
 
 static void __restore_processor_state(struct saved_context *ctxt)
diff --git a/arch/x86/power/cpu_64.c b/arch/x86/power/cpu_64.c
index 1e3bdcc..46866a1 100644
--- a/arch/x86/power/cpu_64.c
+++ b/arch/x86/power/cpu_64.c
@@ -16,6 +16,7 @@
 #include <asm/mtrr.h>
 #include <asm/xcr.h>
 #include <asm/suspend.h>
+#include <asm/debugreg.h>
 
 static void fix_processor_context(void);
 
@@ -71,6 +72,7 @@ static void __save_processor_state(struct saved_context *ctxt)
 	ctxt->cr3 = read_cr3();
 	ctxt->cr4 = read_cr4();
 	ctxt->cr8 = read_cr8();
+	hw_breakpoint_disable();
 }
 
 void save_processor_state(void)
@@ -162,13 +164,5 @@ static void fix_processor_context(void)
 	/*
 	 * Now maybe reload the debug registers
 	 */
-	if (current->thread.debugreg7){
-		set_debugreg(current->thread.debugreg[0], 0);
-		set_debugreg(current->thread.debugreg[1], 1);
-		set_debugreg(current->thread.debugreg[2], 2);
-		set_debugreg(current->thread.debugreg[3], 3);
-                /* no 4 and 5 */
-                loaddebug(&current->thread, 6);
-                loaddebug(&current->thread, 7);
-	}
+	load_debug_registers();
 }
-- 
1.6.2.3


  parent reply	other threads:[~2009-06-02 22:45 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-02 22:43 [PATCH 00/12] hw-breakpoints: new hardware breakpoints API Frederic Weisbecker
2009-06-02 22:43 ` [PATCH 01/12] hw-breakpoints: prepare the code for Hardware Breakpoint interfaces Frederic Weisbecker
2009-06-02 22:43 ` [PATCH 02/12] hw-breakpoints: introducing generic hardware breakpoint handler interfaces Frederic Weisbecker
2009-06-02 22:43 ` [PATCH 03/12] hw-breakpoints: x86 architecture implementation of Hardware Breakpoint interfaces Frederic Weisbecker
2009-06-02 22:43 ` [PATCH 04/12] hw-breakpoints: modifying generic debug exception to use thread-specific debug registers Frederic Weisbecker
2009-06-02 22:43 ` Frederic Weisbecker [this message]
2009-06-02 22:43 ` [PATCH 06/12] hw-breakpoints: use the new wrapper routines to access debug registers in process/thread code Frederic Weisbecker
2009-06-02 22:43 ` [PATCH 07/12] hw-breakpoints: modify signal handling code to refrain from re-enabling HW Breakpoints Frederic Weisbecker
2009-06-02 22:43 ` [PATCH 08/12] hw-breakpoints: modify Ptrace routines to access breakpoint registers Frederic Weisbecker
2009-06-02 22:43 ` [PATCH 09/12] hw-breakpoints: cleanup HW Breakpoint registers before kexec Frederic Weisbecker
2009-06-02 22:43 ` [PATCH 10/12] hw-breakpoints: sample HW breakpoint over kernel data address Frederic Weisbecker
2009-06-02 22:43 ` [PATCH 11/12] hw-breakpoints: ftrace plugin for kernel symbol tracing using HW Breakpoint interfaces Frederic Weisbecker
2009-06-02 23:12   ` David Daney
2009-06-03  0:38     ` Frederic Weisbecker
2009-06-03 16:03       ` David Daney
2009-06-04 15:45       ` K.Prasad
2009-06-05 11:44         ` Frederic Weisbecker
2009-06-04 15:36     ` K.Prasad
2009-06-05 11:37       ` Frederic Weisbecker
2009-06-02 22:43 ` [PATCH 12/12] hw-breakpoints: reset bits in dr6 after the corresponding exception is handled Frederic Weisbecker
2009-06-02 23:38 ` [PATCH 00/12] hw-breakpoints: new hardware breakpoints API Ingo Molnar

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=1243982616-18212-6-git-send-email-fweisbec@gmail.com \
    --to=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=prasad@linux.vnet.ibm.com \
    --cc=rostedt@goodmis.org \
    --cc=stern@rowland.harvard.edu \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome