Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9d3f94e authored by Ingo Molnar's avatar Ingo Molnar
Browse files

Merge tag 'perf-urgent-for-mingo' of...

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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 337397f3 844ae5b4
Loading
Loading
Loading
Loading
+22 −0
Original line number Original line Diff line number Diff line
@@ -37,6 +37,10 @@
# define MADV_UNMERGEABLE	13
# define MADV_UNMERGEABLE	13
#endif
#endif


#ifndef EFD_SEMAPHORE
# define EFD_SEMAPHORE		1
#endif

struct tp_field {
struct tp_field {
	int offset;
	int offset;
	union {
	union {
@@ -279,6 +283,11 @@ static size_t syscall_arg__scnprintf_strarray(char *bf, size_t size,


#define SCA_STRARRAY syscall_arg__scnprintf_strarray
#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,
static size_t syscall_arg__scnprintf_strhexarray(char *bf, size_t size,
						 struct syscall_arg *arg)
						 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
#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,
static size_t syscall_arg__scnprintf_fd(char *bf, size_t size,
					struct syscall_arg *arg);
					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
#define SCA_SIGNUM syscall_arg__scnprintf_signum


#if defined(__i386__) || defined(__x86_64__)
/*
 * FIXME: Make this available to all arches.
 */
#define TCGETS		0x5401
#define TCGETS		0x5401


static const char *tioctls[] = {
static const char *tioctls[] = {
@@ -860,6 +874,7 @@ static const char *tioctls[] = {
};
};


static DEFINE_STRARRAY_OFFSET(tioctls, 0x5401);
static DEFINE_STRARRAY_OFFSET(tioctls, 0x5401);
#endif /* defined(__i386__) || defined(__x86_64__) */


#define STRARRAY(arg, name, array) \
#define STRARRAY(arg, name, array) \
	  .arg_scnprintf = { [arg] = SCA_STRARRAY, }, \
	  .arg_scnprintf = { [arg] = SCA_STRARRAY, }, \
@@ -941,9 +956,16 @@ static struct syscall_fmt {
	{ .name	    = "getrlimit",  .errmsg = true, STRARRAY(0, resource, rlimit_resources), },
	{ .name	    = "getrlimit",  .errmsg = true, STRARRAY(0, resource, rlimit_resources), },
	{ .name	    = "ioctl",	    .errmsg = true,
	{ .name	    = "ioctl",	    .errmsg = true,
	  .arg_scnprintf = { [0] = SCA_FD, /* fd */ 
	  .arg_scnprintf = { [0] = SCA_FD, /* fd */ 
#if defined(__i386__) || defined(__x86_64__)
/*
 * FIXME: Make this available to all arches.
 */
			     [1] = SCA_STRHEXARRAY, /* cmd */
			     [1] = SCA_STRHEXARRAY, /* cmd */
			     [2] = SCA_HEX, /* arg */ },
			     [2] = SCA_HEX, /* arg */ },
	  .arg_parm	 = { [1] = &strarray__tioctls, /* cmd */ }, },
	  .arg_parm	 = { [1] = &strarray__tioctls, /* cmd */ }, },
#else
			     [2] = SCA_HEX, /* arg */ }, },
#endif
	{ .name	    = "kill",	    .errmsg = true,
	{ .name	    = "kill",	    .errmsg = true,
	  .arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, },
	  .arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, },
	{ .name	    = "linkat",	    .errmsg = true,
	{ .name	    = "linkat",	    .errmsg = true,
+15 −2
Original line number Original line Diff line number Diff line
@@ -1091,12 +1091,12 @@ int is_valid_tracepoint(const char *event_string)
static bool is_event_supported(u8 type, unsigned config)
static bool is_event_supported(u8 type, unsigned config)
{
{
	bool ret = true;
	bool ret = true;
	int open_return;
	struct perf_evsel *evsel;
	struct perf_evsel *evsel;
	struct perf_event_attr attr = {
	struct perf_event_attr attr = {
		.type = type,
		.type = type,
		.config = config,
		.config = config,
		.disabled = 1,
		.disabled = 1,
		.exclude_kernel = 1,
	};
	};
	struct {
	struct {
		struct thread_map map;
		struct thread_map map;
@@ -1108,7 +1108,20 @@ static bool is_event_supported(u8 type, unsigned config)


	evsel = perf_evsel__new(&attr);
	evsel = perf_evsel__new(&attr);
	if (evsel) {
	if (evsel) {
		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;
			ret = perf_evsel__open(evsel, NULL, &tmap.map) >= 0;
		}
		perf_evsel__delete(evsel);
		perf_evsel__delete(evsel);
	}
	}


+1 −1
Original line number Original line Diff line number Diff line
@@ -336,8 +336,8 @@ static int add_exec_to_probe_trace_events(struct probe_trace_event *tevs,
		return ret;
		return ret;


	for (i = 0; i < ntevs && ret >= 0; i++) {
	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.address - stext;
		offset += tevs[i].point.offset;
		tevs[i].point.offset = 0;
		tevs[i].point.offset = 0;
		zfree(&tevs[i].point.symbol);
		zfree(&tevs[i].point.symbol);
		ret = e_snprintf(buf, 32, "0x%lx", offset);
		ret = e_snprintf(buf, 32, "0x%lx", offset);
+6 −0
Original line number Original line Diff line number Diff line
@@ -1008,6 +1008,12 @@ static int perf_session__process_user_event(struct perf_session *session, union
		if (err == 0)
		if (err == 0)
			perf_session__set_id_hdr_size(session);
			perf_session__set_id_hdr_size(session);
		return err;
		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:
	case PERF_RECORD_HEADER_TRACING_DATA:
		/* setup for reading amidst mmap */
		/* setup for reading amidst mmap */
		lseek(fd, file_offset, SEEK_SET);
		lseek(fd, file_offset, SEEK_SET);