From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933353AbbFIMdu (ORCPT ); Tue, 9 Jun 2015 08:33:50 -0400 Received: from terminus.zytor.com ([198.137.202.10]:51951 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933323AbbFIMdd (ORCPT ); Tue, 9 Jun 2015 08:33:33 -0400 Date: Tue, 9 Jun 2015 05:33:00 -0700 From: tip-bot for Dave Hansen Message-ID: Cc: dave.hansen@linux.intel.com, peterz@infradead.org, hpa@zytor.com, akpm@linux-foundation.org, mingo@kernel.org, dave@sr71.net, linux-kernel@vger.kernel.org, tglx@linutronix.de, torvalds@linux-foundation.org Reply-To: dave.hansen@linux.intel.com, peterz@infradead.org, hpa@zytor.com, akpm@linux-foundation.org, mingo@kernel.org, linux-kernel@vger.kernel.org, dave@sr71.net, tglx@linutronix.de, torvalds@linux-foundation.org In-Reply-To: <20150607183703.5FE2619A@viggo.jf.intel.com> References: <20150607183703.5FE2619A@viggo.jf.intel.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/fpu] x86/mpx: Trace #BR exceptions Git-Commit-ID: e7126cf5f10aef1555cb99eddb7efff41bdf9566 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: e7126cf5f10aef1555cb99eddb7efff41bdf9566 Gitweb: http://git.kernel.org/tip/e7126cf5f10aef1555cb99eddb7efff41bdf9566 Author: Dave Hansen AuthorDate: Sun, 7 Jun 2015 11:37:03 -0700 Committer: Ingo Molnar CommitDate: Tue, 9 Jun 2015 12:24:31 +0200 x86/mpx: Trace #BR exceptions This is the first in a series of MPX tracing patches. I've found these extremely useful in the process of debugging applications and the kernel code itself. This exception hooks in to the bounds (#BR) exception very early and allows capturing the key registers which would influence how the exception is handled. Note that bndcfgu/bndstatus are technically still 64-bit registers even in 32-bit mode. Signed-off-by: Dave Hansen Reviewed-by: Thomas Gleixner Cc: Andrew Morton Cc: Dave Hansen Cc: H. Peter Anvin Cc: Linus Torvalds Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/20150607183703.5FE2619A@viggo.jf.intel.com Signed-off-by: Ingo Molnar --- arch/x86/include/asm/trace/mpx.h | 50 ++++++++++++++++++++++++++++++++++++++++ arch/x86/kernel/traps.c | 2 ++ arch/x86/mm/mpx.c | 3 +++ 3 files changed, 55 insertions(+) diff --git a/arch/x86/include/asm/trace/mpx.h b/arch/x86/include/asm/trace/mpx.h new file mode 100644 index 0000000..5c03ec8 --- /dev/null +++ b/arch/x86/include/asm/trace/mpx.h @@ -0,0 +1,50 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM mpx + +#if !defined(_TRACE_MPX_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_MPX_H + +#include + +#ifdef CONFIG_X86_INTEL_MPX + +TRACE_EVENT(bounds_exception_mpx, + + TP_PROTO(const struct bndcsr *bndcsr), + TP_ARGS(bndcsr), + + TP_STRUCT__entry( + __field(u64, bndcfgu) + __field(u64, bndstatus) + ), + + TP_fast_assign( + /* need to get rid of the 'const' on bndcsr */ + __entry->bndcfgu = (u64)bndcsr->bndcfgu; + __entry->bndstatus = (u64)bndcsr->bndstatus; + ), + + TP_printk("bndcfgu:0x%llx bndstatus:0x%llx", + __entry->bndcfgu, + __entry->bndstatus) +); + +#else + +/* + * This gets used outside of MPX-specific code, so we need a stub. + */ +static inline void trace_bounds_exception_mpx(const struct bndcsr *bndcsr) +{ +} + +#endif /* CONFIG_X86_INTEL_MPX */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH asm/trace/ +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE mpx +#endif /* _TRACE_MPX_H */ + +/* This part must be outside protection */ +#include diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index cffff66..36cb15b 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c @@ -60,6 +60,7 @@ #include #include #include +#include #include #ifdef CONFIG_X86_64 @@ -399,6 +400,7 @@ dotraplinkage void do_bounds(struct pt_regs *regs, long error_code) if (!bndcsr) goto exit_trap; + trace_bounds_exception_mpx(bndcsr); /* * The error code field of the BNDSTATUS register communicates status * information of a bound range exception #BR or operation involving diff --git a/arch/x86/mm/mpx.c b/arch/x86/mm/mpx.c index d6e02f3..1fef52c 100644 --- a/arch/x86/mm/mpx.c +++ b/arch/x86/mm/mpx.c @@ -17,6 +17,9 @@ #include #include +#define CREATE_TRACE_POINTS +#include + static const char *mpx_mapping_name(struct vm_area_struct *vma) { return "[mpx]";