* [GIT PULL] hw_breakpoints updates
@ 2011-07-14 15:03 Frederic Weisbecker
2011-07-14 15:03 ` [PATCH 1/6] hw_breakpoints: Split hardware breakpoints config Frederic Weisbecker
` (5 more replies)
0 siblings, 6 replies; 24+ messages in thread
From: Frederic Weisbecker @ 2011-07-14 15:03 UTC (permalink / raw)
To: Ingo Molnar
Cc: LKML, Frederic Weisbecker, Will Deacon, Peter Zijlstra, Prasad,
Paul Mundt, Jason Wessel, H. Peter Anvin, Thomas Gleixner
Ingo,
Please pull the perf/breakpoint-v2 branch that can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing.git
perf/breakpoint-v2
This makes the breakpoints config optable and thus let users
be able to build x86 and sh without perf.
In that takes: more acks added and rebase against latest perf/core
and upstream changes.
Thanks,
Frederic
---
Frederic Weisbecker (6):
hw_breakpoints: Split hardware breakpoints config
hw_breakpoints: Migrate breakpoint conditional build under new config
x86: Allow the user not to build hw_breakpoints
hw_breakpoints: Breakpoints arch ability don't need perf events
hw_breakpoints: Only force perf events if breakpoints are selected
hw_breakpoints: Drop remaining misplaced dependency on perf
arch/Kconfig | 1 -
arch/arm/Kconfig | 2 +-
arch/arm/include/asm/hw_breakpoint.h | 4 +-
arch/arm/include/asm/processor.h | 2 +-
arch/arm/kernel/Makefile | 2 +-
arch/arm/kernel/entry-header.S | 2 +-
arch/arm/kernel/ptrace.c | 4 +-
arch/powerpc/Kconfig | 2 +-
arch/powerpc/include/asm/cputable.h | 4 +-
arch/powerpc/include/asm/hw_breakpoint.h | 6 ++--
arch/powerpc/include/asm/processor.h | 4 +-
arch/powerpc/kernel/Makefile | 2 +-
arch/powerpc/kernel/process.c | 18 ++++++++--------
arch/powerpc/kernel/ptrace.c | 13 ++++++-----
arch/powerpc/lib/Makefile | 2 +-
arch/sh/Kconfig | 2 +-
arch/sh/kernel/Makefile | 2 +-
arch/sh/kernel/cpu/sh4a/Makefile | 2 +-
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 +++++++++++++++
include/linux/hw_breakpoint.h | 6 ++--
include/linux/perf_event.h | 4 +-
include/linux/ptrace.h | 6 ++--
include/linux/sched.h | 2 +-
init/Kconfig | 11 ++++++++++
kernel/events/Makefile | 2 +-
kernel/events/core.c | 4 +-
kernel/ptrace.c | 4 +-
samples/Kconfig | 2 +-
32 files changed, 115 insertions(+), 57 deletions(-)
^ permalink raw reply [flat|nested] 24+ messages in thread* [PATCH 1/6] hw_breakpoints: Split hardware breakpoints config 2011-07-14 15:03 [GIT PULL] hw_breakpoints updates Frederic Weisbecker @ 2011-07-14 15:03 ` Frederic Weisbecker 2011-07-14 15:03 ` [PATCH 2/6] hw_breakpoints: Migrate breakpoint conditional build under new config Frederic Weisbecker ` (4 subsequent siblings) 5 siblings, 0 replies; 24+ messages in thread From: Frederic Weisbecker @ 2011-07-14 15:03 UTC (permalink / raw) To: Ingo Molnar Cc: LKML, Frederic Weisbecker, Peter Zijlstra, Will Deacon, Prasad The hardware breakpoint config is only made of an ability. An arch that support this feature selects HAVE_HW_BREAKPOINT. If so, the feature is definetly built-in, the user can't decide to turn it off. As hw_breakpoints depend on perf, it also makes perf a mandatory feature. The whole is quite a piece of code and may not be desired on some embedded systems. In order to prepare to make this optable by the user, split the config into the more traditional couple (ability, user choice) by providing a new HW_BREAKPOINT config. It is default on and depends on CONFIG_EXPERT because breakpoint ptrace requests are part of the usual user ABI. The user must know what he's doing before turning that off. For now, only the archs that already implemented a conditional HAVE_HW_BREAKPOINT can turn off HW_BREAKPOINT. x86 and sh have it always selected because they need more background work to support this new modularity. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Acked-by: Paul Mundt <lethal@linux-sh.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Will Deacon <will.deacon@arm.com> Cc: Prasad <prasad@linux.vnet.ibm.com> --- arch/sh/Kconfig | 1 + arch/x86/Kconfig | 1 + init/Kconfig | 10 ++++++++++ 3 files changed, 12 insertions(+), 0 deletions(-) diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index f03338c..0a59a82 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -44,6 +44,7 @@ config SUPERH32 select HAVE_FUNCTION_GRAPH_TRACER select HAVE_ARCH_KGDB select HAVE_HW_BREAKPOINT + select HW_BREAKPOINT select HAVE_MIXED_BREAKPOINTS_REGS select PERF_EVENTS select ARCH_HIBERNATION_POSSIBLE if MMU diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index da34972..ef3effd 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -53,6 +53,7 @@ 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/init/Kconfig b/init/Kconfig index 412c21b..9eec0df 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -923,6 +923,16 @@ menuconfig EXPERT environments which can tolerate a "non-standard" kernel. Only use this if you really know what you are doing. +config HW_BREAKPOINT + bool "Hardware breakpoints" if EXPERT + depends on HAVE_HW_BREAKPOINT + default y + help + Hardware breakpoints are a feature implemented by most CPUs + to trigger an event when an instruction or data fetch + matches a given pattern. This is typically used by ptrace + and perf events. + config UID16 bool "Enable 16-bit UID system calls" if EXPERT depends on ARM || BLACKFIN || CRIS || FRV || H8300 || X86_32 || M68K || (S390 && !64BIT) || SUPERH || SPARC32 || (SPARC64 && COMPAT) || UML || (X86_64 && IA32_EMULATION) -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 2/6] hw_breakpoints: Migrate breakpoint conditional build under new config 2011-07-14 15:03 [GIT PULL] hw_breakpoints updates Frederic Weisbecker 2011-07-14 15:03 ` [PATCH 1/6] hw_breakpoints: Split hardware breakpoints config Frederic Weisbecker @ 2011-07-14 15:03 ` Frederic Weisbecker 2011-07-14 15:03 ` [PATCH 3/6] x86: Allow the user not to build hw_breakpoints Frederic Weisbecker ` (3 subsequent siblings) 5 siblings, 0 replies; 24+ messages in thread From: Frederic Weisbecker @ 2011-07-14 15:03 UTC (permalink / raw) To: Ingo Molnar; +Cc: LKML, Frederic Weisbecker, Peter Zijlstra Migrate conditional hw_breakpoint code compilation under the new config to prepare for letting the user chose whether or not to build this feature Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Acked-by: Will Deacon <will.deacon@arm.com> Acked-by: Paul Mundt <lethal@linux-sh.org> Acked-by: Prasad <prasad@linux.vnet.ibm.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> --- arch/arm/include/asm/hw_breakpoint.h | 4 ++-- arch/arm/include/asm/processor.h | 2 +- arch/arm/kernel/Makefile | 2 +- arch/arm/kernel/entry-header.S | 2 +- arch/arm/kernel/ptrace.c | 4 ++-- arch/powerpc/include/asm/cputable.h | 4 ++-- arch/powerpc/include/asm/hw_breakpoint.h | 6 +++--- arch/powerpc/include/asm/processor.h | 4 ++-- arch/powerpc/kernel/Makefile | 2 +- arch/powerpc/kernel/process.c | 18 +++++++++--------- arch/powerpc/kernel/ptrace.c | 13 +++++++------ arch/powerpc/lib/Makefile | 2 +- arch/sh/kernel/Makefile | 2 +- arch/sh/kernel/cpu/sh4a/Makefile | 2 +- include/linux/hw_breakpoint.h | 6 +++--- include/linux/perf_event.h | 4 ++-- include/linux/ptrace.h | 6 +++--- include/linux/sched.h | 2 +- kernel/events/Makefile | 2 +- kernel/events/core.c | 4 ++-- kernel/ptrace.c | 4 ++-- samples/Kconfig | 2 +- 22 files changed, 49 insertions(+), 48 deletions(-) diff --git a/arch/arm/include/asm/hw_breakpoint.h b/arch/arm/include/asm/hw_breakpoint.h index f389b27..fc6ba18 100644 --- a/arch/arm/include/asm/hw_breakpoint.h +++ b/arch/arm/include/asm/hw_breakpoint.h @@ -5,7 +5,7 @@ struct task_struct; -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT struct arch_hw_breakpoint_ctrl { u32 __reserved : 9, @@ -128,6 +128,6 @@ int hw_breakpoint_slots(int type); #else static inline void clear_ptrace_hw_breakpoint(struct task_struct *tsk) {} -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ #endif /* __KERNEL__ */ #endif /* _ARM_HW_BREAKPOINT_H */ diff --git a/arch/arm/include/asm/processor.h b/arch/arm/include/asm/processor.h index b2d9df5..b86d135 100644 --- a/arch/arm/include/asm/processor.h +++ b/arch/arm/include/asm/processor.h @@ -30,7 +30,7 @@ #endif struct debug_info { -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT struct perf_event *hbp[ARM_MAX_HBP_SLOTS]; #endif }; diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index a5b31af..9aa1cfd 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile @@ -48,7 +48,7 @@ obj-$(CONFIG_OF) += devtree.o obj-$(CONFIG_CRASH_DUMP) += crash_dump.o obj-$(CONFIG_SWP_EMULATE) += swp_emulate.o CFLAGS_swp_emulate.o := -Wa,-march=armv7-a -obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o +obj-$(CONFIG_HW_BREAKPOINT) += hw_breakpoint.o obj-$(CONFIG_CRUNCH) += crunch.o crunch-bits.o AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312 diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S index 051166c..fbc7cc9 100644 --- a/arch/arm/kernel/entry-header.S +++ b/arch/arm/kernel/entry-header.S @@ -171,7 +171,7 @@ @ we can access the debug registers safely. @ .macro debug_entry, fsr -#if defined(CONFIG_HAVE_HW_BREAKPOINT) && defined(CONFIG_PREEMPT) +#if defined(CONFIG_HW_BREAKPOINT) && defined(CONFIG_PREEMPT) ldr r4, =0x40f @ mask out fsr.fs and r5, r4, \fsr cmp r5, #2 @ debug exception diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c index 5c19961..e3b1fa5 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c @@ -367,7 +367,7 @@ static int ptrace_setcrunchregs(struct task_struct *tsk, void __user *ufp) } #endif -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT /* * Convert a virtual register number into an index for a thread_info * breakpoint array. Breakpoints are identified using positive numbers @@ -896,7 +896,7 @@ long arch_ptrace(struct task_struct *child, long request, break; #endif -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT case PTRACE_GETHBPREGS: if (ptrace_get_breakpoints(child) < 0) return -ESRCH; diff --git a/arch/powerpc/include/asm/cputable.h b/arch/powerpc/include/asm/cputable.h index c0d842c..d99d7c6 100644 --- a/arch/powerpc/include/asm/cputable.h +++ b/arch/powerpc/include/asm/cputable.h @@ -539,9 +539,9 @@ static inline int cpu_has_feature(unsigned long feature) & feature); } -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT #define HBP_NUM 1 -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ #endif /* !__ASSEMBLY__ */ diff --git a/arch/powerpc/include/asm/hw_breakpoint.h b/arch/powerpc/include/asm/hw_breakpoint.h index 80fd4d2..5a6c14e 100644 --- a/arch/powerpc/include/asm/hw_breakpoint.h +++ b/arch/powerpc/include/asm/hw_breakpoint.h @@ -24,7 +24,7 @@ #define _PPC_BOOK3S_64_HW_BREAKPOINT_H #ifdef __KERNEL__ -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT struct arch_hw_breakpoint { bool extraneous_interrupt; @@ -65,10 +65,10 @@ static inline void hw_breakpoint_disable(void) } extern void thread_change_pc(struct task_struct *tsk, struct pt_regs *regs); -#else /* CONFIG_HAVE_HW_BREAKPOINT */ +#else /* CONFIG_HW_BREAKPOINT */ static inline void hw_breakpoint_disable(void) { } static inline void thread_change_pc(struct task_struct *tsk, struct pt_regs *regs) { } -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ #endif /* __KERNEL__ */ #endif /* _PPC_BOOK3S_64_HW_BREAKPOINT_H */ diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h index d50c2b6..211c2ca 100644 --- a/arch/powerpc/include/asm/processor.h +++ b/arch/powerpc/include/asm/processor.h @@ -207,14 +207,14 @@ struct thread_struct { #ifdef CONFIG_PPC64 unsigned long start_tb; /* Start purr when proc switched in */ unsigned long accum_tb; /* Total accumilated purr for process */ -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT struct perf_event *ptrace_bps[HBP_NUM]; /* * Helps identify source of single-step exception and subsequent * hw-breakpoint enablement */ struct perf_event *last_hit_ubp; -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ #endif unsigned long dabr; /* Data address breakpoint register */ #ifdef CONFIG_ALTIVEC diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index e8b9818..2cca854 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -36,7 +36,7 @@ obj-y := cputable.o ptrace.o syscalls.o \ obj-$(CONFIG_PPC64) += setup_64.o sys_ppc32.o \ signal_64.o ptrace32.o \ paca.o nvram_64.o firmware.o -obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o +obj-$(CONFIG_HW_BREAKPOINT) += hw_breakpoint.o obj-$(CONFIG_PPC_BOOK3S_64) += cpu_setup_ppc970.o cpu_setup_pa6t.o obj-$(CONFIG_PPC_BOOK3S_64) += cpu_setup_power7.o obj64-$(CONFIG_RELOCATABLE) += reloc_64.o diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 91e52df..e63fa89 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c @@ -353,7 +353,7 @@ static void switch_booke_debug_regs(struct thread_struct *new_thread) prime_debug_regs(new_thread); } #else /* !CONFIG_PPC_ADV_DEBUG_REGS */ -#ifndef CONFIG_HAVE_HW_BREAKPOINT +#ifndef CONFIG_HW_BREAKPOINT static void set_debug_reg_defaults(struct thread_struct *thread) { if (thread->dabr) { @@ -361,7 +361,7 @@ static void set_debug_reg_defaults(struct thread_struct *thread) set_dabr(0); } } -#endif /* !CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* !CONFIG_HW_BREAKPOINT */ #endif /* CONFIG_PPC_ADV_DEBUG_REGS */ int set_dabr(unsigned long dabr) @@ -472,10 +472,10 @@ struct task_struct *__switch_to(struct task_struct *prev, * For PPC_BOOK3S_64, we use the hw-breakpoint interfaces that would * schedule DABR */ -#ifndef CONFIG_HAVE_HW_BREAKPOINT +#ifndef CONFIG_HW_BREAKPOINT if (unlikely(__get_cpu_var(current_dabr) != new->thread.dabr)) set_dabr(new->thread.dabr); -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ #endif @@ -693,11 +693,11 @@ void flush_thread(void) { discard_lazy_cpu_state(); -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT flush_ptrace_hw_breakpoint(current); -#else /* CONFIG_HAVE_HW_BREAKPOINT */ +#else /* CONFIG_HW_BREAKPOINT */ set_debug_reg_defaults(¤t->thread); -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ } void @@ -715,9 +715,9 @@ void prepare_to_copy(struct task_struct *tsk) flush_altivec_to_thread(current); flush_vsx_to_thread(current); flush_spe_to_thread(current); -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT flush_ptrace_hw_breakpoint(tsk); -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ } /* diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c index 05b7dd2..dc36416 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c @@ -881,7 +881,7 @@ void user_disable_single_step(struct task_struct *task) clear_tsk_thread_flag(task, TIF_SINGLESTEP); } -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT void ptrace_triggered(struct perf_event *bp, struct perf_sample_data *data, struct pt_regs *regs) { @@ -897,17 +897,17 @@ void ptrace_triggered(struct perf_event *bp, attr.disabled = true; modify_user_hw_breakpoint(bp, &attr); } -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ int ptrace_set_debugreg(struct task_struct *task, unsigned long addr, unsigned long data) { -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT int ret; struct thread_struct *thread = &(task->thread); struct perf_event *bp; struct perf_event_attr attr; -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ /* For ppc64 we support one DABR and no IABR's at the moment (ppc64). * For embedded processors we support one DAC and no IAC's at the @@ -936,7 +936,8 @@ int ptrace_set_debugreg(struct task_struct *task, unsigned long addr, /* Ensure breakpoint translation bit is set */ if (data && !(data & DABR_TRANSLATION)) return -EIO; -#ifdef CONFIG_HAVE_HW_BREAKPOINT + +#ifdef CONFIG_HW_BREAKPOINT if (ptrace_get_breakpoints(task) < 0) return -ESRCH; @@ -982,7 +983,7 @@ int ptrace_set_debugreg(struct task_struct *task, unsigned long addr, ptrace_put_breakpoints(task); -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ /* Move contents to the DABR register */ task->thread.dabr = data; diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index 166a6a0..515d044 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile @@ -19,7 +19,7 @@ obj-$(CONFIG_PPC64) += copypage_64.o copyuser_64.o \ checksum_wrappers_64.o hweight_64.o obj-$(CONFIG_XMON) += sstep.o ldstfp.o obj-$(CONFIG_KPROBES) += sstep.o ldstfp.o -obj-$(CONFIG_HAVE_HW_BREAKPOINT) += sstep.o ldstfp.o +obj-$(CONFIG_HW_BREAKPOINT) += sstep.o ldstfp.o ifeq ($(CONFIG_PPC64),y) obj-$(CONFIG_SMP) += locks.o diff --git a/arch/sh/kernel/Makefile b/arch/sh/kernel/Makefile index 77f7ae1..9d5075c 100644 --- a/arch/sh/kernel/Makefile +++ b/arch/sh/kernel/Makefile @@ -45,7 +45,7 @@ obj-$(CONFIG_HIBERNATION) += swsusp.o obj-$(CONFIG_DWARF_UNWINDER) += dwarf.o obj-$(CONFIG_PERF_EVENTS) += perf_event.o perf_callchain.o -obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o +obj-$(CONFIG_HW_BREAKPOINT) += hw_breakpoint.o obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) += localtimer.o ccflags-y := -Werror diff --git a/arch/sh/kernel/cpu/sh4a/Makefile b/arch/sh/kernel/cpu/sh4a/Makefile index cc122b1..5bec639 100644 --- a/arch/sh/kernel/cpu/sh4a/Makefile +++ b/arch/sh/kernel/cpu/sh4a/Makefile @@ -46,4 +46,4 @@ obj-y += $(clock-y) obj-$(CONFIG_SMP) += $(smp-y) obj-$(CONFIG_GENERIC_GPIO) += $(pinmux-y) obj-$(CONFIG_PERF_EVENTS) += perf_event.o -obj-$(CONFIG_HAVE_HW_BREAKPOINT) += ubc.o +obj-$(CONFIG_HW_BREAKPOINT) += ubc.o diff --git a/include/linux/hw_breakpoint.h b/include/linux/hw_breakpoint.h index 6ae9c63..2b118e0 100644 --- a/include/linux/hw_breakpoint.h +++ b/include/linux/hw_breakpoint.h @@ -31,7 +31,7 @@ enum bp_type_idx { #include <linux/perf_event.h> -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT extern int __init init_hw_breakpoint(void); @@ -111,7 +111,7 @@ static inline struct arch_hw_breakpoint *counter_arch_bp(struct perf_event *bp) return &bp->hw.info; } -#else /* !CONFIG_HAVE_HW_BREAKPOINT */ +#else /* !CONFIG_HW_BREAKPOINT */ static inline int __init init_hw_breakpoint(void) { return 0; } @@ -150,7 +150,7 @@ static inline struct arch_hw_breakpoint *counter_arch_bp(struct perf_event *bp) return NULL; } -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ #endif /* __KERNEL__ */ #endif /* _LINUX_HW_BREAKPOINT_H */ diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 3f2711c..9e432a9 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -492,7 +492,7 @@ struct perf_guest_info_callbacks { unsigned long (*get_guest_ip)(void); }; -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT #include <asm/hw_breakpoint.h> #endif @@ -565,7 +565,7 @@ struct hw_perf_event { struct { /* software */ struct hrtimer hrtimer; }; -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT struct { /* breakpoint */ struct arch_hw_breakpoint info; struct list_head bp_list; diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h index 9178d5c..9ff2641 100644 --- a/include/linux/ptrace.h +++ b/include/linux/ptrace.h @@ -190,7 +190,7 @@ static inline void ptrace_init_task(struct task_struct *child, bool ptrace) __ptrace_link(child, current->parent); } -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT atomic_set(&child->ptrace_bp_refcnt, 1); #endif } @@ -354,12 +354,12 @@ extern int task_current_syscall(struct task_struct *target, long *callno, unsigned long args[6], unsigned int maxargs, unsigned long *sp, unsigned long *pc); -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT extern int ptrace_get_breakpoints(struct task_struct *tsk); extern void ptrace_put_breakpoints(struct task_struct *tsk); #else static inline void ptrace_put_breakpoints(struct task_struct *tsk) { } -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ #endif /* __KERNEL */ diff --git a/include/linux/sched.h b/include/linux/sched.h index a837b20..3c05d7e 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1558,7 +1558,7 @@ struct task_struct { unsigned long memsw_nr_pages; /* uncharged mem+swap usage */ } memcg_batch; #endif -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT atomic_t ptrace_bp_refcnt; #endif }; diff --git a/kernel/events/Makefile b/kernel/events/Makefile index 89e5e8a..922bd6e 100644 --- a/kernel/events/Makefile +++ b/kernel/events/Makefile @@ -3,4 +3,4 @@ CFLAGS_REMOVE_core.o = -pg endif obj-y := core.o ring_buffer.o -obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o +obj-$(CONFIG_HW_BREAKPOINT) += hw_breakpoint.o \ No newline at end of file diff --git a/kernel/events/core.c b/kernel/events/core.c index 0567e32..48b5f8f 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -5202,7 +5202,7 @@ static void perf_event_free_filter(struct perf_event *event) #endif /* CONFIG_EVENT_TRACING */ -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT void perf_bp_event(struct perf_event *bp, void *data) { struct perf_sample_data sample; @@ -5796,7 +5796,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu, if (task) { event->attach_state = PERF_ATTACH_TASK; -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT /* * hw_breakpoint is a bit difficult here.. */ diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 2df1157..e283010 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c @@ -925,7 +925,7 @@ asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid, } #endif /* CONFIG_COMPAT */ -#ifdef CONFIG_HAVE_HW_BREAKPOINT +#ifdef CONFIG_HW_BREAKPOINT int ptrace_get_breakpoints(struct task_struct *tsk) { if (atomic_inc_not_zero(&tsk->ptrace_bp_refcnt)) @@ -939,4 +939,4 @@ void ptrace_put_breakpoints(struct task_struct *tsk) if (atomic_dec_and_test(&tsk->ptrace_bp_refcnt)) flush_ptrace_hw_breakpoint(tsk); } -#endif /* CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_HW_BREAKPOINT */ diff --git a/samples/Kconfig b/samples/Kconfig index 96a7572..56b0320 100644 --- a/samples/Kconfig +++ b/samples/Kconfig @@ -40,7 +40,7 @@ config SAMPLE_KRETPROBES config SAMPLE_HW_BREAKPOINT tristate "Build kernel hardware breakpoint examples -- loadable module only" - depends on HAVE_HW_BREAKPOINT && m + depends on HW_BREAKPOINT && m help This builds kernel hardware breakpoint example modules. -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 2011-07-14 15:03 [GIT PULL] hw_breakpoints updates Frederic Weisbecker 2011-07-14 15:03 ` [PATCH 1/6] hw_breakpoints: Split hardware breakpoints config Frederic Weisbecker 2011-07-14 15:03 ` [PATCH 2/6] hw_breakpoints: Migrate breakpoint conditional build under new config Frederic Weisbecker @ 2011-07-14 15:03 ` Frederic Weisbecker 2011-07-14 21:26 ` H. Peter Anvin 2011-07-14 15:03 ` [PATCH 4/6] hw_breakpoints: Breakpoints arch ability don't need perf events Frederic Weisbecker ` (2 subsequent siblings) 5 siblings, 1 reply; 24+ messages in thread From: Frederic Weisbecker @ 2011-07-14 15:03 UTC (permalink / raw) To: Ingo Molnar Cc: LKML, Frederic Weisbecker, Peter Zijlstra, Jason Wessel, H. Peter Anvin, Thomas Gleixner 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 ef3effd..d7a255d 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -40,7 +40,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 @@ -53,7 +53,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 90b06d4..1134d15 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -46,7 +46,7 @@ obj-$(CONFIG_X86_64) += sys_x86_64.o x8664_ksyms_64.o obj-$(CONFIG_X86_64) += syscall_64.o vsyscall_64.o vread_tsc_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 @@ -55,6 +55,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 e1ba8cb..0989a18 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 8252879..6e619f2 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, struct perf_sample_data *data, struct pt_regs *regs) @@ -778,6 +779,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.5.4 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 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 0 siblings, 2 replies; 24+ messages in thread From: H. Peter Anvin @ 2011-07-14 21:26 UTC (permalink / raw) To: Frederic Weisbecker Cc: Ingo Molnar, LKML, Peter Zijlstra, Jason Wessel, Thomas Gleixner On 07/14/2011 08:03 AM, Frederic Weisbecker wrote: > So that hw_breakpoints and perf can be not built on > specific embedded systems. I want to emphasize I am very, very unhappy about this. It should be possible to not build perf while still have breakpoints available... breakpoints are way more important than perf. -hpa ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 2011-07-14 21:26 ` H. Peter Anvin @ 2011-07-14 21:51 ` Frederic Weisbecker 2011-07-21 7:26 ` Ingo Molnar 1 sibling, 0 replies; 24+ messages in thread From: Frederic Weisbecker @ 2011-07-14 21:51 UTC (permalink / raw) To: H. Peter Anvin Cc: Ingo Molnar, LKML, Peter Zijlstra, Jason Wessel, Thomas Gleixner On Thu, Jul 14, 2011 at 02:26:11PM -0700, H. Peter Anvin wrote: > On 07/14/2011 08:03 AM, Frederic Weisbecker wrote: > > So that hw_breakpoints and perf can be not built on > > specific embedded systems. > > I want to emphasize I am very, very unhappy about this. It should be > possible to not build perf while still have breakpoints available... > breakpoints are way more important than perf. I know and that's a long term goal. I believe Will Deacon is currently working on breakpoints to avoid archs to translate ptrace user arch input into perf generic information (which afterward is eventually translated back to arch information). This is a necessary first step to have a ptrace breakpoint implementation independant of perf. Once we'll have that and all archs are converted to that new mode, we can work toward having breakpoints not requiring perf to work. Until we reach that point, it's still nice to have optable breakpoints. I think it is a desired feature given the feedbacks I get from Prasad for example. If that makes it possible to try a kernel without perf in x86, good too. But this is not intended to be a solution of the breakpoint - perf dependency. That dependency was a design mistake that needs more to be fixed. We want to be able to have breakpoints without perf in the end. This just requires deeper and longer term work that is currently in progress. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 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 1 sibling, 2 replies; 24+ messages in thread From: Ingo Molnar @ 2011-07-21 7:26 UTC (permalink / raw) To: H. Peter Anvin Cc: Frederic Weisbecker, LKML, Peter Zijlstra, Jason Wessel, Thomas Gleixner * H. Peter Anvin <hpa@zytor.com> wrote: > On 07/14/2011 08:03 AM, Frederic Weisbecker wrote: > > So that hw_breakpoints and perf can be not built on > > specific embedded systems. > > I want to emphasize I am very, very unhappy about this. It should > be possible to not build perf while still have breakpoints > available... breakpoints are way more important than perf. What we could indeed do is to separate out a 'core perf' portion that is necessary for hw-breakpoints to work fine, thus allowing for example the PMU drivers to be disabled. Otherwise we have expressed hw breakpoint APIs via perf events and that model is working well. Making hw-breakpoints a separate subsystem again with isolated (and partly duplicated) infrastructure would be a step back really. Thanks, Ingo ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 2011-07-21 7:26 ` Ingo Molnar @ 2011-07-21 12:36 ` Peter Zijlstra 2011-07-21 13:03 ` Frederic Weisbecker 1 sibling, 0 replies; 24+ messages in thread From: Peter Zijlstra @ 2011-07-21 12:36 UTC (permalink / raw) To: Ingo Molnar Cc: H. Peter Anvin, Frederic Weisbecker, LKML, Jason Wessel, Thomas Gleixner On Thu, 2011-07-21 at 09:26 +0200, Ingo Molnar wrote: > Otherwise we have expressed hw breakpoint APIs via perf events and > that model is working well. Its working, maybe, working well is pushing it. The whole breakpoint muck is a horrid mess, it side-steps all of the resource scheduling stuff of perf and does it itself. Now part of that is because ptrace requires it, but whichever way you look at it its damn ugly. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 2011-07-21 7:26 ` Ingo Molnar 2011-07-21 12:36 ` Peter Zijlstra @ 2011-07-21 13:03 ` Frederic Weisbecker 1 sibling, 0 replies; 24+ messages in thread From: Frederic Weisbecker @ 2011-07-21 13:03 UTC (permalink / raw) To: Ingo Molnar Cc: H. Peter Anvin, LKML, Peter Zijlstra, Jason Wessel, Thomas Gleixner, Prasad, Will Deacon, Paul Mundt On Thu, Jul 21, 2011 at 09:26:56AM +0200, Ingo Molnar wrote: > > * H. Peter Anvin <hpa@zytor.com> wrote: > > > On 07/14/2011 08:03 AM, Frederic Weisbecker wrote: > > > So that hw_breakpoints and perf can be not built on > > > specific embedded systems. > > > > I want to emphasize I am very, very unhappy about this. It should > > be possible to not build perf while still have breakpoints > > available... breakpoints are way more important than perf. > > What we could indeed do is to separate out a 'core perf' portion that > is necessary for hw-breakpoints to work fine, thus allowing for > example the PMU drivers to be disabled. That would still require a big chunk of perf. > > Otherwise we have expressed hw breakpoint APIs via perf events and > that model is working well. Making hw-breakpoints a separate > subsystem again with isolated (and partly duplicated) infrastructure > would be a step back really. I actually don't think it's working well. What we have with the current design is the dependency to perf as a big midlayer that is apparently convenient but actually induce some nasty things. Just look how we need those ptrace_get_breakpoints() protection to deal with perf exit path implementation for example. Or the need for archs to translate arch ptrace breakpoint info into generic perf attrs. I think we had to try the current design just to see if that could plug nicely. But now that we have this for several releases, I can only conclude that we should revert back to the design Prasad proposed, consisting in having breakpoints a service used by perf but not the opposite. For ptrace, all it takes is a generic hook in the preempt notifiers to activate/deactivate breakpoints. I much prefer that to a big dependency on a perf core midlayer. ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH 4/6] hw_breakpoints: Breakpoints arch ability don't need perf events 2011-07-14 15:03 [GIT PULL] hw_breakpoints updates Frederic Weisbecker ` (2 preceding siblings ...) 2011-07-14 15:03 ` [PATCH 3/6] x86: Allow the user not to build hw_breakpoints Frederic Weisbecker @ 2011-07-14 15:03 ` Frederic Weisbecker 2011-07-14 15:03 ` [PATCH 5/6] hw_breakpoints: Only force perf events if breakpoints are selected Frederic Weisbecker 2011-07-14 15:03 ` [PATCH 6/6] hw_breakpoints: Drop remaining misplaced dependency on perf Frederic Weisbecker 5 siblings, 0 replies; 24+ messages in thread From: Frederic Weisbecker @ 2011-07-14 15:03 UTC (permalink / raw) To: Ingo Molnar Cc: LKML, Frederic Weisbecker, Peter Zijlstra, Will Deacon, Prasad The breakpoint support ability in an arch is not related to the fact perf events is built or not. HAVE_HW_BREAKPOINT only shows an ability so this dependency makes no sense anymore. Archs that select HAVE_HW_BREAKPOINT already ensure that perf event is built. Remove that dependency. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Acked-by: Paul Mundt <lethal@linux-sh.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Will Deacon <will.deacon@arm.com> Cc: Prasad <prasad@linux.vnet.ibm.com> --- arch/Kconfig | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/arch/Kconfig b/arch/Kconfig index 26b0e23..341ac95 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -146,7 +146,6 @@ config HAVE_DMA_API_DEBUG config HAVE_HW_BREAKPOINT bool - depends on PERF_EVENTS config HAVE_MIXED_BREAKPOINTS_REGS bool -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 5/6] hw_breakpoints: Only force perf events if breakpoints are selected 2011-07-14 15:03 [GIT PULL] hw_breakpoints updates Frederic Weisbecker ` (3 preceding siblings ...) 2011-07-14 15:03 ` [PATCH 4/6] hw_breakpoints: Breakpoints arch ability don't need perf events Frederic Weisbecker @ 2011-07-14 15:03 ` Frederic Weisbecker 2011-07-14 15:03 ` [PATCH 6/6] hw_breakpoints: Drop remaining misplaced dependency on perf Frederic Weisbecker 5 siblings, 0 replies; 24+ messages in thread From: Frederic Weisbecker @ 2011-07-14 15:03 UTC (permalink / raw) To: Ingo Molnar Cc: LKML, Frederic Weisbecker, Peter Zijlstra, Will Deacon, Prasad Previously, arch were forced to always build perf events if they supported hw_breakpoints. Now that the user can choose not to build hw_breakpoints, let only force perf events if hw_breakpoints are selected. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Acked-by: Paul Mundt <lethal@linux-sh.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Will Deacon <will.deacon@arm.com> Cc: Prasad <prasad@linux.vnet.ibm.com> --- arch/sh/Kconfig | 1 - arch/x86/Kconfig | 1 - init/Kconfig | 1 + 3 files changed, 1 insertions(+), 2 deletions(-) diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 0a59a82..7130d4b 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -46,7 +46,6 @@ config SUPERH32 select HAVE_HW_BREAKPOINT select HW_BREAKPOINT select HAVE_MIXED_BREAKPOINTS_REGS - select PERF_EVENTS select ARCH_HIBERNATION_POSSIBLE if MMU select SPARSE_IRQ diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index d7a255d..67979f4 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -54,7 +54,6 @@ config X86 select HAVE_KERNEL_LZO select HAVE_HW_BREAKPOINT select HAVE_MIXED_BREAKPOINTS_REGS - select PERF_EVENTS select HAVE_PERF_EVENTS_NMI select ANON_INODES select HAVE_ARCH_KMEMCHECK diff --git a/init/Kconfig b/init/Kconfig index 9eec0df..3cf7855 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -926,6 +926,7 @@ menuconfig EXPERT config HW_BREAKPOINT bool "Hardware breakpoints" if EXPERT depends on HAVE_HW_BREAKPOINT + select PERF_EVENTS default y help Hardware breakpoints are a feature implemented by most CPUs -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 6/6] hw_breakpoints: Drop remaining misplaced dependency on perf 2011-07-14 15:03 [GIT PULL] hw_breakpoints updates Frederic Weisbecker ` (4 preceding siblings ...) 2011-07-14 15:03 ` [PATCH 5/6] hw_breakpoints: Only force perf events if breakpoints are selected Frederic Weisbecker @ 2011-07-14 15:03 ` Frederic Weisbecker 5 siblings, 0 replies; 24+ messages in thread From: Frederic Weisbecker @ 2011-07-14 15:03 UTC (permalink / raw) To: Ingo Molnar; +Cc: LKML, Frederic Weisbecker, Peter Zijlstra, Prasad, Paul Mundt Powerpc and Arm select breakpoint support ability only if Perf is built. This is not necessary anymore now that we enable perf once breakpoints support is selected. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Acked-by: Will Deacon <will.deacon@arm.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Prasad <prasad@linux.vnet.ibm.com> Cc: Paul Mundt <lethal@linux-sh.org> --- arch/arm/Kconfig | 2 +- arch/powerpc/Kconfig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 9adc278..0739521 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -24,7 +24,7 @@ config ARM select HAVE_PERF_EVENTS select PERF_USE_VMALLOC select HAVE_REGS_AND_STACK_ACCESS_API - select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)) + select HAVE_HW_BREAKPOINT if (CPU_V6 || CPU_V6K || CPU_V7) select HAVE_C_RECORDMCOUNT select HAVE_GENERIC_HARDIRQS select HAVE_SPARSE_IRQ diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 2729c66..26beb98 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -126,7 +126,7 @@ config PPC select HAVE_IRQ_WORK select HAVE_PERF_EVENTS select HAVE_REGS_AND_STACK_ACCESS_API - select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64 + select HAVE_HW_BREAKPOINT if PPC_BOOK3S_64 select HAVE_GENERIC_HARDIRQS select HAVE_SPARSE_IRQ select IRQ_PER_CPU -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v2] hw_breakpoint: Let the user choose not to build it (and perf too)
@ 2011-05-24 21:52 Frederic Weisbecker
2011-05-24 21:52 ` [PATCH 3/6] x86: Allow the user not to build hw_breakpoints Frederic Weisbecker
0 siblings, 1 reply; 24+ messages in thread
From: Frederic Weisbecker @ 2011-05-24 21:52 UTC (permalink / raw)
To: LKML
Cc: LKML, Frederic Weisbecker, Ingo Molnar, Will Deacon,
Peter Zijlstra, Prasad, Paul Mundt, Jason Wessel, H . Peter Anvin,
Thomas Gleixner, linuxppc-dev
Mostly just a rebase against latest upstream
updates and acks from Will Deacon added In this second version.
Please tell me if you are ok with this set.
Thanks.
---
Frederic Weisbecker (6):
hw_breakpoints: Split hardware breakpoints config
hw_breakpoints: Migrate breakpoint conditional build under new config
x86: Allow the user not to build hw_breakpoints
hw_breakpoints: Breakpoints arch ability don't need perf events
hw_breakpoints: Only force perf events if breakpoints are selected
hw_breakpoints: Drop remaining misplaced dependency on perf
arch/Kconfig | 1 -
arch/arm/Kconfig | 2 +-
arch/arm/include/asm/hw_breakpoint.h | 4 +-
arch/arm/include/asm/processor.h | 2 +-
arch/arm/kernel/Makefile | 2 +-
arch/arm/kernel/entry-header.S | 2 +-
arch/arm/kernel/ptrace.c | 4 +-
arch/powerpc/Kconfig | 2 +-
arch/powerpc/include/asm/cputable.h | 4 +-
arch/powerpc/include/asm/hw_breakpoint.h | 6 ++--
arch/powerpc/include/asm/processor.h | 4 +-
arch/powerpc/kernel/Makefile | 2 +-
arch/powerpc/kernel/process.c | 18 ++++++++--------
arch/powerpc/kernel/ptrace.c | 13 ++++++-----
arch/powerpc/lib/Makefile | 2 +-
arch/sh/Kconfig | 2 +-
arch/sh/kernel/Makefile | 2 +-
arch/sh/kernel/cpu/sh4a/Makefile | 2 +-
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 +++++++++++++++
include/linux/hw_breakpoint.h | 6 ++--
include/linux/perf_event.h | 4 +-
include/linux/ptrace.h | 6 ++--
include/linux/sched.h | 2 +-
init/Kconfig | 11 ++++++++++
kernel/events/Makefile | 2 +-
kernel/events/core.c | 4 +-
kernel/ptrace.c | 4 +-
samples/Kconfig | 2 +-
32 files changed, 115 insertions(+), 57 deletions(-)
^ permalink raw reply [flat|nested] 24+ messages in thread* [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 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 0 siblings, 0 replies; 24+ messages in thread From: Frederic Weisbecker @ 2011-05-24 21:52 UTC (permalink / raw) To: LKML Cc: LKML, Frederic Weisbecker, linuxppc-dev, Ingo Molnar, Peter Zijlstra, Jason Wessel, H. Peter Anvin, Thomas Gleixner 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 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 0/6] hw_breakpoint: Let the user choose not to build it (and perf too) @ 2011-04-27 16:59 Frederic Weisbecker 2011-04-27 16:59 ` [PATCH 3/6] x86: Allow the user not to build hw_breakpoints Frederic Weisbecker 0 siblings, 1 reply; 24+ messages in thread From: Frederic Weisbecker @ 2011-04-27 16:59 UTC (permalink / raw) To: LKML Cc: LKML, Frederic Weisbecker, Peter Zijlstra, Will Deacon, Prasad, Paul Mundt, Jason Wessel, H . Peter Anvin, Thomas Gleixner, Ingo Molnar Hi, Until now, x86 and superh32 had to always build hw_breakpoint and perf. And powerpc and arm were always building hw_breakpoints when perf was enabled. After this patchset, one can simply disable hw_breakpoints if he selected CONFIG_EXPERT. Afterward the user is free to select perf or not. Except on SH unfortunately because that would require a bit of change in ptrace to support singlestep failures. Frederic Weisbecker (6): hw_breakpoints: Split hardware breakpoints config hw_breakpoints: Migrate breakpoint conditional build under new config x86: Allow the user not to build hw_breakpoints hw_breakpoints: Breakpoints arch ability don't need perf events hw_breakpoints: Only force perf events if breakpoints are selected hw_breakpoints: Drop remaining misplaced dependency on perf arch/Kconfig | 1 - arch/arm/Kconfig | 2 +- arch/arm/include/asm/hw_breakpoint.h | 4 +- arch/arm/include/asm/processor.h | 2 +- arch/arm/kernel/Makefile | 2 +- arch/arm/kernel/entry-header.S | 2 +- arch/arm/kernel/ptrace.c | 4 +- arch/powerpc/Kconfig | 2 +- arch/powerpc/include/asm/cputable.h | 4 +- arch/powerpc/include/asm/hw_breakpoint.h | 6 ++-- arch/powerpc/include/asm/processor.h | 4 +- arch/powerpc/kernel/Makefile | 2 +- arch/powerpc/kernel/process.c | 18 ++++++++-------- arch/powerpc/kernel/ptrace.c | 12 +++++----- arch/powerpc/lib/Makefile | 2 +- arch/sh/Kconfig | 2 +- arch/sh/kernel/Makefile | 2 +- arch/sh/kernel/cpu/sh4a/Makefile | 2 +- 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 +++++++++++++++ include/linux/hw_breakpoint.h | 6 ++-- include/linux/perf_event.h | 4 +- init/Kconfig | 11 ++++++++++ kernel/Makefile | 2 +- kernel/perf_event.c | 4 +- samples/Kconfig | 2 +- 29 files changed, 108 insertions(+), 51 deletions(-) -- 1.7.3.2 ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 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 ` Frederic Weisbecker 2011-04-27 17:38 ` H. Peter Anvin 0 siblings, 1 reply; 24+ messages in thread From: Frederic Weisbecker @ 2011-04-27 16:59 UTC (permalink / raw) To: LKML Cc: LKML, Frederic Weisbecker, Ingo Molnar, Peter Zijlstra, Jason Wessel, H. Peter Anvin, Thomas Gleixner 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 45892dc..a1e1d6d 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) @@ -761,6 +762,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 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 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 0 siblings, 1 reply; 24+ messages in thread From: H. Peter Anvin @ 2011-04-27 17:38 UTC (permalink / raw) To: Frederic Weisbecker Cc: LKML, Ingo Molnar, Peter Zijlstra, Jason Wessel, Thomas Gleixner On 04/27/2011 09:59 AM, Frederic Weisbecker wrote: > So that hw_breakpoints and perf can be not built on > specific embedded systems. How big of a win, if any, is this, really? -hpa -- H. Peter Anvin, Intel Open Source Technology Center I work for Intel. I don't speak on their behalf. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 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> 0 siblings, 2 replies; 24+ messages in thread From: Frederic Weisbecker @ 2011-04-27 18:26 UTC (permalink / raw) To: H. Peter Anvin Cc: LKML, Ingo Molnar, Peter Zijlstra, Jason Wessel, Thomas Gleixner On Wed, Apr 27, 2011 at 10:38:50AM -0700, H. Peter Anvin wrote: > On 04/27/2011 09:59 AM, Frederic Weisbecker wrote: > > So that hw_breakpoints and perf can be not built on > > specific embedded systems. > > How big of a win, if any, is this, really? > > -hpa That's pretty significant, because if you can disable breakpoints, then you can disable perf. Together they make quite a chunk. breakpoints + perf: text data bss dec hex filename 1567422 348628 511680 2427730 250b52 vmlinux none: text data bss dec hex filename 1478031 333220 508256 2319507 236493 vmlinux ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 2011-04-27 18:26 ` Frederic Weisbecker @ 2011-04-27 19:10 ` Michael Bohan [not found] ` <008d59a3-bd23-4cb3-8a73-1640137e3ac4@email.android.com> 1 sibling, 0 replies; 24+ messages in thread From: Michael Bohan @ 2011-04-27 19:10 UTC (permalink / raw) To: Frederic Weisbecker Cc: H. Peter Anvin, LKML, Ingo Molnar, Peter Zijlstra, Jason Wessel, Thomas Gleixner On 4/27/2011 11:26 AM, Frederic Weisbecker wrote: > On Wed, Apr 27, 2011 at 10:38:50AM -0700, H. Peter Anvin wrote: >> >> How big of a win, if any, is this, really? > > That's pretty significant, because if you can disable breakpoints, > then you can disable perf. Together they make quite a chunk. Another advantage is the ability to disable these features for kernel bringup on new targets and kernel versions. Recently in v2.6.38 hw_breakpoints were broken in ARM. A change like this would have saved me a hack to the Kconfig at the least. Mike -- Employee of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum ^ permalink raw reply [flat|nested] 24+ messages in thread
[parent not found: <008d59a3-bd23-4cb3-8a73-1640137e3ac4@email.android.com>]
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints [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 0 siblings, 1 reply; 24+ messages in thread From: Frederic Weisbecker @ 2011-04-27 19:50 UTC (permalink / raw) To: H. Peter Anvin Cc: LKML, Ingo Molnar, Peter Zijlstra, Jason Wessel, Thomas Gleixner On Wed, Apr 27, 2011 at 11:54:17AM -0700, H. Peter Anvin wrote: > Why do you have to be able to disable breakpoints to disable perf? That seems seriously backwards, especially since we had breakpoints long before perf... That started when we implemented breakpoints as counters. Then we realized that ptrace had its own scheduling that was somehow duplicating what perf was doing. So we have finally unified that under perf. The good point is that archs don't need to care much about ptrace breakpoints tracking, just the interface. But yeah the bad point is that dependency. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 2011-04-27 19:50 ` Frederic Weisbecker @ 2011-05-03 15:35 ` H. Peter Anvin 2011-05-03 23:12 ` Frederic Weisbecker 0 siblings, 1 reply; 24+ messages in thread From: H. Peter Anvin @ 2011-05-03 15:35 UTC (permalink / raw) To: Frederic Weisbecker Cc: LKML, Ingo Molnar, Peter Zijlstra, Jason Wessel, Thomas Gleixner On 04/27/2011 12:50 PM, Frederic Weisbecker wrote: > On Wed, Apr 27, 2011 at 11:54:17AM -0700, H. Peter Anvin wrote: >> Why do you have to be able to disable breakpoints to disable perf? That seems seriously backwards, especially since we had breakpoints long before perf... > > That started when we implemented breakpoints as counters. Then we realized that > ptrace had its own scheduling that was somehow duplicating what perf was doing. > So we have finally unified that under perf. The good point is that archs don't need > to care much about ptrace breakpoints tracking, just the interface. > > But yeah the bad point is that dependency. It really is very bad... without breakpoints, you lose almost all debugging support. -hpa -- H. Peter Anvin, Intel Open Source Technology Center I work for Intel. I don't speak on their behalf. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 2011-05-03 15:35 ` H. Peter Anvin @ 2011-05-03 23:12 ` Frederic Weisbecker 2011-05-03 23:40 ` H. Peter Anvin 0 siblings, 1 reply; 24+ messages in thread From: Frederic Weisbecker @ 2011-05-03 23:12 UTC (permalink / raw) To: H. Peter Anvin Cc: LKML, Ingo Molnar, Peter Zijlstra, Jason Wessel, Thomas Gleixner On Tue, May 03, 2011 at 08:35:53AM -0700, H. Peter Anvin wrote: > On 04/27/2011 12:50 PM, Frederic Weisbecker wrote: > > On Wed, Apr 27, 2011 at 11:54:17AM -0700, H. Peter Anvin wrote: > >> Why do you have to be able to disable breakpoints to disable perf? That seems seriously backwards, especially since we had breakpoints long before perf... > > > > That started when we implemented breakpoints as counters. Then we realized that > > ptrace had its own scheduling that was somehow duplicating what perf was doing. > > So we have finally unified that under perf. The good point is that archs don't need > > to care much about ptrace breakpoints tracking, just the interface. > > > > But yeah the bad point is that dependency. > > It really is very bad... without breakpoints, you lose almost all > debugging support. Right, so it should be fine for embedded environment to disable breakpoints. It depends on CONFIG_EXPERT now. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 2011-05-03 23:12 ` Frederic Weisbecker @ 2011-05-03 23:40 ` H. Peter Anvin 2011-05-03 23:54 ` Frederic Weisbecker 0 siblings, 1 reply; 24+ messages in thread From: H. Peter Anvin @ 2011-05-03 23:40 UTC (permalink / raw) To: Frederic Weisbecker Cc: LKML, Ingo Molnar, Peter Zijlstra, Jason Wessel, Thomas Gleixner On 05/03/2011 04:12 PM, Frederic Weisbecker wrote: >> >> It really is very bad... without breakpoints, you lose almost all >> debugging support. > > Right, so it should be fine for embedded environment to disable breakpoints. > It depends on CONFIG_EXPERT now. Uh... even embedded environments need to be able to debug. -hpa ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 2011-05-03 23:40 ` H. Peter Anvin @ 2011-05-03 23:54 ` Frederic Weisbecker 2011-05-03 23:56 ` H. Peter Anvin 0 siblings, 1 reply; 24+ messages in thread From: Frederic Weisbecker @ 2011-05-03 23:54 UTC (permalink / raw) To: H. Peter Anvin Cc: LKML, Ingo Molnar, Peter Zijlstra, Jason Wessel, Thomas Gleixner On Tue, May 03, 2011 at 04:40:14PM -0700, H. Peter Anvin wrote: > On 05/03/2011 04:12 PM, Frederic Weisbecker wrote: > >> > >> It really is very bad... without breakpoints, you lose almost all > >> debugging support. > > > > Right, so it should be fine for embedded environment to disable breakpoints. > > It depends on CONFIG_EXPERT now. > > Uh... even embedded environments need to be able to debug. For development yeah, but is it needed for production evironments? May be sometimes. But even though, the main functionalities of ptrace are still available since instruction breakpoints are implemented through int3 and not debugreg in ptrace. Only data breakpoints would be unusable, but I believe they are a minor use compared to instruction breakpoints. I rarely make use of them for debugging personally. That's really deemed for specific cases where people know what they are doing. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 2011-05-03 23:54 ` Frederic Weisbecker @ 2011-05-03 23:56 ` H. Peter Anvin 2011-05-04 0:13 ` Frederic Weisbecker 0 siblings, 1 reply; 24+ messages in thread From: H. Peter Anvin @ 2011-05-03 23:56 UTC (permalink / raw) To: Frederic Weisbecker Cc: LKML, Ingo Molnar, Peter Zijlstra, Jason Wessel, Thomas Gleixner On 05/03/2011 04:54 PM, Frederic Weisbecker wrote: > On Tue, May 03, 2011 at 04:40:14PM -0700, H. Peter Anvin wrote: >> On 05/03/2011 04:12 PM, Frederic Weisbecker wrote: >>>> >>>> It really is very bad... without breakpoints, you lose almost all >>>> debugging support. >>> >>> Right, so it should be fine for embedded environment to disable breakpoints. >>> It depends on CONFIG_EXPERT now. >> >> Uh... even embedded environments need to be able to debug. > > For development yeah, but is it needed for production evironments? > Most of the time people don't want to debug something other than they're going to ship. -hpa ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 2011-05-03 23:56 ` H. Peter Anvin @ 2011-05-04 0:13 ` Frederic Weisbecker 0 siblings, 0 replies; 24+ messages in thread From: Frederic Weisbecker @ 2011-05-04 0:13 UTC (permalink / raw) To: H. Peter Anvin Cc: LKML, Ingo Molnar, Peter Zijlstra, Jason Wessel, Thomas Gleixner On Tue, May 03, 2011 at 04:56:03PM -0700, H. Peter Anvin wrote: > On 05/03/2011 04:54 PM, Frederic Weisbecker wrote: > > On Tue, May 03, 2011 at 04:40:14PM -0700, H. Peter Anvin wrote: > >> On 05/03/2011 04:12 PM, Frederic Weisbecker wrote: > >>>> > >>>> It really is very bad... without breakpoints, you lose almost all > >>>> debugging support. > >>> > >>> Right, so it should be fine for embedded environment to disable breakpoints. > >>> It depends on CONFIG_EXPERT now. > >> > >> Uh... even embedded environments need to be able to debug. > > > > For development yeah, but is it needed for production evironments? > > > > Most of the time people don't want to debug something other than they're > going to ship. Well, it's like systems that don't care about having BUG(), sysctl, futexes, etc... support in the kernel, or whatever standard feature that makes sense most of the time but sometimes you simply don't need it. Also consider that as a first step to be able to build a !CONFIG_PERF_EVENTS kernel. If people show strong interest in beeing able to build a kernel with breakpoints but without perf events, then I'll invest more efforts in breaking the dependency. ^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2011-07-21 13:03 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-14 15:03 [GIT PULL] hw_breakpoints updates Frederic Weisbecker
2011-07-14 15:03 ` [PATCH 1/6] hw_breakpoints: Split hardware breakpoints config Frederic Weisbecker
2011-07-14 15:03 ` [PATCH 2/6] hw_breakpoints: Migrate breakpoint conditional build under new config 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-07-14 15:03 ` [PATCH 4/6] hw_breakpoints: Breakpoints arch ability don't need perf events Frederic Weisbecker
2011-07-14 15:03 ` [PATCH 5/6] hw_breakpoints: Only force perf events if breakpoints are selected Frederic Weisbecker
2011-07-14 15:03 ` [PATCH 6/6] hw_breakpoints: Drop remaining misplaced dependency on perf Frederic Weisbecker
-- strict thread matches above, loose matches on Subject: below --
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 ` [PATCH 3/6] x86: Allow the user not to build hw_breakpoints 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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox