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

Commit d2359a51 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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

Pull perf tooling fixes from Thomas Gleixner:
 "Perf tooling fixes all over the place:

   - Fix the selection of the main thread COMM in db-export

   - Fix the disassemmbly display for BPF in annotate

   - Fix cpumap mask setup in perf ftrace when only one CPU is present

   - Add the missing 'cpu_clk_unhalted.core' event

   - Fix CPU 0 bindings in NUMA benchmarks

   - Fix the module size calculations for s390

   - Handle the gap between kernel end and module start on s390
     correctly

   - Build and typo fixes"

* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  perf pmu-events: Fix missing "cpu_clk_unhalted.core" event
  perf annotate: Fix s390 gap between kernel end and module start
  perf record: Fix module size on s390
  perf tools: Fix include paths in ui directory
  perf tools: Fix a typo in a variable name in the Documentation Makefile
  perf cpumap: Fix writing to illegal memory in handling cpumap mask
  perf ftrace: Fix failure to set cpumask when only one cpu is present
  perf db-export: Fix thread__exec_comm()
  perf annotate: Fix printing of unaugmented disassembled instructions from BPF
  perf bench numa: Fix cpu0 binding
parents dcbb4a15 d7731b81
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -242,7 +242,7 @@ $(OUTPUT)doc.dep : $(wildcard *.txt) build-docdep.perl
	$(PERL_PATH) ./build-docdep.perl >$@+ $(QUIET_STDERR) && \
	$(PERL_PATH) ./build-docdep.perl >$@+ $(QUIET_STDERR) && \
	mv $@+ $@
	mv $@+ $@


-include $(OUPTUT)doc.dep
-include $(OUTPUT)doc.dep


_cmds_txt = cmds-ancillaryinterrogators.txt \
_cmds_txt = cmds-ancillaryinterrogators.txt \
	cmds-ancillarymanipulators.txt \
	cmds-ancillarymanipulators.txt \
+30 −1
Original line number Original line Diff line number Diff line
@@ -6,8 +6,9 @@
#include "machine.h"
#include "machine.h"
#include "api/fs/fs.h"
#include "api/fs/fs.h"
#include "debug.h"
#include "debug.h"
#include "symbol.h"


int arch__fix_module_text_start(u64 *start, const char *name)
int arch__fix_module_text_start(u64 *start, u64 *size, const char *name)
{
{
	u64 m_start = *start;
	u64 m_start = *start;
	char path[PATH_MAX];
	char path[PATH_MAX];
@@ -17,7 +18,35 @@ int arch__fix_module_text_start(u64 *start, const char *name)
	if (sysfs__read_ull(path, (unsigned long long *)start) < 0) {
	if (sysfs__read_ull(path, (unsigned long long *)start) < 0) {
		pr_debug2("Using module %s start:%#lx\n", path, m_start);
		pr_debug2("Using module %s start:%#lx\n", path, m_start);
		*start = m_start;
		*start = m_start;
	} else {
		/* Successful read of the modules segment text start address.
		 * Calculate difference between module start address
		 * in memory and module text segment start address.
		 * For example module load address is 0x3ff8011b000
		 * (from /proc/modules) and module text segment start
		 * address is 0x3ff8011b870 (from file above).
		 *
		 * Adjust the module size and subtract the GOT table
		 * size located at the beginning of the module.
		 */
		*size -= (*start - m_start);
	}
	}


	return 0;
	return 0;
}
}

/* On s390 kernel text segment start is located at very low memory addresses,
 * for example 0x10000. Modules are located at very high memory addresses,
 * for example 0x3ff xxxx xxxx. The gap between end of kernel text segment
 * and beginning of first module's text segment is very big.
 * Therefore do not fill this gap and do not assign it to the kernel dso map.
 */
void arch__symbols__fixup_end(struct symbol *p, struct symbol *c)
{
	if (strchr(p->name, '[') == NULL && strchr(c->name, '['))
		/* Last kernel symbol mapped to end of page */
		p->end = roundup(p->end, page_size);
	else
		p->end = c->start;
	pr_debug4("%s sym:%s end:%#lx\n", __func__, p->name, p->end);
}
+4 −2
Original line number Original line Diff line number Diff line
@@ -379,8 +379,10 @@ static u8 *alloc_data(ssize_t bytes0, int map_flags,


	/* Allocate and initialize all memory on CPU#0: */
	/* Allocate and initialize all memory on CPU#0: */
	if (init_cpu0) {
	if (init_cpu0) {
		orig_mask = bind_to_node(0);
		int node = numa_node_of_cpu(0);
		bind_to_memnode(0);

		orig_mask = bind_to_node(node);
		bind_to_memnode(node);
	}
	}


	bytes = bytes0 + HPSIZE;
	bytes = bytes0 + HPSIZE;
+1 −1
Original line number Original line Diff line number Diff line
@@ -173,7 +173,7 @@ static int set_tracing_cpumask(struct cpu_map *cpumap)
	int last_cpu;
	int last_cpu;


	last_cpu = cpu_map__cpu(cpumap, cpumap->nr - 1);
	last_cpu = cpu_map__cpu(cpumap, cpumap->nr - 1);
	mask_size = (last_cpu + 3) / 4 + 1;
	mask_size = last_cpu / 4 + 2; /* one more byte for EOS */
	mask_size += last_cpu / 32; /* ',' is needed for every 32th cpus */
	mask_size += last_cpu / 32; /* ',' is needed for every 32th cpus */


	cpumask = malloc(mask_size);
	cpumask = malloc(mask_size);
+1 −0
Original line number Original line Diff line number Diff line
@@ -453,6 +453,7 @@ static struct fixed {
	{ "inst_retired.any_p", "event=0xc0" },
	{ "inst_retired.any_p", "event=0xc0" },
	{ "cpu_clk_unhalted.ref", "event=0x0,umask=0x03" },
	{ "cpu_clk_unhalted.ref", "event=0x0,umask=0x03" },
	{ "cpu_clk_unhalted.thread", "event=0x3c" },
	{ "cpu_clk_unhalted.thread", "event=0x3c" },
	{ "cpu_clk_unhalted.core", "event=0x3c" },
	{ "cpu_clk_unhalted.thread_any", "event=0x3c,any=1" },
	{ "cpu_clk_unhalted.thread_any", "event=0x3c,any=1" },
	{ NULL, NULL},
	{ NULL, NULL},
};
};
Loading