Commit b95b4d5e authored by Ingo Molnar's avatar Ingo Molnar

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

Merge tag 'perf-urgent-for-mingo-5.6-20200303' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent

Pull perf/urgent fixes from Arnaldo Carvalho de Melo:

perf symbols:

  Arnaldo Carvalho de Melo:

  - Don't try to find a vmlinux file when looking for kernel modules,
    fixing symbol resolution in systems with compressed kernel modules.

perf env:

  Arnaldo Carvalho de Melo:

  - Do not return pointers to local variables, fixing valid warning from
    gcc 10 for corner case that stops the build due to -Werror.

perf tests:

  Arnaldo Carvalho de Melo:

  - Make global variable static in the bp_account entry to fix build
    with gcc 10.

perf parse-events:

  Arnaldo Carvalho de Melo:

  - Use asprintf() instead of strncpy() to read tracepoint files, addressing
    compiler warning that stops the build as we use -Werror.

perf bench:

  Arnaldo Carvalho de Melo:

  - Share some global variables to fix build with gcc 10.
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 8b614cb8 b5c09518
...@@ -2,6 +2,10 @@ ...@@ -2,6 +2,10 @@
#ifndef BENCH_H #ifndef BENCH_H
#define BENCH_H #define BENCH_H
#include <sys/time.h>
extern struct timeval bench__start, bench__end, bench__runtime;
/* /*
* The madvise transparent hugepage constants were added in glibc * The madvise transparent hugepage constants were added in glibc
* 2.13. For compatibility with older versions of glibc, define these * 2.13. For compatibility with older versions of glibc, define these
......
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
static unsigned int nthreads = 0; static unsigned int nthreads = 0;
static unsigned int nsecs = 8; static unsigned int nsecs = 8;
struct timeval start, end, runtime;
static bool done, __verbose, randomize; static bool done, __verbose, randomize;
/* /*
...@@ -94,8 +93,8 @@ static void toggle_done(int sig __maybe_unused, ...@@ -94,8 +93,8 @@ static void toggle_done(int sig __maybe_unused,
{ {
/* inform all threads that we're done for the day */ /* inform all threads that we're done for the day */
done = true; done = true;
gettimeofday(&end, NULL); gettimeofday(&bench__end, NULL);
timersub(&end, &start, &runtime); timersub(&bench__end, &bench__start, &bench__runtime);
} }
static void nest_epollfd(void) static void nest_epollfd(void)
...@@ -361,7 +360,7 @@ int bench_epoll_ctl(int argc, const char **argv) ...@@ -361,7 +360,7 @@ int bench_epoll_ctl(int argc, const char **argv)
threads_starting = nthreads; threads_starting = nthreads;
gettimeofday(&start, NULL); gettimeofday(&bench__start, NULL);
do_threads(worker, cpu); do_threads(worker, cpu);
......
...@@ -90,7 +90,6 @@ ...@@ -90,7 +90,6 @@
static unsigned int nthreads = 0; static unsigned int nthreads = 0;
static unsigned int nsecs = 8; static unsigned int nsecs = 8;
struct timeval start, end, runtime;
static bool wdone, done, __verbose, randomize, nonblocking; static bool wdone, done, __verbose, randomize, nonblocking;
/* /*
...@@ -276,8 +275,8 @@ static void toggle_done(int sig __maybe_unused, ...@@ -276,8 +275,8 @@ static void toggle_done(int sig __maybe_unused,
{ {
/* inform all threads that we're done for the day */ /* inform all threads that we're done for the day */
done = true; done = true;
gettimeofday(&end, NULL); gettimeofday(&bench__end, NULL);
timersub(&end, &start, &runtime); timersub(&bench__end, &bench__start, &bench__runtime);
} }
static void print_summary(void) static void print_summary(void)
...@@ -287,7 +286,7 @@ static void print_summary(void) ...@@ -287,7 +286,7 @@ static void print_summary(void)
printf("\nAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n", printf("\nAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n",
avg, rel_stddev_stats(stddev, avg), avg, rel_stddev_stats(stddev, avg),
(int) runtime.tv_sec); (int)bench__runtime.tv_sec);
} }
static int do_threads(struct worker *worker, struct perf_cpu_map *cpu) static int do_threads(struct worker *worker, struct perf_cpu_map *cpu)
...@@ -479,7 +478,7 @@ int bench_epoll_wait(int argc, const char **argv) ...@@ -479,7 +478,7 @@ int bench_epoll_wait(int argc, const char **argv)
threads_starting = nthreads; threads_starting = nthreads;
gettimeofday(&start, NULL); gettimeofday(&bench__start, NULL);
do_threads(worker, cpu); do_threads(worker, cpu);
...@@ -519,7 +518,7 @@ int bench_epoll_wait(int argc, const char **argv) ...@@ -519,7 +518,7 @@ int bench_epoll_wait(int argc, const char **argv)
qsort(worker, nthreads, sizeof(struct worker), cmpworker); qsort(worker, nthreads, sizeof(struct worker), cmpworker);
for (i = 0; i < nthreads; i++) { for (i = 0; i < nthreads; i++) {
unsigned long t = worker[i].ops/runtime.tv_sec; unsigned long t = worker[i].ops / bench__runtime.tv_sec;
update_stats(&throughput_stats, t); update_stats(&throughput_stats, t);
......
...@@ -37,7 +37,7 @@ static unsigned int nfutexes = 1024; ...@@ -37,7 +37,7 @@ static unsigned int nfutexes = 1024;
static bool fshared = false, done = false, silent = false; static bool fshared = false, done = false, silent = false;
static int futex_flag = 0; static int futex_flag = 0;
struct timeval start, end, runtime; struct timeval bench__start, bench__end, bench__runtime;
static pthread_mutex_t thread_lock; static pthread_mutex_t thread_lock;
static unsigned int threads_starting; static unsigned int threads_starting;
static struct stats throughput_stats; static struct stats throughput_stats;
...@@ -103,8 +103,8 @@ static void toggle_done(int sig __maybe_unused, ...@@ -103,8 +103,8 @@ static void toggle_done(int sig __maybe_unused,
{ {
/* inform all threads that we're done for the day */ /* inform all threads that we're done for the day */
done = true; done = true;
gettimeofday(&end, NULL); gettimeofday(&bench__end, NULL);
timersub(&end, &start, &runtime); timersub(&bench__end, &bench__start, &bench__runtime);
} }
static void print_summary(void) static void print_summary(void)
...@@ -114,7 +114,7 @@ static void print_summary(void) ...@@ -114,7 +114,7 @@ static void print_summary(void)
printf("%sAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n", printf("%sAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n",
!silent ? "\n" : "", avg, rel_stddev_stats(stddev, avg), !silent ? "\n" : "", avg, rel_stddev_stats(stddev, avg),
(int) runtime.tv_sec); (int)bench__runtime.tv_sec);
} }
int bench_futex_hash(int argc, const char **argv) int bench_futex_hash(int argc, const char **argv)
...@@ -161,7 +161,7 @@ int bench_futex_hash(int argc, const char **argv) ...@@ -161,7 +161,7 @@ int bench_futex_hash(int argc, const char **argv)
threads_starting = nthreads; threads_starting = nthreads;
pthread_attr_init(&thread_attr); pthread_attr_init(&thread_attr);
gettimeofday(&start, NULL); gettimeofday(&bench__start, NULL);
for (i = 0; i < nthreads; i++) { for (i = 0; i < nthreads; i++) {
worker[i].tid = i; worker[i].tid = i;
worker[i].futex = calloc(nfutexes, sizeof(*worker[i].futex)); worker[i].futex = calloc(nfutexes, sizeof(*worker[i].futex));
...@@ -204,7 +204,7 @@ int bench_futex_hash(int argc, const char **argv) ...@@ -204,7 +204,7 @@ int bench_futex_hash(int argc, const char **argv)
pthread_mutex_destroy(&thread_lock); pthread_mutex_destroy(&thread_lock);
for (i = 0; i < nthreads; i++) { for (i = 0; i < nthreads; i++) {
unsigned long t = worker[i].ops/runtime.tv_sec; unsigned long t = worker[i].ops / bench__runtime.tv_sec;
update_stats(&throughput_stats, t); update_stats(&throughput_stats, t);
if (!silent) { if (!silent) {
if (nfutexes == 1) if (nfutexes == 1)
......
...@@ -37,7 +37,6 @@ static bool silent = false, multi = false; ...@@ -37,7 +37,6 @@ static bool silent = false, multi = false;
static bool done = false, fshared = false; static bool done = false, fshared = false;
static unsigned int nthreads = 0; static unsigned int nthreads = 0;
static int futex_flag = 0; static int futex_flag = 0;
struct timeval start, end, runtime;
static pthread_mutex_t thread_lock; static pthread_mutex_t thread_lock;
static unsigned int threads_starting; static unsigned int threads_starting;
static struct stats throughput_stats; static struct stats throughput_stats;
...@@ -64,7 +63,7 @@ static void print_summary(void) ...@@ -64,7 +63,7 @@ static void print_summary(void)
printf("%sAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n", printf("%sAveraged %ld operations/sec (+- %.2f%%), total secs = %d\n",
!silent ? "\n" : "", avg, rel_stddev_stats(stddev, avg), !silent ? "\n" : "", avg, rel_stddev_stats(stddev, avg),
(int) runtime.tv_sec); (int)bench__runtime.tv_sec);
} }
static void toggle_done(int sig __maybe_unused, static void toggle_done(int sig __maybe_unused,
...@@ -73,8 +72,8 @@ static void toggle_done(int sig __maybe_unused, ...@@ -73,8 +72,8 @@ static void toggle_done(int sig __maybe_unused,
{ {
/* inform all threads that we're done for the day */ /* inform all threads that we're done for the day */
done = true; done = true;
gettimeofday(&end, NULL); gettimeofday(&bench__end, NULL);
timersub(&end, &start, &runtime); timersub(&bench__end, &bench__start, &bench__runtime);
} }
static void *workerfn(void *arg) static void *workerfn(void *arg)
...@@ -185,7 +184,7 @@ int bench_futex_lock_pi(int argc, const char **argv) ...@@ -185,7 +184,7 @@ int bench_futex_lock_pi(int argc, const char **argv)
threads_starting = nthreads; threads_starting = nthreads;
pthread_attr_init(&thread_attr); pthread_attr_init(&thread_attr);
gettimeofday(&start, NULL); gettimeofday(&bench__start, NULL);
create_threads(worker, thread_attr, cpu); create_threads(worker, thread_attr, cpu);
pthread_attr_destroy(&thread_attr); pthread_attr_destroy(&thread_attr);
...@@ -211,7 +210,7 @@ int bench_futex_lock_pi(int argc, const char **argv) ...@@ -211,7 +210,7 @@ int bench_futex_lock_pi(int argc, const char **argv)
pthread_mutex_destroy(&thread_lock); pthread_mutex_destroy(&thread_lock);
for (i = 0; i < nthreads; i++) { for (i = 0; i < nthreads; i++) {
unsigned long t = worker[i].ops/runtime.tv_sec; unsigned long t = worker[i].ops / bench__runtime.tv_sec;
update_stats(&throughput_stats, t); update_stats(&throughput_stats, t);
if (!silent) if (!silent)
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#include "../perf-sys.h" #include "../perf-sys.h"
#include "cloexec.h" #include "cloexec.h"
volatile long the_var; static volatile long the_var;
static noinline int test_function(void) static noinline int test_function(void)
{ {
......
...@@ -343,11 +343,11 @@ static const char *normalize_arch(char *arch) ...@@ -343,11 +343,11 @@ static const char *normalize_arch(char *arch)
const char *perf_env__arch(struct perf_env *env) const char *perf_env__arch(struct perf_env *env)
{ {
struct utsname uts;
char *arch_name; char *arch_name;
if (!env || !env->arch) { /* Assume local operation */ if (!env || !env->arch) { /* Assume local operation */
if (uname(&uts) < 0) static struct utsname uts = { .machine[0] = '\0', };
if (uts.machine[0] == '\0' && uname(&uts) < 0)
return NULL; return NULL;
arch_name = uts.machine; arch_name = uts.machine;
} else } else
......
...@@ -257,21 +257,15 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config) ...@@ -257,21 +257,15 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config)
path = zalloc(sizeof(*path)); path = zalloc(sizeof(*path));
if (!path) if (!path)
return NULL; return NULL;
path->system = malloc(MAX_EVENT_LENGTH); if (asprintf(&path->system, "%.*s", MAX_EVENT_LENGTH, sys_dirent->d_name) < 0) {
if (!path->system) {
free(path); free(path);
return NULL; return NULL;
} }
path->name = malloc(MAX_EVENT_LENGTH); if (asprintf(&path->name, "%.*s", MAX_EVENT_LENGTH, evt_dirent->d_name) < 0) {
if (!path->name) {
zfree(&path->system); zfree(&path->system);
free(path); free(path);
return NULL; return NULL;
} }
strncpy(path->system, sys_dirent->d_name,
MAX_EVENT_LENGTH);
strncpy(path->name, evt_dirent->d_name,
MAX_EVENT_LENGTH);
return path; return path;
} }
} }
......
...@@ -1622,7 +1622,12 @@ int dso__load(struct dso *dso, struct map *map) ...@@ -1622,7 +1622,12 @@ int dso__load(struct dso *dso, struct map *map)
goto out; goto out;
} }
if (dso->kernel) { kmod = dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE ||
dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP ||
dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE ||
dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
if (dso->kernel && !kmod) {
if (dso->kernel == DSO_TYPE_KERNEL) if (dso->kernel == DSO_TYPE_KERNEL)
ret = dso__load_kernel_sym(dso, map); ret = dso__load_kernel_sym(dso, map);
else if (dso->kernel == DSO_TYPE_GUEST_KERNEL) else if (dso->kernel == DSO_TYPE_GUEST_KERNEL)
...@@ -1650,12 +1655,6 @@ int dso__load(struct dso *dso, struct map *map) ...@@ -1650,12 +1655,6 @@ int dso__load(struct dso *dso, struct map *map)
if (!name) if (!name)
goto out; goto out;
kmod = dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE ||
dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP ||
dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE ||
dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
/* /*
* Read the build id if possible. This is required for * Read the build id if possible. This is required for
* DSO_BINARY_TYPE__BUILDID_DEBUGINFO to work * DSO_BINARY_TYPE__BUILDID_DEBUGINFO to work
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment