perf/urgent fixes:
. Handle PERF_RECORD_HEADER_EVENT_TYPE properly. (Jiri Olsa) . Fix checking for supported events on older kernels in 'perf list' (Vince Weaver) . Do not add offset twice to uprobe address in 'perf probe' (Masami Hiramatsu) . Fix perf trace's ioctl 'request' beautifier build problems on !(i386 || x86_64) arches (Arnaldo Carvalho de Melo) . Fix 'perf trace' build by adding a fallback definition for EFD_SEMAPHORE (Ben Hutchings) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJS/TWXAAoJENZQFvNTUqpAQg8P/1fDyCwT2ysn2YeD4DyuEmGO omzhw7imEas7o9brXnl2/VmxBcTIGsXnqjaJMfSis1pZU2GRNpH32Wog3UK4QYUy 56R6vZ32oKNE6f4brUKAdKUKykwn46de9paXPJR/OERFz54JO+R32FAZHkueXIcl 87DzJsqQAvDilnf9yvLLuFXM57nBmuNj+KFsAjNEqyaSEanQV1VcIt+lVp6JSK5U DhUxWe09yk1LwjKKDd3ifw8mtK8Sjlgc/q+fBWQa/FHvMf+JFbk0E7ais1GXa0Rx CCdLxVn4ttv0RITS07zzSHMsbHlIVoQpw3hrqVc6UDbQ4cdHoGp+sJhZU9rOUYDY ZP7SAegRtaQDhE+MhTUSYLd0nsr9e2OxbeZ0HovjvzaDlV4ak9vokAFFDfC+5Vt4 8Mw5Nc2oOtTwL5IBhviI7lG8Kxdlo1rPRZB7BJnMwulNSIVOsxByISXuHJ1tP5gW mGkNyZbxdA/KPRejqbEldDQOOLOIj/0QeOLMJqNImB3RrQniRQgVPHFOCDhChliF zv4/WzLj1N7WuJj3dYmN4lSHhqP1B+e8GmPfUbS4pXettAP9sYVAnJ/NAC3rXI8D DE0c3DjnP+1OcjGp4Ee99i3Md38dK3pFLD+MESUXzZ+UxpaWDwdXM5VmUNdz1QQp xRSGBfHRA3U4MWVWFHD5 =qgrx -----END PGP SIGNATURE----- Merge tag 'perf-urgent-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent Pull perf/urgent fixes from Arnaldo Carvalho de Melo: * Handle PERF_RECORD_HEADER_EVENT_TYPE properly. (Jiri Olsa) * Fix checking for supported events on older kernels in 'perf list' (Vince Weaver) * Do not add offset twice to uprobe address in 'perf probe' (Masami Hiramatsu) * Fix perf trace's ioctl 'request' beautifier build problems on !(i386 || x86_64) arches (Arnaldo Carvalho de Melo) * Fix 'perf trace' build by adding a fallback definition for EFD_SEMAPHORE (Ben Hutchings) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
commit
a9d3f94ec7
|
@ -37,6 +37,10 @@
|
|||
# define MADV_UNMERGEABLE 13
|
||||
#endif
|
||||
|
||||
#ifndef EFD_SEMAPHORE
|
||||
# define EFD_SEMAPHORE 1
|
||||
#endif
|
||||
|
||||
struct tp_field {
|
||||
int offset;
|
||||
union {
|
||||
|
@ -279,6 +283,11 @@ static size_t syscall_arg__scnprintf_strarray(char *bf, size_t size,
|
|||
|
||||
#define SCA_STRARRAY syscall_arg__scnprintf_strarray
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
/*
|
||||
* FIXME: Make this available to all arches as soon as the ioctl beautifier
|
||||
* gets rewritten to support all arches.
|
||||
*/
|
||||
static size_t syscall_arg__scnprintf_strhexarray(char *bf, size_t size,
|
||||
struct syscall_arg *arg)
|
||||
{
|
||||
|
@ -286,6 +295,7 @@ static size_t syscall_arg__scnprintf_strhexarray(char *bf, size_t size,
|
|||
}
|
||||
|
||||
#define SCA_STRHEXARRAY syscall_arg__scnprintf_strhexarray
|
||||
#endif /* defined(__i386__) || defined(__x86_64__) */
|
||||
|
||||
static size_t syscall_arg__scnprintf_fd(char *bf, size_t size,
|
||||
struct syscall_arg *arg);
|
||||
|
@ -839,6 +849,10 @@ static size_t syscall_arg__scnprintf_signum(char *bf, size_t size, struct syscal
|
|||
|
||||
#define SCA_SIGNUM syscall_arg__scnprintf_signum
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
/*
|
||||
* FIXME: Make this available to all arches.
|
||||
*/
|
||||
#define TCGETS 0x5401
|
||||
|
||||
static const char *tioctls[] = {
|
||||
|
@ -860,6 +874,7 @@ static const char *tioctls[] = {
|
|||
};
|
||||
|
||||
static DEFINE_STRARRAY_OFFSET(tioctls, 0x5401);
|
||||
#endif /* defined(__i386__) || defined(__x86_64__) */
|
||||
|
||||
#define STRARRAY(arg, name, array) \
|
||||
.arg_scnprintf = { [arg] = SCA_STRARRAY, }, \
|
||||
|
@ -941,9 +956,16 @@ static struct syscall_fmt {
|
|||
{ .name = "getrlimit", .errmsg = true, STRARRAY(0, resource, rlimit_resources), },
|
||||
{ .name = "ioctl", .errmsg = true,
|
||||
.arg_scnprintf = { [0] = SCA_FD, /* fd */
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
/*
|
||||
* FIXME: Make this available to all arches.
|
||||
*/
|
||||
[1] = SCA_STRHEXARRAY, /* cmd */
|
||||
[2] = SCA_HEX, /* arg */ },
|
||||
.arg_parm = { [1] = &strarray__tioctls, /* cmd */ }, },
|
||||
#else
|
||||
[2] = SCA_HEX, /* arg */ }, },
|
||||
#endif
|
||||
{ .name = "kill", .errmsg = true,
|
||||
.arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, },
|
||||
{ .name = "linkat", .errmsg = true,
|
||||
|
|
|
@ -1091,12 +1091,12 @@ int is_valid_tracepoint(const char *event_string)
|
|||
static bool is_event_supported(u8 type, unsigned config)
|
||||
{
|
||||
bool ret = true;
|
||||
int open_return;
|
||||
struct perf_evsel *evsel;
|
||||
struct perf_event_attr attr = {
|
||||
.type = type,
|
||||
.config = config,
|
||||
.disabled = 1,
|
||||
.exclude_kernel = 1,
|
||||
};
|
||||
struct {
|
||||
struct thread_map map;
|
||||
|
@ -1108,7 +1108,20 @@ static bool is_event_supported(u8 type, unsigned config)
|
|||
|
||||
evsel = perf_evsel__new(&attr);
|
||||
if (evsel) {
|
||||
ret = perf_evsel__open(evsel, NULL, &tmap.map) >= 0;
|
||||
open_return = perf_evsel__open(evsel, NULL, &tmap.map);
|
||||
ret = open_return >= 0;
|
||||
|
||||
if (open_return == -EACCES) {
|
||||
/*
|
||||
* This happens if the paranoid value
|
||||
* /proc/sys/kernel/perf_event_paranoid is set to 2
|
||||
* Re-run with exclude_kernel set; we don't do that
|
||||
* by default as some ARM machines do not support it.
|
||||
*
|
||||
*/
|
||||
evsel->attr.exclude_kernel = 1;
|
||||
ret = perf_evsel__open(evsel, NULL, &tmap.map) >= 0;
|
||||
}
|
||||
perf_evsel__delete(evsel);
|
||||
}
|
||||
|
||||
|
|
|
@ -336,8 +336,8 @@ static int add_exec_to_probe_trace_events(struct probe_trace_event *tevs,
|
|||
return ret;
|
||||
|
||||
for (i = 0; i < ntevs && ret >= 0; i++) {
|
||||
/* point.address is the addres of point.symbol + point.offset */
|
||||
offset = tevs[i].point.address - stext;
|
||||
offset += tevs[i].point.offset;
|
||||
tevs[i].point.offset = 0;
|
||||
zfree(&tevs[i].point.symbol);
|
||||
ret = e_snprintf(buf, 32, "0x%lx", offset);
|
||||
|
|
|
@ -1008,6 +1008,12 @@ static int perf_session__process_user_event(struct perf_session *session, union
|
|||
if (err == 0)
|
||||
perf_session__set_id_hdr_size(session);
|
||||
return err;
|
||||
case PERF_RECORD_HEADER_EVENT_TYPE:
|
||||
/*
|
||||
* Depreceated, but we need to handle it for sake
|
||||
* of old data files create in pipe mode.
|
||||
*/
|
||||
return 0;
|
||||
case PERF_RECORD_HEADER_TRACING_DATA:
|
||||
/* setup for reading amidst mmap */
|
||||
lseek(fd, file_offset, SEEK_SET);
|
||||
|
|
Loading…
Reference in New Issue