From: Frederic Weisbecker <fweisbec@gmail.com> To: LKML <linux-kernel@vger.kernel.org> Cc: LKML <linux-kernel@vger.kernel.org>, Frederic Weisbecker <fweisbec@gmail.com>, linuxppc-dev@lists.ozlabs.org, Ingo Molnar <mingo@elte.hu>, Peter Zijlstra <a.p.zijlstra@chello.nl>, Jason Wessel <jason.wessel@windriver.com>, "H. Peter Anvin" <hpa@zytor.com>, Thomas Gleixner <tglx@linutronix.de> Subject: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints Date: Tue, 24 May 2011 23:52:24 +0200 [thread overview] Message-ID: <1306273947-8410-4-git-send-email-fweisbec@gmail.com> (raw) In-Reply-To: <1306273947-8410-1-git-send-email-fweisbec@gmail.com> So that hw_breakpoints and perf can be not built on specific embedded systems. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Jason Wessel <jason.wessel@windriver.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Thomas Gleixner <tglx@linutronix.de> --- arch/x86/Kconfig | 3 +-- arch/x86/include/asm/debugreg.h | 33 +++++++++++++++++++++++++++++++-- arch/x86/kernel/Makefile | 3 ++- arch/x86/kernel/process.c | 1 + arch/x86/kernel/ptrace.c | 17 +++++++++++++++++ 5 files changed, 52 insertions(+), 5 deletions(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 8b49bff..fb28dd9 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -41,7 +41,7 @@ config X86 select HAVE_FTRACE_NMI_ENTER if DYNAMIC_FTRACE select HAVE_SYSCALL_TRACEPOINTS select HAVE_KVM - select HAVE_ARCH_KGDB + select HAVE_ARCH_KGDB if HW_BREAKPOINT select HAVE_ARCH_TRACEHOOK select HAVE_GENERIC_DMA_COHERENT if X86_32 select HAVE_EFFICIENT_UNALIGNED_ACCESS @@ -54,7 +54,6 @@ config X86 select HAVE_KERNEL_XZ select HAVE_KERNEL_LZO select HAVE_HW_BREAKPOINT - select HW_BREAKPOINT select HAVE_MIXED_BREAKPOINTS_REGS select PERF_EVENTS select HAVE_PERF_EVENTS_NMI diff --git a/arch/x86/include/asm/debugreg.h b/arch/x86/include/asm/debugreg.h index 078ad0c..c40d6d4 100644 --- a/arch/x86/include/asm/debugreg.h +++ b/arch/x86/include/asm/debugreg.h @@ -78,8 +78,6 @@ */ #ifdef __KERNEL__ -DECLARE_PER_CPU(unsigned long, cpu_dr7); - static inline void hw_breakpoint_disable(void) { /* Zero the control register for HW Breakpoint */ @@ -92,6 +90,10 @@ static inline void hw_breakpoint_disable(void) set_debugreg(0UL, 3); } +#ifdef CONFIG_HW_BREAKPOINT + +DECLARE_PER_CPU(unsigned long, cpu_dr7); + static inline int hw_breakpoint_active(void) { return __this_cpu_read(cpu_dr7) & DR_GLOBAL_ENABLE_MASK; @@ -100,6 +102,33 @@ static inline int hw_breakpoint_active(void) extern void aout_dump_debugregs(struct user *dump); extern void hw_breakpoint_restore(void); +#else +static inline int hw_breakpoint_active(void) +{ + return 0; +} + +static inline void hw_breakpoint_restore(void) +{ + set_debugreg(0UL, 0); + set_debugreg(0UL, 1); + set_debugreg(0UL, 2); + set_debugreg(0UL, 3); + set_debugreg(current->thread.debugreg6, 6); + set_debugreg(0UL, 7); +} + +static inline void aout_dump_debugregs(struct user *dump) +{ + int i; + + for (i = 0; i < 6; i++) + dump->u_debugreg[i] = 0; + + dump->u_debugreg[6] = current->thread.debugreg6; + dump->u_debugreg[7] = 0; +} +#endif /* CONFIG_HW_BREAKPOINT */ #endif /* __KERNEL__ */ diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index 7338ef2..270e439 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -42,7 +42,7 @@ obj-$(CONFIG_X86_64) += sys_x86_64.o x8664_ksyms_64.o obj-$(CONFIG_X86_64) += syscall_64.o vsyscall_64.o obj-y += bootflag.o e820.o obj-y += pci-dma.o quirks.o topology.o kdebugfs.o -obj-y += alternative.o i8253.o pci-nommu.o hw_breakpoint.o +obj-y += alternative.o i8253.o pci-nommu.o obj-y += tsc.o io_delay.o rtc.o obj-y += pci-iommu_table.o obj-y += resource.o @@ -51,6 +51,7 @@ obj-y += trampoline.o trampoline_$(BITS).o obj-y += process.o obj-y += i387.o xsave.o obj-y += ptrace.o +obj-$(CONFIG_HW_BREAKPOINT) += hw_breakpoint.o obj-$(CONFIG_X86_32) += tls.o obj-$(CONFIG_IA32_EMULATION) += tls.o obj-y += step.o diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index d46cbe4..d1adbd1 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -22,6 +22,7 @@ #include <asm/uaccess.h> #include <asm/i387.h> #include <asm/debugreg.h> +#include <asm/kdebug.h> struct kmem_cache *task_xstate_cachep; EXPORT_SYMBOL_GPL(task_xstate_cachep); diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index f65e5b5..091f110c 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c @@ -528,6 +528,7 @@ static int genregs_set(struct task_struct *target, return ret; } +#ifdef CONFIG_HW_BREAKPOINT static void ptrace_triggered(struct perf_event *bp, int nmi, struct perf_sample_data *data, struct pt_regs *regs) @@ -777,6 +778,22 @@ ret_path: return rc; } +#else /* !CONFIG_HW_BREAKPOINT */ + +static inline unsigned long +ptrace_get_debugreg(struct task_struct *tsk, int n) +{ + return -ENOSYS; +} + +static inline +int ptrace_set_debugreg(struct task_struct *tsk, int n, unsigned long val) +{ + return -ENOSYS; +} + +#endif /* CONFIG_HW_BREAKPOINT */ + /* * These access the current or another (stopped) task's io permission * bitmap for debugging or core dump. -- 1.7.3.2
WARNING: multiple messages have this Message-ID (diff)
From: Frederic Weisbecker <fweisbec@gmail.com> To: LKML <linux-kernel@vger.kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>, Frederic Weisbecker <fweisbec@gmail.com>, "H. Peter Anvin" <hpa@zytor.com>, LKML <linux-kernel@vger.kernel.org>, Jason Wessel <jason.wessel@windriver.com>, Ingo Molnar <mingo@elte.hu>, linuxppc-dev@lists.ozlabs.org, Thomas Gleixner <tglx@linutronix.de> Subject: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints Date: Tue, 24 May 2011 23:52:24 +0200 [thread overview] Message-ID: <1306273947-8410-4-git-send-email-fweisbec@gmail.com> (raw) In-Reply-To: <1306273947-8410-1-git-send-email-fweisbec@gmail.com> So that hw_breakpoints and perf can be not built on specific embedded systems. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Jason Wessel <jason.wessel@windriver.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Thomas Gleixner <tglx@linutronix.de> --- arch/x86/Kconfig | 3 +-- arch/x86/include/asm/debugreg.h | 33 +++++++++++++++++++++++++++++++-- arch/x86/kernel/Makefile | 3 ++- arch/x86/kernel/process.c | 1 + arch/x86/kernel/ptrace.c | 17 +++++++++++++++++ 5 files changed, 52 insertions(+), 5 deletions(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 8b49bff..fb28dd9 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -41,7 +41,7 @@ config X86 select HAVE_FTRACE_NMI_ENTER if DYNAMIC_FTRACE select HAVE_SYSCALL_TRACEPOINTS select HAVE_KVM - select HAVE_ARCH_KGDB + select HAVE_ARCH_KGDB if HW_BREAKPOINT select HAVE_ARCH_TRACEHOOK select HAVE_GENERIC_DMA_COHERENT if X86_32 select HAVE_EFFICIENT_UNALIGNED_ACCESS @@ -54,7 +54,6 @@ config X86 select HAVE_KERNEL_XZ select HAVE_KERNEL_LZO select HAVE_HW_BREAKPOINT - select HW_BREAKPOINT select HAVE_MIXED_BREAKPOINTS_REGS select PERF_EVENTS select HAVE_PERF_EVENTS_NMI diff --git a/arch/x86/include/asm/debugreg.h b/arch/x86/include/asm/debugreg.h index 078ad0c..c40d6d4 100644 --- a/arch/x86/include/asm/debugreg.h +++ b/arch/x86/include/asm/debugreg.h @@ -78,8 +78,6 @@ */ #ifdef __KERNEL__ -DECLARE_PER_CPU(unsigned long, cpu_dr7); - static inline void hw_breakpoint_disable(void) { /* Zero the control register for HW Breakpoint */ @@ -92,6 +90,10 @@ static inline void hw_breakpoint_disable(void) set_debugreg(0UL, 3); } +#ifdef CONFIG_HW_BREAKPOINT + +DECLARE_PER_CPU(unsigned long, cpu_dr7); + static inline int hw_breakpoint_active(void) { return __this_cpu_read(cpu_dr7) & DR_GLOBAL_ENABLE_MASK; @@ -100,6 +102,33 @@ static inline int hw_breakpoint_active(void) extern void aout_dump_debugregs(struct user *dump); extern void hw_breakpoint_restore(void); +#else +static inline int hw_breakpoint_active(void) +{ + return 0; +} + +static inline void hw_breakpoint_restore(void) +{ + set_debugreg(0UL, 0); + set_debugreg(0UL, 1); + set_debugreg(0UL, 2); + set_debugreg(0UL, 3); + set_debugreg(current->thread.debugreg6, 6); + set_debugreg(0UL, 7); +} + +static inline void aout_dump_debugregs(struct user *dump) +{ + int i; + + for (i = 0; i < 6; i++) + dump->u_debugreg[i] = 0; + + dump->u_debugreg[6] = current->thread.debugreg6; + dump->u_debugreg[7] = 0; +} +#endif /* CONFIG_HW_BREAKPOINT */ #endif /* __KERNEL__ */ diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index 7338ef2..270e439 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -42,7 +42,7 @@ obj-$(CONFIG_X86_64) += sys_x86_64.o x8664_ksyms_64.o obj-$(CONFIG_X86_64) += syscall_64.o vsyscall_64.o obj-y += bootflag.o e820.o obj-y += pci-dma.o quirks.o topology.o kdebugfs.o -obj-y += alternative.o i8253.o pci-nommu.o hw_breakpoint.o +obj-y += alternative.o i8253.o pci-nommu.o obj-y += tsc.o io_delay.o rtc.o obj-y += pci-iommu_table.o obj-y += resource.o @@ -51,6 +51,7 @@ obj-y += trampoline.o trampoline_$(BITS).o obj-y += process.o obj-y += i387.o xsave.o obj-y += ptrace.o +obj-$(CONFIG_HW_BREAKPOINT) += hw_breakpoint.o obj-$(CONFIG_X86_32) += tls.o obj-$(CONFIG_IA32_EMULATION) += tls.o obj-y += step.o diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index d46cbe4..d1adbd1 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -22,6 +22,7 @@ #include <asm/uaccess.h> #include <asm/i387.h> #include <asm/debugreg.h> +#include <asm/kdebug.h> struct kmem_cache *task_xstate_cachep; EXPORT_SYMBOL_GPL(task_xstate_cachep); diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index f65e5b5..091f110c 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c @@ -528,6 +528,7 @@ static int genregs_set(struct task_struct *target, return ret; } +#ifdef CONFIG_HW_BREAKPOINT static void ptrace_triggered(struct perf_event *bp, int nmi, struct perf_sample_data *data, struct pt_regs *regs) @@ -777,6 +778,22 @@ ret_path: return rc; } +#else /* !CONFIG_HW_BREAKPOINT */ + +static inline unsigned long +ptrace_get_debugreg(struct task_struct *tsk, int n) +{ + return -ENOSYS; +} + +static inline +int ptrace_set_debugreg(struct task_struct *tsk, int n, unsigned long val) +{ + return -ENOSYS; +} + +#endif /* CONFIG_HW_BREAKPOINT */ + /* * These access the current or another (stopped) task's io permission * bitmap for debugging or core dump. -- 1.7.3.2
next prev parent reply other threads:[~2011-05-24 21:52 UTC|newest] Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top 2011-05-24 21:52 [PATCH v2] hw_breakpoint: Let the user choose not to build it (and perf too) Frederic Weisbecker 2011-05-24 21:52 ` Frederic Weisbecker 2011-05-24 21:52 ` [PATCH 1/6] hw_breakpoints: Split hardware breakpoints config Frederic Weisbecker 2011-05-24 21:52 ` Frederic Weisbecker 2011-05-24 21:52 ` [PATCH 2/6] hw_breakpoints: Migrate breakpoint conditional build under new config Frederic Weisbecker 2011-05-24 21:52 ` Frederic Weisbecker 2011-07-04 13:27 ` K.Prasad 2011-07-04 13:27 ` K.Prasad 2011-07-04 13:29 ` Frederic Weisbecker 2011-07-04 13:29 ` Frederic Weisbecker 2011-07-04 17:44 ` K.Prasad 2011-07-05 13:49 ` Frederic Weisbecker 2011-05-24 21:52 ` Frederic Weisbecker [this message] 2011-05-24 21:52 ` [PATCH 3/6] x86: Allow the user not to build hw_breakpoints Frederic Weisbecker 2011-05-24 21:52 ` [PATCH 4/6] hw_breakpoints: Breakpoints arch ability don't need perf events Frederic Weisbecker 2011-05-24 21:52 ` Frederic Weisbecker 2011-07-04 13:32 ` K.Prasad 2011-07-04 13:32 ` K.Prasad 2011-07-04 13:37 ` Frederic Weisbecker 2011-07-04 13:37 ` Frederic Weisbecker 2011-05-24 21:52 ` [PATCH 5/6] hw_breakpoints: Only force perf events if breakpoints are selected Frederic Weisbecker 2011-05-24 21:52 ` Frederic Weisbecker 2011-05-24 21:52 ` [PATCH 6/6] hw_breakpoints: Drop remaining misplaced dependency on perf Frederic Weisbecker 2011-05-24 21:52 ` Frederic Weisbecker 2011-05-25 2:27 ` [PATCH v2] hw_breakpoint: Let the user choose not to build it (and perf too) Paul Mundt 2011-05-25 2:27 ` Paul Mundt -- strict thread matches above, loose matches on Subject: below -- 2011-07-14 15:03 [GIT PULL] hw_breakpoints updates Frederic Weisbecker 2011-07-14 15:03 ` [PATCH 3/6] x86: Allow the user not to build hw_breakpoints Frederic Weisbecker 2011-07-14 21:26 ` H. Peter Anvin 2011-07-14 21:51 ` Frederic Weisbecker 2011-07-21 7:26 ` Ingo Molnar 2011-07-21 12:36 ` Peter Zijlstra 2011-07-21 13:03 ` Frederic Weisbecker 2011-04-27 16:59 [PATCH 0/6] hw_breakpoint: Let the user choose not to build it (and perf too) Frederic Weisbecker 2011-04-27 16:59 ` [PATCH 3/6] x86: Allow the user not to build hw_breakpoints Frederic Weisbecker 2011-04-27 17:38 ` H. Peter Anvin 2011-04-27 18:26 ` Frederic Weisbecker 2011-04-27 19:10 ` Michael Bohan [not found] ` <008d59a3-bd23-4cb3-8a73-1640137e3ac4@email.android.com> 2011-04-27 19:50 ` Frederic Weisbecker 2011-05-03 15:35 ` H. Peter Anvin 2011-05-03 23:12 ` Frederic Weisbecker 2011-05-03 23:40 ` H. Peter Anvin 2011-05-03 23:54 ` Frederic Weisbecker 2011-05-03 23:56 ` H. Peter Anvin 2011-05-04 0:13 ` Frederic Weisbecker
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=1306273947-8410-4-git-send-email-fweisbec@gmail.com \ --to=fweisbec@gmail.com \ --cc=a.p.zijlstra@chello.nl \ --cc=hpa@zytor.com \ --cc=jason.wessel@windriver.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=mingo@elte.hu \ --cc=tglx@linutronix.de \ /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: linkBe 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.