perf tooling updates
Subsystems (4)
Linus,
Please pull the latest perf-urgent-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf-urgent-for-linus
# HEAD: 2573be22e5b6f24a0cabc97715c808c47e29eaaf Merge tag 'perf-core-for-mingo-4.21-20190103' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent
A final batch of perf tooling changes: mostly fixes and small improvements.
Thanks,
Ingo
------------------>
Adrian Hunter (8):
perf thread-stack: Simplify some code in thread_stack__process() perf thread-stack: Tidy thread_stack__bottom() usage perf thread-stack: Avoid direct reference to the thread's stack perf thread-stack: Allow for a thread stack array
perf thread-stack: Factor out thread_stack__init() perf thread-stack: Allocate an array of thread stacks perf thread-stack: Fix thread stack processing for the idle task perf session: Add comment for perf_session__register_idle_thread()
Andi Kleen (1):
perf script: Fix LBR skid dump problems in brstackinsn
Arnaldo Carvalho de Melo (11):
perf trace: Check if the raw_syscalls:sys_{enter,exit} are setup before setting tp filter perf beauty mmap: PROT_WRITE should come before PROT_EXEC
perf trace: Do not hardcode the size of the tracepoint common_ fields
perf trace: Rename thread_thread->paths to thread_trace->files
perf trace: Move the files table resizing to outside set_pathname()
perf trace: Store the major number for a file when storing its pathname tools headers uapi: Grab a copy of usbdevice_fs.h
perf beauty ioctl: Add generator for USBDEVFS_ ioctl commands
perf trace: Wire up ioctl's USBDEBFS_ cmd table generator
perf trace beauty: Export function to get the files for a thread
perf trace beauty ioctl: Beautify USBDEVFS_ commands
Colin Ian King (1):
perf trace: Use correct SECCOMP prefix spelling, "SECOMP_*" -> "SECCOMP_*"
Jiri Olsa (7):
perf python: Do not force closing original perf descriptor in evlist.get_pollfd() perf c2c: Change the default coalesce setup
perf c2c: Increase the HITM ratio limit for displayed cachelines
tools power x86_energy_perf_policy: Override CFLAGS assignments and add LDFLAGS to build command tools thermal tmon: Allow overriding CFLAGS assignments
tools power turbostat: Override CFLAGS assignments and add LDFLAGS to build command tools gpio: Allow overriding CFLAGS
Stanislav Fomichev (1):
perf build: Don't unconditionally link the libbfd feature test to -liberty and -lz
tools/build/Makefile.feature | 4 +- tools/build/feature/Makefile | 10 +- tools/gpio/Makefile | 2 +- tools/include/uapi/linux/usbdevice_fs.h | 201 ++++++++++++++++++ tools/perf/Makefile.config | 44 ++-- tools/perf/Makefile.perf | 8 + tools/perf/builtin-c2c.c | 4 +- tools/perf/builtin-script.c | 21 +- tools/perf/builtin-trace.c | 142 +++++++++---- tools/perf/check-headers.sh | 1 + tools/perf/trace/beauty/beauty.h | 7 + tools/perf/trace/beauty/ioctl.c | 22 ++ tools/perf/trace/beauty/mmap.c | 2 +- tools/perf/trace/beauty/seccomp.c | 4 +- tools/perf/trace/beauty/usbdevfs_ioctl.sh | 19 ++ tools/perf/util/dump-insn.c | 8 + tools/perf/util/dump-insn.h | 2 + tools/perf/util/intel-bts.c | 4 +- .../util/intel-pt-decoder/intel-pt-insn-decoder.c | 8 + tools/perf/util/intel-pt.c | 6 +- tools/perf/util/python.c | 3 +- tools/perf/util/session.c | 7 + tools/perf/util/thread-stack.c | 227 +++++++++++++++------ tools/perf/util/thread-stack.h | 8 +- tools/power/x86/turbostat/Makefile | 8 +- tools/power/x86/x86_energy_perf_policy/Makefile | 6 +- tools/thermal/tmon/Makefile | 8 +- 27 files changed, 620 insertions(+), 166 deletions(-) create mode 100644 tools/include/uapi/linux/usbdevice_fs.h create mode 100755 tools/perf/trace/beauty/usbdevfs_ioctl.sh
tools/build/Makefile.feature +2 -2
@@ -82,8 +82,8 @@ FEATURE_TESTS_EXTRA := \ cplus-demangle \ hello \ libbabeltrace \ - liberty \ - liberty-z \ + libbfd-liberty \ + libbfd-liberty-z \ libunwind-debug-frame \ libunwind-debug-frame-arm \ libunwind-debug-frame-aarch64 \
tools/build/feature/Makefile +5 -5
@@ -17,8 +17,8 @@ FILES= \ test-libbfd.bin \ test-disassembler-four-args.bin \ test-reallocarray.bin \ - test-liberty.bin \ - test-liberty-z.bin \ + test-libbfd-liberty.bin \ + test-libbfd-liberty-z.bin \ test-cplus-demangle.bin \ test-libelf.bin \ test-libelf-getphdrnum.bin \
@@ -210,7 +210,7 @@ $(OUTPUT)test-libpython-version.bin: $(BUILD) $(OUTPUT)test-libbfd.bin: - $(BUILD) -DPACKAGE='"perf"' -lbfd -lz -liberty -ldl + $(BUILD) -DPACKAGE='"perf"' -lbfd -ldl $(OUTPUT)test-disassembler-four-args.bin: $(BUILD) -DPACKAGE='"perf"' -lbfd -lopcodes
@@ -218,10 +218,10 @@ $(OUTPUT)test-disassembler-four-args.bin: $(OUTPUT)test-reallocarray.bin: $(BUILD) -$(OUTPUT)test-liberty.bin: +$(OUTPUT)test-libbfd-liberty.bin: $(CC) $(CFLAGS) -Wall -Werror -o $@ test-libbfd.c -DPACKAGE='"perf"' $(LDFLAGS) -lbfd -ldl -liberty -$(OUTPUT)test-liberty-z.bin: +$(OUTPUT)test-libbfd-liberty-z.bin: $(CC) $(CFLAGS) -Wall -Werror -o $@ test-libbfd.c -DPACKAGE='"perf"' $(LDFLAGS) -lbfd -ldl -liberty -lz $(OUTPUT)test-cplus-demangle.bin:
tools/gpio/Makefile +1 -1
@@ -12,7 +12,7 @@ endif # (this improves performance and avoids hard-to-debug behaviour); MAKEFLAGS += -r -CFLAGS += -O2 -Wall -g -D_GNU_SOURCE -I$(OUTPUT)include +override CFLAGS += -O2 -Wall -g -D_GNU_SOURCE -I$(OUTPUT)include ALL_TARGETS := lsgpio gpio-hammer gpio-event-mon ALL_PROGRAMS := $(patsubst %,$(OUTPUT)%,$(ALL_TARGETS))
tools/include/uapi/linux/usbdevice_fs.h new file +201 -0
201 lines not on this page · raw message
tools/perf/Makefile.config +23 -21
65 lines not on this page · raw message
tools/perf/Makefile.perf +8 -0
@@ -497,6 +497,12 @@ prctl_option_tbl := $(srctree)/tools/perf/trace/beauty/prctl_option.sh $(prctl_option_array): $(prctl_hdr_dir)/prctl.h $(prctl_option_tbl) $(Q)$(SHELL) '$(prctl_option_tbl)' $(prctl_hdr_dir) > $@ +usbdevfs_ioctl_array := $(beauty_ioctl_outdir)/usbdevfs_ioctl_array.c +usbdevfs_ioctl_tbl := $(srctree)/tools/perf/trace/beauty/usbdevfs_ioctl.sh + +$(usbdevfs_ioctl_array): $(linux_uapi_dir)/usbdevice_fs.h $(usbdevfs_ioctl_tbl) + $(Q)$(SHELL) '$(usbdevfs_ioctl_tbl)' $(linux_uapi_dir) > $@ + x86_arch_prctl_code_array := $(beauty_outdir)/x86_arch_prctl_code_array.c x86_arch_prctl_code_tbl := $(srctree)/tools/perf/trace/beauty/x86_arch_prctl.sh
@@ -624,6 +630,7 @@ prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders $(drm_ioc $(mount_flags_array) \ $(perf_ioctl_array) \ $(prctl_option_array) \ + $(usbdevfs_ioctl_array) \ $(x86_arch_prctl_code_array) \ $(rename_flags_array) \ $(arch_errno_name_array)
@@ -923,6 +930,7 @@ clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clea $(OUTPUT)$(vhost_virtio_ioctl_array) \ $(OUTPUT)$(perf_ioctl_array) \ $(OUTPUT)$(prctl_option_array) \ + $(OUTPUT)$(usbdevfs_ioctl_array) \ $(OUTPUT)$(x86_arch_prctl_code_array) \ $(OUTPUT)$(rename_flags_array) \ $(OUTPUT)$(arch_errno_name_array)
tools/perf/builtin-c2c.c +2 -2
@@ -68,7 +68,7 @@ struct c2c_hist_entry {struct hist_entry he; }; -static char const *coalesce_default ="pid,iaddr" ; +static char const *coalesce_default ="iaddr" ;struct perf_c2c {struct perf_tool tool;
@@ -1878,7 +1878,7 @@ static int c2c_hists__reinit(struct c2c_hists *c2c_hists,return hpp_list__parse (&c2c_hists->list, output, sort); } -#define DISPLAY_LINE_LIMIT 0.0005 +#define DISPLAY_LINE_LIMIT 0.001static bool he__display (struct hist_entry *he,struct c2c_stats *stats) {
tools/perf/builtin-script.c +18 -3
@@ -1073,9 +1073,18 @@ static int perf_sample__fprintf_brstackinsn(struct perf_sample *sample,/* * Print final block upto sample +* +* Due to pipeline delays the LBRs might be missing a branch +* or two, which can result in very large or negative blocks +* between final branch and sample. When this happens just +* continue walking after the last TO until we hit a branch. */ start = br->entries[0 ].to; end = sample->ip; +if (end < start) { +/* Missing jump. Scan 128 bytes for the next branch */ + end = start +128 ; + } len =grab_bb (buffer, start, end, machine, thread, &x.is64bit, &x.cpumode, true); printed +=ip__fprintf_sym (start, thread, x.cpumode, x.cpu, &lastsym, attr, fp);if (len <=0 ) {
@@ -1084,7 +1093,6 @@ static int perf_sample__fprintf_brstackinsn(struct perf_sample *sample, machine, thread, &x.is64bit, &x.cpumode, false);if (len <=0 ) goto out; - printed +=fprintf (fp,"\t%016" PRIx64"\t%s\n" , sample->ip,dump_insn (&x, sample->ip, buffer, len,NULL ));if (PRINT_FIELD (SRCCODE ))
@@ -1096,6 +1104,13 @@ static int perf_sample__fprintf_brstackinsn(struct perf_sample *sample, dump_insn(&x, start + off, buffer + off, len - off, &ilen));if (ilen ==0 )break ; +if (arch_is_branch (buffer + off, len - off, x.is64bit) && start + off != sample->ip) { +/* +* Hit a missing branch. Just stop. +*/ + printed +=fprintf (fp,"\t... not reaching sample ...\n" ); +break ; + }if (PRINT_FIELD (SRCCODE ))print_srccode (thread, x.cpumode, start + off); }
@@ -1167,7 +1182,7 @@ static int perf_sample__fprintf_callindent(struct perf_sample *sample, struct addr_location *al, FILE *fp) { struct perf_event_attr *attr = &evsel->attr; -size_t depth =thread_stack__depth (thread); +size_t depth =thread_stack__depth (thread, sample->cpu);const char *name =NULL ;static int spacing;int len =0 ;
@@ -1701,7 +1716,7 @@ static bool show_event(struct perf_sample *sample,struct thread *thread, struct addr_location *al) { - int depth = thread_stack__depth(thread); + int depth = thread_stack__depth(thread, sample->cpu);if (!symbol_conf.graph_function)return true;
tools/perf/builtin-trace.c +97 -45
257 lines not on this page · raw message
tools/perf/check-headers.sh +1 -0
@@ -14,6 +14,7 @@ include/uapi/linux/perf_event.h include/uapi/linux/prctl.h include/uapi/linux/sched.h include/uapi/linux/stat.h +include/uapi/linux/usbdevice_fs.h include/uapi/linux/vhost.h include/uapi/sound/asound.h include/linux/bits.h
tools/perf/trace/beauty/beauty.h +7 -0
@@ -32,6 +32,13 @@ size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, boostruct trace ;struct thread ; +struct file { +char *pathname; +int dev_maj; +}; + +struct file *thread__files_entry (struct thread *thread,int fd); +struct strarrays {int nr_entries;struct strarray **entries;
tools/perf/trace/beauty/ioctl.c +22 -0
@@ -112,6 +112,17 @@ static size_t ioctl__scnprintf_perf_cmd(int nr, int dir, char *bf, size_t size)return scnprintf (bf, size,"(%#x, %#x, %#x)" ,0xAE , nr, dir); } +static size_t ioctl__scnprintf_usbdevfs_cmd (int nr,int dir,char *bf,size_t size) +{ +#include "trace/beauty/generated/ioctl/usbdevfs_ioctl_array.c" + static DEFINE_STRARRAY(usbdevfs_ioctl_cmds, ""); + +if (nr < strarray__usbdevfs_ioctl_cmds.nr_entries && strarray__usbdevfs_ioctl_cmds.entries[nr] !=NULL ) +return scnprintf (bf, size,"USBDEVFS_%s" , strarray__usbdevfs_ioctl_cmds.entries[nr]); + +return scnprintf (bf, size,"(%c, %#x, %#x)" ,'U' , nr, dir); +} +static size_t ioctl__scnprintf_cmd (unsigned long cmd,char *bf,size_t size,bool show_prefix) {const char *prefix ="_IOC_" ;
@@ -157,9 +168,20 @@ static size_t ioctl__scnprintf_cmd(unsigned long cmd, char *bf, size_t size, booreturn printed +scnprintf (bf + printed, size - printed,", %#x, %#x, %#x)" , type, nr, sz); } +#ifndef USB_DEVICE_MAJOR +#define USB_DEVICE_MAJOR 189 +#endif // USB_DEVICE_MAJOR +size_t syscall_arg__scnprintf_ioctl_cmd (char *bf,size_t size,struct syscall_arg *arg) {unsigned long cmd = arg->val; +unsigned int fd =syscall_arg__val (arg,0 ); +struct file *file =thread__files_entry (arg->thread, fd); + +if (file !=NULL ) { +if (file->dev_maj ==USB_DEVICE_MAJOR ) +return ioctl__scnprintf_usbdevfs_cmd (_IOC_NR (cmd),_IOC_DIR (cmd), bf, size); + }return ioctl__scnprintf_cmd (cmd, bf, size, arg->show_string_prefix); }
tools/perf/trace/beauty/mmap.c +1 -1
@@ -18,8 +18,8 @@ static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size, }P_MMAP_PROT (READ ); -P_MMAP_PROT (EXEC );P_MMAP_PROT (WRITE ); +P_MMAP_PROT (EXEC );P_MMAP_PROT (SEM );P_MMAP_PROT (GROWSDOWN );P_MMAP_PROT (GROWSUP );
tools/perf/trace/beauty/seccomp.c +2 -2
@@ -9,7 +9,7 @@static size_t syscall_arg__scnprintf_seccomp_op (char *bf,size_t size,struct syscall_arg *arg) {bool show_prefix = arg->show_string_prefix; -const char *prefix ="SECOMP_SET_MODE_" ; +const char *prefix ="SECCOMP_SET_MODE_" ;int op = arg->val;size_t printed =0 ;
@@ -34,7 +34,7 @@ static size_t syscall_arg__scnprintf_seccomp_flags(char *bf, size_t size, struct syscall_arg *arg) {bool show_prefix = arg->show_string_prefix; -const char *prefix ="SECOMP_FILTER_FLAG_" ; +const char *prefix ="SECCOMP_FILTER_FLAG_" ;int printed =0 , flags = arg->val;#define P_FLAG (n) \
tools/perf/trace/beauty/usbdevfs_ioctl.sh new file +19 -0
@@ -0,0 +1,19 @@ +#!/bin/sh +# SPDX-License-Identifier: LGPL-2.1 + +[ $# -eq 1 ] && header_dir=$1 || header_dir=tools/include/uapi/linux/ + +printf "static const char *usbdevfs_ioctl_cmds[] = {\n" +regex="^#[[:space:]]*define[[:space:]]+USBDEVFS_(\w+)[[:space:]]+_IO[WR]{0,2}\([[:space:]]*'U'[[:space:]]*,[[:space:]]*([[:digit:]]+).*" +egrep $regex ${header_dir}/usbdevice_fs.h | egrep -v 'USBDEVFS_\w+32[[:space:]]' | \ + sed -r "s/$regex/\2 \1/g" | \ + sort | xargs printf "\t[%s] = \"%s\",\n" +printf "};\n\n" +printf "#if 0\n" +printf "static const char *usbdevfs_ioctl_32_cmds[] = {\n" +regex="^#[[:space:]]*define[[:space:]]+USBDEVFS_(\w+)[[:space:]]+_IO[WR]{0,2}\([[:space:]]*'U'[[:space:]]*,[[:space:]]*([[:digit:]]+).*" +egrep $regex ${header_dir}/usbdevice_fs.h | egrep 'USBDEVFS_\w+32[[:space:]]' | \ + sed -r "s/$regex/\2 \1/g" | \ + sort | xargs printf "\t[%s] = \"%s\",\n" +printf "};\n" +printf "#endif\n"
tools/perf/util/dump-insn.c +8 -0
@@ -13,3 +13,11 @@ const char *dump_insn(struct perf_insn *x __maybe_unused, *lenp =0 ;return "?" ; } + +__weak +int arch_is_branch (const unsigned char *buf__maybe_unused , +size_t len__maybe_unused , +int x86_64__maybe_unused ) +{ +return 0 ; +}
tools/perf/util/dump-insn.h +2 -0
@@ -20,4 +20,6 @@ struct perf_insn {const char *dump_insn (struct perf_insn *x,u64 ip,u8 *inbuf,int inlen,int *lenp); +int arch_is_branch (const unsigned char *buf,size_t len,int x86_64); +#endif
tools/perf/util/intel-bts.c +2 -2
@@ -451,7 +451,7 @@ static int intel_bts_process_buffer(struct intel_bts_queue *btsq,continue ;intel_bts_get_branch_type (btsq, branch);if (btsq->bts->synth_opts.thread_stack) - thread_stack__event(thread, btsq->sample_flags, + thread_stack__event(thread, btsq->cpu, btsq->sample_flags, le64_to_cpu(branch->from), le64_to_cpu(branch->to), btsq->intel_pt_insn.length,
@@ -523,7 +523,7 @@ static int intel_bts_process_queue(struct intel_bts_queue *btsq, u64 *timestamp) !btsq->bts->synth_opts.thread_stack && thread && (!old_buffer || btsq->bts->sampling_mode || (btsq->bts->snapshot_mode && !buffer->consecutive))) -thread_stack__set_trace_nr (thread, buffer->buffer_nr +1 ); +thread_stack__set_trace_nr (thread, btsq->cpu, buffer->buffer_nr +1 ); err =intel_bts_process_buffer (btsq, buffer, thread);
tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.c +8 -0
@@ -180,6 +180,14 @@ int intel_pt_get_insn(const unsigned char *buf, size_t len, int x86_64,return 0 ; } +int arch_is_branch (const unsigned char *buf,size_t len,int x86_64) +{ +struct intel_pt_insn in; +if (intel_pt_get_insn (buf, len, x86_64, &in) <0 ) +return -1 ; +return in.branch !=INTEL_PT_BR_NO_BRANCH ; +} +const char *dump_insn (struct perf_insn *x,uint64_t ip__maybe_unused ,u8 *inbuf,int inlen,int *lenp) {
tools/perf/util/intel-pt.c +3 -3
@@ -1174,7 +1174,7 @@ static void intel_pt_prep_sample(struct intel_pt *pt,intel_pt_prep_b_sample (pt, ptq, event, sample);if (pt->synth_opts.callchain) { -thread_stack__sample (ptq->thread, ptq->chain, +thread_stack__sample (ptq->thread, ptq->cpu, ptq->chain, pt->synth_opts.callchain_sz +1 , sample->ip, pt->kernel_start); sample->callchain = ptq->chain;
@@ -1526,11 +1526,11 @@ static int intel_pt_sample(struct intel_pt_queue *ptq)return 0 ;if (pt->synth_opts.callchain || pt->synth_opts.thread_stack) -thread_stack__event (ptq->thread, ptq->flags, state->from_ip, +thread_stack__event (ptq->thread, ptq->cpu, ptq->flags, state->from_ip, state->to_ip, ptq->insn_len, state->trace_nr);else -thread_stack__set_trace_nr (ptq->thread, state->trace_nr); +thread_stack__set_trace_nr (ptq->thread, ptq->cpu, state->trace_nr);if (pt->sample_branches) { err =intel_pt_synth_branch_sample (ptq);
tools/perf/util/python.c +2 -1
@@ -939,7 +939,8 @@ static PyObject *pyrf_evlist__get_pollfd(struct pyrf_evlist *pevlist, file =PyFile_FromFile (fp,"perf" ,"r" ,NULL );#else - file =PyFile_FromFd (evlist->pollfd.entries[i].fd,"perf" ,"r" ,-1 ,NULL ,NULL ,NULL ,1 ); + file =PyFile_FromFd (evlist->pollfd.entries[i].fd,"perf" ,"r" ,-1 , +NULL ,NULL ,NULL ,0 );#endif if (file ==NULL ) goto free_list;
tools/perf/util/session.c +7 -0
@@ -1527,6 +1527,13 @@ struct thread *perf_session__findnew(struct perf_session *session, pid_t pid)return machine__findnew_thread (&session->machines.host,-1 , pid); } +/* +* Threads are identified by pid and tid, and the idle task has pid == tid == 0. +* So here a single thread is created for that, but actually there is a separate +* idle task per cpu, so there should be one 'struct thread' per cpu, but there +* is only 1. That causes problems for some tools, requiring workarounds. For +* example get_idle_thread() in builtin-sched.c, or thread_stack__per_cpu(). +*/ int perf_session__register_idle_thread (struct perf_session *session) {struct thread *thread;
tools/perf/util/thread-stack.c +164 -63
369 lines not on this page · raw message
tools/perf/util/thread-stack.h +4 -4
@@ -80,14 +80,14 @@ struct call_return_processor {void *data; }; -int thread_stack__event (struct thread *thread,u32 flags,u64 from_ip, +int thread_stack__event (struct thread *thread,int cpu,u32 flags,u64 from_ip,u64 to_ip,u16 insn_len,u64 trace_nr); -void thread_stack__set_trace_nr (struct thread *thread,u64 trace_nr); -void thread_stack__sample (struct thread *thread,struct ip_callchain *chain, +void thread_stack__set_trace_nr (struct thread *thread,int cpu,u64 trace_nr); +void thread_stack__sample (struct thread *thread,int cpu,struct ip_callchain *chain,size_t sz,u64 ip,u64 kernel_start);int thread_stack__flush (struct thread *thread);void thread_stack__free (struct thread *thread); -size_t thread_stack__depth (struct thread *thread); +size_t thread_stack__depth (struct thread *thread,int cpu);struct call_return_processor * call_return_processor__new(int (*process)(struct call_return *cr, void *data),
tools/power/x86/turbostat/Makefile +4 -4
@@ -9,13 +9,13 @@ ifeq ("$(origin O)", "command line") endif turbostat : turbostat.c -CFLAGS += -Wall -CFLAGS += -DMSRHEADER='"../../../../arch/x86/include/asm/msr-index.h"' -CFLAGS += -DINTEL_FAMILY_HEADER='"../../../../arch/x86/include/asm/intel-family.h"' +override CFLAGS += -Wall +override CFLAGS += -DMSRHEADER='"../../../../arch/x86/include/asm/msr-index.h"' +override CFLAGS += -DINTEL_FAMILY_HEADER='"../../../../arch/x86/include/asm/intel-family.h"' %: %.c @mkdir -p $(BUILD_OUTPUT) - $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ + $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) .PHONY : clean clean :
tools/power/x86/x86_energy_perf_policy/Makefile +3 -3
@@ -9,12 +9,12 @@ ifeq ("$(origin O)", "command line") endif x86_energy_perf_policy : x86_energy_perf_policy.c -CFLAGS += -Wall -CFLAGS += -DMSRHEADER='"../../../../arch/x86/include/asm/msr-index.h"' +override CFLAGS += -Wall +override CFLAGS += -DMSRHEADER='"../../../../arch/x86/include/asm/msr-index.h"' %: %.c @mkdir -p $(BUILD_OUTPUT) - $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ + $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) .PHONY : clean clean :
tools/thermal/tmon/Makefile +4 -4
@@ -6,13 +6,13 @@ VERSION = 1.0 BINDIR=usr/bin WARNFLAGS=-Wall -Wshadow -W -Wformat -Wimplicit-function-declaration -Wimplicit-int -CFLAGS+= -O1 ${WARNFLAGS} +override CFLAGS+= -O1 ${WARNFLAGS} # Add "-fstack-protector" only if toolchain supports it. -CFLAGS+= $(call cc-option,-fstack-protector) +override CFLAGS+= $(call cc-option,-fstack-protector-strong) CC?= $(CROSS_COMPILE)gcc PKG_CONFIG?= pkg-config -CFLAGS+=-D VERSION=\"$(VERSION)\" +override CFLAGS+=-D VERSION=\"$(VERSION)\" LDFLAGS+= TARGET=tmon
@@ -29,7 +29,7 @@ TMON_LIBS += $(shell $(PKG_CONFIG) --libs $(STATIC) panelw ncursesw 2> /dev/null $(PKG_CONFIG) --libs $(STATIC) panel ncurses 2> /dev/null || \ echo -lpanel -lncurses) -CFLAGS += $(shell $(PKG_CONFIG) --cflags $(STATIC) panelw ncursesw 2> /dev/null || \ +override CFLAGS += $(shell $(PKG_CONFIG) --cflags $(STATIC) panelw ncursesw 2> /dev/null || \ $(PKG_CONFIG) --cflags $(STATIC) panel ncurses 2> /dev/null) OBJS = tmon.o tui.o sysfs.o pid.o
The pull request you sent on Fri, 4 Jan 2019 13:09:26 +0100:
The pull request you sent on Fri, 4 Jan 2019 13:09:26 +0100:
Quoted 1 line
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.gitperf-urgent-for-linus
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/ac5eed2b41776b05cf03aac761d3bb5e64eea24c
Thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.wiki.kernel.org/userdoc/prtracker