From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate.crashing.org (gate.crashing.org [63.228.1.57]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 22EADB6F9D for ; Thu, 6 Oct 2011 23:53:49 +1100 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by gate.crashing.org (8.14.1/8.13.8) with ESMTP id p96Crj5Z021963 for ; Thu, 6 Oct 2011 07:53:45 -0500 From: Kumar Gala To: linuxppc-dev@ozlabs.org Subject: [PATCH 4/4] powerpc/booke: Re-organize debug code Date: Thu, 6 Oct 2011 07:53:41 -0500 Message-Id: <1317905621-5537-4-git-send-email-galak@kernel.crashing.org> In-Reply-To: <1317905621-5537-3-git-send-email-galak@kernel.crashing.org> References: <1317905621-5537-1-git-send-email-galak@kernel.crashing.org> <1317905621-5537-2-git-send-email-galak@kernel.crashing.org> <1317905621-5537-3-git-send-email-galak@kernel.crashing.org> List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , * set_dabr/do_dabr are no longer used when CNFIG_PPC_ADV_DEBUG_REGS is set refactor code a bit such that we only build the dabr code for !CONFIG_PPC_ADV_DEBUG_REGS and removed some CONFIG_PPC_ADV_DEBUG_REGS code in set_dabr that would never get built. * Move do_send_trap into traps.c as its only used there Signed-off-by: Kumar Gala --- arch/powerpc/include/asm/system.h | 5 +-- arch/powerpc/kernel/process.c | 97 +++++++++++++----------------------- arch/powerpc/kernel/traps.c | 17 +++++++ 3 files changed, 53 insertions(+), 66 deletions(-) diff --git a/arch/powerpc/include/asm/system.h b/arch/powerpc/include/asm/system.h index e30a13d..1dc5d9c 100644 --- a/arch/powerpc/include/asm/system.h +++ b/arch/powerpc/include/asm/system.h @@ -111,11 +111,8 @@ static inline int debugger_dabr_match(struct pt_regs *regs) { return 0; } static inline int debugger_fault_handler(struct pt_regs *regs) { return 0; } #endif +#ifndef CONFIG_PPC_ADV_DEBUG_REGS extern int set_dabr(unsigned long dabr); -#ifdef CONFIG_PPC_ADV_DEBUG_REGS -extern void do_send_trap(struct pt_regs *regs, unsigned long address, - unsigned long error_code, int signal_code, int brkpt); -#else extern void do_dabr(struct pt_regs *regs, unsigned long address, unsigned long error_code); #endif diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 269a309..989e574 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c @@ -251,50 +251,6 @@ void discard_lazy_cpu_state(void) #endif /* CONFIG_SMP */ #ifdef CONFIG_PPC_ADV_DEBUG_REGS -void do_send_trap(struct pt_regs *regs, unsigned long address, - unsigned long error_code, int signal_code, int breakpt) -{ - siginfo_t info; - - if (notify_die(DIE_DABR_MATCH, "dabr_match", regs, error_code, - 11, SIGSEGV) == NOTIFY_STOP) - return; - - /* Deliver the signal to userspace */ - info.si_signo = SIGTRAP; - info.si_errno = breakpt; /* breakpoint or watchpoint id */ - info.si_code = signal_code; - info.si_addr = (void __user *)address; - force_sig_info(SIGTRAP, &info, current); -} -#else /* !CONFIG_PPC_ADV_DEBUG_REGS */ -void do_dabr(struct pt_regs *regs, unsigned long address, - unsigned long error_code) -{ - siginfo_t info; - - if (notify_die(DIE_DABR_MATCH, "dabr_match", regs, error_code, - 11, SIGSEGV) == NOTIFY_STOP) - return; - - if (debugger_dabr_match(regs)) - return; - - /* Clear the DABR */ - set_dabr(0); - - /* Deliver the signal to userspace */ - info.si_signo = SIGTRAP; - info.si_errno = 0; - info.si_code = TRAP_HWBKPT; - info.si_addr = (void __user *)address; - force_sig_info(SIGTRAP, &info, current); -} -#endif /* CONFIG_PPC_ADV_DEBUG_REGS */ - -static DEFINE_PER_CPU(unsigned long, current_dabr); - -#ifdef CONFIG_PPC_ADV_DEBUG_REGS /* * Set the debug registers back to their default "safe" values. */ @@ -357,16 +313,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 -static void set_debug_reg_defaults(struct thread_struct *thread) -{ - if (thread->dabr) { - thread->dabr = 0; - set_dabr(0); - } -} -#endif /* !CONFIG_HAVE_HW_BREAKPOINT */ -#endif /* CONFIG_PPC_ADV_DEBUG_REGS */ +static DEFINE_PER_CPU(unsigned long, current_dabr); int set_dabr(unsigned long dabr) { @@ -376,19 +323,45 @@ int set_dabr(unsigned long dabr) return ppc_md.set_dabr(dabr); /* XXX should we have a CPU_FTR_HAS_DABR ? */ -#ifdef CONFIG_PPC_ADV_DEBUG_REGS - mtspr(SPRN_DAC1, dabr); -#ifdef CONFIG_PPC_47x - isync(); -#endif -#elif defined(CONFIG_PPC_BOOK3S) mtspr(SPRN_DABR, dabr); -#endif - return 0; } +void do_dabr(struct pt_regs *regs, unsigned long address, + unsigned long error_code) +{ + siginfo_t info; + + if (notify_die(DIE_DABR_MATCH, "dabr_match", regs, error_code, + 11, SIGSEGV) == NOTIFY_STOP) + return; + + if (debugger_dabr_match(regs)) + return; + + /* Clear the DABR */ + set_dabr(0); + + /* Deliver the signal to userspace */ + info.si_signo = SIGTRAP; + info.si_errno = 0; + info.si_code = TRAP_HWBKPT; + info.si_addr = (void __user *)address; + force_sig_info(SIGTRAP, &info, current); +} + +#ifndef CONFIG_HAVE_HW_BREAKPOINT +static void set_debug_reg_defaults(struct thread_struct *thread) +{ + if (thread->dabr) { + thread->dabr = 0; + set_dabr(0); + } +} +#endif /* !CONFIG_HAVE_HW_BREAKPOINT */ +#endif /* CONFIG_PPC_ADV_DEBUG_REGS */ + #ifdef CONFIG_PPC64 DEFINE_PER_CPU(struct cpu_usage, cpu_usage_array); #endif diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index db733d3..edc1108 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c @@ -1184,6 +1184,23 @@ void SoftwareEmulation(struct pt_regs *regs) #endif /* CONFIG_8xx */ #ifdef CONFIG_PPC_ADV_DEBUG_REGS +static void do_send_trap(struct pt_regs *regs, unsigned long address, + unsigned long error_code, int signal_code, int breakpt) +{ + siginfo_t info; + + if (notify_die(DIE_DABR_MATCH, "dabr_match", regs, error_code, + 11, SIGSEGV) == NOTIFY_STOP) + return; + + /* Deliver the signal to userspace */ + info.si_signo = SIGTRAP; + info.si_errno = breakpt; /* breakpoint or watchpoint id */ + info.si_code = signal_code; + info.si_addr = (void __user *)address; + force_sig_info(SIGTRAP, &info, current); +} + static void handle_debug(struct pt_regs *regs, unsigned long debug_status) { int changed = 0; -- 1.7.3.4