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

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

Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux

 into perf/core

Pull perf/core improvements and refactorings from Arnaldo Carvalho de Melo:

New features:

. In perf timechart:
	- Add backtrace support to CPU info
	. Print pid along the name
	. Add support for CPU topology
	. Add new option --highlight'ing threads, be it by name or,
	  if a numeric value is provided, that run more than given duration.
  From Stanislav Fomichev.

Refactorings:

. Rename some struct DSO binary_type related members and methods,
  to clarify its purpose and need for differentiation from symtab_type,
  i.e. one is about the files .text, CFI, etc, i.e. its binary contents,
  and the other is about where the symbol table came from.

. Convert to new topic libraries, starting with an API one (sysfs, debugfs,
  etc), renaming liblk in the process, from Borislav Petkov.

. Get rid of some more panic() like error handling in libtraceevent,
  from Namhyung Kim.

Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 9450d14f f23b24f1
Loading
Loading
Loading
Loading
+6 −6
Original line number Original line Diff line number Diff line
@@ -39,10 +39,10 @@ cpupower: FORCE
cgroup firewire guest usb virtio vm net: FORCE
cgroup firewire guest usb virtio vm net: FORCE
	$(call descend,$@)
	$(call descend,$@)


liblk: FORCE
libapikfs: FORCE
	$(call descend,lib/lk)
	$(call descend,lib/api)


perf: liblk FORCE
perf: libapikfs FORCE
	$(call descend,$@)
	$(call descend,$@)


selftests: FORCE
selftests: FORCE
@@ -80,10 +80,10 @@ cpupower_clean:
cgroup_clean firewire_clean lguest_clean usb_clean virtio_clean vm_clean net_clean:
cgroup_clean firewire_clean lguest_clean usb_clean virtio_clean vm_clean net_clean:
	$(call descend,$(@:_clean=),clean)
	$(call descend,$(@:_clean=),clean)


liblk_clean:
libapikfs_clean:
	$(call descend,lib/lk,clean)
	$(call descend,lib/api,clean)


perf_clean: liblk_clean
perf_clean: libapikfs_clean
	$(call descend,$(@:_clean=),clean)
	$(call descend,$(@:_clean=),clean)


selftests_clean:
selftests_clean:
+11 −7
Original line number Original line Diff line number Diff line
include ../../scripts/Makefile.include
include ../../scripts/Makefile.include
include ../../perf/config/utilities.mak		# QUIET_CLEAN


CC = $(CROSS_COMPILE)gcc
CC = $(CROSS_COMPILE)gcc
AR = $(CROSS_COMPILE)ar
AR = $(CROSS_COMPILE)ar
@@ -7,11 +8,11 @@ AR = $(CROSS_COMPILE)ar
LIB_H=
LIB_H=
LIB_OBJS=
LIB_OBJS=


LIB_H += debugfs.h
LIB_H += fs/debugfs.h


LIB_OBJS += $(OUTPUT)debugfs.o
LIB_OBJS += $(OUTPUT)fs/debugfs.o


LIBFILE = liblk.a
LIBFILE = libapikfs.a


CFLAGS = -ggdb3 -Wall -Wextra -std=gnu99 -Werror -O6 -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) -fPIC
CFLAGS = -ggdb3 -Wall -Wextra -std=gnu99 -Werror -O6 -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) -fPIC
EXTLIBS = -lelf -lpthread -lrt -lm
EXTLIBS = -lelf -lpthread -lrt -lm
@@ -25,14 +26,17 @@ $(LIBFILE): $(LIB_OBJS)


$(LIB_OBJS): $(LIB_H)
$(LIB_OBJS): $(LIB_H)


$(OUTPUT)%.o: %.c
libapi_dirs:
	$(QUIET_MKDIR)mkdir -p $(OUTPUT)fs/

$(OUTPUT)%.o: %.c libapi_dirs
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
$(OUTPUT)%.s: %.c
$(OUTPUT)%.s: %.c libapi_dirs
	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $<
	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $<
$(OUTPUT)%.o: %.S
$(OUTPUT)%.o: %.S libapi_dirs
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<


clean:
clean:
	$(RM) $(LIB_OBJS) $(LIBFILE)
	$(call QUIET_CLEAN, libapi) $(RM) $(LIB_OBJS) $(LIBFILE)


.PHONY: clean
.PHONY: clean
+0 −0

File moved.

+3 −3
Original line number Original line Diff line number Diff line
#ifndef __LK_DEBUGFS_H__
#ifndef __API_DEBUGFS_H__
#define __LK_DEBUGFS_H__
#define __API_DEBUGFS_H__


#define _STR(x) #x
#define _STR(x) #x
#define STR(x) _STR(x)
#define STR(x) _STR(x)
@@ -26,4 +26,4 @@ char *debugfs_mount(const char *mountpoint);


extern char debugfs_mountpoint[];
extern char debugfs_mountpoint[];


#endif /* __LK_DEBUGFS_H__ */
#endif /* __API_DEBUGFS_H__ */
+19 −48
Original line number Original line Diff line number Diff line
@@ -1361,10 +1361,12 @@ enum pevent_errno pevent_filter_add_filter_str(struct event_filter *filter,
		if (ret >= 0 && pevent->test_filters) {
		if (ret >= 0 && pevent->test_filters) {
			char *test;
			char *test;
			test = pevent_filter_make_string(filter, event->event->id);
			test = pevent_filter_make_string(filter, event->event->id);
			if (test) {
				printf(" '%s: %s'\n", event->event->name, test);
				printf(" '%s: %s'\n", event->event->name, test);
				free(test);
				free(test);
			}
			}
		}
		}
	}


	free_events(events);
	free_events(events);


@@ -2050,7 +2052,6 @@ static char *op_to_str(struct event_filter *filter, struct filter_arg *arg)
	int left_val = -1;
	int left_val = -1;
	int right_val = -1;
	int right_val = -1;
	int val;
	int val;
	int len;


	switch (arg->op.type) {
	switch (arg->op.type) {
	case FILTER_OP_AND:
	case FILTER_OP_AND:
@@ -2097,11 +2098,7 @@ static char *op_to_str(struct event_filter *filter, struct filter_arg *arg)
				default:
				default:
					break;
					break;
				}
				}
				str = malloc_or_die(6);
				asprintf(&str, val ? "TRUE" : "FALSE");
				if (val)
					strcpy(str, "TRUE");
				else
					strcpy(str, "FALSE");
				break;
				break;
			}
			}
		}
		}
@@ -2119,10 +2116,7 @@ static char *op_to_str(struct event_filter *filter, struct filter_arg *arg)
			break;
			break;
		}
		}


		len = strlen(left) + strlen(right) + strlen(op) + 10;
		asprintf(&str, "(%s) %s (%s)", left, op, right);
		str = malloc_or_die(len);
		snprintf(str, len, "(%s) %s (%s)",
			 left, op, right);
		break;
		break;


	case FILTER_OP_NOT:
	case FILTER_OP_NOT:
@@ -2138,16 +2132,10 @@ static char *op_to_str(struct event_filter *filter, struct filter_arg *arg)
			right_val = 0;
			right_val = 0;
		if (right_val >= 0) {
		if (right_val >= 0) {
			/* just return the opposite */
			/* just return the opposite */
			str = malloc_or_die(6);
			asprintf(&str, right_val ? "FALSE" : "TRUE");
			if (right_val)
				strcpy(str, "FALSE");
			else
				strcpy(str, "TRUE");
			break;
			break;
		}
		}
		len = strlen(right) + strlen(op) + 3;
		asprintf(&str, "%s(%s)", op, right);
		str = malloc_or_die(len);
		snprintf(str, len, "%s(%s)", op, right);
		break;
		break;


	default:
	default:
@@ -2161,11 +2149,9 @@ static char *op_to_str(struct event_filter *filter, struct filter_arg *arg)


static char *val_to_str(struct event_filter *filter, struct filter_arg *arg)
static char *val_to_str(struct event_filter *filter, struct filter_arg *arg)
{
{
	char *str;
	char *str = NULL;

	str = malloc_or_die(30);


	snprintf(str, 30, "%lld", arg->value.val);
	asprintf(&str, "%lld", arg->value.val);


	return str;
	return str;
}
}
@@ -2181,7 +2167,6 @@ static char *exp_to_str(struct event_filter *filter, struct filter_arg *arg)
	char *rstr;
	char *rstr;
	char *op;
	char *op;
	char *str = NULL;
	char *str = NULL;
	int len;


	lstr = arg_to_str(filter, arg->exp.left);
	lstr = arg_to_str(filter, arg->exp.left);
	rstr = arg_to_str(filter, arg->exp.right);
	rstr = arg_to_str(filter, arg->exp.right);
@@ -2220,12 +2205,11 @@ static char *exp_to_str(struct event_filter *filter, struct filter_arg *arg)
		op = "^";
		op = "^";
		break;
		break;
	default:
	default:
		die("oops in exp");
		op = "[ERROR IN EXPRESSION TYPE]";
		break;
	}
	}


	len = strlen(op) + strlen(lstr) + strlen(rstr) + 4;
	asprintf(&str, "%s %s %s", lstr, op, rstr);
	str = malloc_or_die(len);
	snprintf(str, len, "%s %s %s", lstr, op, rstr);
out:
out:
	free(lstr);
	free(lstr);
	free(rstr);
	free(rstr);
@@ -2239,7 +2223,6 @@ static char *num_to_str(struct event_filter *filter, struct filter_arg *arg)
	char *rstr;
	char *rstr;
	char *str = NULL;
	char *str = NULL;
	char *op = NULL;
	char *op = NULL;
	int len;


	lstr = arg_to_str(filter, arg->num.left);
	lstr = arg_to_str(filter, arg->num.left);
	rstr = arg_to_str(filter, arg->num.right);
	rstr = arg_to_str(filter, arg->num.right);
@@ -2270,10 +2253,7 @@ static char *num_to_str(struct event_filter *filter, struct filter_arg *arg)
		if (!op)
		if (!op)
			op = "<=";
			op = "<=";


		len = strlen(lstr) + strlen(op) + strlen(rstr) + 4;
		asprintf(&str, "%s %s %s", lstr, op, rstr);
		str = malloc_or_die(len);
		sprintf(str, "%s %s %s", lstr, op, rstr);

		break;
		break;


	default:
	default:
@@ -2291,7 +2271,6 @@ static char *str_to_str(struct event_filter *filter, struct filter_arg *arg)
{
{
	char *str = NULL;
	char *str = NULL;
	char *op = NULL;
	char *op = NULL;
	int len;


	switch (arg->str.type) {
	switch (arg->str.type) {
	case FILTER_CMP_MATCH:
	case FILTER_CMP_MATCH:
@@ -2309,12 +2288,8 @@ static char *str_to_str(struct event_filter *filter, struct filter_arg *arg)
		if (!op)
		if (!op)
			op = "!~";
			op = "!~";


		len = strlen(arg->str.field->name) + strlen(op) +
		asprintf(&str, "%s %s \"%s\"",
			strlen(arg->str.val) + 6;
			 arg->str.field->name, op, arg->str.val);
		str = malloc_or_die(len);
		snprintf(str, len, "%s %s \"%s\"",
			 arg->str.field->name,
			 op, arg->str.val);
		break;
		break;


	default:
	default:
@@ -2326,15 +2301,11 @@ static char *str_to_str(struct event_filter *filter, struct filter_arg *arg)


static char *arg_to_str(struct event_filter *filter, struct filter_arg *arg)
static char *arg_to_str(struct event_filter *filter, struct filter_arg *arg)
{
{
	char *str;
	char *str = NULL;


	switch (arg->type) {
	switch (arg->type) {
	case FILTER_ARG_BOOLEAN:
	case FILTER_ARG_BOOLEAN:
		str = malloc_or_die(6);
		asprintf(&str, arg->boolean.value ? "TRUE" : "FALSE");
		if (arg->boolean.value)
			strcpy(str, "TRUE");
		else
			strcpy(str, "FALSE");
		return str;
		return str;


	case FILTER_ARG_OP:
	case FILTER_ARG_OP:
@@ -2369,7 +2340,7 @@ static char *arg_to_str(struct event_filter *filter, struct filter_arg *arg)
 *
 *
 * Returns a string that displays the filter contents.
 * Returns a string that displays the filter contents.
 *  This string must be freed with free(str).
 *  This string must be freed with free(str).
 *  NULL is returned if no filter is found.
 *  NULL is returned if no filter is found or allocation failed.
 */
 */
char *
char *
pevent_filter_make_string(struct event_filter *filter, int event_id)
pevent_filter_make_string(struct event_filter *filter, int event_id)
Loading