Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754775AbbHXOdj (ORCPT ); Mon, 24 Aug 2015 10:33:39 -0400 Received: from mga02.intel.com ([134.134.136.20]:4072 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754332AbbHXOdV (ORCPT ); Mon, 24 Aug 2015 10:33:21 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,738,1432623600"; d="scan'208";a="754383057" From: Alexander Shishkin To: Peter Zijlstra , Ingo Molnar Cc: linux-kernel@vger.kernel.org, adrian.hunter@intel.com, Arnaldo Carvalho de Melo , Vince Weaver , Stephane Eranian , Johannes Berg , Alexander Shishkin Subject: [PATCH v2 2/6] perf: Add file name and line number to perf extended error reports Date: Mon, 24 Aug 2015 17:32:56 +0300 Message-Id: <1440426780-27227-3-git-send-email-alexander.shishkin@linux.intel.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1440426780-27227-1-git-send-email-alexander.shishkin@linux.intel.com> References: <1440426780-27227-1-git-send-email-alexander.shishkin@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2539 Lines: 85 If kernel debugging is enabled, include additional information to extended syscall error reports: file name and line number, to make error hunting even easier. And in really desperate times, this allows for such things (a variation on Hugh Dickins' trick [1]): #undef EINVAL #define EINVAL perf_err(-22, "") However, CONFIG_DEBUG_KERNEL might not be the right option for this as I notice that, for example, debian enables it in its kernels. [1] http://marc.info/?l=linux-kernel&m=141215166009542 Signed-off-by: Alexander Shishkin --- include/linux/perf_event.h | 11 +++++++++++ kernel/events/core.c | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 8e37939d21..f6dd3d6071 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -68,11 +68,21 @@ struct perf_guest_info_callbacks { struct perf_err_site { const char *message; const char *owner; +#ifdef CONFIG_DEBUG_KERNEL + const char *file; + const int line; +#endif const int code; }; #ifdef CONFIG_PERF_EVENTS +#ifdef CONFIG_DEBUG_KERNEL +#define DEBUG_PERF_ERR .file = __FILE__, .line = __LINE__, +#else +#define DEBUG_PERF_ERR +#endif + /* * Place all occurrences of struct perf_err_site into a special section, * so that we can find out their offsets, which we'll use to refer back @@ -88,6 +98,7 @@ extern const struct perf_err_site __start___perf_err[], __stop___perf_err[]; .owner = PERF_MODNAME, \ .code = __builtin_constant_p((__c)) ? \ (__c) : -EINVAL, \ + DEBUG_PERF_ERR \ }; \ &__err_site; \ }) diff --git a/kernel/events/core.c b/kernel/events/core.c index c6f43d1d5f..3ff28fc8bd 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -76,10 +76,17 @@ static void perf_error_report_site(struct perf_event_attr *attr, buffer = kasprintf(GFP_KERNEL, "{\n" +#ifdef CONFIG_DEBUG_KERNEL + "\t\"file\": \"%s\",\n" + "\t\"line\": %d,\n" +#endif "\t\"code\": %d,\n" "\t\"module\": \"%s\",\n" "\t\"message\": \"%s\"\n" "}\n", +#ifdef CONFIG_DEBUG_KERNEL + site->file, site->line, +#endif site->code, site->owner, site->message ); if (!buffer) -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/