diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-25 16:28:08 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-25 16:28:08 -0400 |
| commit | bdc5663fa14de657f24080ee959670d49c8dd094 (patch) | |
| tree | e97fc2caa29655ae5550f2467f56b6590e85a231 /kernel | |
| parent | 743a7ecbe8e28d487e2573ec2b7fb1179a443717 (diff) | |
| parent | cf3b425dd8d99e01214515a6754f9e69ecc6dce8 (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:
"Assorted standalone fixes"
* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
perf/x86/intel: Add model number for Avoton Silvermont
perf: Fix capabilities bitfield compatibility in 'struct perf_event_mmap_page'
perf/x86/intel/uncore: Don't use smp_processor_id() in validate_group()
perf: Update ABI comment
tools lib lk: Uninclude linux/magic.h in debugfs.c
perf tools: Fix old GCC build error in trace-event-parse.c:parse_proc_kallsyms()
perf probe: Fix finder to find lines of given function
perf session: Check for SIGINT in more loops
perf tools: Fix compile with libelf without get_phdrnum
perf tools: Fix buildid cache handling of kallsyms with kcore
perf annotate: Fix objdump line parsing offset validation
perf tools: Fill in new definitions for madvise()/mmap() flags
perf tools: Sharpen the libaudit dependencies test
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/events/core.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c index dd236b66ca3a..cb4238e85b38 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c | |||
| @@ -3660,6 +3660,26 @@ static void calc_timer_values(struct perf_event *event, | |||
| 3660 | *running = ctx_time - event->tstamp_running; | 3660 | *running = ctx_time - event->tstamp_running; |
| 3661 | } | 3661 | } |
| 3662 | 3662 | ||
| 3663 | static void perf_event_init_userpage(struct perf_event *event) | ||
| 3664 | { | ||
| 3665 | struct perf_event_mmap_page *userpg; | ||
| 3666 | struct ring_buffer *rb; | ||
| 3667 | |||
| 3668 | rcu_read_lock(); | ||
| 3669 | rb = rcu_dereference(event->rb); | ||
| 3670 | if (!rb) | ||
| 3671 | goto unlock; | ||
| 3672 | |||
| 3673 | userpg = rb->user_page; | ||
| 3674 | |||
| 3675 | /* Allow new userspace to detect that bit 0 is deprecated */ | ||
| 3676 | userpg->cap_bit0_is_deprecated = 1; | ||
| 3677 | userpg->size = offsetof(struct perf_event_mmap_page, __reserved); | ||
| 3678 | |||
| 3679 | unlock: | ||
| 3680 | rcu_read_unlock(); | ||
| 3681 | } | ||
| 3682 | |||
| 3663 | void __weak arch_perf_update_userpage(struct perf_event_mmap_page *userpg, u64 now) | 3683 | void __weak arch_perf_update_userpage(struct perf_event_mmap_page *userpg, u64 now) |
| 3664 | { | 3684 | { |
| 3665 | } | 3685 | } |
| @@ -4044,6 +4064,7 @@ again: | |||
| 4044 | ring_buffer_attach(event, rb); | 4064 | ring_buffer_attach(event, rb); |
| 4045 | rcu_assign_pointer(event->rb, rb); | 4065 | rcu_assign_pointer(event->rb, rb); |
| 4046 | 4066 | ||
| 4067 | perf_event_init_userpage(event); | ||
| 4047 | perf_event_update_userpage(event); | 4068 | perf_event_update_userpage(event); |
| 4048 | 4069 | ||
| 4049 | unlock: | 4070 | unlock: |
