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

Commit 6fa41366 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'perf-fixes-for-linus' of...

Merge branch 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  powerpc/perf_events: Fix call-graph recording, add perf_arch_fetch_caller_regs
  perf top: Add missing initialization to zero
  perf probe: Use original address instead of CU-based address
  perf probe: Fix offset to allow signed value
  perf top: Improve the autosizing of column lenghts
  perf probe: Fix need_dwarf flag if lazy matching is used
  perf probe: Fix probe_point buffer overrun
parents 309d1dcb 9eff26ea
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#define PPC_LLARX(t, a, b, eh)	PPC_LDARX(t, a, b, eh)
#define PPC_STLCX	stringify_in_c(stdcx.)
#define PPC_CNTLZL	stringify_in_c(cntlzd)
#define PPC_LR_STKOFF	16

/* Move to CR, single-entry optimized version. Only available
 * on POWER4 and later.
@@ -51,6 +52,7 @@
#define PPC_STLCX	stringify_in_c(stwcx.)
#define PPC_CNTLZL	stringify_in_c(cntlzw)
#define PPC_MTOCRF	stringify_in_c(mtcrf)
#define PPC_LR_STKOFF	4

#endif

+28 −0
Original line number Diff line number Diff line
@@ -127,3 +127,31 @@ _GLOBAL(__setup_cpu_power7)
_GLOBAL(__restore_cpu_power7)
	/* place holder */
	blr

#ifdef CONFIG_EVENT_TRACING
/*
 * Get a minimal set of registers for our caller's nth caller.
 * r3 = regs pointer, r5 = n.
 *
 * We only get R1 (stack pointer), NIP (next instruction pointer)
 * and LR (link register).  These are all we can get in the
 * general case without doing complicated stack unwinding, but
 * fortunately they are enough to do a stack backtrace, which
 * is all we need them for.
 */
_GLOBAL(perf_arch_fetch_caller_regs)
	mr	r6,r1
	cmpwi	r5,0
	mflr	r4
	ble	2f
	mtctr	r5
1:	PPC_LL	r6,0(r6)
	bdnz	1b
	PPC_LL	r4,PPC_LR_STKOFF(r6)
2:	PPC_LL	r7,0(r6)
	PPC_LL	r7,PPC_LR_STKOFF(r7)
	PPC_STL	r6,GPR1-STACK_FRAME_OVERHEAD(r3)
	PPC_STL	r4,_NIP-STACK_FRAME_OVERHEAD(r3)
	PPC_STL	r7,_LINK-STACK_FRAME_OVERHEAD(r3)
	blr
#endif /* CONFIG_EVENT_TRACING */
+0 −1
Original line number Diff line number Diff line
@@ -47,7 +47,6 @@
#include "util/probe-event.h"

#define MAX_PATH_LEN 256
#define MAX_PROBES 128

/* Session management structure */
static struct {
+9 −4
Original line number Diff line number Diff line
@@ -455,7 +455,7 @@ static void print_sym_table(void)
	struct sym_entry *syme, *n;
	struct rb_root tmp = RB_ROOT;
	struct rb_node *nd;
	int sym_width = 0, dso_width = 0, max_dso_width;
	int sym_width = 0, dso_width = 0, dso_short_width = 0;
	const int win_width = winsize.ws_col - 1;

	samples = userspace_samples = 0;
@@ -545,15 +545,20 @@ static void print_sym_table(void)
		if (syme->map->dso->long_name_len > dso_width)
			dso_width = syme->map->dso->long_name_len;

		if (syme->map->dso->short_name_len > dso_short_width)
			dso_short_width = syme->map->dso->short_name_len;

		if (syme->name_len > sym_width)
			sym_width = syme->name_len;
	}

	printed = 0;

	max_dso_width = winsize.ws_col - sym_width - 29;
	if (dso_width > max_dso_width)
		dso_width = max_dso_width;
	if (sym_width + dso_width > winsize.ws_col - 29) {
		dso_width = dso_short_width;
		if (sym_width + dso_width > winsize.ws_col - 29)
			sym_width = winsize.ws_col - dso_width - 29;
	}
	putchar('\n');
	if (nr_counters == 1)
		printf("             samples  pcnt");
+1 −1
Original line number Diff line number Diff line
@@ -242,7 +242,7 @@ void parse_perf_probe_event(const char *str, struct probe_point *pp,

	/* Parse probe point */
	parse_perf_probe_probepoint(argv[0], pp);
	if (pp->file || pp->line)
	if (pp->file || pp->line || pp->lazy_line)
		*need_dwarf = true;

	/* Copy arguments and ensure return probe has no C argument */
Loading