Messages in this thread Patch in this message | | | From | Alexander Shishkin <> | Subject | [PATCH RFC v1 2/4] perf: Add file name and line number to perf extended error reports | Date | Fri, 24 Jul 2015 14:45:57 +0300 |
| |
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
NYet-Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> --- 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 9e9af962f6..d84a2914f5 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) : 0, \ + DEBUG_PERF_ERR \ }; \ (__e) = &__err_site; \ }) diff --git a/kernel/events/core.c b/kernel/events/core.c index 85bcf3a5f9..4ff09fdc67 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -75,10 +75,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.1.4
| |