aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-09-15 12:44:32 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-09-15 12:44:32 -0400
commitc0be92b5b14bc6928363527602dabff57875473a (patch)
treea7f0c394f47377826905c143f3b43f73c053d6ca /kernel
parentca062f8df5d13e3a5c029449a12c20ac5069c094 (diff)
parentcb48b6a26cace226d8b299a48c73e808eb0c4f61 (diff)
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Ingo Molnar: "Mostly tooling fixes, but also breakpoint and x86 PMU driver fixes" * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (23 commits) perf tools: Fix maps__find_symbol_by_name() tools headers uapi: Update tools's copy of linux/if_link.h tools headers uapi: Update tools's copy of linux/vhost.h tools headers uapi: Update tools's copies of kvm headers tools headers uapi: Update tools's copy of drm/drm.h tools headers uapi: Update tools's copy of asm-generic/unistd.h tools headers uapi: Update tools's copy of linux/perf_event.h perf/core: Force USER_DS when recording user stack data perf/UAPI: Clearly mark __PERF_SAMPLE_CALLCHAIN_EARLY as internal use perf/x86/intel: Add support/quirk for the MISPREDICT bit on Knights Landing CPUs perf annotate: Fix parsing aarch64 branch instructions after objdump update perf probe powerpc: Ignore SyS symbols irrespective of endianness perf event-parse: Use fixed size string for comms perf util: Fix bad memory access in trace info. perf tools: Streamline bpf examples and headers installation perf evsel: Fix potential null pointer dereference in perf_evsel__new_idx() perf arm64: Fix include path for asm-generic/unistd.h perf/hw_breakpoint: Simplify breakpoint enable in perf_event_modify_breakpoint perf/hw_breakpoint: Enable breakpoint in modify_user_hw_breakpoint perf/hw_breakpoint: Remove superfluous bp->attr.disabled = 0 ...
Diffstat (limited to 'kernel')
-rw-r--r--kernel/events/core.c15
-rw-r--r--kernel/events/hw_breakpoint.c13
2 files changed, 13 insertions, 15 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 2a62b96600ad..c80549bf82c6 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -2867,16 +2867,11 @@ static int perf_event_modify_breakpoint(struct perf_event *bp,
2867 _perf_event_disable(bp); 2867 _perf_event_disable(bp);
2868 2868
2869 err = modify_user_hw_breakpoint_check(bp, attr, true); 2869 err = modify_user_hw_breakpoint_check(bp, attr, true);
2870 if (err) {
2871 if (!bp->attr.disabled)
2872 _perf_event_enable(bp);
2873 2870
2874 return err; 2871 if (!bp->attr.disabled)
2875 }
2876
2877 if (!attr->disabled)
2878 _perf_event_enable(bp); 2872 _perf_event_enable(bp);
2879 return 0; 2873
2874 return err;
2880} 2875}
2881 2876
2882static int perf_event_modify_attr(struct perf_event *event, 2877static int perf_event_modify_attr(struct perf_event *event,
@@ -5948,6 +5943,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
5948 unsigned long sp; 5943 unsigned long sp;
5949 unsigned int rem; 5944 unsigned int rem;
5950 u64 dyn_size; 5945 u64 dyn_size;
5946 mm_segment_t fs;
5951 5947
5952 /* 5948 /*
5953 * We dump: 5949 * We dump:
@@ -5965,7 +5961,10 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
5965 5961
5966 /* Data. */ 5962 /* Data. */
5967 sp = perf_user_stack_pointer(regs); 5963 sp = perf_user_stack_pointer(regs);
5964 fs = get_fs();
5965 set_fs(USER_DS);
5968 rem = __output_copy_user(handle, (void *) sp, dump_size); 5966 rem = __output_copy_user(handle, (void *) sp, dump_size);
5967 set_fs(fs);
5969 dyn_size = dump_size - rem; 5968 dyn_size = dump_size - rem;
5970 5969
5971 perf_output_skip(handle, rem); 5970 perf_output_skip(handle, rem);
diff --git a/kernel/events/hw_breakpoint.c b/kernel/events/hw_breakpoint.c
index b3814fce5ecb..d6b56180827c 100644
--- a/kernel/events/hw_breakpoint.c
+++ b/kernel/events/hw_breakpoint.c
@@ -509,6 +509,8 @@ modify_user_hw_breakpoint_check(struct perf_event *bp, struct perf_event_attr *a
509 */ 509 */
510int modify_user_hw_breakpoint(struct perf_event *bp, struct perf_event_attr *attr) 510int modify_user_hw_breakpoint(struct perf_event *bp, struct perf_event_attr *attr)
511{ 511{
512 int err;
513
512 /* 514 /*
513 * modify_user_hw_breakpoint can be invoked with IRQs disabled and hence it 515 * modify_user_hw_breakpoint can be invoked with IRQs disabled and hence it
514 * will not be possible to raise IPIs that invoke __perf_event_disable. 516 * will not be possible to raise IPIs that invoke __perf_event_disable.
@@ -520,15 +522,12 @@ int modify_user_hw_breakpoint(struct perf_event *bp, struct perf_event_attr *att
520 else 522 else
521 perf_event_disable(bp); 523 perf_event_disable(bp);
522 524
523 if (!attr->disabled) { 525 err = modify_user_hw_breakpoint_check(bp, attr, false);
524 int err = modify_user_hw_breakpoint_check(bp, attr, false);
525 526
526 if (err) 527 if (!bp->attr.disabled)
527 return err;
528 perf_event_enable(bp); 528 perf_event_enable(bp);
529 bp->attr.disabled = 0; 529
530 } 530 return err;
531 return 0;
532} 531}
533EXPORT_SYMBOL_GPL(modify_user_hw_breakpoint); 532EXPORT_SYMBOL_GPL(modify_user_hw_breakpoint);
534 533