1
2
3
4
5
6
7
8
9
10
11#include <linux/fs.h>
12#include <linux/mm.h>
13#include <linux/cpu.h>
14#include <linux/smp.h>
15#include <linux/idr.h>
16#include <linux/file.h>
17#include <linux/poll.h>
18#include <linux/slab.h>
19#include <linux/hash.h>
20#include <linux/tick.h>
21#include <linux/sysfs.h>
22#include <linux/dcache.h>
23#include <linux/percpu.h>
24#include <linux/ptrace.h>
25#include <linux/reboot.h>
26#include <linux/vmstat.h>
27#include <linux/device.h>
28#include <linux/export.h>
29#include <linux/vmalloc.h>
30#include <linux/hardirq.h>
31#include <linux/hugetlb.h>
32#include <linux/rculist.h>
33#include <linux/uaccess.h>
34#include <linux/syscalls.h>
35#include <linux/anon_inodes.h>
36#include <linux/kernel_stat.h>
37#include <linux/cgroup.h>
38#include <linux/perf_event.h>
39#include <linux/trace_events.h>
40#include <linux/hw_breakpoint.h>
41#include <linux/mm_types.h>
42#include <linux/module.h>
43#include <linux/mman.h>
44#include <linux/compat.h>
45#include <linux/bpf.h>
46#include <linux/filter.h>
47#include <linux/namei.h>
48#include <linux/parser.h>
49#include <linux/sched/clock.h>
50#include <linux/sched/mm.h>
51#include <linux/proc_ns.h>
52#include <linux/mount.h>
53#include <linux/min_heap.h>
54#include <linux/highmem.h>
55#include <linux/pgtable.h>
56#include <linux/buildid.h>
57
58#include "internal.h"
59
60#include <asm/irq_regs.h>
61
62typedef int (*remote_function_f)(void *);
63
64struct remote_function_call {
65 struct task_struct *p;
66 remote_function_f func;
67 void *info;
68 int ret;
69};
70
71static void remote_function(void *data)
72{
73 struct remote_function_call *tfc = data;
74 struct task_struct *p = tfc->p;
75
76 if (p) {
77
78 if (task_cpu(p) != smp_processor_id())
79 return;
80
81
82
83
84
85
86 tfc->ret = -ESRCH;
87 if (p != current)
88 return;
89 }
90
91 tfc->ret = tfc->func(tfc->info);
92}
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107static int
108task_function_call(struct task_struct *p, remote_function_f func, void *info)
109{
110 struct remote_function_call data = {
111 .p = p,
112 .func = func,
113 .info = info,
114 .ret = -EAGAIN,
115 };
116 int ret;
117
118 for (;;) {
119 ret = smp_call_function_single(task_cpu(p), remote_function,
120 &data, 1);
121 if (!ret)
122 ret = data.ret;
123
124 if (ret != -EAGAIN)
125 break;
126
127 cond_resched();
128 }
129
130 return ret;
131}
132
133
134
135
136
137
138
139
140
141
142
143static int cpu_function_call(int cpu, remote_function_f func, void *info)
144{
145 struct remote_function_call data = {
146 .p = NULL,
147 .func = func,
148 .info = info,
149 .ret = -ENXIO,
150 };
151
152 smp_call_function_single(cpu, remote_function, &data, 1);
153
154 return data.ret;
155}
156
157static inline struct perf_cpu_context *
158__get_cpu_context(struct perf_event_context *ctx)
159{
160 return this_cpu_ptr(ctx->pmu->pmu_cpu_context);
161}
162
163static void perf_ctx_lock(struct perf_cpu_context *cpuctx,
164 struct perf_event_context *ctx)
165{
166 raw_spin_lock(&cpuctx->ctx.lock);
167 if (ctx)
168 raw_spin_lock(&ctx->lock);
169}
170
171static void perf_ctx_unlock(struct perf_cpu_context *cpuctx,
172 struct perf_event_context *ctx)
173{
174 if (ctx)
175 raw_spin_unlock(&ctx->lock);
176 raw_spin_unlock(&cpuctx->ctx.lock);
177}
178
179#define TASK_TOMBSTONE ((void *)-1L)
180
181static bool is_kernel_event(struct perf_event *event)
182{
183 return READ_ONCE(event->owner) == TASK_TOMBSTONE;
184}
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205typedef void (*event_f)(struct perf_event *, struct perf_cpu_context *,
206 struct perf_event_context *, void *);
207
208struct event_function_struct {
209 struct perf_event *event;
210 event_f func;
211 void *data;
212};
213
214static int event_function(void *info)
215{
216 struct event_function_struct *efs = info;
217 struct perf_event *event = efs->event;
218 struct perf_event_context *ctx = event->ctx;
219 struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
220 struct perf_event_context *task_ctx = cpuctx->task_ctx;
221 int ret = 0;
222
223 lockdep_assert_irqs_disabled();
224
225 perf_ctx_lock(cpuctx, task_ctx);
226
227
228
229
230 if (ctx->task) {
231 if (ctx->task != current) {
232 ret = -ESRCH;
233 goto unlock;
234 }
235
236
237
238
239
240
241
242
243 WARN_ON_ONCE(!ctx->is_active);
244
245
246
247
248 WARN_ON_ONCE(task_ctx != ctx);
249 } else {
250 WARN_ON_ONCE(&cpuctx->ctx != ctx);
251 }
252
253 efs->func(event, cpuctx, ctx, efs->data);
254unlock:
255 perf_ctx_unlock(cpuctx, task_ctx);
256
257 return ret;
258}
259
260static void event_function_call(struct perf_event *event, event_f func, void *data)
261{
262 struct perf_event_context *ctx = event->ctx;
263 struct task_struct *task = READ_ONCE(ctx->task);
264 struct event_function_struct efs = {
265 .event = event,
266 .func = func,
267 .data = data,
268 };
269
270 if (!event->parent) {
271
272
273
274
275
276 lockdep_assert_held(&ctx->mutex);
277 }
278
279 if (!task) {
280 cpu_function_call(event->cpu, event_function, &efs);
281 return;
282 }
283
284 if (task == TASK_TOMBSTONE)
285 return;
286
287again:
288 if (!task_function_call(task, event_function, &efs))
289 return;
290
291 raw_spin_lock_irq(&ctx->lock);
292
293
294
295
296 task = ctx->task;
297 if (task == TASK_TOMBSTONE) {
298 raw_spin_unlock_irq(&ctx->lock);
299 return;
300 }
301 if (ctx->is_active) {
302 raw_spin_unlock_irq(&ctx->lock);
303 goto again;
304 }
305 func(event, NULL, ctx, data);
306 raw_spin_unlock_irq(&ctx->lock);
307}
308
309
310
311
312
313static void event_function_local(struct perf_event *event, event_f func, void *data)
314{
315 struct perf_event_context *ctx = event->ctx;
316 struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
317 struct task_struct *task = READ_ONCE(ctx->task);
318 struct perf_event_context *task_ctx = NULL;
319
320 lockdep_assert_irqs_disabled();
321
322 if (task) {
323 if (task == TASK_TOMBSTONE)
324 return;
325
326 task_ctx = ctx;
327 }
328
329 perf_ctx_lock(cpuctx, task_ctx);
330
331 task = ctx->task;
332 if (task == TASK_TOMBSTONE)
333 goto unlock;
334
335 if (task) {
336
337
338
339
340
341 if (ctx->is_active) {
342 if (WARN_ON_ONCE(task != current))
343 goto unlock;
344
345 if (WARN_ON_ONCE(cpuctx->task_ctx != ctx))
346 goto unlock;
347 }
348 } else {
349 WARN_ON_ONCE(&cpuctx->ctx != ctx);
350 }
351
352 func(event, cpuctx, ctx, data);
353unlock:
354 perf_ctx_unlock(cpuctx, task_ctx);
355}
356
357#define PERF_FLAG_ALL (PERF_FLAG_FD_NO_GROUP |\
358 PERF_FLAG_FD_OUTPUT |\
359 PERF_FLAG_PID_CGROUP |\
360 PERF_FLAG_FD_CLOEXEC)
361
362
363
364
365#define PERF_SAMPLE_BRANCH_PERM_PLM \
366 (PERF_SAMPLE_BRANCH_KERNEL |\
367 PERF_SAMPLE_BRANCH_HV)
368
369enum event_type_t {
370 EVENT_FLEXIBLE = 0x1,
371 EVENT_PINNED = 0x2,
372 EVENT_TIME = 0x4,
373
374 EVENT_CPU = 0x8,
375 EVENT_ALL = EVENT_FLEXIBLE | EVENT_PINNED,
376};
377
378
379
380
381
382
383static void perf_sched_delayed(struct work_struct *work);
384DEFINE_STATIC_KEY_FALSE(perf_sched_events);
385static DECLARE_DELAYED_WORK(perf_sched_work, perf_sched_delayed);
386static DEFINE_MUTEX(perf_sched_mutex);
387static atomic_t perf_sched_count;
388
389static DEFINE_PER_CPU(atomic_t, perf_cgroup_events);
390static DEFINE_PER_CPU(int, perf_sched_cb_usages);
391static DEFINE_PER_CPU(struct pmu_event_list, pmu_sb_events);
392
393static atomic_t nr_mmap_events __read_mostly;
394static atomic_t nr_comm_events __read_mostly;
395static atomic_t nr_namespaces_events __read_mostly;
396static atomic_t nr_task_events __read_mostly;
397static atomic_t nr_freq_events __read_mostly;
398static atomic_t nr_switch_events __read_mostly;
399static atomic_t nr_ksymbol_events __read_mostly;
400static atomic_t nr_bpf_events __read_mostly;
401static atomic_t nr_cgroup_events __read_mostly;
402static atomic_t nr_text_poke_events __read_mostly;
403static atomic_t nr_build_id_events __read_mostly;
404
405static LIST_HEAD(pmus);
406static DEFINE_MUTEX(pmus_lock);
407static struct srcu_struct pmus_srcu;
408static cpumask_var_t perf_online_mask;
409static struct kmem_cache *perf_event_cache;
410
411
412
413
414
415
416
417
418int sysctl_perf_event_paranoid __read_mostly = 2;
419
420
421int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024);
422
423
424
425
426#define DEFAULT_MAX_SAMPLE_RATE 100000
427#define DEFAULT_SAMPLE_PERIOD_NS (NSEC_PER_SEC / DEFAULT_MAX_SAMPLE_RATE)
428#define DEFAULT_CPU_TIME_MAX_PERCENT 25
429
430int sysctl_perf_event_sample_rate __read_mostly = DEFAULT_MAX_SAMPLE_RATE;
431
432static int max_samples_per_tick __read_mostly = DIV_ROUND_UP(DEFAULT_MAX_SAMPLE_RATE, HZ);
433static int perf_sample_period_ns __read_mostly = DEFAULT_SAMPLE_PERIOD_NS;
434
435static int perf_sample_allowed_ns __read_mostly =
436 DEFAULT_SAMPLE_PERIOD_NS * DEFAULT_CPU_TIME_MAX_PERCENT / 100;
437
438static void update_perf_cpu_limits(void)
439{
440 u64 tmp = perf_sample_period_ns;
441
442 tmp *= sysctl_perf_cpu_time_max_percent;
443 tmp = div_u64(tmp, 100);
444 if (!tmp)
445 tmp = 1;
446
447 WRITE_ONCE(perf_sample_allowed_ns, tmp);
448}
449
450static bool perf_rotate_context(struct perf_cpu_context *cpuctx);
451
452int perf_proc_update_handler(struct ctl_table *table, int write,
453 void *buffer, size_t *lenp, loff_t *ppos)
454{
455 int ret;
456 int perf_cpu = sysctl_perf_cpu_time_max_percent;
457
458
459
460 if (write && (perf_cpu == 100 || perf_cpu == 0))
461 return -EINVAL;
462
463 ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
464 if (ret || !write)
465 return ret;
466
467 max_samples_per_tick = DIV_ROUND_UP(sysctl_perf_event_sample_rate, HZ);
468 perf_sample_period_ns = NSEC_PER_SEC / sysctl_perf_event_sample_rate;
469 update_perf_cpu_limits();
470
471 return 0;
472}
473
474int sysctl_perf_cpu_time_max_percent __read_mostly = DEFAULT_CPU_TIME_MAX_PERCENT;
475
476int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write,
477 void *buffer, size_t *lenp, loff_t *ppos)
478{
479 int ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
480
481 if (ret || !write)
482 return ret;
483
484 if (sysctl_perf_cpu_time_max_percent == 100 ||
485 sysctl_perf_cpu_time_max_percent == 0) {
486 printk(KERN_WARNING
487 "perf: Dynamic interrupt throttling disabled, can hang your system!\n");
488 WRITE_ONCE(perf_sample_allowed_ns, 0);
489 } else {
490 update_perf_cpu_limits();
491 }
492
493 return 0;
494}
495
496
497
498
499
500
501
502#define NR_ACCUMULATED_SAMPLES 128
503static DEFINE_PER_CPU(u64, running_sample_length);
504
505static u64 __report_avg;
506static u64 __report_allowed;
507
508static void perf_duration_warn(struct irq_work *w)
509{
510 printk_ratelimited(KERN_INFO
511 "perf: interrupt took too long (%lld > %lld), lowering "
512 "kernel.perf_event_max_sample_rate to %d\n",
513 __report_avg, __report_allowed,
514 sysctl_perf_event_sample_rate);
515}
516
517static DEFINE_IRQ_WORK(perf_duration_work, perf_duration_warn);
518
519void perf_sample_event_took(u64 sample_len_ns)
520{
521 u64 max_len = READ_ONCE(perf_sample_allowed_ns);
522 u64 running_len;
523 u64 avg_len;
524 u32 max;
525
526 if (max_len == 0)
527 return;
528
529
530 running_len = __this_cpu_read(running_sample_length);
531 running_len -= running_len/NR_ACCUMULATED_SAMPLES;
532 running_len += sample_len_ns;
533 __this_cpu_write(running_sample_length, running_len);
534
535
536
537
538
539
540 avg_len = running_len/NR_ACCUMULATED_SAMPLES;
541 if (avg_len <= max_len)
542 return;
543
544 __report_avg = avg_len;
545 __report_allowed = max_len;
546
547
548
549
550 avg_len += avg_len / 4;
551 max = (TICK_NSEC / 100) * sysctl_perf_cpu_time_max_percent;
552 if (avg_len < max)
553 max /= (u32)avg_len;
554 else
555 max = 1;
556
557 WRITE_ONCE(perf_sample_allowed_ns, avg_len);
558 WRITE_ONCE(max_samples_per_tick, max);
559
560 sysctl_perf_event_sample_rate = max * HZ;
561 perf_sample_period_ns = NSEC_PER_SEC / sysctl_perf_event_sample_rate;
562
563 if (!irq_work_queue(&perf_duration_work)) {
564 early_printk("perf: interrupt took too long (%lld > %lld), lowering "
565 "kernel.perf_event_max_sample_rate to %d\n",
566 __report_avg, __report_allowed,
567 sysctl_perf_event_sample_rate);
568 }
569}
570
571static atomic64_t perf_event_id;
572
573static void cpu_ctx_sched_out(struct perf_cpu_context *cpuctx,
574 enum event_type_t event_type);
575
576static void cpu_ctx_sched_in(struct perf_cpu_context *cpuctx,
577 enum event_type_t event_type,
578 struct task_struct *task);
579
580static void update_context_time(struct perf_event_context *ctx);
581static u64 perf_event_time(struct perf_event *event);
582
583void __weak perf_event_print_debug(void) { }
584
585static inline u64 perf_clock(void)
586{
587 return local_clock();
588}
589
590static inline u64 perf_event_clock(struct perf_event *event)
591{
592 return event->clock();
593}
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617static __always_inline enum perf_event_state
618__perf_effective_state(struct perf_event *event)
619{
620 struct perf_event *leader = event->group_leader;
621
622 if (leader->state <= PERF_EVENT_STATE_OFF)
623 return leader->state;
624
625 return event->state;
626}
627
628static __always_inline void
629__perf_update_times(struct perf_event *event, u64 now, u64 *enabled, u64 *running)
630{
631 enum perf_event_state state = __perf_effective_state(event);
632 u64 delta = now - event->tstamp;
633
634 *enabled = event->total_time_enabled;
635 if (state >= PERF_EVENT_STATE_INACTIVE)
636 *enabled += delta;
637
638 *running = event->total_time_running;
639 if (state >= PERF_EVENT_STATE_ACTIVE)
640 *running += delta;
641}
642
643static void perf_event_update_time(struct perf_event *event)
644{
645 u64 now = perf_event_time(event);
646
647 __perf_update_times(event, now, &event->total_time_enabled,
648 &event->total_time_running);
649 event->tstamp = now;
650}
651
652static void perf_event_update_sibling_time(struct perf_event *leader)
653{
654 struct perf_event *sibling;
655
656 for_each_sibling_event(sibling, leader)
657 perf_event_update_time(sibling);
658}
659
660static void
661perf_event_set_state(struct perf_event *event, enum perf_event_state state)
662{
663 if (event->state == state)
664 return;
665
666 perf_event_update_time(event);
667
668
669
670
671 if ((event->state < 0) ^ (state < 0))
672 perf_event_update_sibling_time(event);
673
674 WRITE_ONCE(event->state, state);
675}
676
677#ifdef CONFIG_CGROUP_PERF
678
679static inline bool
680perf_cgroup_match(struct perf_event *event)
681{
682 struct perf_event_context *ctx = event->ctx;
683 struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
684
685
686 if (!event->cgrp)
687 return true;
688
689
690 if (!cpuctx->cgrp)
691 return false;
692
693
694
695
696
697
698
699 return cgroup_is_descendant(cpuctx->cgrp->css.cgroup,
700 event->cgrp->css.cgroup);
701}
702
703static inline void perf_detach_cgroup(struct perf_event *event)
704{
705 css_put(&event->cgrp->css);
706 event->cgrp = NULL;
707}
708
709static inline int is_cgroup_event(struct perf_event *event)
710{
711 return event->cgrp != NULL;
712}
713
714static inline u64 perf_cgroup_event_time(struct perf_event *event)
715{
716 struct perf_cgroup_info *t;
717
718 t = per_cpu_ptr(event->cgrp->info, event->cpu);
719 return t->time;
720}
721
722static inline void __update_cgrp_time(struct perf_cgroup *cgrp)
723{
724 struct perf_cgroup_info *info;
725 u64 now;
726
727 now = perf_clock();
728
729 info = this_cpu_ptr(cgrp->info);
730
731 info->time += now - info->timestamp;
732 info->timestamp = now;
733}
734
735static inline void update_cgrp_time_from_cpuctx(struct perf_cpu_context *cpuctx)
736{
737 struct perf_cgroup *cgrp = cpuctx->cgrp;
738 struct cgroup_subsys_state *css;
739
740 if (cgrp) {
741 for (css = &cgrp->css; css; css = css->parent) {
742 cgrp = container_of(css, struct perf_cgroup, css);
743 __update_cgrp_time(cgrp);
744 }
745 }
746}
747
748static inline void update_cgrp_time_from_event(struct perf_event *event)
749{
750 struct perf_cgroup *cgrp;
751
752
753
754
755
756 if (!is_cgroup_event(event))
757 return;
758
759 cgrp = perf_cgroup_from_task(current, event->ctx);
760
761
762
763 if (cgroup_is_descendant(cgrp->css.cgroup, event->cgrp->css.cgroup))
764 __update_cgrp_time(event->cgrp);
765}
766
767static inline void
768perf_cgroup_set_timestamp(struct task_struct *task,
769 struct perf_event_context *ctx)
770{
771 struct perf_cgroup *cgrp;
772 struct perf_cgroup_info *info;
773 struct cgroup_subsys_state *css;
774
775
776
777
778
779
780 if (!task || !ctx->nr_cgroups)
781 return;
782
783 cgrp = perf_cgroup_from_task(task, ctx);
784
785 for (css = &cgrp->css; css; css = css->parent) {
786 cgrp = container_of(css, struct perf_cgroup, css);
787 info = this_cpu_ptr(cgrp->info);
788 info->timestamp = ctx->timestamp;
789 }
790}
791
792static DEFINE_PER_CPU(struct list_head, cgrp_cpuctx_list);
793
794#define PERF_CGROUP_SWOUT 0x1
795#define PERF_CGROUP_SWIN 0x2
796
797
798
799
800
801
802
803static void perf_cgroup_switch(struct task_struct *task, int mode)
804{
805 struct perf_cpu_context *cpuctx;
806 struct list_head *list;
807 unsigned long flags;
808
809
810
811
812
813 local_irq_save(flags);
814
815 list = this_cpu_ptr(&cgrp_cpuctx_list);
816 list_for_each_entry(cpuctx, list, cgrp_cpuctx_entry) {
817 WARN_ON_ONCE(cpuctx->ctx.nr_cgroups == 0);
818
819 perf_ctx_lock(cpuctx, cpuctx->task_ctx);
820 perf_pmu_disable(cpuctx->ctx.pmu);
821
822 if (mode & PERF_CGROUP_SWOUT) {
823 cpu_ctx_sched_out(cpuctx, EVENT_ALL);
824
825
826
827
828 cpuctx->cgrp = NULL;
829 }
830
831 if (mode & PERF_CGROUP_SWIN) {
832 WARN_ON_ONCE(cpuctx->cgrp);
833
834
835
836
837
838
839
840 cpuctx->cgrp = perf_cgroup_from_task(task,
841 &cpuctx->ctx);
842 cpu_ctx_sched_in(cpuctx, EVENT_ALL, task);
843 }
844 perf_pmu_enable(cpuctx->ctx.pmu);
845 perf_ctx_unlock(cpuctx, cpuctx->task_ctx);
846 }
847
848 local_irq_restore(flags);
849}
850
851static inline void perf_cgroup_sched_out(struct task_struct *task,
852 struct task_struct *next)
853{
854 struct perf_cgroup *cgrp1;
855 struct perf_cgroup *cgrp2 = NULL;
856
857 rcu_read_lock();
858
859
860
861
862
863 cgrp1 = perf_cgroup_from_task(task, NULL);
864 cgrp2 = perf_cgroup_from_task(next, NULL);
865
866
867
868
869
870
871 if (cgrp1 != cgrp2)
872 perf_cgroup_switch(task, PERF_CGROUP_SWOUT);
873
874 rcu_read_unlock();
875}
876
877static inline void perf_cgroup_sched_in(struct task_struct *prev,
878 struct task_struct *task)
879{
880 struct perf_cgroup *cgrp1;
881 struct perf_cgroup *cgrp2 = NULL;
882
883 rcu_read_lock();
884
885
886
887
888
889 cgrp1 = perf_cgroup_from_task(task, NULL);
890 cgrp2 = perf_cgroup_from_task(prev, NULL);
891
892
893
894
895
896
897 if (cgrp1 != cgrp2)
898 perf_cgroup_switch(task, PERF_CGROUP_SWIN);
899
900 rcu_read_unlock();
901}
902
903static int perf_cgroup_ensure_storage(struct perf_event *event,
904 struct cgroup_subsys_state *css)
905{
906 struct perf_cpu_context *cpuctx;
907 struct perf_event **storage;
908 int cpu, heap_size, ret = 0;
909
910
911
912
913
914 for (heap_size = 1; css; css = css->parent)
915 heap_size++;
916
917 for_each_possible_cpu(cpu) {
918 cpuctx = per_cpu_ptr(event->pmu->pmu_cpu_context, cpu);
919 if (heap_size <= cpuctx->heap_size)
920 continue;
921
922 storage = kmalloc_node(heap_size * sizeof(struct perf_event *),
923 GFP_KERNEL, cpu_to_node(cpu));
924 if (!storage) {
925 ret = -ENOMEM;
926 break;
927 }
928
929 raw_spin_lock_irq(&cpuctx->ctx.lock);
930 if (cpuctx->heap_size < heap_size) {
931 swap(cpuctx->heap, storage);
932 if (storage == cpuctx->heap_default)
933 storage = NULL;
934 cpuctx->heap_size = heap_size;
935 }
936 raw_spin_unlock_irq(&cpuctx->ctx.lock);
937
938 kfree(storage);
939 }
940
941 return ret;
942}
943
944static inline int perf_cgroup_connect(int fd, struct perf_event *event,
945 struct perf_event_attr *attr,
946 struct perf_event *group_leader)
947{
948 struct perf_cgroup *cgrp;
949 struct cgroup_subsys_state *css;
950 struct fd f = fdget(fd);
951 int ret = 0;
952
953 if (!f.file)
954 return -EBADF;
955
956 css = css_tryget_online_from_dir(f.file->f_path.dentry,
957 &perf_event_cgrp_subsys);
958 if (IS_ERR(css)) {
959 ret = PTR_ERR(css);
960 goto out;
961 }
962
963 ret = perf_cgroup_ensure_storage(event, css);
964 if (ret)
965 goto out;
966
967 cgrp = container_of(css, struct perf_cgroup, css);
968 event->cgrp = cgrp;
969
970
971
972
973
974
975 if (group_leader && group_leader->cgrp != cgrp) {
976 perf_detach_cgroup(event);
977 ret = -EINVAL;
978 }
979out:
980 fdput(f);
981 return ret;
982}
983
984static inline void
985perf_cgroup_set_shadow_time(struct perf_event *event, u64 now)
986{
987 struct perf_cgroup_info *t;
988 t = per_cpu_ptr(event->cgrp->info, event->cpu);
989 event->shadow_ctx_time = now - t->timestamp;
990}
991
992static inline void
993perf_cgroup_event_enable(struct perf_event *event, struct perf_event_context *ctx)
994{
995 struct perf_cpu_context *cpuctx;
996
997 if (!is_cgroup_event(event))
998 return;
999
1000
1001
1002
1003
1004 cpuctx = container_of(ctx, struct perf_cpu_context, ctx);
1005
1006
1007
1008
1009
1010
1011
1012 if (ctx->is_active && !cpuctx->cgrp) {
1013 struct perf_cgroup *cgrp = perf_cgroup_from_task(current, ctx);
1014
1015 if (cgroup_is_descendant(cgrp->css.cgroup, event->cgrp->css.cgroup))
1016 cpuctx->cgrp = cgrp;
1017 }
1018
1019 if (ctx->nr_cgroups++)
1020 return;
1021
1022 list_add(&cpuctx->cgrp_cpuctx_entry,
1023 per_cpu_ptr(&cgrp_cpuctx_list, event->cpu));
1024}
1025
1026static inline void
1027perf_cgroup_event_disable(struct perf_event *event, struct perf_event_context *ctx)
1028{
1029 struct perf_cpu_context *cpuctx;
1030
1031 if (!is_cgroup_event(event))
1032 return;
1033
1034
1035
1036
1037
1038 cpuctx = container_of(ctx, struct perf_cpu_context, ctx);
1039
1040 if (--ctx->nr_cgroups)
1041 return;
1042
1043 if (ctx->is_active && cpuctx->cgrp)
1044 cpuctx->cgrp = NULL;
1045
1046 list_del(&cpuctx->cgrp_cpuctx_entry);
1047}
1048
1049#else
1050
1051static inline bool
1052perf_cgroup_match(struct perf_event *event)
1053{
1054 return true;
1055}
1056
1057static inline void perf_detach_cgroup(struct perf_event *event)
1058{}
1059
1060static inline int is_cgroup_event(struct perf_event *event)
1061{
1062 return 0;
1063}
1064
1065static inline void update_cgrp_time_from_event(struct perf_event *event)
1066{
1067}
1068
1069static inline void update_cgrp_time_from_cpuctx(struct perf_cpu_context *cpuctx)
1070{
1071}
1072
1073static inline void perf_cgroup_sched_out(struct task_struct *task,
1074 struct task_struct *next)
1075{
1076}
1077
1078static inline void perf_cgroup_sched_in(struct task_struct *prev,
1079 struct task_struct *task)
1080{
1081}
1082
1083static inline int perf_cgroup_connect(pid_t pid, struct perf_event *event,
1084 struct perf_event_attr *attr,
1085 struct perf_event *group_leader)
1086{
1087 return -EINVAL;
1088}
1089
1090static inline void
1091perf_cgroup_set_timestamp(struct task_struct *task,
1092 struct perf_event_context *ctx)
1093{
1094}
1095
1096static inline void
1097perf_cgroup_switch(struct task_struct *task, struct task_struct *next)
1098{
1099}
1100
1101static inline void
1102perf_cgroup_set_shadow_time(struct perf_event *event, u64 now)
1103{
1104}
1105
1106static inline u64 perf_cgroup_event_time(struct perf_event *event)
1107{
1108 return 0;
1109}
1110
1111static inline void
1112perf_cgroup_event_enable(struct perf_event *event, struct perf_event_context *ctx)
1113{
1114}
1115
1116static inline void
1117perf_cgroup_event_disable(struct perf_event *event, struct perf_event_context *ctx)
1118{
1119}
1120#endif
1121
1122
1123
1124
1125
1126#define PERF_CPU_HRTIMER (1000 / HZ)
1127
1128
1129
1130static enum hrtimer_restart perf_mux_hrtimer_handler(struct hrtimer *hr)
1131{
1132 struct perf_cpu_context *cpuctx;
1133 bool rotations;
1134
1135 lockdep_assert_irqs_disabled();
1136
1137 cpuctx = container_of(hr, struct perf_cpu_context, hrtimer);
1138 rotations = perf_rotate_context(cpuctx);
1139
1140 raw_spin_lock(&cpuctx->hrtimer_lock);
1141 if (rotations)
1142 hrtimer_forward_now(hr, cpuctx->hrtimer_interval);
1143 else
1144 cpuctx->hrtimer_active = 0;
1145 raw_spin_unlock(&cpuctx->hrtimer_lock);
1146
1147 return rotations ? HRTIMER_RESTART : HRTIMER_NORESTART;
1148}
1149
1150static void __perf_mux_hrtimer_init(struct perf_cpu_context *cpuctx, int cpu)
1151{
1152 struct hrtimer *timer = &cpuctx->hrtimer;
1153 struct pmu *pmu = cpuctx->ctx.pmu;
1154 u64 interval;
1155
1156
1157 if (pmu->task_ctx_nr == perf_sw_context)
1158 return;
1159
1160
1161
1162
1163
1164 interval = pmu->hrtimer_interval_ms;
1165 if (interval < 1)
1166 interval = pmu->hrtimer_interval_ms = PERF_CPU_HRTIMER;
1167
1168 cpuctx->hrtimer_interval = ns_to_ktime(NSEC_PER_MSEC * interval);
1169
1170 raw_spin_lock_init(&cpuctx->hrtimer_lock);
1171 hrtimer_init(timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED_HARD);
1172 timer->function = perf_mux_hrtimer_handler;
1173}
1174
1175static int perf_mux_hrtimer_restart(struct perf_cpu_context *cpuctx)
1176{
1177 struct hrtimer *timer = &cpuctx->hrtimer;
1178 struct pmu *pmu = cpuctx->ctx.pmu;
1179 unsigned long flags;
1180
1181
1182 if (pmu->task_ctx_nr == perf_sw_context)
1183 return 0;
1184
1185 raw_spin_lock_irqsave(&cpuctx->hrtimer_lock, flags);
1186 if (!cpuctx->hrtimer_active) {
1187 cpuctx->hrtimer_active = 1;
1188 hrtimer_forward_now(timer, cpuctx->hrtimer_interval);
1189 hrtimer_start_expires(timer, HRTIMER_MODE_ABS_PINNED_HARD);
1190 }
1191 raw_spin_unlock_irqrestore(&cpuctx->hrtimer_lock, flags);
1192
1193 return 0;
1194}
1195
1196void perf_pmu_disable(struct pmu *pmu)
1197{
1198 int *count = this_cpu_ptr(pmu->pmu_disable_count);
1199 if (!(*count)++)
1200 pmu->pmu_disable(pmu);
1201}
1202
1203void perf_pmu_enable(struct pmu *pmu)
1204{
1205 int *count = this_cpu_ptr(pmu->pmu_disable_count);
1206 if (!--(*count))
1207 pmu->pmu_enable(pmu);
1208}
1209
1210static DEFINE_PER_CPU(struct list_head, active_ctx_list);
1211
1212
1213
1214
1215
1216
1217
1218static void perf_event_ctx_activate(struct perf_event_context *ctx)
1219{
1220 struct list_head *head = this_cpu_ptr(&active_ctx_list);
1221
1222 lockdep_assert_irqs_disabled();
1223
1224 WARN_ON(!list_empty(&ctx->active_ctx_list));
1225
1226 list_add(&ctx->active_ctx_list, head);
1227}
1228
1229static void perf_event_ctx_deactivate(struct perf_event_context *ctx)
1230{
1231 lockdep_assert_irqs_disabled();
1232
1233 WARN_ON(list_empty(&ctx->active_ctx_list));
1234
1235 list_del_init(&ctx->active_ctx_list);
1236}
1237
1238static void get_ctx(struct perf_event_context *ctx)
1239{
1240 refcount_inc(&ctx->refcount);
1241}
1242
1243static void *alloc_task_ctx_data(struct pmu *pmu)
1244{
1245 if (pmu->task_ctx_cache)
1246 return kmem_cache_zalloc(pmu->task_ctx_cache, GFP_KERNEL);
1247
1248 return NULL;
1249}
1250
1251static void free_task_ctx_data(struct pmu *pmu, void *task_ctx_data)
1252{
1253 if (pmu->task_ctx_cache && task_ctx_data)
1254 kmem_cache_free(pmu->task_ctx_cache, task_ctx_data);
1255}
1256
1257static void free_ctx(struct rcu_head *head)
1258{
1259 struct perf_event_context *ctx;
1260
1261 ctx = container_of(head, struct perf_event_context, rcu_head);
1262 free_task_ctx_data(ctx->pmu, ctx->task_ctx_data);
1263 kfree(ctx);
1264}
1265
1266static void put_ctx(struct perf_event_context *ctx)
1267{
1268 if (refcount_dec_and_test(&ctx->refcount)) {
1269 if (ctx->parent_ctx)
1270 put_ctx(ctx->parent_ctx);
1271 if (ctx->task && ctx->task != TASK_TOMBSTONE)
1272 put_task_struct(ctx->task);
1273 call_rcu(&ctx->rcu_head, free_ctx);
1274 }
1275}
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343static struct perf_event_context *
1344perf_event_ctx_lock_nested(struct perf_event *event, int nesting)
1345{
1346 struct perf_event_context *ctx;
1347
1348again:
1349 rcu_read_lock();
1350 ctx = READ_ONCE(event->ctx);
1351 if (!refcount_inc_not_zero(&ctx->refcount)) {
1352 rcu_read_unlock();
1353 goto again;
1354 }
1355 rcu_read_unlock();
1356
1357 mutex_lock_nested(&ctx->mutex, nesting);
1358 if (event->ctx != ctx) {
1359 mutex_unlock(&ctx->mutex);
1360 put_ctx(ctx);
1361 goto again;
1362 }
1363
1364 return ctx;
1365}
1366
1367static inline struct perf_event_context *
1368perf_event_ctx_lock(struct perf_event *event)
1369{
1370 return perf_event_ctx_lock_nested(event, 0);
1371}
1372
1373static void perf_event_ctx_unlock(struct perf_event *event,
1374 struct perf_event_context *ctx)
1375{
1376 mutex_unlock(&ctx->mutex);
1377 put_ctx(ctx);
1378}
1379
1380
1381
1382
1383
1384
1385static __must_check struct perf_event_context *
1386unclone_ctx(struct perf_event_context *ctx)
1387{
1388 struct perf_event_context *parent_ctx = ctx->parent_ctx;
1389
1390 lockdep_assert_held(&ctx->lock);
1391
1392 if (parent_ctx)
1393 ctx->parent_ctx = NULL;
1394 ctx->generation++;
1395
1396 return parent_ctx;
1397}
1398
1399static u32 perf_event_pid_type(struct perf_event *event, struct task_struct *p,
1400 enum pid_type type)
1401{
1402 u32 nr;
1403
1404
1405
1406 if (event->parent)
1407 event = event->parent;
1408
1409 nr = __task_pid_nr_ns(p, type, event->ns);
1410
1411 if (!nr && !pid_alive(p))
1412 nr = -1;
1413 return nr;
1414}
1415
1416static u32 perf_event_pid(struct perf_event *event, struct task_struct *p)
1417{
1418 return perf_event_pid_type(event, p, PIDTYPE_TGID);
1419}
1420
1421static u32 perf_event_tid(struct perf_event *event, struct task_struct *p)
1422{
1423 return perf_event_pid_type(event, p, PIDTYPE_PID);
1424}
1425
1426
1427
1428
1429
1430static u64 primary_event_id(struct perf_event *event)
1431{
1432 u64 id = event->id;
1433
1434 if (event->parent)
1435 id = event->parent->id;
1436
1437 return id;
1438}
1439
1440
1441
1442
1443
1444
1445
1446static struct perf_event_context *
1447perf_lock_task_context(struct task_struct *task, int ctxn, unsigned long *flags)
1448{
1449 struct perf_event_context *ctx;
1450
1451retry:
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461 local_irq_save(*flags);
1462 rcu_read_lock();
1463 ctx = rcu_dereference(task->perf_event_ctxp[ctxn]);
1464 if (ctx) {
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475 raw_spin_lock(&ctx->lock);
1476 if (ctx != rcu_dereference(task->perf_event_ctxp[ctxn])) {
1477 raw_spin_unlock(&ctx->lock);
1478 rcu_read_unlock();
1479 local_irq_restore(*flags);
1480 goto retry;
1481 }
1482
1483 if (ctx->task == TASK_TOMBSTONE ||
1484 !refcount_inc_not_zero(&ctx->refcount)) {
1485 raw_spin_unlock(&ctx->lock);
1486 ctx = NULL;
1487 } else {
1488 WARN_ON_ONCE(ctx->task != task);
1489 }
1490 }
1491 rcu_read_unlock();
1492 if (!ctx)
1493 local_irq_restore(*flags);
1494 return ctx;
1495}
1496
1497
1498
1499
1500
1501
1502static struct perf_event_context *
1503perf_pin_task_context(struct task_struct *task, int ctxn)
1504{
1505 struct perf_event_context *ctx;
1506 unsigned long flags;
1507
1508 ctx = perf_lock_task_context(task, ctxn, &flags);
1509 if (ctx) {
1510 ++ctx->pin_count;
1511 raw_spin_unlock_irqrestore(&ctx->lock, flags);
1512 }
1513 return ctx;
1514}
1515
1516static void perf_unpin_context(struct perf_event_context *ctx)
1517{
1518 unsigned long flags;
1519
1520 raw_spin_lock_irqsave(&ctx->lock, flags);
1521 --ctx->pin_count;
1522 raw_spin_unlock_irqrestore(&ctx->lock, flags);
1523}
1524
1525
1526
1527
1528static void update_context_time(struct perf_event_context *ctx)
1529{
1530 u64 now = perf_clock();
1531
1532 ctx->time += now - ctx->timestamp;
1533 ctx->timestamp = now;
1534}
1535
1536static u64 perf_event_time(struct perf_event *event)
1537{
1538 struct perf_event_context *ctx = event->ctx;
1539
1540 if (is_cgroup_event(event))
1541 return perf_cgroup_event_time(event);
1542
1543 return ctx ? ctx->time : 0;
1544}
1545
1546static enum event_type_t get_event_type(struct perf_event *event)
1547{
1548 struct perf_event_context *ctx = event->ctx;
1549 enum event_type_t event_type;
1550
1551 lockdep_assert_held(&ctx->lock);
1552
1553
1554
1555
1556
1557 if (event->group_leader != event)
1558 event = event->group_leader;
1559
1560 event_type = event->attr.pinned ? EVENT_PINNED : EVENT_FLEXIBLE;
1561 if (!ctx->task)
1562 event_type |= EVENT_CPU;
1563
1564 return event_type;
1565}
1566
1567
1568
1569
1570static void init_event_group(struct perf_event *event)
1571{
1572 RB_CLEAR_NODE(&event->group_node);
1573 event->group_index = 0;
1574}
1575
1576
1577
1578
1579
1580static struct perf_event_groups *
1581get_event_groups(struct perf_event *event, struct perf_event_context *ctx)
1582{
1583 if (event->attr.pinned)
1584 return &ctx->pinned_groups;
1585 else
1586 return &ctx->flexible_groups;
1587}
1588
1589
1590
1591
1592static void perf_event_groups_init(struct perf_event_groups *groups)
1593{
1594 groups->tree = RB_ROOT;
1595 groups->index = 0;
1596}
1597
1598static inline struct cgroup *event_cgroup(const struct perf_event *event)
1599{
1600 struct cgroup *cgroup = NULL;
1601
1602#ifdef CONFIG_CGROUP_PERF
1603 if (event->cgrp)
1604 cgroup = event->cgrp->css.cgroup;
1605#endif
1606
1607 return cgroup;
1608}
1609
1610
1611
1612
1613
1614
1615
1616static __always_inline int
1617perf_event_groups_cmp(const int left_cpu, const struct cgroup *left_cgroup,
1618 const u64 left_group_index, const struct perf_event *right)
1619{
1620 if (left_cpu < right->cpu)
1621 return -1;
1622 if (left_cpu > right->cpu)
1623 return 1;
1624
1625#ifdef CONFIG_CGROUP_PERF
1626 {
1627 const struct cgroup *right_cgroup = event_cgroup(right);
1628
1629 if (left_cgroup != right_cgroup) {
1630 if (!left_cgroup) {
1631
1632
1633
1634
1635 return -1;
1636 }
1637 if (!right_cgroup) {
1638
1639
1640
1641
1642 return 1;
1643 }
1644
1645 if (cgroup_id(left_cgroup) < cgroup_id(right_cgroup))
1646 return -1;
1647
1648 return 1;
1649 }
1650 }
1651#endif
1652
1653 if (left_group_index < right->group_index)
1654 return -1;
1655 if (left_group_index > right->group_index)
1656 return 1;
1657
1658 return 0;
1659}
1660
1661#define __node_2_pe(node) \
1662 rb_entry((node), struct perf_event, group_node)
1663
1664static inline bool __group_less(struct rb_node *a, const struct rb_node *b)
1665{
1666 struct perf_event *e = __node_2_pe(a);
1667 return perf_event_groups_cmp(e->cpu, event_cgroup(e), e->group_index,
1668 __node_2_pe(b)) < 0;
1669}
1670
1671struct __group_key {
1672 int cpu;
1673 struct cgroup *cgroup;
1674};
1675
1676static inline int __group_cmp(const void *key, const struct rb_node *node)
1677{
1678 const struct __group_key *a = key;
1679 const struct perf_event *b = __node_2_pe(node);
1680
1681
1682 return perf_event_groups_cmp(a->cpu, a->cgroup, b->group_index, b);
1683}
1684
1685
1686
1687
1688
1689
1690static void
1691perf_event_groups_insert(struct perf_event_groups *groups,
1692 struct perf_event *event)
1693{
1694 event->group_index = ++groups->index;
1695
1696 rb_add(&event->group_node, &groups->tree, __group_less);
1697}
1698
1699
1700
1701
1702static void
1703add_event_to_groups(struct perf_event *event, struct perf_event_context *ctx)
1704{
1705 struct perf_event_groups *groups;
1706
1707 groups = get_event_groups(event, ctx);
1708 perf_event_groups_insert(groups, event);
1709}
1710
1711
1712
1713
1714static void
1715perf_event_groups_delete(struct perf_event_groups *groups,
1716 struct perf_event *event)
1717{
1718 WARN_ON_ONCE(RB_EMPTY_NODE(&event->group_node) ||
1719 RB_EMPTY_ROOT(&groups->tree));
1720
1721 rb_erase(&event->group_node, &groups->tree);
1722 init_event_group(event);
1723}
1724
1725
1726
1727
1728static void
1729del_event_from_groups(struct perf_event *event, struct perf_event_context *ctx)
1730{
1731 struct perf_event_groups *groups;
1732
1733 groups = get_event_groups(event, ctx);
1734 perf_event_groups_delete(groups, event);
1735}
1736
1737
1738
1739
1740static struct perf_event *
1741perf_event_groups_first(struct perf_event_groups *groups, int cpu,
1742 struct cgroup *cgrp)
1743{
1744 struct __group_key key = {
1745 .cpu = cpu,
1746 .cgroup = cgrp,
1747 };
1748 struct rb_node *node;
1749
1750 node = rb_find_first(&key, &groups->tree, __group_cmp);
1751 if (node)
1752 return __node_2_pe(node);
1753
1754 return NULL;
1755}
1756
1757
1758
1759
1760static struct perf_event *
1761perf_event_groups_next(struct perf_event *event)
1762{
1763 struct __group_key key = {
1764 .cpu = event->cpu,
1765 .cgroup = event_cgroup(event),
1766 };
1767 struct rb_node *next;
1768
1769 next = rb_next_match(&key, &event->group_node, __group_cmp);
1770 if (next)
1771 return __node_2_pe(next);
1772
1773 return NULL;
1774}
1775
1776
1777
1778
1779#define perf_event_groups_for_each(event, groups) \
1780 for (event = rb_entry_safe(rb_first(&((groups)->tree)), \
1781 typeof(*event), group_node); event; \
1782 event = rb_entry_safe(rb_next(&event->group_node), \
1783 typeof(*event), group_node))
1784
1785
1786
1787
1788
1789static void
1790list_add_event(struct perf_event *event, struct perf_event_context *ctx)
1791{
1792 lockdep_assert_held(&ctx->lock);
1793
1794 WARN_ON_ONCE(event->attach_state & PERF_ATTACH_CONTEXT);
1795 event->attach_state |= PERF_ATTACH_CONTEXT;
1796
1797 event->tstamp = perf_event_time(event);
1798
1799
1800
1801
1802
1803
1804 if (event->group_leader == event) {
1805 event->group_caps = event->event_caps;
1806 add_event_to_groups(event, ctx);
1807 }
1808
1809 list_add_rcu(&event->event_entry, &ctx->event_list);
1810 ctx->nr_events++;
1811 if (event->attr.inherit_stat)
1812 ctx->nr_stat++;
1813
1814 if (event->state > PERF_EVENT_STATE_OFF)
1815 perf_cgroup_event_enable(event, ctx);
1816
1817 ctx->generation++;
1818}
1819
1820
1821
1822
1823static inline void perf_event__state_init(struct perf_event *event)
1824{
1825 event->state = event->attr.disabled ? PERF_EVENT_STATE_OFF :
1826 PERF_EVENT_STATE_INACTIVE;
1827}
1828
1829static void __perf_event_read_size(struct perf_event *event, int nr_siblings)
1830{
1831 int entry = sizeof(u64);
1832 int size = 0;
1833 int nr = 1;
1834
1835 if (event->attr.read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
1836 size += sizeof(u64);
1837
1838 if (event->attr.read_format & PERF_FORMAT_TOTAL_TIME_RUNNING)
1839 size += sizeof(u64);
1840
1841 if (event->attr.read_format & PERF_FORMAT_ID)
1842 entry += sizeof(u64);
1843
1844 if (event->attr.read_format & PERF_FORMAT_GROUP) {
1845 nr += nr_siblings;
1846 size += sizeof(u64);
1847 }
1848
1849 size += entry * nr;
1850 event->read_size = size;
1851}
1852
1853static void __perf_event_header_size(struct perf_event *event, u64 sample_type)
1854{
1855 struct perf_sample_data *data;
1856 u16 size = 0;
1857
1858 if (sample_type & PERF_SAMPLE_IP)
1859 size += sizeof(data->ip);
1860
1861 if (sample_type & PERF_SAMPLE_ADDR)
1862 size += sizeof(data->addr);
1863
1864 if (sample_type & PERF_SAMPLE_PERIOD)
1865 size += sizeof(data->period);
1866
1867 if (sample_type & PERF_SAMPLE_WEIGHT_TYPE)
1868 size += sizeof(data->weight.full);
1869
1870 if (sample_type & PERF_SAMPLE_READ)
1871 size += event->read_size;
1872
1873 if (sample_type & PERF_SAMPLE_DATA_SRC)
1874 size += sizeof(data->data_src.val);
1875
1876 if (sample_type & PERF_SAMPLE_TRANSACTION)
1877 size += sizeof(data->txn);
1878
1879 if (sample_type & PERF_SAMPLE_PHYS_ADDR)
1880 size += sizeof(data->phys_addr);
1881
1882 if (sample_type & PERF_SAMPLE_CGROUP)
1883 size += sizeof(data->cgroup);
1884
1885 if (sample_type & PERF_SAMPLE_DATA_PAGE_SIZE)
1886 size += sizeof(data->data_page_size);
1887
1888 if (sample_type & PERF_SAMPLE_CODE_PAGE_SIZE)
1889 size += sizeof(data->code_page_size);
1890
1891 event->header_size = size;
1892}
1893
1894
1895
1896
1897
1898static void perf_event__header_size(struct perf_event *event)
1899{
1900 __perf_event_read_size(event,
1901 event->group_leader->nr_siblings);
1902 __perf_event_header_size(event, event->attr.sample_type);
1903}
1904
1905static void perf_event__id_header_size(struct perf_event *event)
1906{
1907 struct perf_sample_data *data;
1908 u64 sample_type = event->attr.sample_type;
1909 u16 size = 0;
1910
1911 if (sample_type & PERF_SAMPLE_TID)
1912 size += sizeof(data->tid_entry);
1913
1914 if (sample_type & PERF_SAMPLE_TIME)
1915 size += sizeof(data->time);
1916
1917 if (sample_type & PERF_SAMPLE_IDENTIFIER)
1918 size += sizeof(data->id);
1919
1920 if (sample_type & PERF_SAMPLE_ID)
1921 size += sizeof(data->id);
1922
1923 if (sample_type & PERF_SAMPLE_STREAM_ID)
1924 size += sizeof(data->stream_id);
1925
1926 if (sample_type & PERF_SAMPLE_CPU)
1927 size += sizeof(data->cpu_entry);
1928
1929 event->id_header_size = size;
1930}
1931
1932static bool perf_event_validate_size(struct perf_event *event)
1933{
1934
1935
1936
1937
1938 __perf_event_read_size(event, event->group_leader->nr_siblings + 1);
1939 __perf_event_header_size(event, event->attr.sample_type & ~PERF_SAMPLE_READ);
1940 perf_event__id_header_size(event);
1941
1942
1943
1944
1945
1946 if (event->read_size + event->header_size +
1947 event->id_header_size + sizeof(struct perf_event_header) >= 16*1024)
1948 return false;
1949
1950 return true;
1951}
1952
1953static void perf_group_attach(struct perf_event *event)
1954{
1955 struct perf_event *group_leader = event->group_leader, *pos;
1956
1957 lockdep_assert_held(&event->ctx->lock);
1958
1959
1960
1961
1962 if (event->attach_state & PERF_ATTACH_GROUP)
1963 return;
1964
1965 event->attach_state |= PERF_ATTACH_GROUP;
1966
1967 if (group_leader == event)
1968 return;
1969
1970 WARN_ON_ONCE(group_leader->ctx != event->ctx);
1971
1972 group_leader->group_caps &= event->event_caps;
1973
1974 list_add_tail(&event->sibling_list, &group_leader->sibling_list);
1975 group_leader->nr_siblings++;
1976
1977 perf_event__header_size(group_leader);
1978
1979 for_each_sibling_event(pos, group_leader)
1980 perf_event__header_size(pos);
1981}
1982
1983
1984
1985
1986
1987static void
1988list_del_event(struct perf_event *event, struct perf_event_context *ctx)
1989{
1990 WARN_ON_ONCE(event->ctx != ctx);
1991 lockdep_assert_held(&ctx->lock);
1992
1993
1994
1995
1996 if (!(event->attach_state & PERF_ATTACH_CONTEXT))
1997 return;
1998
1999 event->attach_state &= ~PERF_ATTACH_CONTEXT;
2000
2001 ctx->nr_events--;
2002 if (event->attr.inherit_stat)
2003 ctx->nr_stat--;
2004
2005 list_del_rcu(&event->event_entry);
2006
2007 if (event->group_leader == event)
2008 del_event_from_groups(event, ctx);
2009
2010
2011
2012
2013
2014
2015
2016
2017 if (event->state > PERF_EVENT_STATE_OFF) {
2018 perf_cgroup_event_disable(event, ctx);
2019 perf_event_set_state(event, PERF_EVENT_STATE_OFF);
2020 }
2021
2022 ctx->generation++;
2023}
2024
2025static int
2026perf_aux_output_match(struct perf_event *event, struct perf_event *aux_event)
2027{
2028 if (!has_aux(aux_event))
2029 return 0;
2030
2031 if (!event->pmu->aux_output_match)
2032 return 0;
2033
2034 return event->pmu->aux_output_match(aux_event);
2035}
2036
2037static void put_event(struct perf_event *event);
2038static void event_sched_out(struct perf_event *event,
2039 struct perf_cpu_context *cpuctx,
2040 struct perf_event_context *ctx);
2041
2042static void perf_put_aux_event(struct perf_event *event)
2043{
2044 struct perf_event_context *ctx = event->ctx;
2045 struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
2046 struct perf_event *iter;
2047
2048
2049
2050
2051 if (event->aux_event) {
2052 iter = event->aux_event;
2053 event->aux_event = NULL;
2054 put_event(iter);
2055 return;
2056 }
2057
2058
2059
2060
2061
2062 for_each_sibling_event(iter, event->group_leader) {
2063 if (iter->aux_event != event)
2064 continue;
2065
2066 iter->aux_event = NULL;
2067 put_event(event);
2068
2069
2070
2071
2072
2073
2074 event_sched_out(iter, cpuctx, ctx);
2075 perf_event_set_state(event, PERF_EVENT_STATE_ERROR);
2076 }
2077}
2078
2079static bool perf_need_aux_event(struct perf_event *event)
2080{
2081 return !!event->attr.aux_output || !!event->attr.aux_sample_size;
2082}
2083
2084static int perf_get_aux_event(struct perf_event *event,
2085 struct perf_event *group_leader)
2086{
2087
2088
2089
2090
2091
2092
2093 if (!group_leader)
2094 return 0;
2095
2096
2097
2098
2099 if (event->attr.aux_output && event->attr.aux_sample_size)
2100 return 0;
2101
2102 if (event->attr.aux_output &&
2103 !perf_aux_output_match(event, group_leader))
2104 return 0;
2105
2106 if (event->attr.aux_sample_size && !group_leader->pmu->snapshot_aux)
2107 return 0;
2108
2109 if (!atomic_long_inc_not_zero(&group_leader->refcount))
2110 return 0;
2111
2112
2113
2114
2115
2116
2117
2118 event->aux_event = group_leader;
2119
2120 return 1;
2121}
2122
2123static inline struct list_head *get_event_list(struct perf_event *event)
2124{
2125 struct perf_event_context *ctx = event->ctx;
2126 return event->attr.pinned ? &ctx->pinned_active : &ctx->flexible_active;
2127}
2128
2129
2130
2131
2132
2133
2134
2135static inline void perf_remove_sibling_event(struct perf_event *event)
2136{
2137 struct perf_event_context *ctx = event->ctx;
2138 struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
2139
2140 event_sched_out(event, cpuctx, ctx);
2141 perf_event_set_state(event, PERF_EVENT_STATE_ERROR);
2142}
2143
2144static void perf_group_detach(struct perf_event *event)
2145{
2146 struct perf_event *leader = event->group_leader;
2147 struct perf_event *sibling, *tmp;
2148 struct perf_event_context *ctx = event->ctx;
2149
2150 lockdep_assert_held(&ctx->lock);
2151
2152
2153
2154
2155 if (!(event->attach_state & PERF_ATTACH_GROUP))
2156 return;
2157
2158 event->attach_state &= ~PERF_ATTACH_GROUP;
2159
2160 perf_put_aux_event(event);
2161
2162
2163
2164
2165 if (leader != event) {
2166 list_del_init(&event->sibling_list);
2167 event->group_leader->nr_siblings--;
2168 goto out;
2169 }
2170
2171
2172
2173
2174
2175
2176 list_for_each_entry_safe(sibling, tmp, &event->sibling_list, sibling_list) {
2177
2178 if (sibling->event_caps & PERF_EV_CAP_SIBLING)
2179 perf_remove_sibling_event(sibling);
2180
2181 sibling->group_leader = sibling;
2182 list_del_init(&sibling->sibling_list);
2183
2184
2185 sibling->group_caps = event->group_caps;
2186
2187 if (!RB_EMPTY_NODE(&event->group_node)) {
2188 add_event_to_groups(sibling, event->ctx);
2189
2190 if (sibling->state == PERF_EVENT_STATE_ACTIVE)
2191 list_add_tail(&sibling->active_list, get_event_list(sibling));
2192 }
2193
2194 WARN_ON_ONCE(sibling->ctx != event->ctx);
2195 }
2196
2197out:
2198 for_each_sibling_event(tmp, leader)
2199 perf_event__header_size(tmp);
2200
2201 perf_event__header_size(leader);
2202}
2203
2204static void sync_child_event(struct perf_event *child_event);
2205
2206static void perf_child_detach(struct perf_event *event)
2207{
2208 struct perf_event *parent_event = event->parent;
2209
2210 if (!(event->attach_state & PERF_ATTACH_CHILD))
2211 return;
2212
2213 event->attach_state &= ~PERF_ATTACH_CHILD;
2214
2215 if (WARN_ON_ONCE(!parent_event))
2216 return;
2217
2218 lockdep_assert_held(&parent_event->child_mutex);
2219
2220 sync_child_event(event);
2221 list_del_init(&event->child_list);
2222}
2223
2224static bool is_orphaned_event(struct perf_event *event)
2225{
2226 return event->state == PERF_EVENT_STATE_DEAD;
2227}
2228
2229static inline int __pmu_filter_match(struct perf_event *event)
2230{
2231 struct pmu *pmu = event->pmu;
2232 return pmu->filter_match ? pmu->filter_match(event) : 1;
2233}
2234
2235
2236
2237
2238
2239
2240
2241static inline int pmu_filter_match(struct perf_event *event)
2242{
2243 struct perf_event *sibling;
2244
2245 if (!__pmu_filter_match(event))
2246 return 0;
2247
2248 for_each_sibling_event(sibling, event) {
2249 if (!__pmu_filter_match(sibling))
2250 return 0;
2251 }
2252
2253 return 1;
2254}
2255
2256static inline int
2257event_filter_match(struct perf_event *event)
2258{
2259 return (event->cpu == -1 || event->cpu == smp_processor_id()) &&
2260 perf_cgroup_match(event) && pmu_filter_match(event);
2261}
2262
2263static void
2264event_sched_out(struct perf_event *event,
2265 struct perf_cpu_context *cpuctx,
2266 struct perf_event_context *ctx)
2267{
2268 enum perf_event_state state = PERF_EVENT_STATE_INACTIVE;
2269
2270 WARN_ON_ONCE(event->ctx != ctx);
2271 lockdep_assert_held(&ctx->lock);
2272
2273 if (event->state != PERF_EVENT_STATE_ACTIVE)
2274 return;
2275
2276
2277
2278
2279
2280
2281 list_del_init(&event->active_list);
2282
2283 perf_pmu_disable(event->pmu);
2284
2285 event->pmu->del(event, 0);
2286 event->oncpu = -1;
2287
2288 if (READ_ONCE(event->pending_disable) >= 0) {
2289 WRITE_ONCE(event->pending_disable, -1);
2290 perf_cgroup_event_disable(event, ctx);
2291 state = PERF_EVENT_STATE_OFF;
2292 }
2293 perf_event_set_state(event, state);
2294
2295 if (!is_software_event(event))
2296 cpuctx->active_oncpu--;
2297 if (!--ctx->nr_active)
2298 perf_event_ctx_deactivate(ctx);
2299 if (event->attr.freq && event->attr.sample_freq)
2300 ctx->nr_freq--;
2301 if (event->attr.exclusive || !cpuctx->active_oncpu)
2302 cpuctx->exclusive = 0;
2303
2304 perf_pmu_enable(event->pmu);
2305}
2306
2307static void
2308group_sched_out(struct perf_event *group_event,
2309 struct perf_cpu_context *cpuctx,
2310 struct perf_event_context *ctx)
2311{
2312 struct perf_event *event;
2313
2314 if (group_event->state != PERF_EVENT_STATE_ACTIVE)
2315 return;
2316
2317 perf_pmu_disable(ctx->pmu);
2318
2319 event_sched_out(group_event, cpuctx, ctx);
2320
2321
2322
2323
2324 for_each_sibling_event(event, group_event)
2325 event_sched_out(event, cpuctx, ctx);
2326
2327 perf_pmu_enable(ctx->pmu);
2328}
2329
2330#define DETACH_GROUP 0x01UL
2331#define DETACH_CHILD 0x02UL
2332
2333
2334
2335
2336
2337
2338
2339static void
2340__perf_remove_from_context(struct perf_event *event,
2341 struct perf_cpu_context *cpuctx,
2342 struct perf_event_context *ctx,
2343 void *info)
2344{
2345 unsigned long flags = (unsigned long)info;
2346
2347 if (ctx->is_active & EVENT_TIME) {
2348 update_context_time(ctx);
2349 update_cgrp_time_from_cpuctx(cpuctx);
2350 }
2351
2352 event_sched_out(event, cpuctx, ctx);
2353 if (flags & DETACH_GROUP)
2354 perf_group_detach(event);
2355 if (flags & DETACH_CHILD)
2356 perf_child_detach(event);
2357 list_del_event(event, ctx);
2358
2359 if (!ctx->nr_events && ctx->is_active) {
2360 ctx->is_active = 0;
2361 ctx->rotate_necessary = 0;
2362 if (ctx->task) {
2363 WARN_ON_ONCE(cpuctx->task_ctx != ctx);
2364 cpuctx->task_ctx = NULL;
2365 }
2366 }
2367}
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379static void perf_remove_from_context(struct perf_event *event, unsigned long flags)
2380{
2381 struct perf_event_context *ctx = event->ctx;
2382
2383 lockdep_assert_held(&ctx->mutex);
2384
2385
2386
2387
2388
2389
2390 raw_spin_lock_irq(&ctx->lock);
2391 if (!ctx->is_active) {
2392 __perf_remove_from_context(event, __get_cpu_context(ctx),
2393 ctx, (void *)flags);
2394 raw_spin_unlock_irq(&ctx->lock);
2395 return;
2396 }
2397 raw_spin_unlock_irq(&ctx->lock);
2398
2399 event_function_call(event, __perf_remove_from_context, (void *)flags);
2400}
2401
2402
2403
2404
2405static void __perf_event_disable(struct perf_event *event,
2406 struct perf_cpu_context *cpuctx,
2407 struct perf_event_context *ctx,
2408 void *info)
2409{
2410 if (event->state < PERF_EVENT_STATE_INACTIVE)
2411 return;
2412
2413 if (ctx->is_active & EVENT_TIME) {
2414 update_context_time(ctx);
2415 update_cgrp_time_from_event(event);
2416 }
2417
2418 if (event == event->group_leader)
2419 group_sched_out(event, cpuctx, ctx);
2420 else
2421 event_sched_out(event, cpuctx, ctx);
2422
2423 perf_event_set_state(event, PERF_EVENT_STATE_OFF);
2424 perf_cgroup_event_disable(event, ctx);
2425}
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441static void _perf_event_disable(struct perf_event *event)
2442{
2443 struct perf_event_context *ctx = event->ctx;
2444
2445 raw_spin_lock_irq(&ctx->lock);
2446 if (event->state <= PERF_EVENT_STATE_OFF) {
2447 raw_spin_unlock_irq(&ctx->lock);
2448 return;
2449 }
2450 raw_spin_unlock_irq(&ctx->lock);
2451
2452 event_function_call(event, __perf_event_disable, NULL);
2453}
2454
2455void perf_event_disable_local(struct perf_event *event)
2456{
2457 event_function_local(event, __perf_event_disable, NULL);
2458}
2459
2460
2461
2462
2463
2464void perf_event_disable(struct perf_event *event)
2465{
2466 struct perf_event_context *ctx;
2467
2468 ctx = perf_event_ctx_lock(event);
2469 _perf_event_disable(event);
2470 perf_event_ctx_unlock(event, ctx);
2471}
2472EXPORT_SYMBOL_GPL(perf_event_disable);
2473
2474void perf_event_disable_inatomic(struct perf_event *event)
2475{
2476 WRITE_ONCE(event->pending_disable, smp_processor_id());
2477
2478 irq_work_queue(&event->pending);
2479}
2480
2481static void perf_set_shadow_time(struct perf_event *event,
2482 struct perf_event_context *ctx)
2483{
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509 if (is_cgroup_event(event))
2510 perf_cgroup_set_shadow_time(event, event->tstamp);
2511 else
2512 event->shadow_ctx_time = event->tstamp - ctx->timestamp;
2513}
2514
2515#define MAX_INTERRUPTS (~0ULL)
2516
2517static void perf_log_throttle(struct perf_event *event, int enable);
2518static void perf_log_itrace_start(struct perf_event *event);
2519
2520static int
2521event_sched_in(struct perf_event *event,
2522 struct perf_cpu_context *cpuctx,
2523 struct perf_event_context *ctx)
2524{
2525 int ret = 0;
2526
2527 WARN_ON_ONCE(event->ctx != ctx);
2528
2529 lockdep_assert_held(&ctx->lock);
2530
2531 if (event->state <= PERF_EVENT_STATE_OFF)
2532 return 0;
2533
2534 WRITE_ONCE(event->oncpu, smp_processor_id());
2535
2536
2537
2538
2539
2540 smp_wmb();
2541 perf_event_set_state(event, PERF_EVENT_STATE_ACTIVE);
2542
2543
2544
2545
2546
2547
2548 if (unlikely(event->hw.interrupts == MAX_INTERRUPTS)) {
2549 perf_log_throttle(event, 1);
2550 event->hw.interrupts = 0;
2551 }
2552
2553 perf_pmu_disable(event->pmu);
2554
2555 perf_set_shadow_time(event, ctx);
2556
2557 perf_log_itrace_start(event);
2558
2559 if (event->pmu->add(event, PERF_EF_START)) {
2560 perf_event_set_state(event, PERF_EVENT_STATE_INACTIVE);
2561 event->oncpu = -1;
2562 ret = -EAGAIN;
2563 goto out;
2564 }
2565
2566 if (!is_software_event(event))
2567 cpuctx->active_oncpu++;
2568 if (!ctx->nr_active++)
2569 perf_event_ctx_activate(ctx);
2570 if (event->attr.freq && event->attr.sample_freq)
2571 ctx->nr_freq++;
2572
2573 if (event->attr.exclusive)
2574 cpuctx->exclusive = 1;
2575
2576out:
2577 perf_pmu_enable(event->pmu);
2578
2579 return ret;
2580}
2581
2582static int
2583group_sched_in(struct perf_event *group_event,
2584 struct perf_cpu_context *cpuctx,
2585 struct perf_event_context *ctx)
2586{
2587 struct perf_event *event, *partial_group = NULL;
2588 struct pmu *pmu = ctx->pmu;
2589
2590 if (group_event->state == PERF_EVENT_STATE_OFF)
2591 return 0;
2592
2593 pmu->start_txn(pmu, PERF_PMU_TXN_ADD);
2594
2595 if (event_sched_in(group_event, cpuctx, ctx))
2596 goto error;
2597
2598
2599
2600
2601 for_each_sibling_event(event, group_event) {
2602 if (event_sched_in(event, cpuctx, ctx)) {
2603 partial_group = event;
2604 goto group_error;
2605 }
2606 }
2607
2608 if (!pmu->commit_txn(pmu))
2609 return 0;
2610
2611group_error:
2612
2613
2614
2615
2616
2617 for_each_sibling_event(event, group_event) {
2618 if (event == partial_group)
2619 break;
2620
2621 event_sched_out(event, cpuctx, ctx);
2622 }
2623 event_sched_out(group_event, cpuctx, ctx);
2624
2625error:
2626 pmu->cancel_txn(pmu);
2627 return -EAGAIN;
2628}
2629
2630
2631
2632
2633static int group_can_go_on(struct perf_event *event,
2634 struct perf_cpu_context *cpuctx,
2635 int can_add_hw)
2636{
2637
2638
2639
2640 if (event->group_caps & PERF_EV_CAP_SOFTWARE)
2641 return 1;
2642
2643
2644
2645
2646 if (cpuctx->exclusive)
2647 return 0;
2648
2649
2650
2651
2652 if (event->attr.exclusive && !list_empty(get_event_list(event)))
2653 return 0;
2654
2655
2656
2657
2658 return can_add_hw;
2659}
2660
2661static void add_event_to_ctx(struct perf_event *event,
2662 struct perf_event_context *ctx)
2663{
2664 list_add_event(event, ctx);
2665 perf_group_attach(event);
2666}
2667
2668static void ctx_sched_out(struct perf_event_context *ctx,
2669 struct perf_cpu_context *cpuctx,
2670 enum event_type_t event_type);
2671static void
2672ctx_sched_in(struct perf_event_context *ctx,
2673 struct perf_cpu_context *cpuctx,
2674 enum event_type_t event_type,
2675 struct task_struct *task);
2676
2677static void task_ctx_sched_out(struct perf_cpu_context *cpuctx,
2678 struct perf_event_context *ctx,
2679 enum event_type_t event_type)
2680{
2681 if (!cpuctx->task_ctx)
2682 return;
2683
2684 if (WARN_ON_ONCE(ctx != cpuctx->task_ctx))
2685 return;
2686
2687 ctx_sched_out(ctx, cpuctx, event_type);
2688}
2689
2690static void perf_event_sched_in(struct perf_cpu_context *cpuctx,
2691 struct perf_event_context *ctx,
2692 struct task_struct *task)
2693{
2694 cpu_ctx_sched_in(cpuctx, EVENT_PINNED, task);
2695 if (ctx)
2696 ctx_sched_in(ctx, cpuctx, EVENT_PINNED, task);
2697 cpu_ctx_sched_in(cpuctx, EVENT_FLEXIBLE, task);
2698 if (ctx)
2699 ctx_sched_in(ctx, cpuctx, EVENT_FLEXIBLE, task);
2700}
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717static void ctx_resched(struct perf_cpu_context *cpuctx,
2718 struct perf_event_context *task_ctx,
2719 enum event_type_t event_type)
2720{
2721 enum event_type_t ctx_event_type;
2722 bool cpu_event = !!(event_type & EVENT_CPU);
2723
2724
2725
2726
2727
2728 if (event_type & EVENT_PINNED)
2729 event_type |= EVENT_FLEXIBLE;
2730
2731 ctx_event_type = event_type & EVENT_ALL;
2732
2733 perf_pmu_disable(cpuctx->ctx.pmu);
2734 if (task_ctx)
2735 task_ctx_sched_out(cpuctx, task_ctx, event_type);
2736
2737
2738
2739
2740
2741
2742
2743
2744 if (cpu_event)
2745 cpu_ctx_sched_out(cpuctx, ctx_event_type);
2746 else if (ctx_event_type & EVENT_PINNED)
2747 cpu_ctx_sched_out(cpuctx, EVENT_FLEXIBLE);
2748
2749 perf_event_sched_in(cpuctx, task_ctx, current);
2750 perf_pmu_enable(cpuctx->ctx.pmu);
2751}
2752
2753void perf_pmu_resched(struct pmu *pmu)
2754{
2755 struct perf_cpu_context *cpuctx = this_cpu_ptr(pmu->pmu_cpu_context);
2756 struct perf_event_context *task_ctx = cpuctx->task_ctx;
2757
2758 perf_ctx_lock(cpuctx, task_ctx);
2759 ctx_resched(cpuctx, task_ctx, EVENT_ALL|EVENT_CPU);
2760 perf_ctx_unlock(cpuctx, task_ctx);
2761}
2762
2763
2764
2765
2766
2767
2768
2769static int __perf_install_in_context(void *info)
2770{
2771 struct perf_event *event = info;
2772 struct perf_event_context *ctx = event->ctx;
2773 struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
2774 struct perf_event_context *task_ctx = cpuctx->task_ctx;
2775 bool reprogram = true;
2776 int ret = 0;
2777
2778 raw_spin_lock(&cpuctx->ctx.lock);
2779 if (ctx->task) {
2780 raw_spin_lock(&ctx->lock);
2781 task_ctx = ctx;
2782
2783 reprogram = (ctx->task == current);
2784
2785
2786
2787
2788
2789
2790
2791
2792 if (task_curr(ctx->task) && !reprogram) {
2793 ret = -ESRCH;
2794 goto unlock;
2795 }
2796
2797 WARN_ON_ONCE(reprogram && cpuctx->task_ctx && cpuctx->task_ctx != ctx);
2798 } else if (task_ctx) {
2799 raw_spin_lock(&task_ctx->lock);
2800 }
2801
2802#ifdef CONFIG_CGROUP_PERF
2803 if (event->state > PERF_EVENT_STATE_OFF && is_cgroup_event(event)) {
2804
2805
2806
2807
2808 struct perf_cgroup *cgrp = perf_cgroup_from_task(current, ctx);
2809 reprogram = cgroup_is_descendant(cgrp->css.cgroup,
2810 event->cgrp->css.cgroup);
2811 }
2812#endif
2813
2814 if (reprogram) {
2815 ctx_sched_out(ctx, cpuctx, EVENT_TIME);
2816 add_event_to_ctx(event, ctx);
2817 ctx_resched(cpuctx, task_ctx, get_event_type(event));
2818 } else {
2819 add_event_to_ctx(event, ctx);
2820 }
2821
2822unlock:
2823 perf_ctx_unlock(cpuctx, task_ctx);
2824
2825 return ret;
2826}
2827
2828static bool exclusive_event_installable(struct perf_event *event,
2829 struct perf_event_context *ctx);
2830
2831
2832
2833
2834
2835
2836static void
2837perf_install_in_context(struct perf_event_context *ctx,
2838 struct perf_event *event,
2839 int cpu)
2840{
2841 struct task_struct *task = READ_ONCE(ctx->task);
2842
2843 lockdep_assert_held(&ctx->mutex);
2844
2845 WARN_ON_ONCE(!exclusive_event_installable(event, ctx));
2846
2847 if (event->cpu != -1)
2848 event->cpu = cpu;
2849
2850
2851
2852
2853
2854 smp_store_release(&event->ctx, ctx);
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864 if (__perf_effective_state(event) == PERF_EVENT_STATE_OFF && ctx->nr_events) {
2865 raw_spin_lock_irq(&ctx->lock);
2866 if (ctx->task == TASK_TOMBSTONE) {
2867 raw_spin_unlock_irq(&ctx->lock);
2868 return;
2869 }
2870 add_event_to_ctx(event, ctx);
2871 raw_spin_unlock_irq(&ctx->lock);
2872 return;
2873 }
2874
2875 if (!task) {
2876 cpu_function_call(cpu, __perf_install_in_context, event);
2877 return;
2878 }
2879
2880
2881
2882
2883 if (WARN_ON_ONCE(task == TASK_TOMBSTONE))
2884 return;
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916 smp_mb();
2917again:
2918 if (!task_function_call(task, __perf_install_in_context, event))
2919 return;
2920
2921 raw_spin_lock_irq(&ctx->lock);
2922 task = ctx->task;
2923 if (WARN_ON_ONCE(task == TASK_TOMBSTONE)) {
2924
2925
2926
2927
2928
2929 raw_spin_unlock_irq(&ctx->lock);
2930 return;
2931 }
2932
2933
2934
2935
2936 if (task_curr(task)) {
2937 raw_spin_unlock_irq(&ctx->lock);
2938 goto again;
2939 }
2940 add_event_to_ctx(event, ctx);
2941 raw_spin_unlock_irq(&ctx->lock);
2942}
2943
2944
2945
2946
2947static void __perf_event_enable(struct perf_event *event,
2948 struct perf_cpu_context *cpuctx,
2949 struct perf_event_context *ctx,
2950 void *info)
2951{
2952 struct perf_event *leader = event->group_leader;
2953 struct perf_event_context *task_ctx;
2954
2955 if (event->state >= PERF_EVENT_STATE_INACTIVE ||
2956 event->state <= PERF_EVENT_STATE_ERROR)
2957 return;
2958
2959 if (ctx->is_active)
2960 ctx_sched_out(ctx, cpuctx, EVENT_TIME);
2961
2962 perf_event_set_state(event, PERF_EVENT_STATE_INACTIVE);
2963 perf_cgroup_event_enable(event, ctx);
2964
2965 if (!ctx->is_active)
2966 return;
2967
2968 if (!event_filter_match(event)) {
2969 ctx_sched_in(ctx, cpuctx, EVENT_TIME, current);
2970 return;
2971 }
2972
2973
2974
2975
2976
2977 if (leader != event && leader->state != PERF_EVENT_STATE_ACTIVE) {
2978 ctx_sched_in(ctx, cpuctx, EVENT_TIME, current);
2979 return;
2980 }
2981
2982 task_ctx = cpuctx->task_ctx;
2983 if (ctx->task)
2984 WARN_ON_ONCE(task_ctx != ctx);
2985
2986 ctx_resched(cpuctx, task_ctx, get_event_type(event));
2987}
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998static void _perf_event_enable(struct perf_event *event)
2999{
3000 struct perf_event_context *ctx = event->ctx;
3001
3002 raw_spin_lock_irq(&ctx->lock);
3003 if (event->state >= PERF_EVENT_STATE_INACTIVE ||
3004 event->state < PERF_EVENT_STATE_ERROR) {
3005out:
3006 raw_spin_unlock_irq(&ctx->lock);
3007 return;
3008 }
3009
3010
3011
3012
3013
3014
3015
3016
3017 if (event->state == PERF_EVENT_STATE_ERROR) {
3018
3019
3020
3021 if (event->event_caps & PERF_EV_CAP_SIBLING &&
3022 event->group_leader == event)
3023 goto out;
3024
3025 event->state = PERF_EVENT_STATE_OFF;
3026 }
3027 raw_spin_unlock_irq(&ctx->lock);
3028
3029 event_function_call(event, __perf_event_enable, NULL);
3030}
3031
3032
3033
3034
3035void perf_event_enable(struct perf_event *event)
3036{
3037 struct perf_event_context *ctx;
3038
3039 ctx = perf_event_ctx_lock(event);
3040 _perf_event_enable(event);
3041 perf_event_ctx_unlock(event, ctx);
3042}
3043EXPORT_SYMBOL_GPL(perf_event_enable);
3044
3045struct stop_event_data {
3046 struct perf_event *event;
3047 unsigned int restart;
3048};
3049
3050static int __perf_event_stop(void *info)
3051{
3052 struct stop_event_data *sd = info;
3053 struct perf_event *event = sd->event;
3054
3055
3056 if (READ_ONCE(event->state) != PERF_EVENT_STATE_ACTIVE)
3057 return 0;
3058
3059
3060 smp_rmb();
3061
3062
3063
3064
3065
3066 if (READ_ONCE(event->oncpu) != smp_processor_id())
3067 return -EAGAIN;
3068
3069 event->pmu->stop(event, PERF_EF_UPDATE);
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080 if (sd->restart)
3081 event->pmu->start(event, 0);
3082
3083 return 0;
3084}
3085
3086static int perf_event_stop(struct perf_event *event, int restart)
3087{
3088 struct stop_event_data sd = {
3089 .event = event,
3090 .restart = restart,
3091 };
3092 int ret = 0;
3093
3094 do {
3095 if (READ_ONCE(event->state) != PERF_EVENT_STATE_ACTIVE)
3096 return 0;
3097
3098
3099 smp_rmb();
3100
3101
3102
3103
3104
3105
3106 ret = cpu_function_call(READ_ONCE(event->oncpu),
3107 __perf_event_stop, &sd);
3108 } while (ret == -EAGAIN);
3109
3110 return ret;
3111}
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135void perf_event_addr_filters_sync(struct perf_event *event)
3136{
3137 struct perf_addr_filters_head *ifh = perf_event_addr_filters(event);
3138
3139 if (!has_addr_filter(event))
3140 return;
3141
3142 raw_spin_lock(&ifh->lock);
3143 if (event->addr_filters_gen != event->hw.addr_filters_gen) {
3144 event->pmu->addr_filters_sync(event);
3145 event->hw.addr_filters_gen = event->addr_filters_gen;
3146 }
3147 raw_spin_unlock(&ifh->lock);
3148}
3149EXPORT_SYMBOL_GPL(perf_event_addr_filters_sync);
3150
3151static int _perf_event_refresh(struct perf_event *event, int refresh)
3152{
3153
3154
3155
3156 if (event->attr.inherit || !is_sampling_event(event))
3157 return -EINVAL;
3158
3159 atomic_add(refresh, &event->event_limit);
3160 _perf_event_enable(event);
3161
3162 return 0;
3163}
3164
3165
3166
3167
3168int perf_event_refresh(struct perf_event *event, int refresh)
3169{
3170 struct perf_event_context *ctx;
3171 int ret;
3172
3173 ctx = perf_event_ctx_lock(event);
3174 ret = _perf_event_refresh(event, refresh);
3175 perf_event_ctx_unlock(event, ctx);
3176
3177 return ret;
3178}
3179EXPORT_SYMBOL_GPL(perf_event_refresh);
3180
3181static int perf_event_modify_breakpoint(struct perf_event *bp,
3182 struct perf_event_attr *attr)
3183{
3184 int err;
3185
3186 _perf_event_disable(bp);
3187
3188 err = modify_user_hw_breakpoint_check(bp, attr, true);
3189
3190 if (!bp->attr.disabled)
3191 _perf_event_enable(bp);
3192
3193 return err;
3194}
3195
3196static int perf_event_modify_attr(struct perf_event *event,
3197 struct perf_event_attr *attr)
3198{
3199 int (*func)(struct perf_event *, struct perf_event_attr *);
3200 struct perf_event *child;
3201 int err;
3202
3203 if (event->attr.type != attr->type)
3204 return -EINVAL;
3205
3206 switch (event->attr.type) {
3207 case PERF_TYPE_BREAKPOINT:
3208 func = perf_event_modify_breakpoint;
3209 break;
3210 default:
3211
3212 return -EOPNOTSUPP;
3213 }
3214
3215 WARN_ON_ONCE(event->ctx->parent_ctx);
3216
3217 mutex_lock(&event->child_mutex);
3218 err = func(event, attr);
3219 if (err)
3220 goto out;
3221 list_for_each_entry(child, &event->child_list, child_list) {
3222 err = func(child, attr);
3223 if (err)
3224 goto out;
3225 }
3226out:
3227 mutex_unlock(&event->child_mutex);
3228 return err;
3229}
3230
3231static void ctx_sched_out(struct perf_event_context *ctx,
3232 struct perf_cpu_context *cpuctx,
3233 enum event_type_t event_type)
3234{
3235 struct perf_event *event, *tmp;
3236 int is_active = ctx->is_active;
3237
3238 lockdep_assert_held(&ctx->lock);
3239
3240 if (likely(!ctx->nr_events)) {
3241
3242
3243
3244 WARN_ON_ONCE(ctx->is_active);
3245 if (ctx->task)
3246 WARN_ON_ONCE(cpuctx->task_ctx);
3247 return;
3248 }
3249
3250 ctx->is_active &= ~event_type;
3251 if (!(ctx->is_active & EVENT_ALL))
3252 ctx->is_active = 0;
3253
3254 if (ctx->task) {
3255 WARN_ON_ONCE(cpuctx->task_ctx != ctx);
3256 if (!ctx->is_active)
3257 cpuctx->task_ctx = NULL;
3258 }
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270 if (is_active & EVENT_TIME) {
3271
3272 update_context_time(ctx);
3273 update_cgrp_time_from_cpuctx(cpuctx);
3274 }
3275
3276 is_active ^= ctx->is_active;
3277
3278 if (!ctx->nr_active || !(is_active & EVENT_ALL))
3279 return;
3280
3281 perf_pmu_disable(ctx->pmu);
3282 if (is_active & EVENT_PINNED) {
3283 list_for_each_entry_safe(event, tmp, &ctx->pinned_active, active_list)
3284 group_sched_out(event, cpuctx, ctx);
3285 }
3286
3287 if (is_active & EVENT_FLEXIBLE) {
3288 list_for_each_entry_safe(event, tmp, &ctx->flexible_active, active_list)
3289 group_sched_out(event, cpuctx, ctx);
3290
3291
3292
3293
3294
3295
3296 ctx->rotate_necessary = 0;
3297 }
3298 perf_pmu_enable(ctx->pmu);
3299}
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309static int context_equiv(struct perf_event_context *ctx1,
3310 struct perf_event_context *ctx2)
3311{
3312 lockdep_assert_held(&ctx1->lock);
3313 lockdep_assert_held(&ctx2->lock);
3314
3315
3316 if (ctx1->pin_count || ctx2->pin_count)
3317 return 0;
3318
3319
3320 if (ctx1 == ctx2->parent_ctx && ctx1->generation == ctx2->parent_gen)
3321 return 1;
3322
3323
3324 if (ctx1->parent_ctx == ctx2 && ctx1->parent_gen == ctx2->generation)
3325 return 1;
3326
3327
3328
3329
3330
3331 if (ctx1->parent_ctx && ctx1->parent_ctx == ctx2->parent_ctx &&
3332 ctx1->parent_gen == ctx2->parent_gen)
3333 return 1;
3334
3335
3336 return 0;
3337}
3338
3339static void __perf_event_sync_stat(struct perf_event *event,
3340 struct perf_event *next_event)
3341{
3342 u64 value;
3343
3344 if (!event->attr.inherit_stat)
3345 return;
3346
3347
3348
3349
3350
3351
3352
3353
3354 if (event->state == PERF_EVENT_STATE_ACTIVE)
3355 event->pmu->read(event);
3356
3357 perf_event_update_time(event);
3358
3359
3360
3361
3362
3363 value = local64_read(&next_event->count);
3364 value = local64_xchg(&event->count, value);
3365 local64_set(&next_event->count, value);
3366
3367 swap(event->total_time_enabled, next_event->total_time_enabled);
3368 swap(event->total_time_running, next_event->total_time_running);
3369
3370
3371
3372
3373 perf_event_update_userpage(event);
3374 perf_event_update_userpage(next_event);
3375}
3376
3377static void perf_event_sync_stat(struct perf_event_context *ctx,
3378 struct perf_event_context *next_ctx)
3379{
3380 struct perf_event *event, *next_event;
3381
3382 if (!ctx->nr_stat)
3383 return;
3384
3385 update_context_time(ctx);
3386
3387 event = list_first_entry(&ctx->event_list,
3388 struct perf_event, event_entry);
3389
3390 next_event = list_first_entry(&next_ctx->event_list,
3391 struct perf_event, event_entry);
3392
3393 while (&event->event_entry != &ctx->event_list &&
3394 &next_event->event_entry != &next_ctx->event_list) {
3395
3396 __perf_event_sync_stat(event, next_event);
3397
3398 event = list_next_entry(event, event_entry);
3399 next_event = list_next_entry(next_event, event_entry);
3400 }
3401}
3402
3403static void perf_event_context_sched_out(struct task_struct *task, int ctxn,
3404 struct task_struct *next)
3405{
3406 struct perf_event_context *ctx = task->perf_event_ctxp[ctxn];
3407 struct perf_event_context *next_ctx;
3408 struct perf_event_context *parent, *next_parent;
3409 struct perf_cpu_context *cpuctx;
3410 int do_switch = 1;
3411 struct pmu *pmu;
3412
3413 if (likely(!ctx))
3414 return;
3415
3416 pmu = ctx->pmu;
3417 cpuctx = __get_cpu_context(ctx);
3418 if (!cpuctx->task_ctx)
3419 return;
3420
3421 rcu_read_lock();
3422 next_ctx = next->perf_event_ctxp[ctxn];
3423 if (!next_ctx)
3424 goto unlock;
3425
3426 parent = rcu_dereference(ctx->parent_ctx);
3427 next_parent = rcu_dereference(next_ctx->parent_ctx);
3428
3429
3430 if (!parent && !next_parent)
3431 goto unlock;
3432
3433 if (next_parent == ctx || next_ctx == parent || next_parent == parent) {
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443 raw_spin_lock(&ctx->lock);
3444 raw_spin_lock_nested(&next_ctx->lock, SINGLE_DEPTH_NESTING);
3445 if (context_equiv(ctx, next_ctx)) {
3446
3447 WRITE_ONCE(ctx->task, next);
3448 WRITE_ONCE(next_ctx->task, task);
3449
3450 perf_pmu_disable(pmu);
3451
3452 if (cpuctx->sched_cb_usage && pmu->sched_task)
3453 pmu->sched_task(ctx, false);
3454
3455
3456
3457
3458
3459
3460
3461 if (pmu->swap_task_ctx)
3462 pmu->swap_task_ctx(ctx, next_ctx);
3463 else
3464 swap(ctx->task_ctx_data, next_ctx->task_ctx_data);
3465
3466 perf_pmu_enable(pmu);
3467
3468
3469
3470
3471
3472
3473
3474
3475 RCU_INIT_POINTER(task->perf_event_ctxp[ctxn], next_ctx);
3476 RCU_INIT_POINTER(next->perf_event_ctxp[ctxn], ctx);
3477
3478 do_switch = 0;
3479
3480 perf_event_sync_stat(ctx, next_ctx);
3481 }
3482 raw_spin_unlock(&next_ctx->lock);
3483 raw_spin_unlock(&ctx->lock);
3484 }
3485unlock:
3486 rcu_read_unlock();
3487
3488 if (do_switch) {
3489 raw_spin_lock(&ctx->lock);
3490 perf_pmu_disable(pmu);
3491
3492 if (cpuctx->sched_cb_usage && pmu->sched_task)
3493 pmu->sched_task(ctx, false);
3494 task_ctx_sched_out(cpuctx, ctx, EVENT_ALL);
3495
3496 perf_pmu_enable(pmu);
3497 raw_spin_unlock(&ctx->lock);
3498 }
3499}
3500
3501static DEFINE_PER_CPU(struct list_head, sched_cb_list);
3502
3503void perf_sched_cb_dec(struct pmu *pmu)
3504{
3505 struct perf_cpu_context *cpuctx = this_cpu_ptr(pmu->pmu_cpu_context);
3506
3507 this_cpu_dec(perf_sched_cb_usages);
3508
3509 if (!--cpuctx->sched_cb_usage)
3510 list_del(&cpuctx->sched_cb_entry);
3511}
3512
3513
3514void perf_sched_cb_inc(struct pmu *pmu)
3515{
3516 struct perf_cpu_context *cpuctx = this_cpu_ptr(pmu->pmu_cpu_context);
3517
3518 if (!cpuctx->sched_cb_usage++)
3519 list_add(&cpuctx->sched_cb_entry, this_cpu_ptr(&sched_cb_list));
3520
3521 this_cpu_inc(perf_sched_cb_usages);
3522}
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532static void __perf_pmu_sched_task(struct perf_cpu_context *cpuctx, bool sched_in)
3533{
3534 struct pmu *pmu;
3535
3536 pmu = cpuctx->ctx.pmu;
3537
3538 if (WARN_ON_ONCE(!pmu->sched_task))
3539 return;
3540
3541 perf_ctx_lock(cpuctx, cpuctx->task_ctx);
3542 perf_pmu_disable(pmu);
3543
3544 pmu->sched_task(cpuctx->task_ctx, sched_in);
3545
3546 perf_pmu_enable(pmu);
3547 perf_ctx_unlock(cpuctx, cpuctx->task_ctx);
3548}
3549
3550static void perf_pmu_sched_task(struct task_struct *prev,
3551 struct task_struct *next,
3552 bool sched_in)
3553{
3554 struct perf_cpu_context *cpuctx;
3555
3556 if (prev == next)
3557 return;
3558
3559 list_for_each_entry(cpuctx, this_cpu_ptr(&sched_cb_list), sched_cb_entry) {
3560
3561 if (cpuctx->task_ctx)
3562 continue;
3563
3564 __perf_pmu_sched_task(cpuctx, sched_in);
3565 }
3566}
3567
3568static void perf_event_switch(struct task_struct *task,
3569 struct task_struct *next_prev, bool sched_in);
3570
3571#define for_each_task_context_nr(ctxn) \
3572 for ((ctxn) = 0; (ctxn) < perf_nr_task_contexts; (ctxn)++)
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585void __perf_event_task_sched_out(struct task_struct *task,
3586 struct task_struct *next)
3587{
3588 int ctxn;
3589
3590 if (__this_cpu_read(perf_sched_cb_usages))
3591 perf_pmu_sched_task(task, next, false);
3592
3593 if (atomic_read(&nr_switch_events))
3594 perf_event_switch(task, next, false);
3595
3596 for_each_task_context_nr(ctxn)
3597 perf_event_context_sched_out(task, ctxn, next);
3598
3599
3600
3601
3602
3603
3604 if (atomic_read(this_cpu_ptr(&perf_cgroup_events)))
3605 perf_cgroup_sched_out(task, next);
3606}
3607
3608
3609
3610
3611static void cpu_ctx_sched_out(struct perf_cpu_context *cpuctx,
3612 enum event_type_t event_type)
3613{
3614 ctx_sched_out(&cpuctx->ctx, cpuctx, event_type);
3615}
3616
3617static bool perf_less_group_idx(const void *l, const void *r)
3618{
3619 const struct perf_event *le = *(const struct perf_event **)l;
3620 const struct perf_event *re = *(const struct perf_event **)r;
3621
3622 return le->group_index < re->group_index;
3623}
3624
3625static void swap_ptr(void *l, void *r)
3626{
3627 void **lp = l, **rp = r;
3628
3629 swap(*lp, *rp);
3630}
3631
3632static const struct min_heap_callbacks perf_min_heap = {
3633 .elem_size = sizeof(struct perf_event *),
3634 .less = perf_less_group_idx,
3635 .swp = swap_ptr,
3636};
3637
3638static void __heap_add(struct min_heap *heap, struct perf_event *event)
3639{
3640 struct perf_event **itrs = heap->data;
3641
3642 if (event) {
3643 itrs[heap->nr] = event;
3644 heap->nr++;
3645 }
3646}
3647
3648static noinline int visit_groups_merge(struct perf_cpu_context *cpuctx,
3649 struct perf_event_groups *groups, int cpu,
3650 int (*func)(struct perf_event *, void *),
3651 void *data)
3652{
3653#ifdef CONFIG_CGROUP_PERF
3654 struct cgroup_subsys_state *css = NULL;
3655#endif
3656
3657 struct perf_event *itrs[2];
3658 struct min_heap event_heap;
3659 struct perf_event **evt;
3660 int ret;
3661
3662 if (cpuctx) {
3663 event_heap = (struct min_heap){
3664 .data = cpuctx->heap,
3665 .nr = 0,
3666 .size = cpuctx->heap_size,
3667 };
3668
3669 lockdep_assert_held(&cpuctx->ctx.lock);
3670
3671#ifdef CONFIG_CGROUP_PERF
3672 if (cpuctx->cgrp)
3673 css = &cpuctx->cgrp->css;
3674#endif
3675 } else {
3676 event_heap = (struct min_heap){
3677 .data = itrs,
3678 .nr = 0,
3679 .size = ARRAY_SIZE(itrs),
3680 };
3681
3682 __heap_add(&event_heap, perf_event_groups_first(groups, -1, NULL));
3683 }
3684 evt = event_heap.data;
3685
3686 __heap_add(&event_heap, perf_event_groups_first(groups, cpu, NULL));
3687
3688#ifdef CONFIG_CGROUP_PERF
3689 for (; css; css = css->parent)
3690 __heap_add(&event_heap, perf_event_groups_first(groups, cpu, css->cgroup));
3691#endif
3692
3693 min_heapify_all(&event_heap, &perf_min_heap);
3694
3695 while (event_heap.nr) {
3696 ret = func(*evt, data);
3697 if (ret)
3698 return ret;
3699
3700 *evt = perf_event_groups_next(*evt);
3701 if (*evt)
3702 min_heapify(&event_heap, 0, &perf_min_heap);
3703 else
3704 min_heap_pop(&event_heap, &perf_min_heap);
3705 }
3706
3707 return 0;
3708}
3709
3710static int merge_sched_in(struct perf_event *event, void *data)
3711{
3712 struct perf_event_context *ctx = event->ctx;
3713 struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
3714 int *can_add_hw = data;
3715
3716 if (event->state <= PERF_EVENT_STATE_OFF)
3717 return 0;
3718
3719 if (!event_filter_match(event))
3720 return 0;
3721
3722 if (group_can_go_on(event, cpuctx, *can_add_hw)) {
3723 if (!group_sched_in(event, cpuctx, ctx))
3724 list_add_tail(&event->active_list, get_event_list(event));
3725 }
3726
3727 if (event->state == PERF_EVENT_STATE_INACTIVE) {
3728 if (event->attr.pinned) {
3729 perf_cgroup_event_disable(event, ctx);
3730 perf_event_set_state(event, PERF_EVENT_STATE_ERROR);
3731 }
3732
3733 *can_add_hw = 0;
3734 ctx->rotate_necessary = 1;
3735 perf_mux_hrtimer_restart(cpuctx);
3736 }
3737
3738 return 0;
3739}
3740
3741static void
3742ctx_pinned_sched_in(struct perf_event_context *ctx,
3743 struct perf_cpu_context *cpuctx)
3744{
3745 int can_add_hw = 1;
3746
3747 if (ctx != &cpuctx->ctx)
3748 cpuctx = NULL;
3749
3750 visit_groups_merge(cpuctx, &ctx->pinned_groups,
3751 smp_processor_id(),
3752 merge_sched_in, &can_add_hw);
3753}
3754
3755static void
3756ctx_flexible_sched_in(struct perf_event_context *ctx,
3757 struct perf_cpu_context *cpuctx)
3758{
3759 int can_add_hw = 1;
3760
3761 if (ctx != &cpuctx->ctx)
3762 cpuctx = NULL;
3763
3764 visit_groups_merge(cpuctx, &ctx->flexible_groups,
3765 smp_processor_id(),
3766 merge_sched_in, &can_add_hw);
3767}
3768
3769static void
3770ctx_sched_in(struct perf_event_context *ctx,
3771 struct perf_cpu_context *cpuctx,
3772 enum event_type_t event_type,
3773 struct task_struct *task)
3774{
3775 int is_active = ctx->is_active;
3776 u64 now;
3777
3778 lockdep_assert_held(&ctx->lock);
3779
3780 if (likely(!ctx->nr_events))
3781 return;
3782
3783 ctx->is_active |= (event_type | EVENT_TIME);
3784 if (ctx->task) {
3785 if (!is_active)
3786 cpuctx->task_ctx = ctx;
3787 else
3788 WARN_ON_ONCE(cpuctx->task_ctx != ctx);
3789 }
3790
3791 is_active ^= ctx->is_active;
3792
3793 if (is_active & EVENT_TIME) {
3794
3795 now = perf_clock();
3796 ctx->timestamp = now;
3797 perf_cgroup_set_timestamp(task, ctx);
3798 }
3799
3800
3801
3802
3803
3804 if (is_active & EVENT_PINNED)
3805 ctx_pinned_sched_in(ctx, cpuctx);
3806
3807
3808 if (is_active & EVENT_FLEXIBLE)
3809 ctx_flexible_sched_in(ctx, cpuctx);
3810}
3811
3812static void cpu_ctx_sched_in(struct perf_cpu_context *cpuctx,
3813 enum event_type_t event_type,
3814 struct task_struct *task)
3815{
3816 struct perf_event_context *ctx = &cpuctx->ctx;
3817
3818 ctx_sched_in(ctx, cpuctx, event_type, task);
3819}
3820
3821static void perf_event_context_sched_in(struct perf_event_context *ctx,
3822 struct task_struct *task)
3823{
3824 struct perf_cpu_context *cpuctx;
3825 struct pmu *pmu;
3826
3827 cpuctx = __get_cpu_context(ctx);
3828
3829
3830
3831
3832
3833 pmu = ctx->pmu = cpuctx->ctx.pmu;
3834
3835 if (cpuctx->task_ctx == ctx) {
3836 if (cpuctx->sched_cb_usage)
3837 __perf_pmu_sched_task(cpuctx, true);
3838 return;
3839 }
3840
3841 perf_ctx_lock(cpuctx, ctx);
3842
3843
3844
3845
3846 if (!ctx->nr_events)
3847 goto unlock;
3848
3849 perf_pmu_disable(pmu);
3850
3851
3852
3853
3854
3855
3856
3857
3858 if (!RB_EMPTY_ROOT(&ctx->pinned_groups.tree))
3859 cpu_ctx_sched_out(cpuctx, EVENT_FLEXIBLE);
3860 perf_event_sched_in(cpuctx, ctx, task);
3861
3862 if (cpuctx->sched_cb_usage && pmu->sched_task)
3863 pmu->sched_task(cpuctx->task_ctx, true);
3864
3865 perf_pmu_enable(pmu);
3866
3867unlock:
3868 perf_ctx_unlock(cpuctx, ctx);
3869}
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882void __perf_event_task_sched_in(struct task_struct *prev,
3883 struct task_struct *task)
3884{
3885 struct perf_event_context *ctx;
3886 int ctxn;
3887
3888
3889
3890
3891
3892
3893
3894
3895 if (atomic_read(this_cpu_ptr(&perf_cgroup_events)))
3896 perf_cgroup_sched_in(prev, task);
3897
3898 for_each_task_context_nr(ctxn) {
3899 ctx = task->perf_event_ctxp[ctxn];
3900 if (likely(!ctx))
3901 continue;
3902
3903 perf_event_context_sched_in(ctx, task);
3904 }
3905
3906 if (atomic_read(&nr_switch_events))
3907 perf_event_switch(task, prev, true);
3908
3909 if (__this_cpu_read(perf_sched_cb_usages))
3910 perf_pmu_sched_task(prev, task, true);
3911}
3912
3913static u64 perf_calculate_period(struct perf_event *event, u64 nsec, u64 count)
3914{
3915 u64 frequency = event->attr.sample_freq;
3916 u64 sec = NSEC_PER_SEC;
3917 u64 divisor, dividend;
3918
3919 int count_fls, nsec_fls, frequency_fls, sec_fls;
3920
3921 count_fls = fls64(count);
3922 nsec_fls = fls64(nsec);
3923 frequency_fls = fls64(frequency);
3924 sec_fls = 30;
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940#define REDUCE_FLS(a, b) \
3941do { \
3942 if (a##_fls > b##_fls) { \
3943 a >>= 1; \
3944 a##_fls--; \
3945 } else { \
3946 b >>= 1; \
3947 b##_fls--; \
3948 } \
3949} while (0)
3950
3951
3952
3953
3954
3955 while (count_fls + sec_fls > 64 && nsec_fls + frequency_fls > 64) {
3956 REDUCE_FLS(nsec, frequency);
3957 REDUCE_FLS(sec, count);
3958 }
3959
3960 if (count_fls + sec_fls > 64) {
3961 divisor = nsec * frequency;
3962
3963 while (count_fls + sec_fls > 64) {
3964 REDUCE_FLS(count, sec);
3965 divisor >>= 1;
3966 }
3967
3968 dividend = count * sec;
3969 } else {
3970 dividend = count * sec;
3971
3972 while (nsec_fls + frequency_fls > 64) {
3973 REDUCE_FLS(nsec, frequency);
3974 dividend >>= 1;
3975 }
3976
3977 divisor = nsec * frequency;
3978 }
3979
3980 if (!divisor)
3981 return dividend;
3982
3983 return div64_u64(dividend, divisor);
3984}
3985
3986static DEFINE_PER_CPU(int, perf_throttled_count);
3987static DEFINE_PER_CPU(u64, perf_throttled_seq);
3988
3989static void perf_adjust_period(struct perf_event *event, u64 nsec, u64 count, bool disable)
3990{
3991 struct hw_perf_event *hwc = &event->hw;
3992 s64 period, sample_period;
3993 s64 delta;
3994
3995 period = perf_calculate_period(event, nsec, count);
3996
3997 delta = (s64)(period - hwc->sample_period);
3998 delta = (delta + 7) / 8;
3999
4000 sample_period = hwc->sample_period + delta;
4001
4002 if (!sample_period)
4003 sample_period = 1;
4004
4005 hwc->sample_period = sample_period;
4006
4007 if (local64_read(&hwc->period_left) > 8*sample_period) {
4008 if (disable)
4009 event->pmu->stop(event, PERF_EF_UPDATE);
4010
4011 local64_set(&hwc->period_left, 0);
4012
4013 if (disable)
4014 event->pmu->start(event, PERF_EF_RELOAD);
4015 }
4016}
4017
4018
4019
4020
4021
4022
4023static void perf_adjust_freq_unthr_context(struct perf_event_context *ctx,
4024 int needs_unthr)
4025{
4026 struct perf_event *event;
4027 struct hw_perf_event *hwc;
4028 u64 now, period = TICK_NSEC;
4029 s64 delta;
4030
4031
4032
4033
4034
4035
4036 if (!(ctx->nr_freq || needs_unthr))
4037 return;
4038
4039 raw_spin_lock(&ctx->lock);
4040 perf_pmu_disable(ctx->pmu);
4041
4042 list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
4043 if (event->state != PERF_EVENT_STATE_ACTIVE)
4044 continue;
4045
4046 if (!event_filter_match(event))
4047 continue;
4048
4049 perf_pmu_disable(event->pmu);
4050
4051 hwc = &event->hw;
4052
4053 if (hwc->interrupts == MAX_INTERRUPTS) {
4054 hwc->interrupts = 0;
4055 perf_log_throttle(event, 1);
4056 event->pmu->start(event, 0);
4057 }
4058
4059 if (!event->attr.freq || !event->attr.sample_freq)
4060 goto next;
4061
4062
4063
4064
4065 event->pmu->stop(event, PERF_EF_UPDATE);
4066
4067 now = local64_read(&event->count);
4068 delta = now - hwc->freq_count_stamp;
4069 hwc->freq_count_stamp = now;
4070
4071
4072
4073
4074
4075
4076
4077
4078 if (delta > 0)
4079 perf_adjust_period(event, period, delta, false);
4080
4081 event->pmu->start(event, delta > 0 ? PERF_EF_RELOAD : 0);
4082 next:
4083 perf_pmu_enable(event->pmu);
4084 }
4085
4086 perf_pmu_enable(ctx->pmu);
4087 raw_spin_unlock(&ctx->lock);
4088}
4089
4090
4091
4092
4093static void rotate_ctx(struct perf_event_context *ctx, struct perf_event *event)
4094{
4095
4096
4097
4098
4099 if (ctx->rotate_disable)
4100 return;
4101
4102 perf_event_groups_delete(&ctx->flexible_groups, event);
4103 perf_event_groups_insert(&ctx->flexible_groups, event);
4104}
4105
4106
4107static inline struct perf_event *
4108ctx_event_to_rotate(struct perf_event_context *ctx)
4109{
4110 struct perf_event *event;
4111
4112
4113 event = list_first_entry_or_null(&ctx->flexible_active,
4114 struct perf_event, active_list);
4115
4116
4117 if (!event) {
4118 event = rb_entry_safe(rb_first(&ctx->flexible_groups.tree),
4119 typeof(*event), group_node);
4120 }
4121
4122
4123
4124
4125
4126 ctx->rotate_necessary = 0;
4127
4128 return event;
4129}
4130
4131static bool perf_rotate_context(struct perf_cpu_context *cpuctx)
4132{
4133 struct perf_event *cpu_event = NULL, *task_event = NULL;
4134 struct perf_event_context *task_ctx = NULL;
4135 int cpu_rotate, task_rotate;
4136
4137
4138
4139
4140
4141
4142 cpu_rotate = cpuctx->ctx.rotate_necessary;
4143 task_ctx = cpuctx->task_ctx;
4144 task_rotate = task_ctx ? task_ctx->rotate_necessary : 0;
4145
4146 if (!(cpu_rotate || task_rotate))
4147 return false;
4148
4149 perf_ctx_lock(cpuctx, cpuctx->task_ctx);
4150 perf_pmu_disable(cpuctx->ctx.pmu);
4151
4152 if (task_rotate)
4153 task_event = ctx_event_to_rotate(task_ctx);
4154 if (cpu_rotate)
4155 cpu_event = ctx_event_to_rotate(&cpuctx->ctx);
4156
4157
4158
4159
4160
4161 if (task_event || (task_ctx && cpu_event))
4162 ctx_sched_out(task_ctx, cpuctx, EVENT_FLEXIBLE);
4163 if (cpu_event)
4164 cpu_ctx_sched_out(cpuctx, EVENT_FLEXIBLE);
4165
4166 if (task_event)
4167 rotate_ctx(task_ctx, task_event);
4168 if (cpu_event)
4169 rotate_ctx(&cpuctx->ctx, cpu_event);
4170
4171 perf_event_sched_in(cpuctx, task_ctx, current);
4172
4173 perf_pmu_enable(cpuctx->ctx.pmu);
4174 perf_ctx_unlock(cpuctx, cpuctx->task_ctx);
4175
4176 return true;
4177}
4178
4179void perf_event_task_tick(void)
4180{
4181 struct list_head *head = this_cpu_ptr(&active_ctx_list);
4182 struct perf_event_context *ctx, *tmp;
4183 int throttled;
4184
4185 lockdep_assert_irqs_disabled();
4186
4187 __this_cpu_inc(perf_throttled_seq);
4188 throttled = __this_cpu_xchg(perf_throttled_count, 0);
4189 tick_dep_clear_cpu(smp_processor_id(), TICK_DEP_BIT_PERF_EVENTS);
4190
4191 list_for_each_entry_safe(ctx, tmp, head, active_ctx_list)
4192 perf_adjust_freq_unthr_context(ctx, throttled);
4193}
4194
4195static int event_enable_on_exec(struct perf_event *event,
4196 struct perf_event_context *ctx)
4197{
4198 if (!event->attr.enable_on_exec)
4199 return 0;
4200
4201 event->attr.enable_on_exec = 0;
4202 if (event->state >= PERF_EVENT_STATE_INACTIVE)
4203 return 0;
4204
4205 perf_event_set_state(event, PERF_EVENT_STATE_INACTIVE);
4206
4207 return 1;
4208}
4209
4210
4211
4212
4213
4214static void perf_event_enable_on_exec(int ctxn)
4215{
4216 struct perf_event_context *ctx, *clone_ctx = NULL;
4217 enum event_type_t event_type = 0;
4218 struct perf_cpu_context *cpuctx;
4219 struct perf_event *event;
4220 unsigned long flags;
4221 int enabled = 0;
4222
4223 local_irq_save(flags);
4224 ctx = current->perf_event_ctxp[ctxn];
4225 if (!ctx || !ctx->nr_events)
4226 goto out;
4227
4228 cpuctx = __get_cpu_context(ctx);
4229 perf_ctx_lock(cpuctx, ctx);
4230 ctx_sched_out(ctx, cpuctx, EVENT_TIME);
4231 list_for_each_entry(event, &ctx->event_list, event_entry) {
4232 enabled |= event_enable_on_exec(event, ctx);
4233 event_type |= get_event_type(event);
4234 }
4235
4236
4237
4238
4239 if (enabled) {
4240 clone_ctx = unclone_ctx(ctx);
4241 ctx_resched(cpuctx, ctx, event_type);
4242 } else {
4243 ctx_sched_in(ctx, cpuctx, EVENT_TIME, current);
4244 }
4245 perf_ctx_unlock(cpuctx, ctx);
4246
4247out:
4248 local_irq_restore(flags);
4249
4250 if (clone_ctx)
4251 put_ctx(clone_ctx);
4252}
4253
4254static void perf_remove_from_owner(struct perf_event *event);
4255static void perf_event_exit_event(struct perf_event *event,
4256 struct perf_event_context *ctx);
4257
4258
4259
4260
4261
4262static void perf_event_remove_on_exec(int ctxn)
4263{
4264 struct perf_event_context *ctx, *clone_ctx = NULL;
4265 struct perf_event *event, *next;
4266 LIST_HEAD(free_list);
4267 unsigned long flags;
4268 bool modified = false;
4269
4270 ctx = perf_pin_task_context(current, ctxn);
4271 if (!ctx)
4272 return;
4273
4274 mutex_lock(&ctx->mutex);
4275
4276 if (WARN_ON_ONCE(ctx->task != current))
4277 goto unlock;
4278
4279 list_for_each_entry_safe(event, next, &ctx->event_list, event_entry) {
4280 if (!event->attr.remove_on_exec)
4281 continue;
4282
4283 if (!is_kernel_event(event))
4284 perf_remove_from_owner(event);
4285
4286 modified = true;
4287
4288 perf_event_exit_event(event, ctx);
4289 }
4290
4291 raw_spin_lock_irqsave(&ctx->lock, flags);
4292 if (modified)
4293 clone_ctx = unclone_ctx(ctx);
4294 --ctx->pin_count;
4295 raw_spin_unlock_irqrestore(&ctx->lock, flags);
4296
4297unlock:
4298 mutex_unlock(&ctx->mutex);
4299
4300 put_ctx(ctx);
4301 if (clone_ctx)
4302 put_ctx(clone_ctx);
4303}
4304
4305struct perf_read_data {
4306 struct perf_event *event;
4307 bool group;
4308 int ret;
4309};
4310
4311static int __perf_event_read_cpu(struct perf_event *event, int event_cpu)
4312{
4313 u16 local_pkg, event_pkg;
4314
4315 if (event->group_caps & PERF_EV_CAP_READ_ACTIVE_PKG) {
4316 int local_cpu = smp_processor_id();
4317
4318 event_pkg = topology_physical_package_id(event_cpu);
4319 local_pkg = topology_physical_package_id(local_cpu);
4320
4321 if (event_pkg == local_pkg)
4322 return local_cpu;
4323 }
4324
4325 return event_cpu;
4326}
4327
4328
4329
4330
4331static void __perf_event_read(void *info)
4332{
4333 struct perf_read_data *data = info;
4334 struct perf_event *sub, *event = data->event;
4335 struct perf_event_context *ctx = event->ctx;
4336 struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
4337 struct pmu *pmu = event->pmu;
4338
4339
4340
4341
4342
4343
4344
4345
4346 if (ctx->task && cpuctx->task_ctx != ctx)
4347 return;
4348
4349 raw_spin_lock(&ctx->lock);
4350 if (ctx->is_active & EVENT_TIME) {
4351 update_context_time(ctx);
4352 update_cgrp_time_from_event(event);
4353 }
4354
4355 perf_event_update_time(event);
4356 if (data->group)
4357 perf_event_update_sibling_time(event);
4358
4359 if (event->state != PERF_EVENT_STATE_ACTIVE)
4360 goto unlock;
4361
4362 if (!data->group) {
4363 pmu->read(event);
4364 data->ret = 0;
4365 goto unlock;
4366 }
4367
4368 pmu->start_txn(pmu, PERF_PMU_TXN_READ);
4369
4370 pmu->read(event);
4371
4372 for_each_sibling_event(sub, event) {
4373 if (sub->state == PERF_EVENT_STATE_ACTIVE) {
4374
4375
4376
4377
4378 sub->pmu->read(sub);
4379 }
4380 }
4381
4382 data->ret = pmu->commit_txn(pmu);
4383
4384unlock:
4385 raw_spin_unlock(&ctx->lock);
4386}
4387
4388static inline u64 perf_event_count(struct perf_event *event)
4389{
4390 return local64_read(&event->count) + atomic64_read(&event->child_count);
4391}
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401int perf_event_read_local(struct perf_event *event, u64 *value,
4402 u64 *enabled, u64 *running)
4403{
4404 unsigned long flags;
4405 int ret = 0;
4406
4407
4408
4409
4410
4411 local_irq_save(flags);
4412
4413
4414
4415
4416
4417 if (event->attr.inherit) {
4418 ret = -EOPNOTSUPP;
4419 goto out;
4420 }
4421
4422
4423 if ((event->attach_state & PERF_ATTACH_TASK) &&
4424 event->hw.target != current) {
4425 ret = -EINVAL;
4426 goto out;
4427 }
4428
4429
4430 if (!(event->attach_state & PERF_ATTACH_TASK) &&
4431 event->cpu != smp_processor_id()) {
4432 ret = -EINVAL;
4433 goto out;
4434 }
4435
4436
4437 if (event->attr.pinned && event->oncpu != smp_processor_id()) {
4438 ret = -EBUSY;
4439 goto out;
4440 }
4441
4442
4443
4444
4445
4446
4447 if (event->oncpu == smp_processor_id())
4448 event->pmu->read(event);
4449
4450 *value = local64_read(&event->count);
4451 if (enabled || running) {
4452 u64 now = event->shadow_ctx_time + perf_clock();
4453 u64 __enabled, __running;
4454
4455 __perf_update_times(event, now, &__enabled, &__running);
4456 if (enabled)
4457 *enabled = __enabled;
4458 if (running)
4459 *running = __running;
4460 }
4461out:
4462 local_irq_restore(flags);
4463
4464 return ret;
4465}
4466
4467static int perf_event_read(struct perf_event *event, bool group)
4468{
4469 enum perf_event_state state = READ_ONCE(event->state);
4470 int event_cpu, ret = 0;
4471
4472
4473
4474
4475
4476again:
4477 if (state == PERF_EVENT_STATE_ACTIVE) {
4478 struct perf_read_data data;
4479
4480
4481
4482
4483
4484
4485
4486 smp_rmb();
4487
4488 event_cpu = READ_ONCE(event->oncpu);
4489 if ((unsigned)event_cpu >= nr_cpu_ids)
4490 return 0;
4491
4492 data = (struct perf_read_data){
4493 .event = event,
4494 .group = group,
4495 .ret = 0,
4496 };
4497
4498 preempt_disable();
4499 event_cpu = __perf_event_read_cpu(event, event_cpu);
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511 (void)smp_call_function_single(event_cpu, __perf_event_read, &data, 1);
4512 preempt_enable();
4513 ret = data.ret;
4514
4515 } else if (state == PERF_EVENT_STATE_INACTIVE) {
4516 struct perf_event_context *ctx = event->ctx;
4517 unsigned long flags;
4518
4519 raw_spin_lock_irqsave(&ctx->lock, flags);
4520 state = event->state;
4521 if (state != PERF_EVENT_STATE_INACTIVE) {
4522 raw_spin_unlock_irqrestore(&ctx->lock, flags);
4523 goto again;
4524 }
4525
4526
4527
4528
4529
4530 if (ctx->is_active & EVENT_TIME) {
4531 update_context_time(ctx);
4532 update_cgrp_time_from_event(event);
4533 }
4534
4535 perf_event_update_time(event);
4536 if (group)
4537 perf_event_update_sibling_time(event);
4538 raw_spin_unlock_irqrestore(&ctx->lock, flags);
4539 }
4540
4541 return ret;
4542}
4543
4544
4545
4546
4547static void __perf_event_init_context(struct perf_event_context *ctx)
4548{
4549 raw_spin_lock_init(&ctx->lock);
4550 mutex_init(&ctx->mutex);
4551 INIT_LIST_HEAD(&ctx->active_ctx_list);
4552 perf_event_groups_init(&ctx->pinned_groups);
4553 perf_event_groups_init(&ctx->flexible_groups);
4554 INIT_LIST_HEAD(&ctx->event_list);
4555 INIT_LIST_HEAD(&ctx->pinned_active);
4556 INIT_LIST_HEAD(&ctx->flexible_active);
4557 refcount_set(&ctx->refcount, 1);
4558}
4559
4560static struct perf_event_context *
4561alloc_perf_context(struct pmu *pmu, struct task_struct *task)
4562{
4563 struct perf_event_context *ctx;
4564
4565 ctx = kzalloc(sizeof(struct perf_event_context), GFP_KERNEL);
4566 if (!ctx)
4567 return NULL;
4568
4569 __perf_event_init_context(ctx);
4570 if (task)
4571 ctx->task = get_task_struct(task);
4572 ctx->pmu = pmu;
4573
4574 return ctx;
4575}
4576
4577static struct task_struct *
4578find_lively_task_by_vpid(pid_t vpid)
4579{
4580 struct task_struct *task;
4581
4582 rcu_read_lock();
4583 if (!vpid)
4584 task = current;
4585 else
4586 task = find_task_by_vpid(vpid);
4587 if (task)
4588 get_task_struct(task);
4589 rcu_read_unlock();
4590
4591 if (!task)
4592 return ERR_PTR(-ESRCH);
4593
4594 return task;
4595}
4596
4597
4598
4599
4600static struct perf_event_context *
4601find_get_context(struct pmu *pmu, struct task_struct *task,
4602 struct perf_event *event)
4603{
4604 struct perf_event_context *ctx, *clone_ctx = NULL;
4605 struct perf_cpu_context *cpuctx;
4606 void *task_ctx_data = NULL;
4607 unsigned long flags;
4608 int ctxn, err;
4609 int cpu = event->cpu;
4610
4611 if (!task) {
4612
4613 err = perf_allow_cpu(&event->attr);
4614 if (err)
4615 return ERR_PTR(err);
4616
4617 cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu);
4618 ctx = &cpuctx->ctx;
4619 get_ctx(ctx);
4620 raw_spin_lock_irqsave(&ctx->lock, flags);
4621 ++ctx->pin_count;
4622 raw_spin_unlock_irqrestore(&ctx->lock, flags);
4623
4624 return ctx;
4625 }
4626
4627 err = -EINVAL;
4628 ctxn = pmu->task_ctx_nr;
4629 if (ctxn < 0)
4630 goto errout;
4631
4632 if (event->attach_state & PERF_ATTACH_TASK_DATA) {
4633 task_ctx_data = alloc_task_ctx_data(pmu);
4634 if (!task_ctx_data) {
4635 err = -ENOMEM;
4636 goto errout;
4637 }
4638 }
4639
4640retry:
4641 ctx = perf_lock_task_context(task, ctxn, &flags);
4642 if (ctx) {
4643 clone_ctx = unclone_ctx(ctx);
4644 ++ctx->pin_count;
4645
4646 if (task_ctx_data && !ctx->task_ctx_data) {
4647 ctx->task_ctx_data = task_ctx_data;
4648 task_ctx_data = NULL;
4649 }
4650 raw_spin_unlock_irqrestore(&ctx->lock, flags);
4651
4652 if (clone_ctx)
4653 put_ctx(clone_ctx);
4654 } else {
4655 ctx = alloc_perf_context(pmu, task);
4656 err = -ENOMEM;
4657 if (!ctx)
4658 goto errout;
4659
4660 if (task_ctx_data) {
4661 ctx->task_ctx_data = task_ctx_data;
4662 task_ctx_data = NULL;
4663 }
4664
4665 err = 0;
4666 mutex_lock(&task->perf_event_mutex);
4667
4668
4669
4670
4671 if (task->flags & PF_EXITING)
4672 err = -ESRCH;
4673 else if (task->perf_event_ctxp[ctxn])
4674 err = -EAGAIN;
4675 else {
4676 get_ctx(ctx);
4677 ++ctx->pin_count;
4678 rcu_assign_pointer(task->perf_event_ctxp[ctxn], ctx);
4679 }
4680 mutex_unlock(&task->perf_event_mutex);
4681
4682 if (unlikely(err)) {
4683 put_ctx(ctx);
4684
4685 if (err == -EAGAIN)
4686 goto retry;
4687 goto errout;
4688 }
4689 }
4690
4691 free_task_ctx_data(pmu, task_ctx_data);
4692 return ctx;
4693
4694errout:
4695 free_task_ctx_data(pmu, task_ctx_data);
4696 return ERR_PTR(err);
4697}
4698
4699static void perf_event_free_filter(struct perf_event *event);
4700static void perf_event_free_bpf_prog(struct perf_event *event);
4701
4702static void free_event_rcu(struct rcu_head *head)
4703{
4704 struct perf_event *event;
4705
4706 event = container_of(head, struct perf_event, rcu_head);
4707 if (event->ns)
4708 put_pid_ns(event->ns);
4709 perf_event_free_filter(event);
4710 kmem_cache_free(perf_event_cache, event);
4711}
4712
4713static void ring_buffer_attach(struct perf_event *event,
4714 struct perf_buffer *rb);
4715
4716static void detach_sb_event(struct perf_event *event)
4717{
4718 struct pmu_event_list *pel = per_cpu_ptr(&pmu_sb_events, event->cpu);
4719
4720 raw_spin_lock(&pel->lock);
4721 list_del_rcu(&event->sb_list);
4722 raw_spin_unlock(&pel->lock);
4723}
4724
4725static bool is_sb_event(struct perf_event *event)
4726{
4727 struct perf_event_attr *attr = &event->attr;
4728
4729 if (event->parent)
4730 return false;
4731
4732 if (event->attach_state & PERF_ATTACH_TASK)
4733 return false;
4734
4735 if (attr->mmap || attr->mmap_data || attr->mmap2 ||
4736 attr->comm || attr->comm_exec ||
4737 attr->task || attr->ksymbol ||
4738 attr->context_switch || attr->text_poke ||
4739 attr->bpf_event)
4740 return true;
4741 return false;
4742}
4743
4744static void unaccount_pmu_sb_event(struct perf_event *event)
4745{
4746 if (is_sb_event(event))
4747 detach_sb_event(event);
4748}
4749
4750static void unaccount_event_cpu(struct perf_event *event, int cpu)
4751{
4752 if (event->parent)
4753 return;
4754
4755 if (is_cgroup_event(event))
4756 atomic_dec(&per_cpu(perf_cgroup_events, cpu));
4757}
4758
4759#ifdef CONFIG_NO_HZ_FULL
4760static DEFINE_SPINLOCK(nr_freq_lock);
4761#endif
4762
4763static void unaccount_freq_event_nohz(void)
4764{
4765#ifdef CONFIG_NO_HZ_FULL
4766 spin_lock(&nr_freq_lock);
4767 if (atomic_dec_and_test(&nr_freq_events))
4768 tick_nohz_dep_clear(TICK_DEP_BIT_PERF_EVENTS);
4769 spin_unlock(&nr_freq_lock);
4770#endif
4771}
4772
4773static void unaccount_freq_event(void)
4774{
4775 if (tick_nohz_full_enabled())
4776 unaccount_freq_event_nohz();
4777 else
4778 atomic_dec(&nr_freq_events);
4779}
4780
4781static void unaccount_event(struct perf_event *event)
4782{
4783 bool dec = false;
4784
4785 if (event->parent)
4786 return;
4787
4788 if (event->attach_state & (PERF_ATTACH_TASK | PERF_ATTACH_SCHED_CB))
4789 dec = true;
4790 if (event->attr.mmap || event->attr.mmap_data)
4791 atomic_dec(&nr_mmap_events);
4792 if (event->attr.build_id)
4793 atomic_dec(&nr_build_id_events);
4794 if (event->attr.comm)
4795 atomic_dec(&nr_comm_events);
4796 if (event->attr.namespaces)
4797 atomic_dec(&nr_namespaces_events);
4798 if (event->attr.cgroup)
4799 atomic_dec(&nr_cgroup_events);
4800 if (event->attr.task)
4801 atomic_dec(&nr_task_events);
4802 if (event->attr.freq)
4803 unaccount_freq_event();
4804 if (event->attr.context_switch) {
4805 dec = true;
4806 atomic_dec(&nr_switch_events);
4807 }
4808 if (is_cgroup_event(event))
4809 dec = true;
4810 if (has_branch_stack(event))
4811 dec = true;
4812 if (event->attr.ksymbol)
4813 atomic_dec(&nr_ksymbol_events);
4814 if (event->attr.bpf_event)
4815 atomic_dec(&nr_bpf_events);
4816 if (event->attr.text_poke)
4817 atomic_dec(&nr_text_poke_events);
4818
4819 if (dec) {
4820 if (!atomic_add_unless(&perf_sched_count, -1, 1))
4821 schedule_delayed_work(&perf_sched_work, HZ);
4822 }
4823
4824 unaccount_event_cpu(event, event->cpu);
4825
4826 unaccount_pmu_sb_event(event);
4827}
4828
4829static void perf_sched_delayed(struct work_struct *work)
4830{
4831 mutex_lock(&perf_sched_mutex);
4832 if (atomic_dec_and_test(&perf_sched_count))
4833 static_branch_disable(&perf_sched_events);
4834 mutex_unlock(&perf_sched_mutex);
4835}
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849static int exclusive_event_init(struct perf_event *event)
4850{
4851 struct pmu *pmu = event->pmu;
4852
4853 if (!is_exclusive_pmu(pmu))
4854 return 0;
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869 if (event->attach_state & PERF_ATTACH_TASK) {
4870 if (!atomic_inc_unless_negative(&pmu->exclusive_cnt))
4871 return -EBUSY;
4872 } else {
4873 if (!atomic_dec_unless_positive(&pmu->exclusive_cnt))
4874 return -EBUSY;
4875 }
4876
4877 return 0;
4878}
4879
4880static void exclusive_event_destroy(struct perf_event *event)
4881{
4882 struct pmu *pmu = event->pmu;
4883
4884 if (!is_exclusive_pmu(pmu))
4885 return;
4886
4887
4888 if (event->attach_state & PERF_ATTACH_TASK)
4889 atomic_dec(&pmu->exclusive_cnt);
4890 else
4891 atomic_inc(&pmu->exclusive_cnt);
4892}
4893
4894static bool exclusive_event_match(struct perf_event *e1, struct perf_event *e2)
4895{
4896 if ((e1->pmu == e2->pmu) &&
4897 (e1->cpu == e2->cpu ||
4898 e1->cpu == -1 ||
4899 e2->cpu == -1))
4900 return true;
4901 return false;
4902}
4903
4904static bool exclusive_event_installable(struct perf_event *event,
4905 struct perf_event_context *ctx)
4906{
4907 struct perf_event *iter_event;
4908 struct pmu *pmu = event->pmu;
4909
4910 lockdep_assert_held(&ctx->mutex);
4911
4912 if (!is_exclusive_pmu(pmu))
4913 return true;
4914
4915 list_for_each_entry(iter_event, &ctx->event_list, event_entry) {
4916 if (exclusive_event_match(iter_event, event))
4917 return false;
4918 }
4919
4920 return true;
4921}
4922
4923static void perf_addr_filters_splice(struct perf_event *event,
4924 struct list_head *head);
4925
4926static void _free_event(struct perf_event *event)
4927{
4928 irq_work_sync(&event->pending);
4929
4930 unaccount_event(event);
4931
4932 security_perf_event_free(event);
4933
4934 if (event->rb) {
4935
4936
4937
4938
4939
4940
4941 mutex_lock(&event->mmap_mutex);
4942 ring_buffer_attach(event, NULL);
4943 mutex_unlock(&event->mmap_mutex);
4944 }
4945
4946 if (is_cgroup_event(event))
4947 perf_detach_cgroup(event);
4948
4949 if (!event->parent) {
4950 if (event->attr.sample_type & PERF_SAMPLE_CALLCHAIN)
4951 put_callchain_buffers();
4952 }
4953
4954 perf_event_free_bpf_prog(event);
4955 perf_addr_filters_splice(event, NULL);
4956 kfree(event->addr_filter_ranges);
4957
4958 if (event->destroy)
4959 event->destroy(event);
4960
4961
4962
4963
4964
4965 if (event->hw.target)
4966 put_task_struct(event->hw.target);
4967
4968
4969
4970
4971
4972 if (event->ctx)
4973 put_ctx(event->ctx);
4974
4975 exclusive_event_destroy(event);
4976 module_put(event->pmu->module);
4977
4978 call_rcu(&event->rcu_head, free_event_rcu);
4979}
4980
4981
4982
4983
4984
4985static void free_event(struct perf_event *event)
4986{
4987 if (WARN(atomic_long_cmpxchg(&event->refcount, 1, 0) != 1,
4988 "unexpected event refcount: %ld; ptr=%p\n",
4989 atomic_long_read(&event->refcount), event)) {
4990
4991 return;
4992 }
4993
4994 _free_event(event);
4995}
4996
4997
4998
4999
5000static void perf_remove_from_owner(struct perf_event *event)
5001{
5002 struct task_struct *owner;
5003
5004 rcu_read_lock();
5005
5006
5007
5008
5009
5010
5011 owner = READ_ONCE(event->owner);
5012 if (owner) {
5013
5014
5015
5016
5017
5018 get_task_struct(owner);
5019 }
5020 rcu_read_unlock();
5021
5022 if (owner) {
5023
5024
5025
5026
5027
5028
5029
5030
5031 mutex_lock_nested(&owner->perf_event_mutex, SINGLE_DEPTH_NESTING);
5032
5033
5034
5035
5036
5037
5038
5039 if (event->owner) {
5040 list_del_init(&event->owner_entry);
5041 smp_store_release(&event->owner, NULL);
5042 }
5043 mutex_unlock(&owner->perf_event_mutex);
5044 put_task_struct(owner);
5045 }
5046}
5047
5048static void put_event(struct perf_event *event)
5049{
5050 if (!atomic_long_dec_and_test(&event->refcount))
5051 return;
5052
5053 _free_event(event);
5054}
5055
5056
5057
5058
5059
5060
5061int perf_event_release_kernel(struct perf_event *event)
5062{
5063 struct perf_event_context *ctx = event->ctx;
5064 struct perf_event *child, *tmp;
5065 LIST_HEAD(free_list);
5066
5067
5068
5069
5070
5071 if (!ctx) {
5072 WARN_ON_ONCE(event->attach_state &
5073 (PERF_ATTACH_CONTEXT|PERF_ATTACH_GROUP));
5074 goto no_ctx;
5075 }
5076
5077 if (!is_kernel_event(event))
5078 perf_remove_from_owner(event);
5079
5080 ctx = perf_event_ctx_lock(event);
5081 WARN_ON_ONCE(ctx->parent_ctx);
5082 perf_remove_from_context(event, DETACH_GROUP);
5083
5084 raw_spin_lock_irq(&ctx->lock);
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096 event->state = PERF_EVENT_STATE_DEAD;
5097 raw_spin_unlock_irq(&ctx->lock);
5098
5099 perf_event_ctx_unlock(event, ctx);
5100
5101again:
5102 mutex_lock(&event->child_mutex);
5103 list_for_each_entry(child, &event->child_list, child_list) {
5104
5105
5106
5107
5108
5109 ctx = READ_ONCE(child->ctx);
5110
5111
5112
5113
5114
5115
5116
5117
5118 get_ctx(ctx);
5119
5120
5121
5122
5123
5124
5125 mutex_unlock(&event->child_mutex);
5126 mutex_lock(&ctx->mutex);
5127 mutex_lock(&event->child_mutex);
5128
5129
5130
5131
5132
5133
5134 tmp = list_first_entry_or_null(&event->child_list,
5135 struct perf_event, child_list);
5136 if (tmp == child) {
5137 perf_remove_from_context(child, DETACH_GROUP);
5138 list_move(&child->child_list, &free_list);
5139
5140
5141
5142
5143 put_event(event);
5144 }
5145
5146 mutex_unlock(&event->child_mutex);
5147 mutex_unlock(&ctx->mutex);
5148 put_ctx(ctx);
5149 goto again;
5150 }
5151 mutex_unlock(&event->child_mutex);
5152
5153 list_for_each_entry_safe(child, tmp, &free_list, child_list) {
5154 void *var = &child->ctx->refcount;
5155
5156 list_del(&child->child_list);
5157 free_event(child);
5158
5159
5160
5161
5162
5163 smp_mb();
5164 wake_up_var(var);
5165 }
5166
5167no_ctx:
5168 put_event(event);
5169 return 0;
5170}
5171EXPORT_SYMBOL_GPL(perf_event_release_kernel);
5172
5173
5174
5175
5176static int perf_release(struct inode *inode, struct file *file)
5177{
5178 perf_event_release_kernel(file->private_data);
5179 return 0;
5180}
5181
5182static u64 __perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
5183{
5184 struct perf_event *child;
5185 u64 total = 0;
5186
5187 *enabled = 0;
5188 *running = 0;
5189
5190 mutex_lock(&event->child_mutex);
5191
5192 (void)perf_event_read(event, false);
5193 total += perf_event_count(event);
5194
5195 *enabled += event->total_time_enabled +
5196 atomic64_read(&event->child_total_time_enabled);
5197 *running += event->total_time_running +
5198 atomic64_read(&event->child_total_time_running);
5199
5200 list_for_each_entry(child, &event->child_list, child_list) {
5201 (void)perf_event_read(child, false);
5202 total += perf_event_count(child);
5203 *enabled += child->total_time_enabled;
5204 *running += child->total_time_running;
5205 }
5206 mutex_unlock(&event->child_mutex);
5207
5208 return total;
5209}
5210
5211u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
5212{
5213 struct perf_event_context *ctx;
5214 u64 count;
5215
5216 ctx = perf_event_ctx_lock(event);
5217 count = __perf_event_read_value(event, enabled, running);
5218 perf_event_ctx_unlock(event, ctx);
5219
5220 return count;
5221}
5222EXPORT_SYMBOL_GPL(perf_event_read_value);
5223
5224static int __perf_read_group_add(struct perf_event *leader,
5225 u64 read_format, u64 *values)
5226{
5227 struct perf_event_context *ctx = leader->ctx;
5228 struct perf_event *sub;
5229 unsigned long flags;
5230 int n = 1;
5231 int ret;
5232
5233 ret = perf_event_read(leader, true);
5234 if (ret)
5235 return ret;
5236
5237 raw_spin_lock_irqsave(&ctx->lock, flags);
5238
5239
5240
5241
5242
5243
5244 if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED) {
5245 values[n++] += leader->total_time_enabled +
5246 atomic64_read(&leader->child_total_time_enabled);
5247 }
5248
5249 if (read_format & PERF_FORMAT_TOTAL_TIME_RUNNING) {
5250 values[n++] += leader->total_time_running +
5251 atomic64_read(&leader->child_total_time_running);
5252 }
5253
5254
5255
5256
5257 values[n++] += perf_event_count(leader);
5258 if (read_format & PERF_FORMAT_ID)
5259 values[n++] = primary_event_id(leader);
5260
5261 for_each_sibling_event(sub, leader) {
5262 values[n++] += perf_event_count(sub);
5263 if (read_format & PERF_FORMAT_ID)
5264 values[n++] = primary_event_id(sub);
5265 }
5266
5267 raw_spin_unlock_irqrestore(&ctx->lock, flags);
5268 return 0;
5269}
5270
5271static int perf_read_group(struct perf_event *event,
5272 u64 read_format, char __user *buf)
5273{
5274 struct perf_event *leader = event->group_leader, *child;
5275 struct perf_event_context *ctx = leader->ctx;
5276 int ret;
5277 u64 *values;
5278
5279 lockdep_assert_held(&ctx->mutex);
5280
5281 values = kzalloc(event->read_size, GFP_KERNEL);
5282 if (!values)
5283 return -ENOMEM;
5284
5285 values[0] = 1 + leader->nr_siblings;
5286
5287
5288
5289
5290
5291 mutex_lock(&leader->child_mutex);
5292
5293 ret = __perf_read_group_add(leader, read_format, values);
5294 if (ret)
5295 goto unlock;
5296
5297 list_for_each_entry(child, &leader->child_list, child_list) {
5298 ret = __perf_read_group_add(child, read_format, values);
5299 if (ret)
5300 goto unlock;
5301 }
5302
5303 mutex_unlock(&leader->child_mutex);
5304
5305 ret = event->read_size;
5306 if (copy_to_user(buf, values, event->read_size))
5307 ret = -EFAULT;
5308 goto out;
5309
5310unlock:
5311 mutex_unlock(&leader->child_mutex);
5312out:
5313 kfree(values);
5314 return ret;
5315}
5316
5317static int perf_read_one(struct perf_event *event,
5318 u64 read_format, char __user *buf)
5319{
5320 u64 enabled, running;
5321 u64 values[4];
5322 int n = 0;
5323
5324 values[n++] = __perf_event_read_value(event, &enabled, &running);
5325 if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
5326 values[n++] = enabled;
5327 if (read_format & PERF_FORMAT_TOTAL_TIME_RUNNING)
5328 values[n++] = running;
5329 if (read_format & PERF_FORMAT_ID)
5330 values[n++] = primary_event_id(event);
5331
5332 if (copy_to_user(buf, values, n * sizeof(u64)))
5333 return -EFAULT;
5334
5335 return n * sizeof(u64);
5336}
5337
5338static bool is_event_hup(struct perf_event *event)
5339{
5340 bool no_children;
5341
5342 if (event->state > PERF_EVENT_STATE_EXIT)
5343 return false;
5344
5345 mutex_lock(&event->child_mutex);
5346 no_children = list_empty(&event->child_list);
5347 mutex_unlock(&event->child_mutex);
5348 return no_children;
5349}
5350
5351
5352
5353
5354static ssize_t
5355__perf_read(struct perf_event *event, char __user *buf, size_t count)
5356{
5357 u64 read_format = event->attr.read_format;
5358 int ret;
5359
5360
5361
5362
5363
5364
5365 if (event->state == PERF_EVENT_STATE_ERROR)
5366 return 0;
5367
5368 if (count < event->read_size)
5369 return -ENOSPC;
5370
5371 WARN_ON_ONCE(event->ctx->parent_ctx);
5372 if (read_format & PERF_FORMAT_GROUP)
5373 ret = perf_read_group(event, read_format, buf);
5374 else
5375 ret = perf_read_one(event, read_format, buf);
5376
5377 return ret;
5378}
5379
5380static ssize_t
5381perf_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
5382{
5383 struct perf_event *event = file->private_data;
5384 struct perf_event_context *ctx;
5385 int ret;
5386
5387 ret = security_perf_event_read(event);
5388 if (ret)
5389 return ret;
5390
5391 ctx = perf_event_ctx_lock(event);
5392 ret = __perf_read(event, buf, count);
5393 perf_event_ctx_unlock(event, ctx);
5394
5395 return ret;
5396}
5397
5398static __poll_t perf_poll(struct file *file, poll_table *wait)
5399{
5400 struct perf_event *event = file->private_data;
5401 struct perf_buffer *rb;
5402 __poll_t events = EPOLLHUP;
5403
5404 poll_wait(file, &event->waitq, wait);
5405
5406 if (is_event_hup(event))
5407 return events;
5408
5409
5410
5411
5412
5413 mutex_lock(&event->mmap_mutex);
5414 rb = event->rb;
5415 if (rb)
5416 events = atomic_xchg(&rb->poll, 0);
5417 mutex_unlock(&event->mmap_mutex);
5418 return events;
5419}
5420
5421static void _perf_event_reset(struct perf_event *event)
5422{
5423 (void)perf_event_read(event, false);
5424 local64_set(&event->count, 0);
5425 perf_event_update_userpage(event);
5426}
5427
5428
5429u64 perf_event_pause(struct perf_event *event, bool reset)
5430{
5431 struct perf_event_context *ctx;
5432 u64 count;
5433
5434 ctx = perf_event_ctx_lock(event);
5435 WARN_ON_ONCE(event->attr.inherit);
5436 _perf_event_disable(event);
5437 count = local64_read(&event->count);
5438 if (reset)
5439 local64_set(&event->count, 0);
5440 perf_event_ctx_unlock(event, ctx);
5441
5442 return count;
5443}
5444EXPORT_SYMBOL_GPL(perf_event_pause);
5445
5446
5447
5448
5449
5450
5451
5452static void perf_event_for_each_child(struct perf_event *event,
5453 void (*func)(struct perf_event *))
5454{
5455 struct perf_event *child;
5456
5457 WARN_ON_ONCE(event->ctx->parent_ctx);
5458
5459 mutex_lock(&event->child_mutex);
5460 func(event);
5461 list_for_each_entry(child, &event->child_list, child_list)
5462 func(child);
5463 mutex_unlock(&event->child_mutex);
5464}
5465
5466static void perf_event_for_each(struct perf_event *event,
5467 void (*func)(struct perf_event *))
5468{
5469 struct perf_event_context *ctx = event->ctx;
5470 struct perf_event *sibling;
5471
5472 lockdep_assert_held(&ctx->mutex);
5473
5474 event = event->group_leader;
5475
5476 perf_event_for_each_child(event, func);
5477 for_each_sibling_event(sibling, event)
5478 perf_event_for_each_child(sibling, func);
5479}
5480
5481static void __perf_event_period(struct perf_event *event,
5482 struct perf_cpu_context *cpuctx,
5483 struct perf_event_context *ctx,
5484 void *info)
5485{
5486 u64 value = *((u64 *)info);
5487 bool active;
5488
5489 if (event->attr.freq) {
5490 event->attr.sample_freq = value;
5491 } else {
5492 event->attr.sample_period = value;
5493 event->hw.sample_period = value;
5494 }
5495
5496 active = (event->state == PERF_EVENT_STATE_ACTIVE);
5497 if (active) {
5498 perf_pmu_disable(ctx->pmu);
5499
5500
5501
5502
5503 if (event->hw.interrupts == MAX_INTERRUPTS) {
5504 event->hw.interrupts = 0;
5505 perf_log_throttle(event, 1);
5506 }
5507 event->pmu->stop(event, PERF_EF_UPDATE);
5508 }
5509
5510 local64_set(&event->hw.period_left, 0);
5511
5512 if (active) {
5513 event->pmu->start(event, PERF_EF_RELOAD);
5514 perf_pmu_enable(ctx->pmu);
5515 }
5516}
5517
5518static int perf_event_check_period(struct perf_event *event, u64 value)
5519{
5520 return event->pmu->check_period(event, value);
5521}
5522
5523static int _perf_event_period(struct perf_event *event, u64 value)
5524{
5525 if (!is_sampling_event(event))
5526 return -EINVAL;
5527
5528 if (!value)
5529 return -EINVAL;
5530
5531 if (event->attr.freq && value > sysctl_perf_event_sample_rate)
5532 return -EINVAL;
5533
5534 if (perf_event_check_period(event, value))
5535 return -EINVAL;
5536
5537 if (!event->attr.freq && (value & (1ULL << 63)))
5538 return -EINVAL;
5539
5540 event_function_call(event, __perf_event_period, &value);
5541
5542 return 0;
5543}
5544
5545int perf_event_period(struct perf_event *event, u64 value)
5546{
5547 struct perf_event_context *ctx;
5548 int ret;
5549
5550 ctx = perf_event_ctx_lock(event);
5551 ret = _perf_event_period(event, value);
5552 perf_event_ctx_unlock(event, ctx);
5553
5554 return ret;
5555}
5556EXPORT_SYMBOL_GPL(perf_event_period);
5557
5558static const struct file_operations perf_fops;
5559
5560static inline int perf_fget_light(int fd, struct fd *p)
5561{
5562 struct fd f = fdget(fd);
5563 if (!f.file)
5564 return -EBADF;
5565
5566 if (f.file->f_op != &perf_fops) {
5567 fdput(f);
5568 return -EBADF;
5569 }
5570 *p = f;
5571 return 0;
5572}
5573
5574static int perf_event_set_output(struct perf_event *event,
5575 struct perf_event *output_event);
5576static int perf_event_set_filter(struct perf_event *event, void __user *arg);
5577static int perf_event_set_bpf_prog(struct perf_event *event, u32 prog_fd);
5578static int perf_copy_attr(struct perf_event_attr __user *uattr,
5579 struct perf_event_attr *attr);
5580
5581static long _perf_ioctl(struct perf_event *event, unsigned int cmd, unsigned long arg)
5582{
5583 void (*func)(struct perf_event *);
5584 u32 flags = arg;
5585
5586 switch (cmd) {
5587 case PERF_EVENT_IOC_ENABLE:
5588 func = _perf_event_enable;
5589 break;
5590 case PERF_EVENT_IOC_DISABLE:
5591 func = _perf_event_disable;
5592 break;
5593 case PERF_EVENT_IOC_RESET:
5594 func = _perf_event_reset;
5595 break;
5596
5597 case PERF_EVENT_IOC_REFRESH:
5598 return _perf_event_refresh(event, arg);
5599
5600 case PERF_EVENT_IOC_PERIOD:
5601 {
5602 u64 value;
5603
5604 if (copy_from_user(&value, (u64 __user *)arg, sizeof(value)))
5605 return -EFAULT;
5606
5607 return _perf_event_period(event, value);
5608 }
5609 case PERF_EVENT_IOC_ID:
5610 {
5611 u64 id = primary_event_id(event);
5612
5613 if (copy_to_user((void __user *)arg, &id, sizeof(id)))
5614 return -EFAULT;
5615 return 0;
5616 }
5617
5618 case PERF_EVENT_IOC_SET_OUTPUT:
5619 {
5620 int ret;
5621 if (arg != -1) {
5622 struct perf_event *output_event;
5623 struct fd output;
5624 ret = perf_fget_light(arg, &output);
5625 if (ret)
5626 return ret;
5627 output_event = output.file->private_data;
5628 ret = perf_event_set_output(event, output_event);
5629 fdput(output);
5630 } else {
5631 ret = perf_event_set_output(event, NULL);
5632 }
5633 return ret;
5634 }
5635
5636 case PERF_EVENT_IOC_SET_FILTER:
5637 return perf_event_set_filter(event, (void __user *)arg);
5638
5639 case PERF_EVENT_IOC_SET_BPF:
5640 return perf_event_set_bpf_prog(event, arg);
5641
5642 case PERF_EVENT_IOC_PAUSE_OUTPUT: {
5643 struct perf_buffer *rb;
5644
5645 rcu_read_lock();
5646 rb = rcu_dereference(event->rb);
5647 if (!rb || !rb->nr_pages) {
5648 rcu_read_unlock();
5649 return -EINVAL;
5650 }
5651 rb_toggle_paused(rb, !!arg);
5652 rcu_read_unlock();
5653 return 0;
5654 }
5655
5656 case PERF_EVENT_IOC_QUERY_BPF:
5657 return perf_event_query_prog_array(event, (void __user *)arg);
5658
5659 case PERF_EVENT_IOC_MODIFY_ATTRIBUTES: {
5660 struct perf_event_attr new_attr;
5661 int err = perf_copy_attr((struct perf_event_attr __user *)arg,
5662 &new_attr);
5663
5664 if (err)
5665 return err;
5666
5667 return perf_event_modify_attr(event, &new_attr);
5668 }
5669 default:
5670 return -ENOTTY;
5671 }
5672
5673 if (flags & PERF_IOC_FLAG_GROUP)
5674 perf_event_for_each(event, func);
5675 else
5676 perf_event_for_each_child(event, func);
5677
5678 return 0;
5679}
5680
5681static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
5682{
5683 struct perf_event *event = file->private_data;
5684 struct perf_event_context *ctx;
5685 long ret;
5686
5687
5688 ret = security_perf_event_write(event);
5689 if (ret)
5690 return ret;
5691
5692 ctx = perf_event_ctx_lock(event);
5693 ret = _perf_ioctl(event, cmd, arg);
5694 perf_event_ctx_unlock(event, ctx);
5695
5696 return ret;
5697}
5698
5699#ifdef CONFIG_COMPAT
5700static long perf_compat_ioctl(struct file *file, unsigned int cmd,
5701 unsigned long arg)
5702{
5703 switch (_IOC_NR(cmd)) {
5704 case _IOC_NR(PERF_EVENT_IOC_SET_FILTER):
5705 case _IOC_NR(PERF_EVENT_IOC_ID):
5706 case _IOC_NR(PERF_EVENT_IOC_QUERY_BPF):
5707 case _IOC_NR(PERF_EVENT_IOC_MODIFY_ATTRIBUTES):
5708
5709 if (_IOC_SIZE(cmd) == sizeof(compat_uptr_t)) {
5710 cmd &= ~IOCSIZE_MASK;
5711 cmd |= sizeof(void *) << IOCSIZE_SHIFT;
5712 }
5713 break;
5714 }
5715 return perf_ioctl(file, cmd, arg);
5716}
5717#else
5718# define perf_compat_ioctl NULL
5719#endif
5720
5721int perf_event_task_enable(void)
5722{
5723 struct perf_event_context *ctx;
5724 struct perf_event *event;
5725
5726 mutex_lock(¤t->perf_event_mutex);
5727 list_for_each_entry(event, ¤t->perf_event_list, owner_entry) {
5728 ctx = perf_event_ctx_lock(event);
5729 perf_event_for_each_child(event, _perf_event_enable);
5730 perf_event_ctx_unlock(event, ctx);
5731 }
5732 mutex_unlock(¤t->perf_event_mutex);
5733
5734 return 0;
5735}
5736
5737int perf_event_task_disable(void)
5738{
5739 struct perf_event_context *ctx;
5740 struct perf_event *event;
5741
5742 mutex_lock(¤t->perf_event_mutex);
5743 list_for_each_entry(event, ¤t->perf_event_list, owner_entry) {
5744 ctx = perf_event_ctx_lock(event);
5745 perf_event_for_each_child(event, _perf_event_disable);
5746 perf_event_ctx_unlock(event, ctx);
5747 }
5748 mutex_unlock(¤t->perf_event_mutex);
5749
5750 return 0;
5751}
5752
5753static int perf_event_index(struct perf_event *event)
5754{
5755 if (event->hw.state & PERF_HES_STOPPED)
5756 return 0;
5757
5758 if (event->state != PERF_EVENT_STATE_ACTIVE)
5759 return 0;
5760
5761 return event->pmu->event_idx(event);
5762}
5763
5764static void calc_timer_values(struct perf_event *event,
5765 u64 *now,
5766 u64 *enabled,
5767 u64 *running)
5768{
5769 u64 ctx_time;
5770
5771 *now = perf_clock();
5772 ctx_time = event->shadow_ctx_time + *now;
5773 __perf_update_times(event, ctx_time, enabled, running);
5774}
5775
5776static void perf_event_init_userpage(struct perf_event *event)
5777{
5778 struct perf_event_mmap_page *userpg;
5779 struct perf_buffer *rb;
5780
5781 rcu_read_lock();
5782 rb = rcu_dereference(event->rb);
5783 if (!rb)
5784 goto unlock;
5785
5786 userpg = rb->user_page;
5787
5788
5789 userpg->cap_bit0_is_deprecated = 1;
5790 userpg->size = offsetof(struct perf_event_mmap_page, __reserved);
5791 userpg->data_offset = PAGE_SIZE;
5792 userpg->data_size = perf_data_size(rb);
5793
5794unlock:
5795 rcu_read_unlock();
5796}
5797
5798void __weak arch_perf_update_userpage(
5799 struct perf_event *event, struct perf_event_mmap_page *userpg, u64 now)
5800{
5801}
5802
5803
5804
5805
5806
5807
5808void perf_event_update_userpage(struct perf_event *event)
5809{
5810 struct perf_event_mmap_page *userpg;
5811 struct perf_buffer *rb;
5812 u64 enabled, running, now;
5813
5814 rcu_read_lock();
5815 rb = rcu_dereference(event->rb);
5816 if (!rb)
5817 goto unlock;
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828 calc_timer_values(event, &now, &enabled, &running);
5829
5830 userpg = rb->user_page;
5831
5832
5833
5834
5835 preempt_disable();
5836 ++userpg->lock;
5837 barrier();
5838 userpg->index = perf_event_index(event);
5839 userpg->offset = perf_event_count(event);
5840 if (userpg->index)
5841 userpg->offset -= local64_read(&event->hw.prev_count);
5842
5843 userpg->time_enabled = enabled +
5844 atomic64_read(&event->child_total_time_enabled);
5845
5846 userpg->time_running = running +
5847 atomic64_read(&event->child_total_time_running);
5848
5849 arch_perf_update_userpage(event, userpg, now);
5850
5851 barrier();
5852 ++userpg->lock;
5853 preempt_enable();
5854unlock:
5855 rcu_read_unlock();
5856}
5857EXPORT_SYMBOL_GPL(perf_event_update_userpage);
5858
5859static vm_fault_t perf_mmap_fault(struct vm_fault *vmf)
5860{
5861 struct perf_event *event = vmf->vma->vm_file->private_data;
5862 struct perf_buffer *rb;
5863 vm_fault_t ret = VM_FAULT_SIGBUS;
5864
5865 if (vmf->flags & FAULT_FLAG_MKWRITE) {
5866 if (vmf->pgoff == 0)
5867 ret = 0;
5868 return ret;
5869 }
5870
5871 rcu_read_lock();
5872 rb = rcu_dereference(event->rb);
5873 if (!rb)
5874 goto unlock;
5875
5876 if (vmf->pgoff && (vmf->flags & FAULT_FLAG_WRITE))
5877 goto unlock;
5878
5879 vmf->page = perf_mmap_to_page(rb, vmf->pgoff);
5880 if (!vmf->page)
5881 goto unlock;
5882
5883 get_page(vmf->page);
5884 vmf->page->mapping = vmf->vma->vm_file->f_mapping;
5885 vmf->page->index = vmf->pgoff;
5886
5887 ret = 0;
5888unlock:
5889 rcu_read_unlock();
5890
5891 return ret;
5892}
5893
5894static void ring_buffer_attach(struct perf_event *event,
5895 struct perf_buffer *rb)
5896{
5897 struct perf_buffer *old_rb = NULL;
5898 unsigned long flags;
5899
5900 if (event->rb) {
5901
5902
5903
5904
5905 WARN_ON_ONCE(event->rcu_pending);
5906
5907 old_rb = event->rb;
5908 spin_lock_irqsave(&old_rb->event_lock, flags);
5909 list_del_rcu(&event->rb_entry);
5910 spin_unlock_irqrestore(&old_rb->event_lock, flags);
5911
5912 event->rcu_batches = get_state_synchronize_rcu();
5913 event->rcu_pending = 1;
5914 }
5915
5916 if (rb) {
5917 if (event->rcu_pending) {
5918 cond_synchronize_rcu(event->rcu_batches);
5919 event->rcu_pending = 0;
5920 }
5921
5922 spin_lock_irqsave(&rb->event_lock, flags);
5923 list_add_rcu(&event->rb_entry, &rb->event_list);
5924 spin_unlock_irqrestore(&rb->event_lock, flags);
5925 }
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937 if (has_aux(event))
5938 perf_event_stop(event, 0);
5939
5940 rcu_assign_pointer(event->rb, rb);
5941
5942 if (old_rb) {
5943 ring_buffer_put(old_rb);
5944
5945
5946
5947
5948
5949 wake_up_all(&event->waitq);
5950 }
5951}
5952
5953static void ring_buffer_wakeup(struct perf_event *event)
5954{
5955 struct perf_buffer *rb;
5956
5957 rcu_read_lock();
5958 rb = rcu_dereference(event->rb);
5959 if (rb) {
5960 list_for_each_entry_rcu(event, &rb->event_list, rb_entry)
5961 wake_up_all(&event->waitq);
5962 }
5963 rcu_read_unlock();
5964}
5965
5966struct perf_buffer *ring_buffer_get(struct perf_event *event)
5967{
5968 struct perf_buffer *rb;
5969
5970 rcu_read_lock();
5971 rb = rcu_dereference(event->rb);
5972 if (rb) {
5973 if (!refcount_inc_not_zero(&rb->refcount))
5974 rb = NULL;
5975 }
5976 rcu_read_unlock();
5977
5978 return rb;
5979}
5980
5981void ring_buffer_put(struct perf_buffer *rb)
5982{
5983 if (!refcount_dec_and_test(&rb->refcount))
5984 return;
5985
5986 WARN_ON_ONCE(!list_empty(&rb->event_list));
5987
5988 call_rcu(&rb->rcu_head, rb_free_rcu);
5989}
5990
5991static void perf_mmap_open(struct vm_area_struct *vma)
5992{
5993 struct perf_event *event = vma->vm_file->private_data;
5994
5995 atomic_inc(&event->mmap_count);
5996 atomic_inc(&event->rb->mmap_count);
5997
5998 if (vma->vm_pgoff)
5999 atomic_inc(&event->rb->aux_mmap_count);
6000
6001 if (event->pmu->event_mapped)
6002 event->pmu->event_mapped(event, vma->vm_mm);
6003}
6004
6005static void perf_pmu_output_stop(struct perf_event *event);
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015static void perf_mmap_close(struct vm_area_struct *vma)
6016{
6017 struct perf_event *event = vma->vm_file->private_data;
6018 struct perf_buffer *rb = ring_buffer_get(event);
6019 struct user_struct *mmap_user = rb->mmap_user;
6020 int mmap_locked = rb->mmap_locked;
6021 unsigned long size = perf_data_size(rb);
6022 bool detach_rest = false;
6023
6024 if (event->pmu->event_unmapped)
6025 event->pmu->event_unmapped(event, vma->vm_mm);
6026
6027
6028
6029
6030
6031
6032 if (rb_has_aux(rb) && vma->vm_pgoff == rb->aux_pgoff &&
6033 atomic_dec_and_mutex_lock(&rb->aux_mmap_count, &event->mmap_mutex)) {
6034
6035
6036
6037
6038
6039
6040 perf_pmu_output_stop(event);
6041
6042
6043 atomic_long_sub(rb->aux_nr_pages - rb->aux_mmap_locked, &mmap_user->locked_vm);
6044 atomic64_sub(rb->aux_mmap_locked, &vma->vm_mm->pinned_vm);
6045
6046
6047 rb_free_aux(rb);
6048 WARN_ON_ONCE(refcount_read(&rb->aux_refcount));
6049
6050 mutex_unlock(&event->mmap_mutex);
6051 }
6052
6053 if (atomic_dec_and_test(&rb->mmap_count))
6054 detach_rest = true;
6055
6056 if (!atomic_dec_and_mutex_lock(&event->mmap_count, &event->mmap_mutex))
6057 goto out_put;
6058
6059 ring_buffer_attach(event, NULL);
6060 mutex_unlock(&event->mmap_mutex);
6061
6062
6063 if (!detach_rest)
6064 goto out_put;
6065
6066
6067
6068
6069
6070
6071again:
6072 rcu_read_lock();
6073 list_for_each_entry_rcu(event, &rb->event_list, rb_entry) {
6074 if (!atomic_long_inc_not_zero(&event->refcount)) {
6075
6076
6077
6078
6079 continue;
6080 }
6081 rcu_read_unlock();
6082
6083 mutex_lock(&event->mmap_mutex);
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094 if (event->rb == rb)
6095 ring_buffer_attach(event, NULL);
6096
6097 mutex_unlock(&event->mmap_mutex);
6098 put_event(event);
6099
6100
6101
6102
6103
6104 goto again;
6105 }
6106 rcu_read_unlock();
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117 atomic_long_sub((size >> PAGE_SHIFT) + 1 - mmap_locked,
6118 &mmap_user->locked_vm);
6119 atomic64_sub(mmap_locked, &vma->vm_mm->pinned_vm);
6120 free_uid(mmap_user);
6121
6122out_put:
6123 ring_buffer_put(rb);
6124}
6125
6126static const struct vm_operations_struct perf_mmap_vmops = {
6127 .open = perf_mmap_open,
6128 .close = perf_mmap_close,
6129 .fault = perf_mmap_fault,
6130 .page_mkwrite = perf_mmap_fault,
6131};
6132
6133static int perf_mmap(struct file *file, struct vm_area_struct *vma)
6134{
6135 struct perf_event *event = file->private_data;
6136 unsigned long user_locked, user_lock_limit;
6137 struct user_struct *user = current_user();
6138 struct perf_buffer *rb = NULL;
6139 unsigned long locked, lock_limit;
6140 unsigned long vma_size;
6141 unsigned long nr_pages;
6142 long user_extra = 0, extra = 0;
6143 int ret = 0, flags = 0;
6144
6145
6146
6147
6148
6149
6150 if (event->cpu == -1 && event->attr.inherit)
6151 return -EINVAL;
6152
6153 if (!(vma->vm_flags & VM_SHARED))
6154 return -EINVAL;
6155
6156 ret = security_perf_event_read(event);
6157 if (ret)
6158 return ret;
6159
6160 vma_size = vma->vm_end - vma->vm_start;
6161
6162 if (vma->vm_pgoff == 0) {
6163 nr_pages = (vma_size / PAGE_SIZE) - 1;
6164 } else {
6165
6166
6167
6168
6169
6170 u64 aux_offset, aux_size;
6171
6172 if (!event->rb)
6173 return -EINVAL;
6174
6175 nr_pages = vma_size / PAGE_SIZE;
6176
6177 mutex_lock(&event->mmap_mutex);
6178 ret = -EINVAL;
6179
6180 rb = event->rb;
6181 if (!rb)
6182 goto aux_unlock;
6183
6184 aux_offset = READ_ONCE(rb->user_page->aux_offset);
6185 aux_size = READ_ONCE(rb->user_page->aux_size);
6186
6187 if (aux_offset < perf_data_size(rb) + PAGE_SIZE)
6188 goto aux_unlock;
6189
6190 if (aux_offset != vma->vm_pgoff << PAGE_SHIFT)
6191 goto aux_unlock;
6192
6193
6194 if (rb_has_aux(rb) && rb->aux_pgoff != vma->vm_pgoff)
6195 goto aux_unlock;
6196
6197 if (aux_size != vma_size || aux_size != nr_pages * PAGE_SIZE)
6198 goto aux_unlock;
6199
6200
6201 if (rb_has_aux(rb) && rb->aux_nr_pages != nr_pages)
6202 goto aux_unlock;
6203
6204 if (!is_power_of_2(nr_pages))
6205 goto aux_unlock;
6206
6207 if (!atomic_inc_not_zero(&rb->mmap_count))
6208 goto aux_unlock;
6209
6210 if (rb_has_aux(rb)) {
6211 atomic_inc(&rb->aux_mmap_count);
6212 ret = 0;
6213 goto unlock;
6214 }
6215
6216 atomic_set(&rb->aux_mmap_count, 1);
6217 user_extra = nr_pages;
6218
6219 goto accounting;
6220 }
6221
6222
6223
6224
6225
6226 if (nr_pages != 0 && !is_power_of_2(nr_pages))
6227 return -EINVAL;
6228
6229 if (vma_size != PAGE_SIZE * (1 + nr_pages))
6230 return -EINVAL;
6231
6232 WARN_ON_ONCE(event->ctx->parent_ctx);
6233again:
6234 mutex_lock(&event->mmap_mutex);
6235 if (event->rb) {
6236 if (event->rb->nr_pages != nr_pages) {
6237 ret = -EINVAL;
6238 goto unlock;
6239 }
6240
6241 if (!atomic_inc_not_zero(&event->rb->mmap_count)) {
6242
6243
6244
6245
6246
6247 mutex_unlock(&event->mmap_mutex);
6248 goto again;
6249 }
6250
6251 goto unlock;
6252 }
6253
6254 user_extra = nr_pages + 1;
6255
6256accounting:
6257 user_lock_limit = sysctl_perf_event_mlock >> (PAGE_SHIFT - 10);
6258
6259
6260
6261
6262 user_lock_limit *= num_online_cpus();
6263
6264 user_locked = atomic_long_read(&user->locked_vm);
6265
6266
6267
6268
6269
6270 if (user_locked > user_lock_limit)
6271 user_locked = user_lock_limit;
6272 user_locked += user_extra;
6273
6274 if (user_locked > user_lock_limit) {
6275
6276
6277
6278
6279 extra = user_locked - user_lock_limit;
6280 user_extra -= extra;
6281 }
6282
6283 lock_limit = rlimit(RLIMIT_MEMLOCK);
6284 lock_limit >>= PAGE_SHIFT;
6285 locked = atomic64_read(&vma->vm_mm->pinned_vm) + extra;
6286
6287 if ((locked > lock_limit) && perf_is_paranoid() &&
6288 !capable(CAP_IPC_LOCK)) {
6289 ret = -EPERM;
6290 goto unlock;
6291 }
6292
6293 WARN_ON(!rb && event->rb);
6294
6295 if (vma->vm_flags & VM_WRITE)
6296 flags |= RING_BUFFER_WRITABLE;
6297
6298 if (!rb) {
6299 rb = rb_alloc(nr_pages,
6300 event->attr.watermark ? event->attr.wakeup_watermark : 0,
6301 event->cpu, flags);
6302
6303 if (!rb) {
6304 ret = -ENOMEM;
6305 goto unlock;
6306 }
6307
6308 atomic_set(&rb->mmap_count, 1);
6309 rb->mmap_user = get_current_user();
6310 rb->mmap_locked = extra;
6311
6312 ring_buffer_attach(event, rb);
6313
6314 perf_event_init_userpage(event);
6315 perf_event_update_userpage(event);
6316 } else {
6317 ret = rb_alloc_aux(rb, event, vma->vm_pgoff, nr_pages,
6318 event->attr.aux_watermark, flags);
6319 if (!ret)
6320 rb->aux_mmap_locked = extra;
6321 }
6322
6323unlock:
6324 if (!ret) {
6325 atomic_long_add(user_extra, &user->locked_vm);
6326 atomic64_add(extra, &vma->vm_mm->pinned_vm);
6327
6328 atomic_inc(&event->mmap_count);
6329 } else if (rb) {
6330 atomic_dec(&rb->mmap_count);
6331 }
6332aux_unlock:
6333 mutex_unlock(&event->mmap_mutex);
6334
6335
6336
6337
6338
6339 vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND | VM_DONTDUMP;
6340 vma->vm_ops = &perf_mmap_vmops;
6341
6342 if (event->pmu->event_mapped)
6343 event->pmu->event_mapped(event, vma->vm_mm);
6344
6345 return ret;
6346}
6347
6348static int perf_fasync(int fd, struct file *filp, int on)
6349{
6350 struct inode *inode = file_inode(filp);
6351 struct perf_event *event = filp->private_data;
6352 int retval;
6353
6354 inode_lock(inode);
6355 retval = fasync_helper(fd, filp, on, &event->fasync);
6356 inode_unlock(inode);
6357
6358 if (retval < 0)
6359 return retval;
6360
6361 return 0;
6362}
6363
6364static const struct file_operations perf_fops = {
6365 .llseek = no_llseek,
6366 .release = perf_release,
6367 .read = perf_read,
6368 .poll = perf_poll,
6369 .unlocked_ioctl = perf_ioctl,
6370 .compat_ioctl = perf_compat_ioctl,
6371 .mmap = perf_mmap,
6372 .fasync = perf_fasync,
6373};
6374
6375
6376
6377
6378
6379
6380
6381
6382static inline struct fasync_struct **perf_event_fasync(struct perf_event *event)
6383{
6384
6385 if (event->parent)
6386 event = event->parent;
6387 return &event->fasync;
6388}
6389
6390void perf_event_wakeup(struct perf_event *event)
6391{
6392 ring_buffer_wakeup(event);
6393
6394 if (event->pending_kill) {
6395 kill_fasync(perf_event_fasync(event), SIGIO, event->pending_kill);
6396 event->pending_kill = 0;
6397 }
6398}
6399
6400static void perf_sigtrap(struct perf_event *event)
6401{
6402
6403
6404
6405
6406
6407 if (WARN_ON_ONCE(event->ctx->task != current))
6408 return;
6409
6410
6411
6412
6413 if (current->flags & PF_EXITING)
6414 return;
6415
6416 force_sig_perf((void __user *)event->pending_addr,
6417 event->attr.type, event->attr.sig_data);
6418}
6419
6420static void perf_pending_event_disable(struct perf_event *event)
6421{
6422 int cpu = READ_ONCE(event->pending_disable);
6423
6424 if (cpu < 0)
6425 return;
6426
6427 if (cpu == smp_processor_id()) {
6428 WRITE_ONCE(event->pending_disable, -1);
6429
6430 if (event->attr.sigtrap) {
6431 perf_sigtrap(event);
6432 atomic_set_release(&event->event_limit, 1);
6433 return;
6434 }
6435
6436 perf_event_disable_local(event);
6437 return;
6438 }
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460 irq_work_queue_on(&event->pending, cpu);
6461}
6462
6463static void perf_pending_event(struct irq_work *entry)
6464{
6465 struct perf_event *event = container_of(entry, struct perf_event, pending);
6466 int rctx;
6467
6468 rctx = perf_swevent_get_recursion_context();
6469
6470
6471
6472
6473
6474 perf_pending_event_disable(event);
6475
6476 if (event->pending_wakeup) {
6477 event->pending_wakeup = 0;
6478 perf_event_wakeup(event);
6479 }
6480
6481 if (rctx >= 0)
6482 perf_swevent_put_recursion_context(rctx);
6483}
6484
6485
6486
6487
6488
6489
6490struct perf_guest_info_callbacks *perf_guest_cbs;
6491
6492int perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *cbs)
6493{
6494 perf_guest_cbs = cbs;
6495 return 0;
6496}
6497EXPORT_SYMBOL_GPL(perf_register_guest_info_callbacks);
6498
6499int perf_unregister_guest_info_callbacks(struct perf_guest_info_callbacks *cbs)
6500{
6501 perf_guest_cbs = NULL;
6502 return 0;
6503}
6504EXPORT_SYMBOL_GPL(perf_unregister_guest_info_callbacks);
6505
6506static void
6507perf_output_sample_regs(struct perf_output_handle *handle,
6508 struct pt_regs *regs, u64 mask)
6509{
6510 int bit;
6511 DECLARE_BITMAP(_mask, 64);
6512
6513 bitmap_from_u64(_mask, mask);
6514 for_each_set_bit(bit, _mask, sizeof(mask) * BITS_PER_BYTE) {
6515 u64 val;
6516
6517 val = perf_reg_value(regs, bit);
6518 perf_output_put(handle, val);
6519 }
6520}
6521
6522static void perf_sample_regs_user(struct perf_regs *regs_user,
6523 struct pt_regs *regs)
6524{
6525 if (user_mode(regs)) {
6526 regs_user->abi = perf_reg_abi(current);
6527 regs_user->regs = regs;
6528 } else if (!(current->flags & PF_KTHREAD)) {
6529 perf_get_regs_user(regs_user, regs);
6530 } else {
6531 regs_user->abi = PERF_SAMPLE_REGS_ABI_NONE;
6532 regs_user->regs = NULL;
6533 }
6534}
6535
6536static void perf_sample_regs_intr(struct perf_regs *regs_intr,
6537 struct pt_regs *regs)
6538{
6539 regs_intr->regs = regs;
6540 regs_intr->abi = perf_reg_abi(current);
6541}
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551static u64 perf_ustack_task_size(struct pt_regs *regs)
6552{
6553 unsigned long addr = perf_user_stack_pointer(regs);
6554
6555 if (!addr || addr >= TASK_SIZE)
6556 return 0;
6557
6558 return TASK_SIZE - addr;
6559}
6560
6561static u16
6562perf_sample_ustack_size(u16 stack_size, u16 header_size,
6563 struct pt_regs *regs)
6564{
6565 u64 task_size;
6566
6567
6568 if (!regs)
6569 return 0;
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581 task_size = min((u64) USHRT_MAX, perf_ustack_task_size(regs));
6582 stack_size = min(stack_size, (u16) task_size);
6583
6584
6585 header_size += 2 * sizeof(u64);
6586
6587
6588 if ((u16) (header_size + stack_size) < header_size) {
6589
6590
6591
6592
6593 stack_size = USHRT_MAX - header_size - sizeof(u64);
6594 stack_size = round_up(stack_size, sizeof(u64));
6595 }
6596
6597 return stack_size;
6598}
6599
6600static void
6601perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
6602 struct pt_regs *regs)
6603{
6604
6605 if (!regs) {
6606 u64 size = 0;
6607 perf_output_put(handle, size);
6608 } else {
6609 unsigned long sp;
6610 unsigned int rem;
6611 u64 dyn_size;
6612 mm_segment_t fs;
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626 perf_output_put(handle, dump_size);
6627
6628
6629 sp = perf_user_stack_pointer(regs);
6630 fs = force_uaccess_begin();
6631 rem = __output_copy_user(handle, (void *) sp, dump_size);
6632 force_uaccess_end(fs);
6633 dyn_size = dump_size - rem;
6634
6635 perf_output_skip(handle, rem);
6636
6637
6638 perf_output_put(handle, dyn_size);
6639 }
6640}
6641
6642static unsigned long perf_prepare_sample_aux(struct perf_event *event,
6643 struct perf_sample_data *data,
6644 size_t size)
6645{
6646 struct perf_event *sampler = event->aux_event;
6647 struct perf_buffer *rb;
6648
6649 data->aux_size = 0;
6650
6651 if (!sampler)
6652 goto out;
6653
6654 if (WARN_ON_ONCE(READ_ONCE(sampler->state) != PERF_EVENT_STATE_ACTIVE))
6655 goto out;
6656
6657 if (WARN_ON_ONCE(READ_ONCE(sampler->oncpu) != smp_processor_id()))
6658 goto out;
6659
6660 rb = ring_buffer_get(sampler->parent ? sampler->parent : sampler);
6661 if (!rb)
6662 goto out;
6663
6664
6665
6666
6667
6668 if (READ_ONCE(rb->aux_in_sampling)) {
6669 data->aux_size = 0;
6670 } else {
6671 size = min_t(size_t, size, perf_aux_size(rb));
6672 data->aux_size = ALIGN(size, sizeof(u64));
6673 }
6674 ring_buffer_put(rb);
6675
6676out:
6677 return data->aux_size;
6678}
6679
6680static long perf_pmu_snapshot_aux(struct perf_buffer *rb,
6681 struct perf_event *event,
6682 struct perf_output_handle *handle,
6683 unsigned long size)
6684{
6685 unsigned long flags;
6686 long ret;
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697 local_irq_save(flags);
6698
6699
6700
6701
6702 WRITE_ONCE(rb->aux_in_sampling, 1);
6703 barrier();
6704
6705 ret = event->pmu->snapshot_aux(event, handle, size);
6706
6707 barrier();
6708 WRITE_ONCE(rb->aux_in_sampling, 0);
6709 local_irq_restore(flags);
6710
6711 return ret;
6712}
6713
6714static void perf_aux_sample_output(struct perf_event *event,
6715 struct perf_output_handle *handle,
6716 struct perf_sample_data *data)
6717{
6718 struct perf_event *sampler = event->aux_event;
6719 struct perf_buffer *rb;
6720 unsigned long pad;
6721 long size;
6722
6723 if (WARN_ON_ONCE(!sampler || !data->aux_size))
6724 return;
6725
6726 rb = ring_buffer_get(sampler->parent ? sampler->parent : sampler);
6727 if (!rb)
6728 return;
6729
6730 size = perf_pmu_snapshot_aux(rb, sampler, handle, data->aux_size);
6731
6732
6733
6734
6735
6736
6737
6738 if (WARN_ON_ONCE(size < 0))
6739 goto out_put;
6740
6741
6742
6743
6744
6745 pad = data->aux_size - size;
6746 if (WARN_ON_ONCE(pad >= sizeof(u64)))
6747 pad = 8;
6748
6749 if (pad) {
6750 u64 zero = 0;
6751 perf_output_copy(handle, &zero, pad);
6752 }
6753
6754out_put:
6755 ring_buffer_put(rb);
6756}
6757
6758static void __perf_event_header__init_id(struct perf_event_header *header,
6759 struct perf_sample_data *data,
6760 struct perf_event *event)
6761{
6762 u64 sample_type = event->attr.sample_type;
6763
6764 data->type = sample_type;
6765 header->size += event->id_header_size;
6766
6767 if (sample_type & PERF_SAMPLE_TID) {
6768
6769 data->tid_entry.pid = perf_event_pid(event, current);
6770 data->tid_entry.tid = perf_event_tid(event, current);
6771 }
6772
6773 if (sample_type & PERF_SAMPLE_TIME)
6774 data->time = perf_event_clock(event);
6775
6776 if (sample_type & (PERF_SAMPLE_ID | PERF_SAMPLE_IDENTIFIER))
6777 data->id = primary_event_id(event);
6778
6779 if (sample_type & PERF_SAMPLE_STREAM_ID)
6780 data->stream_id = event->id;
6781
6782 if (sample_type & PERF_SAMPLE_CPU) {
6783 data->cpu_entry.cpu = raw_smp_processor_id();
6784 data->cpu_entry.reserved = 0;
6785 }
6786}
6787
6788void perf_event_header__init_id(struct perf_event_header *header,
6789 struct perf_sample_data *data,
6790 struct perf_event *event)
6791{
6792 if (event->attr.sample_id_all)
6793 __perf_event_header__init_id(header, data, event);
6794}
6795
6796static void __perf_event__output_id_sample(struct perf_output_handle *handle,
6797 struct perf_sample_data *data)
6798{
6799 u64 sample_type = data->type;
6800
6801 if (sample_type & PERF_SAMPLE_TID)
6802 perf_output_put(handle, data->tid_entry);
6803
6804 if (sample_type & PERF_SAMPLE_TIME)
6805 perf_output_put(handle, data->time);
6806
6807 if (sample_type & PERF_SAMPLE_ID)
6808 perf_output_put(handle, data->id);
6809
6810 if (sample_type & PERF_SAMPLE_STREAM_ID)
6811 perf_output_put(handle, data->stream_id);
6812
6813 if (sample_type & PERF_SAMPLE_CPU)
6814 perf_output_put(handle, data->cpu_entry);
6815
6816 if (sample_type & PERF_SAMPLE_IDENTIFIER)
6817 perf_output_put(handle, data->id);
6818}
6819
6820void perf_event__output_id_sample(struct perf_event *event,
6821 struct perf_output_handle *handle,
6822 struct perf_sample_data *sample)
6823{
6824 if (event->attr.sample_id_all)
6825 __perf_event__output_id_sample(handle, sample);
6826}
6827
6828static void perf_output_read_one(struct perf_output_handle *handle,
6829 struct perf_event *event,
6830 u64 enabled, u64 running)
6831{
6832 u64 read_format = event->attr.read_format;
6833 u64 values[4];
6834 int n = 0;
6835
6836 values[n++] = perf_event_count(event);
6837 if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED) {
6838 values[n++] = enabled +
6839 atomic64_read(&event->child_total_time_enabled);
6840 }
6841 if (read_format & PERF_FORMAT_TOTAL_TIME_RUNNING) {
6842 values[n++] = running +
6843 atomic64_read(&event->child_total_time_running);
6844 }
6845 if (read_format & PERF_FORMAT_ID)
6846 values[n++] = primary_event_id(event);
6847
6848 __output_copy(handle, values, n * sizeof(u64));
6849}
6850
6851static void perf_output_read_group(struct perf_output_handle *handle,
6852 struct perf_event *event,
6853 u64 enabled, u64 running)
6854{
6855 struct perf_event *leader = event->group_leader, *sub;
6856 u64 read_format = event->attr.read_format;
6857 u64 values[5];
6858 int n = 0;
6859
6860 values[n++] = 1 + leader->nr_siblings;
6861
6862 if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
6863 values[n++] = enabled;
6864
6865 if (read_format & PERF_FORMAT_TOTAL_TIME_RUNNING)
6866 values[n++] = running;
6867
6868 if ((leader != event) &&
6869 (leader->state == PERF_EVENT_STATE_ACTIVE))
6870 leader->pmu->read(leader);
6871
6872 values[n++] = perf_event_count(leader);
6873 if (read_format & PERF_FORMAT_ID)
6874 values[n++] = primary_event_id(leader);
6875
6876 __output_copy(handle, values, n * sizeof(u64));
6877
6878 for_each_sibling_event(sub, leader) {
6879 n = 0;
6880
6881 if ((sub != event) &&
6882 (sub->state == PERF_EVENT_STATE_ACTIVE))
6883 sub->pmu->read(sub);
6884
6885 values[n++] = perf_event_count(sub);
6886 if (read_format & PERF_FORMAT_ID)
6887 values[n++] = primary_event_id(sub);
6888
6889 __output_copy(handle, values, n * sizeof(u64));
6890 }
6891}
6892
6893#define PERF_FORMAT_TOTAL_TIMES (PERF_FORMAT_TOTAL_TIME_ENABLED|\
6894 PERF_FORMAT_TOTAL_TIME_RUNNING)
6895
6896
6897
6898
6899
6900
6901
6902
6903static void perf_output_read(struct perf_output_handle *handle,
6904 struct perf_event *event)
6905{
6906 u64 enabled = 0, running = 0, now;
6907 u64 read_format = event->attr.read_format;
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918 if (read_format & PERF_FORMAT_TOTAL_TIMES)
6919 calc_timer_values(event, &now, &enabled, &running);
6920
6921 if (event->attr.read_format & PERF_FORMAT_GROUP)
6922 perf_output_read_group(handle, event, enabled, running);
6923 else
6924 perf_output_read_one(handle, event, enabled, running);
6925}
6926
6927static inline bool perf_sample_save_hw_index(struct perf_event *event)
6928{
6929 return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_HW_INDEX;
6930}
6931
6932void perf_output_sample(struct perf_output_handle *handle,
6933 struct perf_event_header *header,
6934 struct perf_sample_data *data,
6935 struct perf_event *event)
6936{
6937 u64 sample_type = data->type;
6938
6939 perf_output_put(handle, *header);
6940
6941 if (sample_type & PERF_SAMPLE_IDENTIFIER)
6942 perf_output_put(handle, data->id);
6943
6944 if (sample_type & PERF_SAMPLE_IP)
6945 perf_output_put(handle, data->ip);
6946
6947 if (sample_type & PERF_SAMPLE_TID)
6948 perf_output_put(handle, data->tid_entry);
6949
6950 if (sample_type & PERF_SAMPLE_TIME)
6951 perf_output_put(handle, data->time);
6952
6953 if (sample_type & PERF_SAMPLE_ADDR)
6954 perf_output_put(handle, data->addr);
6955
6956 if (sample_type & PERF_SAMPLE_ID)
6957 perf_output_put(handle, data->id);
6958
6959 if (sample_type & PERF_SAMPLE_STREAM_ID)
6960 perf_output_put(handle, data->stream_id);
6961
6962 if (sample_type & PERF_SAMPLE_CPU)
6963 perf_output_put(handle, data->cpu_entry);
6964
6965 if (sample_type & PERF_SAMPLE_PERIOD)
6966 perf_output_put(handle, data->period);
6967
6968 if (sample_type & PERF_SAMPLE_READ)
6969 perf_output_read(handle, event);
6970
6971 if (sample_type & PERF_SAMPLE_CALLCHAIN) {
6972 int size = 1;
6973
6974 size += data->callchain->nr;
6975 size *= sizeof(u64);
6976 __output_copy(handle, data->callchain, size);
6977 }
6978
6979 if (sample_type & PERF_SAMPLE_RAW) {
6980 struct perf_raw_record *raw = data->raw;
6981
6982 if (raw) {
6983 struct perf_raw_frag *frag = &raw->frag;
6984
6985 perf_output_put(handle, raw->size);
6986 do {
6987 if (frag->copy) {
6988 __output_custom(handle, frag->copy,
6989 frag->data, frag->size);
6990 } else {
6991 __output_copy(handle, frag->data,
6992 frag->size);
6993 }
6994 if (perf_raw_frag_last(frag))
6995 break;
6996 frag = frag->next;
6997 } while (1);
6998 if (frag->pad)
6999 __output_skip(handle, NULL, frag->pad);
7000 } else {
7001 struct {
7002 u32 size;
7003 u32 data;
7004 } raw = {
7005 .size = sizeof(u32),
7006 .data = 0,
7007 };
7008 perf_output_put(handle, raw);
7009 }
7010 }
7011
7012 if (sample_type & PERF_SAMPLE_BRANCH_STACK) {
7013 if (data->br_stack) {
7014 size_t size;
7015
7016 size = data->br_stack->nr
7017 * sizeof(struct perf_branch_entry);
7018
7019 perf_output_put(handle, data->br_stack->nr);
7020 if (perf_sample_save_hw_index(event))
7021 perf_output_put(handle, data->br_stack->hw_idx);
7022 perf_output_copy(handle, data->br_stack->entries, size);
7023 } else {
7024
7025
7026
7027 u64 nr = 0;
7028 perf_output_put(handle, nr);
7029 }
7030 }
7031
7032 if (sample_type & PERF_SAMPLE_REGS_USER) {
7033 u64 abi = data->regs_user.abi;
7034
7035
7036
7037
7038
7039 perf_output_put(handle, abi);
7040
7041 if (abi) {
7042 u64 mask = event->attr.sample_regs_user;
7043 perf_output_sample_regs(handle,
7044 data->regs_user.regs,
7045 mask);
7046 }
7047 }
7048
7049 if (sample_type & PERF_SAMPLE_STACK_USER) {
7050 perf_output_sample_ustack(handle,
7051 data->stack_user_size,
7052 data->regs_user.regs);
7053 }
7054
7055 if (sample_type & PERF_SAMPLE_WEIGHT_TYPE)
7056 perf_output_put(handle, data->weight.full);
7057
7058 if (sample_type & PERF_SAMPLE_DATA_SRC)
7059 perf_output_put(handle, data->data_src.val);
7060
7061 if (sample_type & PERF_SAMPLE_TRANSACTION)
7062 perf_output_put(handle, data->txn);
7063
7064 if (sample_type & PERF_SAMPLE_REGS_INTR) {
7065 u64 abi = data->regs_intr.abi;
7066
7067
7068
7069
7070 perf_output_put(handle, abi);
7071
7072 if (abi) {
7073 u64 mask = event->attr.sample_regs_intr;
7074
7075 perf_output_sample_regs(handle,
7076 data->regs_intr.regs,
7077 mask);
7078 }
7079 }
7080
7081 if (sample_type & PERF_SAMPLE_PHYS_ADDR)
7082 perf_output_put(handle, data->phys_addr);
7083
7084 if (sample_type & PERF_SAMPLE_CGROUP)
7085 perf_output_put(handle, data->cgroup);
7086
7087 if (sample_type & PERF_SAMPLE_DATA_PAGE_SIZE)
7088 perf_output_put(handle, data->data_page_size);
7089
7090 if (sample_type & PERF_SAMPLE_CODE_PAGE_SIZE)
7091 perf_output_put(handle, data->code_page_size);
7092
7093 if (sample_type & PERF_SAMPLE_AUX) {
7094 perf_output_put(handle, data->aux_size);
7095
7096 if (data->aux_size)
7097 perf_aux_sample_output(event, handle, data);
7098 }
7099
7100 if (!event->attr.watermark) {
7101 int wakeup_events = event->attr.wakeup_events;
7102
7103 if (wakeup_events) {
7104 struct perf_buffer *rb = handle->rb;
7105 int events = local_inc_return(&rb->events);
7106
7107 if (events >= wakeup_events) {
7108 local_sub(wakeup_events, &rb->events);
7109 local_inc(&rb->wakeup);
7110 }
7111 }
7112 }
7113}
7114
7115static u64 perf_virt_to_phys(u64 virt)
7116{
7117 u64 phys_addr = 0;
7118 struct page *p = NULL;
7119
7120 if (!virt)
7121 return 0;
7122
7123 if (virt >= TASK_SIZE) {
7124
7125 if (virt_addr_valid((void *)(uintptr_t)virt) &&
7126 !(virt >= VMALLOC_START && virt < VMALLOC_END))
7127 phys_addr = (u64)virt_to_phys((void *)(uintptr_t)virt);
7128 } else {
7129
7130
7131
7132
7133
7134
7135
7136 if (current->mm != NULL) {
7137 pagefault_disable();
7138 if (get_user_page_fast_only(virt, 0, &p))
7139 phys_addr = page_to_phys(p) + virt % PAGE_SIZE;
7140 pagefault_enable();
7141 }
7142
7143 if (p)
7144 put_page(p);
7145 }
7146
7147 return phys_addr;
7148}
7149
7150
7151
7152
7153static u64 perf_get_pgtable_size(struct mm_struct *mm, unsigned long addr)
7154{
7155 u64 size = 0;
7156
7157#ifdef CONFIG_HAVE_FAST_GUP
7158 pgd_t *pgdp, pgd;
7159 p4d_t *p4dp, p4d;
7160 pud_t *pudp, pud;
7161 pmd_t *pmdp, pmd;
7162 pte_t *ptep, pte;
7163
7164 pgdp = pgd_offset(mm, addr);
7165 pgd = READ_ONCE(*pgdp);
7166 if (pgd_none(pgd))
7167 return 0;
7168
7169 if (pgd_leaf(pgd))
7170 return pgd_leaf_size(pgd);
7171
7172 p4dp = p4d_offset_lockless(pgdp, pgd, addr);
7173 p4d = READ_ONCE(*p4dp);
7174 if (!p4d_present(p4d))
7175 return 0;
7176
7177 if (p4d_leaf(p4d))
7178 return p4d_leaf_size(p4d);
7179
7180 pudp = pud_offset_lockless(p4dp, p4d, addr);
7181 pud = READ_ONCE(*pudp);
7182 if (!pud_present(pud))
7183 return 0;
7184
7185 if (pud_leaf(pud))
7186 return pud_leaf_size(pud);
7187
7188 pmdp = pmd_offset_lockless(pudp, pud, addr);
7189 pmd = READ_ONCE(*pmdp);
7190 if (!pmd_present(pmd))
7191 return 0;
7192
7193 if (pmd_leaf(pmd))
7194 return pmd_leaf_size(pmd);
7195
7196 ptep = pte_offset_map(&pmd, addr);
7197 pte = ptep_get_lockless(ptep);
7198 if (pte_present(pte))
7199 size = pte_leaf_size(pte);
7200 pte_unmap(ptep);
7201#endif
7202
7203 return size;
7204}
7205
7206static u64 perf_get_page_size(unsigned long addr)
7207{
7208 struct mm_struct *mm;
7209 unsigned long flags;
7210 u64 size;
7211
7212 if (!addr)
7213 return 0;
7214
7215
7216
7217
7218
7219 local_irq_save(flags);
7220
7221 mm = current->mm;
7222 if (!mm) {
7223
7224
7225
7226
7227 mm = &init_mm;
7228 }
7229
7230 size = perf_get_pgtable_size(mm, addr);
7231
7232 local_irq_restore(flags);
7233
7234 return size;
7235}
7236
7237static struct perf_callchain_entry __empty_callchain = { .nr = 0, };
7238
7239struct perf_callchain_entry *
7240perf_callchain(struct perf_event *event, struct pt_regs *regs)
7241{
7242 bool kernel = !event->attr.exclude_callchain_kernel;
7243 bool user = !event->attr.exclude_callchain_user;
7244
7245 bool crosstask = event->ctx->task && event->ctx->task != current;
7246 const u32 max_stack = event->attr.sample_max_stack;
7247 struct perf_callchain_entry *callchain;
7248
7249 if (!kernel && !user)
7250 return &__empty_callchain;
7251
7252 callchain = get_perf_callchain(regs, 0, kernel, user,
7253 max_stack, crosstask, true);
7254 return callchain ?: &__empty_callchain;
7255}
7256
7257void perf_prepare_sample(struct perf_event_header *header,
7258 struct perf_sample_data *data,
7259 struct perf_event *event,
7260 struct pt_regs *regs)
7261{
7262 u64 sample_type = event->attr.sample_type;
7263
7264 header->type = PERF_RECORD_SAMPLE;
7265 header->size = sizeof(*header) + event->header_size;
7266
7267 header->misc = 0;
7268 header->misc |= perf_misc_flags(regs);
7269
7270 __perf_event_header__init_id(header, data, event);
7271
7272 if (sample_type & (PERF_SAMPLE_IP | PERF_SAMPLE_CODE_PAGE_SIZE))
7273 data->ip = perf_instruction_pointer(regs);
7274
7275 if (sample_type & PERF_SAMPLE_CALLCHAIN) {
7276 int size = 1;
7277
7278 if (!(sample_type & __PERF_SAMPLE_CALLCHAIN_EARLY))
7279 data->callchain = perf_callchain(event, regs);
7280
7281 size += data->callchain->nr;
7282
7283 header->size += size * sizeof(u64);
7284 }
7285
7286 if (sample_type & PERF_SAMPLE_RAW) {
7287 struct perf_raw_record *raw = data->raw;
7288 int size;
7289
7290 if (raw) {
7291 struct perf_raw_frag *frag = &raw->frag;
7292 u32 sum = 0;
7293
7294 do {
7295 sum += frag->size;
7296 if (perf_raw_frag_last(frag))
7297 break;
7298 frag = frag->next;
7299 } while (1);
7300
7301 size = round_up(sum + sizeof(u32), sizeof(u64));
7302 raw->size = size - sizeof(u32);
7303 frag->pad = raw->size - sum;
7304 } else {
7305 size = sizeof(u64);
7306 }
7307
7308 header->size += size;
7309 }
7310
7311 if (sample_type & PERF_SAMPLE_BRANCH_STACK) {
7312 int size = sizeof(u64);
7313 if (data->br_stack) {
7314 if (perf_sample_save_hw_index(event))
7315 size += sizeof(u64);
7316
7317 size += data->br_stack->nr
7318 * sizeof(struct perf_branch_entry);
7319 }
7320 header->size += size;
7321 }
7322
7323 if (sample_type & (PERF_SAMPLE_REGS_USER | PERF_SAMPLE_STACK_USER))
7324 perf_sample_regs_user(&data->regs_user, regs);
7325
7326 if (sample_type & PERF_SAMPLE_REGS_USER) {
7327
7328 int size = sizeof(u64);
7329
7330 if (data->regs_user.regs) {
7331 u64 mask = event->attr.sample_regs_user;
7332 size += hweight64(mask) * sizeof(u64);
7333 }
7334
7335 header->size += size;
7336 }
7337
7338 if (sample_type & PERF_SAMPLE_STACK_USER) {
7339
7340
7341
7342
7343
7344
7345 u16 stack_size = event->attr.sample_stack_user;
7346 u16 size = sizeof(u64);
7347
7348 stack_size = perf_sample_ustack_size(stack_size, header->size,
7349 data->regs_user.regs);
7350
7351
7352
7353
7354
7355
7356 if (stack_size)
7357 size += sizeof(u64) + stack_size;
7358
7359 data->stack_user_size = stack_size;
7360 header->size += size;
7361 }
7362
7363 if (sample_type & PERF_SAMPLE_REGS_INTR) {
7364
7365 int size = sizeof(u64);
7366
7367 perf_sample_regs_intr(&data->regs_intr, regs);
7368
7369 if (data->regs_intr.regs) {
7370 u64 mask = event->attr.sample_regs_intr;
7371
7372 size += hweight64(mask) * sizeof(u64);
7373 }
7374
7375 header->size += size;
7376 }
7377
7378 if (sample_type & PERF_SAMPLE_PHYS_ADDR)
7379 data->phys_addr = perf_virt_to_phys(data->addr);
7380
7381#ifdef CONFIG_CGROUP_PERF
7382 if (sample_type & PERF_SAMPLE_CGROUP) {
7383 struct cgroup *cgrp;
7384
7385
7386 cgrp = task_css_check(current, perf_event_cgrp_id, 1)->cgroup;
7387 data->cgroup = cgroup_id(cgrp);
7388 }
7389#endif
7390
7391
7392
7393
7394
7395
7396 if (sample_type & PERF_SAMPLE_DATA_PAGE_SIZE)
7397 data->data_page_size = perf_get_page_size(data->addr);
7398
7399 if (sample_type & PERF_SAMPLE_CODE_PAGE_SIZE)
7400 data->code_page_size = perf_get_page_size(data->ip);
7401
7402 if (sample_type & PERF_SAMPLE_AUX) {
7403 u64 size;
7404
7405 header->size += sizeof(u64);
7406
7407
7408
7409
7410
7411
7412
7413 size = min_t(size_t, U16_MAX - header->size,
7414 event->attr.aux_sample_size);
7415 size = rounddown(size, 8);
7416 size = perf_prepare_sample_aux(event, data, size);
7417
7418 WARN_ON_ONCE(size + header->size > U16_MAX);
7419 header->size += size;
7420 }
7421
7422
7423
7424
7425
7426
7427
7428
7429 WARN_ON_ONCE(header->size & 7);
7430}
7431
7432static __always_inline int
7433__perf_event_output(struct perf_event *event,
7434 struct perf_sample_data *data,
7435 struct pt_regs *regs,
7436 int (*output_begin)(struct perf_output_handle *,
7437 struct perf_sample_data *,
7438 struct perf_event *,
7439 unsigned int))
7440{
7441 struct perf_output_handle handle;
7442 struct perf_event_header header;
7443 int err;
7444
7445
7446 rcu_read_lock();
7447
7448 perf_prepare_sample(&header, data, event, regs);
7449
7450 err = output_begin(&handle, data, event, header.size);
7451 if (err)
7452 goto exit;
7453
7454 perf_output_sample(&handle, &header, data, event);
7455
7456 perf_output_end(&handle);
7457
7458exit:
7459 rcu_read_unlock();
7460 return err;
7461}
7462
7463void
7464perf_event_output_forward(struct perf_event *event,
7465 struct perf_sample_data *data,
7466 struct pt_regs *regs)
7467{
7468 __perf_event_output(event, data, regs, perf_output_begin_forward);
7469}
7470
7471void
7472perf_event_output_backward(struct perf_event *event,
7473 struct perf_sample_data *data,
7474 struct pt_regs *regs)
7475{
7476 __perf_event_output(event, data, regs, perf_output_begin_backward);
7477}
7478
7479int
7480perf_event_output(struct perf_event *event,
7481 struct perf_sample_data *data,
7482 struct pt_regs *regs)
7483{
7484 return __perf_event_output(event, data, regs, perf_output_begin);
7485}
7486
7487
7488
7489
7490
7491struct perf_read_event {
7492 struct perf_event_header header;
7493
7494 u32 pid;
7495 u32 tid;
7496};
7497
7498static void
7499perf_event_read_event(struct perf_event *event,
7500 struct task_struct *task)
7501{
7502 struct perf_output_handle handle;
7503 struct perf_sample_data sample;
7504 struct perf_read_event read_event = {
7505 .header = {
7506 .type = PERF_RECORD_READ,
7507 .misc = 0,
7508 .size = sizeof(read_event) + event->read_size,
7509 },
7510 .pid = perf_event_pid(event, task),
7511 .tid = perf_event_tid(event, task),
7512 };
7513 int ret;
7514
7515 perf_event_header__init_id(&read_event.header, &sample, event);
7516 ret = perf_output_begin(&handle, &sample, event, read_event.header.size);
7517 if (ret)
7518 return;
7519
7520 perf_output_put(&handle, read_event);
7521 perf_output_read(&handle, event);
7522 perf_event__output_id_sample(event, &handle, &sample);
7523
7524 perf_output_end(&handle);
7525}
7526
7527typedef void (perf_iterate_f)(struct perf_event *event, void *data);
7528
7529static void
7530perf_iterate_ctx(struct perf_event_context *ctx,
7531 perf_iterate_f output,
7532 void *data, bool all)
7533{
7534 struct perf_event *event;
7535
7536 list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
7537 if (!all) {
7538 if (event->state < PERF_EVENT_STATE_INACTIVE)
7539 continue;
7540 if (!event_filter_match(event))
7541 continue;
7542 }
7543
7544 output(event, data);
7545 }
7546}
7547
7548static void perf_iterate_sb_cpu(perf_iterate_f output, void *data)
7549{
7550 struct pmu_event_list *pel = this_cpu_ptr(&pmu_sb_events);
7551 struct perf_event *event;
7552
7553 list_for_each_entry_rcu(event, &pel->list, sb_list) {
7554
7555
7556
7557
7558
7559 if (!smp_load_acquire(&event->ctx))
7560 continue;
7561
7562 if (event->state < PERF_EVENT_STATE_INACTIVE)
7563 continue;
7564 if (!event_filter_match(event))
7565 continue;
7566 output(event, data);
7567 }
7568}
7569
7570
7571
7572
7573
7574
7575
7576static void
7577perf_iterate_sb(perf_iterate_f output, void *data,
7578 struct perf_event_context *task_ctx)
7579{
7580 struct perf_event_context *ctx;
7581 int ctxn;
7582
7583 rcu_read_lock();
7584 preempt_disable();
7585
7586
7587
7588
7589
7590
7591 if (task_ctx) {
7592 perf_iterate_ctx(task_ctx, output, data, false);
7593 goto done;
7594 }
7595
7596 perf_iterate_sb_cpu(output, data);
7597
7598 for_each_task_context_nr(ctxn) {
7599 ctx = rcu_dereference(current->perf_event_ctxp[ctxn]);
7600 if (ctx)
7601 perf_iterate_ctx(ctx, output, data, false);
7602 }
7603done:
7604 preempt_enable();
7605 rcu_read_unlock();
7606}
7607
7608
7609
7610
7611
7612static void perf_event_addr_filters_exec(struct perf_event *event, void *data)
7613{
7614 struct perf_addr_filters_head *ifh = perf_event_addr_filters(event);
7615 struct perf_addr_filter *filter;
7616 unsigned int restart = 0, count = 0;
7617 unsigned long flags;
7618
7619 if (!has_addr_filter(event))
7620 return;
7621
7622 raw_spin_lock_irqsave(&ifh->lock, flags);
7623 list_for_each_entry(filter, &ifh->list, entry) {
7624 if (filter->path.dentry) {
7625 event->addr_filter_ranges[count].start = 0;
7626 event->addr_filter_ranges[count].size = 0;
7627 restart++;
7628 }
7629
7630 count++;
7631 }
7632
7633 if (restart)
7634 event->addr_filters_gen++;
7635 raw_spin_unlock_irqrestore(&ifh->lock, flags);
7636
7637 if (restart)
7638 perf_event_stop(event, 1);
7639}
7640
7641void perf_event_exec(void)
7642{
7643 struct perf_event_context *ctx;
7644 int ctxn;
7645
7646 for_each_task_context_nr(ctxn) {
7647 perf_event_enable_on_exec(ctxn);
7648 perf_event_remove_on_exec(ctxn);
7649
7650 rcu_read_lock();
7651 ctx = rcu_dereference(current->perf_event_ctxp[ctxn]);
7652 if (ctx) {
7653 perf_iterate_ctx(ctx, perf_event_addr_filters_exec,
7654 NULL, true);
7655 }
7656 rcu_read_unlock();
7657 }
7658}
7659
7660struct remote_output {
7661 struct perf_buffer *rb;
7662 int err;
7663};
7664
7665static void __perf_event_output_stop(struct perf_event *event, void *data)
7666{
7667 struct perf_event *parent = event->parent;
7668 struct remote_output *ro = data;
7669 struct perf_buffer *rb = ro->rb;
7670 struct stop_event_data sd = {
7671 .event = event,
7672 };
7673
7674 if (!has_aux(event))
7675 return;
7676
7677 if (!parent)
7678 parent = event;
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690 if (rcu_dereference(parent->rb) == rb)
7691 ro->err = __perf_event_stop(&sd);
7692}
7693
7694static int __perf_pmu_output_stop(void *info)
7695{
7696 struct perf_event *event = info;
7697 struct pmu *pmu = event->ctx->pmu;
7698 struct perf_cpu_context *cpuctx = this_cpu_ptr(pmu->pmu_cpu_context);
7699 struct remote_output ro = {
7700 .rb = event->rb,
7701 };
7702
7703 rcu_read_lock();
7704 perf_iterate_ctx(&cpuctx->ctx, __perf_event_output_stop, &ro, false);
7705 if (cpuctx->task_ctx)
7706 perf_iterate_ctx(cpuctx->task_ctx, __perf_event_output_stop,
7707 &ro, false);
7708 rcu_read_unlock();
7709
7710 return ro.err;
7711}
7712
7713static void perf_pmu_output_stop(struct perf_event *event)
7714{
7715 struct perf_event *iter;
7716 int err, cpu;
7717
7718restart:
7719 rcu_read_lock();
7720 list_for_each_entry_rcu(iter, &event->rb->event_list, rb_entry) {
7721
7722
7723
7724
7725
7726
7727 cpu = iter->cpu;
7728 if (cpu == -1)
7729 cpu = READ_ONCE(iter->oncpu);
7730
7731 if (cpu == -1)
7732 continue;
7733
7734 err = cpu_function_call(cpu, __perf_pmu_output_stop, event);
7735 if (err == -EAGAIN) {
7736 rcu_read_unlock();
7737 goto restart;
7738 }
7739 }
7740 rcu_read_unlock();
7741}
7742
7743
7744
7745
7746
7747
7748
7749struct perf_task_event {
7750 struct task_struct *task;
7751 struct perf_event_context *task_ctx;
7752
7753 struct {
7754 struct perf_event_header header;
7755
7756 u32 pid;
7757 u32 ppid;
7758 u32 tid;
7759 u32 ptid;
7760 u64 time;
7761 } event_id;
7762};
7763
7764static int perf_event_task_match(struct perf_event *event)
7765{
7766 return event->attr.comm || event->attr.mmap ||
7767 event->attr.mmap2 || event->attr.mmap_data ||
7768 event->attr.task;
7769}
7770
7771static void perf_event_task_output(struct perf_event *event,
7772 void *data)
7773{
7774 struct perf_task_event *task_event = data;
7775 struct perf_output_handle handle;
7776 struct perf_sample_data sample;
7777 struct task_struct *task = task_event->task;
7778 int ret, size = task_event->event_id.header.size;
7779
7780 if (!perf_event_task_match(event))
7781 return;
7782
7783 perf_event_header__init_id(&task_event->event_id.header, &sample, event);
7784
7785 ret = perf_output_begin(&handle, &sample, event,
7786 task_event->event_id.header.size);
7787 if (ret)
7788 goto out;
7789
7790 task_event->event_id.pid = perf_event_pid(event, task);
7791 task_event->event_id.tid = perf_event_tid(event, task);
7792
7793 if (task_event->event_id.header.type == PERF_RECORD_EXIT) {
7794 task_event->event_id.ppid = perf_event_pid(event,
7795 task->real_parent);
7796 task_event->event_id.ptid = perf_event_pid(event,
7797 task->real_parent);
7798 } else {
7799 task_event->event_id.ppid = perf_event_pid(event, current);
7800 task_event->event_id.ptid = perf_event_tid(event, current);
7801 }
7802
7803 task_event->event_id.time = perf_event_clock(event);
7804
7805 perf_output_put(&handle, task_event->event_id);
7806
7807 perf_event__output_id_sample(event, &handle, &sample);
7808
7809 perf_output_end(&handle);
7810out:
7811 task_event->event_id.header.size = size;
7812}
7813
7814static void perf_event_task(struct task_struct *task,
7815 struct perf_event_context *task_ctx,
7816 int new)
7817{
7818 struct perf_task_event task_event;
7819
7820 if (!atomic_read(&nr_comm_events) &&
7821 !atomic_read(&nr_mmap_events) &&
7822 !atomic_read(&nr_task_events))
7823 return;
7824
7825 task_event = (struct perf_task_event){
7826 .task = task,
7827 .task_ctx = task_ctx,
7828 .event_id = {
7829 .header = {
7830 .type = new ? PERF_RECORD_FORK : PERF_RECORD_EXIT,
7831 .misc = 0,
7832 .size = sizeof(task_event.event_id),
7833 },
7834
7835
7836
7837
7838
7839 },
7840 };
7841
7842 perf_iterate_sb(perf_event_task_output,
7843 &task_event,
7844 task_ctx);
7845}
7846
7847void perf_event_fork(struct task_struct *task)
7848{
7849 perf_event_task(task, NULL, 1);
7850 perf_event_namespaces(task);
7851}
7852
7853
7854
7855
7856
7857struct perf_comm_event {
7858 struct task_struct *task;
7859 char *comm;
7860 int comm_size;
7861
7862 struct {
7863 struct perf_event_header header;
7864
7865 u32 pid;
7866 u32 tid;
7867 } event_id;
7868};
7869
7870static int perf_event_comm_match(struct perf_event *event)
7871{
7872 return event->attr.comm;
7873}
7874
7875static void perf_event_comm_output(struct perf_event *event,
7876 void *data)
7877{
7878 struct perf_comm_event *comm_event = data;
7879 struct perf_output_handle handle;
7880 struct perf_sample_data sample;
7881 int size = comm_event->event_id.header.size;
7882 int ret;
7883
7884 if (!perf_event_comm_match(event))
7885 return;
7886
7887 perf_event_header__init_id(&comm_event->event_id.header, &sample, event);
7888 ret = perf_output_begin(&handle, &sample, event,
7889 comm_event->event_id.header.size);
7890
7891 if (ret)
7892 goto out;
7893
7894 comm_event->event_id.pid = perf_event_pid(event, comm_event->task);
7895 comm_event->event_id.tid = perf_event_tid(event, comm_event->task);
7896
7897 perf_output_put(&handle, comm_event->event_id);
7898 __output_copy(&handle, comm_event->comm,
7899 comm_event->comm_size);
7900
7901 perf_event__output_id_sample(event, &handle, &sample);
7902
7903 perf_output_end(&handle);
7904out:
7905 comm_event->event_id.header.size = size;
7906}
7907
7908static void perf_event_comm_event(struct perf_comm_event *comm_event)
7909{
7910 char comm[TASK_COMM_LEN];
7911 unsigned int size;
7912
7913 memset(comm, 0, sizeof(comm));
7914 strlcpy(comm, comm_event->task->comm, sizeof(comm));
7915 size = ALIGN(strlen(comm)+1, sizeof(u64));
7916
7917 comm_event->comm = comm;
7918 comm_event->comm_size = size;
7919
7920 comm_event->event_id.header.size = sizeof(comm_event->event_id) + size;
7921
7922 perf_iterate_sb(perf_event_comm_output,
7923 comm_event,
7924 NULL);
7925}
7926
7927void perf_event_comm(struct task_struct *task, bool exec)
7928{
7929 struct perf_comm_event comm_event;
7930
7931 if (!atomic_read(&nr_comm_events))
7932 return;
7933
7934 comm_event = (struct perf_comm_event){
7935 .task = task,
7936
7937
7938 .event_id = {
7939 .header = {
7940 .type = PERF_RECORD_COMM,
7941 .misc = exec ? PERF_RECORD_MISC_COMM_EXEC : 0,
7942
7943 },
7944
7945
7946 },
7947 };
7948
7949 perf_event_comm_event(&comm_event);
7950}
7951
7952
7953
7954
7955
7956struct perf_namespaces_event {
7957 struct task_struct *task;
7958
7959 struct {
7960 struct perf_event_header header;
7961
7962 u32 pid;
7963 u32 tid;
7964 u64 nr_namespaces;
7965 struct perf_ns_link_info link_info[NR_NAMESPACES];
7966 } event_id;
7967};
7968
7969static int perf_event_namespaces_match(struct perf_event *event)
7970{
7971 return event->attr.namespaces;
7972}
7973
7974static void perf_event_namespaces_output(struct perf_event *event,
7975 void *data)
7976{
7977 struct perf_namespaces_event *namespaces_event = data;
7978 struct perf_output_handle handle;
7979 struct perf_sample_data sample;
7980 u16 header_size = namespaces_event->event_id.header.size;
7981 int ret;
7982
7983 if (!perf_event_namespaces_match(event))
7984 return;
7985
7986 perf_event_header__init_id(&namespaces_event->event_id.header,
7987 &sample, event);
7988 ret = perf_output_begin(&handle, &sample, event,
7989 namespaces_event->event_id.header.size);
7990 if (ret)
7991 goto out;
7992
7993 namespaces_event->event_id.pid = perf_event_pid(event,
7994 namespaces_event->task);
7995 namespaces_event->event_id.tid = perf_event_tid(event,
7996 namespaces_event->task);
7997
7998 perf_output_put(&handle, namespaces_event->event_id);
7999
8000 perf_event__output_id_sample(event, &handle, &sample);
8001
8002 perf_output_end(&handle);
8003out:
8004 namespaces_event->event_id.header.size = header_size;
8005}
8006
8007static void perf_fill_ns_link_info(struct perf_ns_link_info *ns_link_info,
8008 struct task_struct *task,
8009 const struct proc_ns_operations *ns_ops)
8010{
8011 struct path ns_path;
8012 struct inode *ns_inode;
8013 int error;
8014
8015 error = ns_get_path(&ns_path, task, ns_ops);
8016 if (!error) {
8017 ns_inode = ns_path.dentry->d_inode;
8018 ns_link_info->dev = new_encode_dev(ns_inode->i_sb->s_dev);
8019 ns_link_info->ino = ns_inode->i_ino;
8020 path_put(&ns_path);
8021 }
8022}
8023
8024void perf_event_namespaces(struct task_struct *task)
8025{
8026 struct perf_namespaces_event namespaces_event;
8027 struct perf_ns_link_info *ns_link_info;
8028
8029 if (!atomic_read(&nr_namespaces_events))
8030 return;
8031
8032 namespaces_event = (struct perf_namespaces_event){
8033 .task = task,
8034 .event_id = {
8035 .header = {
8036 .type = PERF_RECORD_NAMESPACES,
8037 .misc = 0,
8038 .size = sizeof(namespaces_event.event_id),
8039 },
8040
8041
8042 .nr_namespaces = NR_NAMESPACES,
8043
8044 },
8045 };
8046
8047 ns_link_info = namespaces_event.event_id.link_info;
8048
8049 perf_fill_ns_link_info(&ns_link_info[MNT_NS_INDEX],
8050 task, &mntns_operations);
8051
8052#ifdef CONFIG_USER_NS
8053 perf_fill_ns_link_info(&ns_link_info[USER_NS_INDEX],
8054 task, &userns_operations);
8055#endif
8056#ifdef CONFIG_NET_NS
8057 perf_fill_ns_link_info(&ns_link_info[NET_NS_INDEX],
8058 task, &netns_operations);
8059#endif
8060#ifdef CONFIG_UTS_NS
8061 perf_fill_ns_link_info(&ns_link_info[UTS_NS_INDEX],
8062 task, &utsns_operations);
8063#endif
8064#ifdef CONFIG_IPC_NS
8065 perf_fill_ns_link_info(&ns_link_info[IPC_NS_INDEX],
8066 task, &ipcns_operations);
8067#endif
8068#ifdef CONFIG_PID_NS
8069 perf_fill_ns_link_info(&ns_link_info[PID_NS_INDEX],
8070 task, &pidns_operations);
8071#endif
8072#ifdef CONFIG_CGROUPS
8073 perf_fill_ns_link_info(&ns_link_info[CGROUP_NS_INDEX],
8074 task, &cgroupns_operations);
8075#endif
8076
8077 perf_iterate_sb(perf_event_namespaces_output,
8078 &namespaces_event,
8079 NULL);
8080}
8081
8082
8083
8084
8085#ifdef CONFIG_CGROUP_PERF
8086
8087struct perf_cgroup_event {
8088 char *path;
8089 int path_size;
8090 struct {
8091 struct perf_event_header header;
8092 u64 id;
8093 char path[];
8094 } event_id;
8095};
8096
8097static int perf_event_cgroup_match(struct perf_event *event)
8098{
8099 return event->attr.cgroup;
8100}
8101
8102static void perf_event_cgroup_output(struct perf_event *event, void *data)
8103{
8104 struct perf_cgroup_event *cgroup_event = data;
8105 struct perf_output_handle handle;
8106 struct perf_sample_data sample;
8107 u16 header_size = cgroup_event->event_id.header.size;
8108 int ret;
8109
8110 if (!perf_event_cgroup_match(event))
8111 return;
8112
8113 perf_event_header__init_id(&cgroup_event->event_id.header,
8114 &sample, event);
8115 ret = perf_output_begin(&handle, &sample, event,
8116 cgroup_event->event_id.header.size);
8117 if (ret)
8118 goto out;
8119
8120 perf_output_put(&handle, cgroup_event->event_id);
8121 __output_copy(&handle, cgroup_event->path, cgroup_event->path_size);
8122
8123 perf_event__output_id_sample(event, &handle, &sample);
8124
8125 perf_output_end(&handle);
8126out:
8127 cgroup_event->event_id.header.size = header_size;
8128}
8129
8130static void perf_event_cgroup(struct cgroup *cgrp)
8131{
8132 struct perf_cgroup_event cgroup_event;
8133 char path_enomem[16] = "//enomem";
8134 char *pathname;
8135 size_t size;
8136
8137 if (!atomic_read(&nr_cgroup_events))
8138 return;
8139
8140 cgroup_event = (struct perf_cgroup_event){
8141 .event_id = {
8142 .header = {
8143 .type = PERF_RECORD_CGROUP,
8144 .misc = 0,
8145 .size = sizeof(cgroup_event.event_id),
8146 },
8147 .id = cgroup_id(cgrp),
8148 },
8149 };
8150
8151 pathname = kmalloc(PATH_MAX, GFP_KERNEL);
8152 if (pathname == NULL) {
8153 cgroup_event.path = path_enomem;
8154 } else {
8155
8156 cgroup_path(cgrp, pathname, PATH_MAX - sizeof(u64));
8157 cgroup_event.path = pathname;
8158 }
8159
8160
8161
8162
8163
8164
8165 size = strlen(cgroup_event.path) + 1;
8166 while (!IS_ALIGNED(size, sizeof(u64)))
8167 cgroup_event.path[size++] = '\0';
8168
8169 cgroup_event.event_id.header.size += size;
8170 cgroup_event.path_size = size;
8171
8172 perf_iterate_sb(perf_event_cgroup_output,
8173 &cgroup_event,
8174 NULL);
8175
8176 kfree(pathname);
8177}
8178
8179#endif
8180
8181
8182
8183
8184
8185struct perf_mmap_event {
8186 struct vm_area_struct *vma;
8187
8188 const char *file_name;
8189 int file_size;
8190 int maj, min;
8191 u64 ino;
8192 u64 ino_generation;
8193 u32 prot, flags;
8194 u8 build_id[BUILD_ID_SIZE_MAX];
8195 u32 build_id_size;
8196
8197 struct {
8198 struct perf_event_header header;
8199
8200 u32 pid;
8201 u32 tid;
8202 u64 start;
8203 u64 len;
8204 u64 pgoff;
8205 } event_id;
8206};
8207
8208static int perf_event_mmap_match(struct perf_event *event,
8209 void *data)
8210{
8211 struct perf_mmap_event *mmap_event = data;
8212 struct vm_area_struct *vma = mmap_event->vma;
8213 int executable = vma->vm_flags & VM_EXEC;
8214
8215 return (!executable && event->attr.mmap_data) ||
8216 (executable && (event->attr.mmap || event->attr.mmap2));
8217}
8218
8219static void perf_event_mmap_output(struct perf_event *event,
8220 void *data)
8221{
8222 struct perf_mmap_event *mmap_event = data;
8223 struct perf_output_handle handle;
8224 struct perf_sample_data sample;
8225 int size = mmap_event->event_id.header.size;
8226 u32 type = mmap_event->event_id.header.type;
8227 bool use_build_id;
8228 int ret;
8229
8230 if (!perf_event_mmap_match(event, data))
8231 return;
8232
8233 if (event->attr.mmap2) {
8234 mmap_event->event_id.header.type = PERF_RECORD_MMAP2;
8235 mmap_event->event_id.header.size += sizeof(mmap_event->maj);
8236 mmap_event->event_id.header.size += sizeof(mmap_event->min);
8237 mmap_event->event_id.header.size += sizeof(mmap_event->ino);
8238 mmap_event->event_id.header.size += sizeof(mmap_event->ino_generation);
8239 mmap_event->event_id.header.size += sizeof(mmap_event->prot);
8240 mmap_event->event_id.header.size += sizeof(mmap_event->flags);
8241 }
8242
8243 perf_event_header__init_id(&mmap_event->event_id.header, &sample, event);
8244 ret = perf_output_begin(&handle, &sample, event,
8245 mmap_event->event_id.header.size);
8246 if (ret)
8247 goto out;
8248
8249 mmap_event->event_id.pid = perf_event_pid(event, current);
8250 mmap_event->event_id.tid = perf_event_tid(event, current);
8251
8252 use_build_id = event->attr.build_id && mmap_event->build_id_size;
8253
8254 if (event->attr.mmap2 && use_build_id)
8255 mmap_event->event_id.header.misc |= PERF_RECORD_MISC_MMAP_BUILD_ID;
8256
8257 perf_output_put(&handle, mmap_event->event_id);
8258
8259 if (event->attr.mmap2) {
8260 if (use_build_id) {
8261 u8 size[4] = { (u8) mmap_event->build_id_size, 0, 0, 0 };
8262
8263 __output_copy(&handle, size, 4);
8264 __output_copy(&handle, mmap_event->build_id, BUILD_ID_SIZE_MAX);
8265 } else {
8266 perf_output_put(&handle, mmap_event->maj);
8267 perf_output_put(&handle, mmap_event->min);
8268 perf_output_put(&handle, mmap_event->ino);
8269 perf_output_put(&handle, mmap_event->ino_generation);
8270 }
8271 perf_output_put(&handle, mmap_event->prot);
8272 perf_output_put(&handle, mmap_event->flags);
8273 }
8274
8275 __output_copy(&handle, mmap_event->file_name,
8276 mmap_event->file_size);
8277
8278 perf_event__output_id_sample(event, &handle, &sample);
8279
8280 perf_output_end(&handle);
8281out:
8282 mmap_event->event_id.header.size = size;
8283 mmap_event->event_id.header.type = type;
8284}
8285
8286static void perf_event_mmap_event(struct perf_mmap_event *mmap_event)
8287{
8288 struct vm_area_struct *vma = mmap_event->vma;
8289 struct file *file = vma->vm_file;
8290 int maj = 0, min = 0;
8291 u64 ino = 0, gen = 0;
8292 u32 prot = 0, flags = 0;
8293 unsigned int size;
8294 char tmp[16];
8295 char *buf = NULL;
8296 char *name;
8297
8298 if (vma->vm_flags & VM_READ)
8299 prot |= PROT_READ;
8300 if (vma->vm_flags & VM_WRITE)
8301 prot |= PROT_WRITE;
8302 if (vma->vm_flags & VM_EXEC)
8303 prot |= PROT_EXEC;
8304
8305 if (vma->vm_flags & VM_MAYSHARE)
8306 flags = MAP_SHARED;
8307 else
8308 flags = MAP_PRIVATE;
8309
8310 if (vma->vm_flags & VM_DENYWRITE)
8311 flags |= MAP_DENYWRITE;
8312 if (vma->vm_flags & VM_LOCKED)
8313 flags |= MAP_LOCKED;
8314 if (is_vm_hugetlb_page(vma))
8315 flags |= MAP_HUGETLB;
8316
8317 if (file) {
8318 struct inode *inode;
8319 dev_t dev;
8320
8321 buf = kmalloc(PATH_MAX, GFP_KERNEL);
8322 if (!buf) {
8323 name = "//enomem";
8324 goto cpy_name;
8325 }
8326
8327
8328
8329
8330
8331 name = file_path(file, buf, PATH_MAX - sizeof(u64));
8332 if (IS_ERR(name)) {
8333 name = "//toolong";
8334 goto cpy_name;
8335 }
8336 inode = file_inode(vma->vm_file);
8337 dev = inode->i_sb->s_dev;
8338 ino = inode->i_ino;
8339 gen = inode->i_generation;
8340 maj = MAJOR(dev);
8341 min = MINOR(dev);
8342
8343 goto got_name;
8344 } else {
8345 if (vma->vm_ops && vma->vm_ops->name) {
8346 name = (char *) vma->vm_ops->name(vma);
8347 if (name)
8348 goto cpy_name;
8349 }
8350
8351 name = (char *)arch_vma_name(vma);
8352 if (name)
8353 goto cpy_name;
8354
8355 if (vma->vm_start <= vma->vm_mm->start_brk &&
8356 vma->vm_end >= vma->vm_mm->brk) {
8357 name = "[heap]";
8358 goto cpy_name;
8359 }
8360 if (vma->vm_start <= vma->vm_mm->start_stack &&
8361 vma->vm_end >= vma->vm_mm->start_stack) {
8362 name = "[stack]";
8363 goto cpy_name;
8364 }
8365
8366 name = "//anon";
8367 goto cpy_name;
8368 }
8369
8370cpy_name:
8371 strlcpy(tmp, name, sizeof(tmp));
8372 name = tmp;
8373got_name:
8374
8375
8376
8377
8378
8379 size = strlen(name)+1;
8380 while (!IS_ALIGNED(size, sizeof(u64)))
8381 name[size++] = '\0';
8382
8383 mmap_event->file_name = name;
8384 mmap_event->file_size = size;
8385 mmap_event->maj = maj;
8386 mmap_event->min = min;
8387 mmap_event->ino = ino;
8388 mmap_event->ino_generation = gen;
8389 mmap_event->prot = prot;
8390 mmap_event->flags = flags;
8391
8392 if (!(vma->vm_flags & VM_EXEC))
8393 mmap_event->event_id.header.misc |= PERF_RECORD_MISC_MMAP_DATA;
8394
8395 mmap_event->event_id.header.size = sizeof(mmap_event->event_id) + size;
8396
8397 if (atomic_read(&nr_build_id_events))
8398 build_id_parse(vma, mmap_event->build_id, &mmap_event->build_id_size);
8399
8400 perf_iterate_sb(perf_event_mmap_output,
8401 mmap_event,
8402 NULL);
8403
8404 kfree(buf);
8405}
8406
8407
8408
8409
8410static bool perf_addr_filter_match(struct perf_addr_filter *filter,
8411 struct file *file, unsigned long offset,
8412 unsigned long size)
8413{
8414
8415 if (!filter->path.dentry)
8416 return false;
8417
8418 if (d_inode(filter->path.dentry) != file_inode(file))
8419 return false;
8420
8421 if (filter->offset > offset + size)
8422 return false;
8423
8424 if (filter->offset + filter->size < offset)
8425 return false;
8426
8427 return true;
8428}
8429
8430static bool perf_addr_filter_vma_adjust(struct perf_addr_filter *filter,
8431 struct vm_area_struct *vma,
8432 struct perf_addr_filter_range *fr)
8433{
8434 unsigned long vma_size = vma->vm_end - vma->vm_start;
8435 unsigned long off = vma->vm_pgoff << PAGE_SHIFT;
8436 struct file *file = vma->vm_file;
8437
8438 if (!perf_addr_filter_match(filter, file, off, vma_size))
8439 return false;
8440
8441 if (filter->offset < off) {
8442 fr->start = vma->vm_start;
8443 fr->size = min(vma_size, filter->size - (off - filter->offset));
8444 } else {
8445 fr->start = vma->vm_start + filter->offset - off;
8446 fr->size = min(vma->vm_end - fr->start, filter->size);
8447 }
8448
8449 return true;
8450}
8451
8452static void __perf_addr_filters_adjust(struct perf_event *event, void *data)
8453{
8454 struct perf_addr_filters_head *ifh = perf_event_addr_filters(event);
8455 struct vm_area_struct *vma = data;
8456 struct perf_addr_filter *filter;
8457 unsigned int restart = 0, count = 0;
8458 unsigned long flags;
8459
8460 if (!has_addr_filter(event))
8461 return;
8462
8463 if (!vma->vm_file)
8464 return;
8465
8466 raw_spin_lock_irqsave(&ifh->lock, flags);
8467 list_for_each_entry(filter, &ifh->list, entry) {
8468 if (perf_addr_filter_vma_adjust(filter, vma,
8469 &event->addr_filter_ranges[count]))
8470 restart++;
8471
8472 count++;
8473 }
8474
8475 if (restart)
8476 event->addr_filters_gen++;
8477 raw_spin_unlock_irqrestore(&ifh->lock, flags);
8478
8479 if (restart)
8480 perf_event_stop(event, 1);
8481}
8482
8483
8484
8485
8486static void perf_addr_filters_adjust(struct vm_area_struct *vma)
8487{
8488 struct perf_event_context *ctx;
8489 int ctxn;
8490
8491
8492
8493
8494
8495 if (!(vma->vm_flags & VM_EXEC))
8496 return;
8497
8498 rcu_read_lock();
8499 for_each_task_context_nr(ctxn) {
8500 ctx = rcu_dereference(current->perf_event_ctxp[ctxn]);
8501 if (!ctx)
8502 continue;
8503
8504 perf_iterate_ctx(ctx, __perf_addr_filters_adjust, vma, true);
8505 }
8506 rcu_read_unlock();
8507}
8508
8509void perf_event_mmap(struct vm_area_struct *vma)
8510{
8511 struct perf_mmap_event mmap_event;
8512
8513 if (!atomic_read(&nr_mmap_events))
8514 return;
8515
8516 mmap_event = (struct perf_mmap_event){
8517 .vma = vma,
8518
8519
8520 .event_id = {
8521 .header = {
8522 .type = PERF_RECORD_MMAP,
8523 .misc = PERF_RECORD_MISC_USER,
8524
8525 },
8526
8527
8528 .start = vma->vm_start,
8529 .len = vma->vm_end - vma->vm_start,
8530 .pgoff = (u64)vma->vm_pgoff << PAGE_SHIFT,
8531 },
8532
8533
8534
8535
8536
8537
8538 };
8539
8540 perf_addr_filters_adjust(vma);
8541 perf_event_mmap_event(&mmap_event);
8542}
8543
8544void perf_event_aux_event(struct perf_event *event, unsigned long head,
8545 unsigned long size, u64 flags)
8546{
8547 struct perf_output_handle handle;
8548 struct perf_sample_data sample;
8549 struct perf_aux_event {
8550 struct perf_event_header header;
8551 u64 offset;
8552 u64 size;
8553 u64 flags;
8554 } rec = {
8555 .header = {
8556 .type = PERF_RECORD_AUX,
8557 .misc = 0,
8558 .size = sizeof(rec),
8559 },
8560 .offset = head,
8561 .size = size,
8562 .flags = flags,
8563 };
8564 int ret;
8565
8566 perf_event_header__init_id(&rec.header, &sample, event);
8567 ret = perf_output_begin(&handle, &sample, event, rec.header.size);
8568
8569 if (ret)
8570 return;
8571
8572 perf_output_put(&handle, rec);
8573 perf_event__output_id_sample(event, &handle, &sample);
8574
8575 perf_output_end(&handle);
8576}
8577
8578
8579
8580
8581void perf_log_lost_samples(struct perf_event *event, u64 lost)
8582{
8583 struct perf_output_handle handle;
8584 struct perf_sample_data sample;
8585 int ret;
8586
8587 struct {
8588 struct perf_event_header header;
8589 u64 lost;
8590 } lost_samples_event = {
8591 .header = {
8592 .type = PERF_RECORD_LOST_SAMPLES,
8593 .misc = 0,
8594 .size = sizeof(lost_samples_event),
8595 },
8596 .lost = lost,
8597 };
8598
8599 perf_event_header__init_id(&lost_samples_event.header, &sample, event);
8600
8601 ret = perf_output_begin(&handle, &sample, event,
8602 lost_samples_event.header.size);
8603 if (ret)
8604 return;
8605
8606 perf_output_put(&handle, lost_samples_event);
8607 perf_event__output_id_sample(event, &handle, &sample);
8608 perf_output_end(&handle);
8609}
8610
8611
8612
8613
8614
8615struct perf_switch_event {
8616 struct task_struct *task;
8617 struct task_struct *next_prev;
8618
8619 struct {
8620 struct perf_event_header header;
8621 u32 next_prev_pid;
8622 u32 next_prev_tid;
8623 } event_id;
8624};
8625
8626static int perf_event_switch_match(struct perf_event *event)
8627{
8628 return event->attr.context_switch;
8629}
8630
8631static void perf_event_switch_output(struct perf_event *event, void *data)
8632{
8633 struct perf_switch_event *se = data;
8634 struct perf_output_handle handle;
8635 struct perf_sample_data sample;
8636 int ret;
8637
8638 if (!perf_event_switch_match(event))
8639 return;
8640
8641
8642 if (event->ctx->task) {
8643 se->event_id.header.type = PERF_RECORD_SWITCH;
8644 se->event_id.header.size = sizeof(se->event_id.header);
8645 } else {
8646 se->event_id.header.type = PERF_RECORD_SWITCH_CPU_WIDE;
8647 se->event_id.header.size = sizeof(se->event_id);
8648 se->event_id.next_prev_pid =
8649 perf_event_pid(event, se->next_prev);
8650 se->event_id.next_prev_tid =
8651 perf_event_tid(event, se->next_prev);
8652 }
8653
8654 perf_event_header__init_id(&se->event_id.header, &sample, event);
8655
8656 ret = perf_output_begin(&handle, &sample, event, se->event_id.header.size);
8657 if (ret)
8658 return;
8659
8660 if (event->ctx->task)
8661 perf_output_put(&handle, se->event_id.header);
8662 else
8663 perf_output_put(&handle, se->event_id);
8664
8665 perf_event__output_id_sample(event, &handle, &sample);
8666
8667 perf_output_end(&handle);
8668}
8669
8670static void perf_event_switch(struct task_struct *task,
8671 struct task_struct *next_prev, bool sched_in)
8672{
8673 struct perf_switch_event switch_event;
8674
8675
8676
8677 switch_event = (struct perf_switch_event){
8678 .task = task,
8679 .next_prev = next_prev,
8680 .event_id = {
8681 .header = {
8682
8683 .misc = sched_in ? 0 : PERF_RECORD_MISC_SWITCH_OUT,
8684
8685 },
8686
8687
8688 },
8689 };
8690
8691 if (!sched_in && task->on_rq) {
8692 switch_event.event_id.header.misc |=
8693 PERF_RECORD_MISC_SWITCH_OUT_PREEMPT;
8694 }
8695
8696 perf_iterate_sb(perf_event_switch_output, &switch_event, NULL);
8697}
8698
8699
8700
8701
8702
8703static void perf_log_throttle(struct perf_event *event, int enable)
8704{
8705 struct perf_output_handle handle;
8706 struct perf_sample_data sample;
8707 int ret;
8708
8709 struct {
8710 struct perf_event_header header;
8711 u64 time;
8712 u64 id;
8713 u64 stream_id;
8714 } throttle_event = {
8715 .header = {
8716 .type = PERF_RECORD_THROTTLE,
8717 .misc = 0,
8718 .size = sizeof(throttle_event),
8719 },
8720 .time = perf_event_clock(event),
8721 .id = primary_event_id(event),
8722 .stream_id = event->id,
8723 };
8724
8725 if (enable)
8726 throttle_event.header.type = PERF_RECORD_UNTHROTTLE;
8727
8728 perf_event_header__init_id(&throttle_event.header, &sample, event);
8729
8730 ret = perf_output_begin(&handle, &sample, event,
8731 throttle_event.header.size);
8732 if (ret)
8733 return;
8734
8735 perf_output_put(&handle, throttle_event);
8736 perf_event__output_id_sample(event, &handle, &sample);
8737 perf_output_end(&handle);
8738}
8739
8740
8741
8742
8743
8744struct perf_ksymbol_event {
8745 const char *name;
8746 int name_len;
8747 struct {
8748 struct perf_event_header header;
8749 u64 addr;
8750 u32 len;
8751 u16 ksym_type;
8752 u16 flags;
8753 } event_id;
8754};
8755
8756static int perf_event_ksymbol_match(struct perf_event *event)
8757{
8758 return event->attr.ksymbol;
8759}
8760
8761static void perf_event_ksymbol_output(struct perf_event *event, void *data)
8762{
8763 struct perf_ksymbol_event *ksymbol_event = data;
8764 struct perf_output_handle handle;
8765 struct perf_sample_data sample;
8766 int ret;
8767
8768 if (!perf_event_ksymbol_match(event))
8769 return;
8770
8771 perf_event_header__init_id(&ksymbol_event->event_id.header,
8772 &sample, event);
8773 ret = perf_output_begin(&handle, &sample, event,
8774 ksymbol_event->event_id.header.size);
8775 if (ret)
8776 return;
8777
8778 perf_output_put(&handle, ksymbol_event->event_id);
8779 __output_copy(&handle, ksymbol_event->name, ksymbol_event->name_len);
8780 perf_event__output_id_sample(event, &handle, &sample);
8781
8782 perf_output_end(&handle);
8783}
8784
8785void perf_event_ksymbol(u16 ksym_type, u64 addr, u32 len, bool unregister,
8786 const char *sym)
8787{
8788 struct perf_ksymbol_event ksymbol_event;
8789 char name[KSYM_NAME_LEN];
8790 u16 flags = 0;
8791 int name_len;
8792
8793 if (!atomic_read(&nr_ksymbol_events))
8794 return;
8795
8796 if (ksym_type >= PERF_RECORD_KSYMBOL_TYPE_MAX ||
8797 ksym_type == PERF_RECORD_KSYMBOL_TYPE_UNKNOWN)
8798 goto err;
8799
8800 strlcpy(name, sym, KSYM_NAME_LEN);
8801 name_len = strlen(name) + 1;
8802 while (!IS_ALIGNED(name_len, sizeof(u64)))
8803 name[name_len++] = '\0';
8804 BUILD_BUG_ON(KSYM_NAME_LEN % sizeof(u64));
8805
8806 if (unregister)
8807 flags |= PERF_RECORD_KSYMBOL_FLAGS_UNREGISTER;
8808
8809 ksymbol_event = (struct perf_ksymbol_event){
8810 .name = name,
8811 .name_len = name_len,
8812 .event_id = {
8813 .header = {
8814 .type = PERF_RECORD_KSYMBOL,
8815 .size = sizeof(ksymbol_event.event_id) +
8816 name_len,
8817 },
8818 .addr = addr,
8819 .len = len,
8820 .ksym_type = ksym_type,
8821 .flags = flags,
8822 },
8823 };
8824
8825 perf_iterate_sb(perf_event_ksymbol_output, &ksymbol_event, NULL);
8826 return;
8827err:
8828 WARN_ONCE(1, "%s: Invalid KSYMBOL type 0x%x\n", __func__, ksym_type);
8829}
8830
8831
8832
8833
8834
8835struct perf_bpf_event {
8836 struct bpf_prog *prog;
8837 struct {
8838 struct perf_event_header header;
8839 u16 type;
8840 u16 flags;
8841 u32 id;
8842 u8 tag[BPF_TAG_SIZE];
8843 } event_id;
8844};
8845
8846static int perf_event_bpf_match(struct perf_event *event)
8847{
8848 return event->attr.bpf_event;
8849}
8850
8851static void perf_event_bpf_output(struct perf_event *event, void *data)
8852{
8853 struct perf_bpf_event *bpf_event = data;
8854 struct perf_output_handle handle;
8855 struct perf_sample_data sample;
8856 int ret;
8857
8858 if (!perf_event_bpf_match(event))
8859 return;
8860
8861 perf_event_header__init_id(&bpf_event->event_id.header,
8862 &sample, event);
8863 ret = perf_output_begin(&handle, data, event,
8864 bpf_event->event_id.header.size);
8865 if (ret)
8866 return;
8867
8868 perf_output_put(&handle, bpf_event->event_id);
8869 perf_event__output_id_sample(event, &handle, &sample);
8870
8871 perf_output_end(&handle);
8872}
8873
8874static void perf_event_bpf_emit_ksymbols(struct bpf_prog *prog,
8875 enum perf_bpf_event_type type)
8876{
8877 bool unregister = type == PERF_BPF_EVENT_PROG_UNLOAD;
8878 int i;
8879
8880 if (prog->aux->func_cnt == 0) {
8881 perf_event_ksymbol(PERF_RECORD_KSYMBOL_TYPE_BPF,
8882 (u64)(unsigned long)prog->bpf_func,
8883 prog->jited_len, unregister,
8884 prog->aux->ksym.name);
8885 } else {
8886 for (i = 0; i < prog->aux->func_cnt; i++) {
8887 struct bpf_prog *subprog = prog->aux->func[i];
8888
8889 perf_event_ksymbol(
8890 PERF_RECORD_KSYMBOL_TYPE_BPF,
8891 (u64)(unsigned long)subprog->bpf_func,
8892 subprog->jited_len, unregister,
8893 prog->aux->ksym.name);
8894 }
8895 }
8896}
8897
8898void perf_event_bpf_event(struct bpf_prog *prog,
8899 enum perf_bpf_event_type type,
8900 u16 flags)
8901{
8902 struct perf_bpf_event bpf_event;
8903
8904 if (type <= PERF_BPF_EVENT_UNKNOWN ||
8905 type >= PERF_BPF_EVENT_MAX)
8906 return;
8907
8908 switch (type) {
8909 case PERF_BPF_EVENT_PROG_LOAD:
8910 case PERF_BPF_EVENT_PROG_UNLOAD:
8911 if (atomic_read(&nr_ksymbol_events))
8912 perf_event_bpf_emit_ksymbols(prog, type);
8913 break;
8914 default:
8915 break;
8916 }
8917
8918 if (!atomic_read(&nr_bpf_events))
8919 return;
8920
8921 bpf_event = (struct perf_bpf_event){
8922 .prog = prog,
8923 .event_id = {
8924 .header = {
8925 .type = PERF_RECORD_BPF_EVENT,
8926 .size = sizeof(bpf_event.event_id),
8927 },
8928 .type = type,
8929 .flags = flags,
8930 .id = prog->aux->id,
8931 },
8932 };
8933
8934 BUILD_BUG_ON(BPF_TAG_SIZE % sizeof(u64));
8935
8936 memcpy(bpf_event.event_id.tag, prog->tag, BPF_TAG_SIZE);
8937 perf_iterate_sb(perf_event_bpf_output, &bpf_event, NULL);
8938}
8939
8940struct perf_text_poke_event {
8941 const void *old_bytes;
8942 const void *new_bytes;
8943 size_t pad;
8944 u16 old_len;
8945 u16 new_len;
8946
8947 struct {
8948 struct perf_event_header header;
8949
8950 u64 addr;
8951 } event_id;
8952};
8953
8954static int perf_event_text_poke_match(struct perf_event *event)
8955{
8956 return event->attr.text_poke;
8957}
8958
8959static void perf_event_text_poke_output(struct perf_event *event, void *data)
8960{
8961 struct perf_text_poke_event *text_poke_event = data;
8962 struct perf_output_handle handle;
8963 struct perf_sample_data sample;
8964 u64 padding = 0;
8965 int ret;
8966
8967 if (!perf_event_text_poke_match(event))
8968 return;
8969
8970 perf_event_header__init_id(&text_poke_event->event_id.header, &sample, event);
8971
8972 ret = perf_output_begin(&handle, &sample, event,
8973 text_poke_event->event_id.header.size);
8974 if (ret)
8975 return;
8976
8977 perf_output_put(&handle, text_poke_event->event_id);
8978 perf_output_put(&handle, text_poke_event->old_len);
8979 perf_output_put(&handle, text_poke_event->new_len);
8980
8981 __output_copy(&handle, text_poke_event->old_bytes, text_poke_event->old_len);
8982 __output_copy(&handle, text_poke_event->new_bytes, text_poke_event->new_len);
8983
8984 if (text_poke_event->pad)
8985 __output_copy(&handle, &padding, text_poke_event->pad);
8986
8987 perf_event__output_id_sample(event, &handle, &sample);
8988
8989 perf_output_end(&handle);
8990}
8991
8992void perf_event_text_poke(const void *addr, const void *old_bytes,
8993 size_t old_len, const void *new_bytes, size_t new_len)
8994{
8995 struct perf_text_poke_event text_poke_event;
8996 size_t tot, pad;
8997
8998 if (!atomic_read(&nr_text_poke_events))
8999 return;
9000
9001 tot = sizeof(text_poke_event.old_len) + old_len;
9002 tot += sizeof(text_poke_event.new_len) + new_len;
9003 pad = ALIGN(tot, sizeof(u64)) - tot;
9004
9005 text_poke_event = (struct perf_text_poke_event){
9006 .old_bytes = old_bytes,
9007 .new_bytes = new_bytes,
9008 .pad = pad,
9009 .old_len = old_len,
9010 .new_len = new_len,
9011 .event_id = {
9012 .header = {
9013 .type = PERF_RECORD_TEXT_POKE,
9014 .misc = PERF_RECORD_MISC_KERNEL,
9015 .size = sizeof(text_poke_event.event_id) + tot + pad,
9016 },
9017 .addr = (unsigned long)addr,
9018 },
9019 };
9020
9021 perf_iterate_sb(perf_event_text_poke_output, &text_poke_event, NULL);
9022}
9023
9024void perf_event_itrace_started(struct perf_event *event)
9025{
9026 event->attach_state |= PERF_ATTACH_ITRACE;
9027}
9028
9029static void perf_log_itrace_start(struct perf_event *event)
9030{
9031 struct perf_output_handle handle;
9032 struct perf_sample_data sample;
9033 struct perf_aux_event {
9034 struct perf_event_header header;
9035 u32 pid;
9036 u32 tid;
9037 } rec;
9038 int ret;
9039
9040 if (event->parent)
9041 event = event->parent;
9042
9043 if (!(event->pmu->capabilities & PERF_PMU_CAP_ITRACE) ||
9044 event->attach_state & PERF_ATTACH_ITRACE)
9045 return;
9046
9047 rec.header.type = PERF_RECORD_ITRACE_START;
9048 rec.header.misc = 0;
9049 rec.header.size = sizeof(rec);
9050 rec.pid = perf_event_pid(event, current);
9051 rec.tid = perf_event_tid(event, current);
9052
9053 perf_event_header__init_id(&rec.header, &sample, event);
9054 ret = perf_output_begin(&handle, &sample, event, rec.header.size);
9055
9056 if (ret)
9057 return;
9058
9059 perf_output_put(&handle, rec);
9060 perf_event__output_id_sample(event, &handle, &sample);
9061
9062 perf_output_end(&handle);
9063}
9064
9065static int
9066__perf_event_account_interrupt(struct perf_event *event, int throttle)
9067{
9068 struct hw_perf_event *hwc = &event->hw;
9069 int ret = 0;
9070 u64 seq;
9071
9072 seq = __this_cpu_read(perf_throttled_seq);
9073 if (seq != hwc->interrupts_seq) {
9074 hwc->interrupts_seq = seq;
9075 hwc->interrupts = 1;
9076 } else {
9077 hwc->interrupts++;
9078 if (unlikely(throttle
9079 && hwc->interrupts >= max_samples_per_tick)) {
9080 __this_cpu_inc(perf_throttled_count);
9081 tick_dep_set_cpu(smp_processor_id(), TICK_DEP_BIT_PERF_EVENTS);
9082 hwc->interrupts = MAX_INTERRUPTS;
9083 perf_log_throttle(event, 0);
9084 ret = 1;
9085 }
9086 }
9087
9088 if (event->attr.freq) {
9089 u64 now = perf_clock();
9090 s64 delta = now - hwc->freq_time_stamp;
9091
9092 hwc->freq_time_stamp = now;
9093
9094 if (delta > 0 && delta < 2*TICK_NSEC)
9095 perf_adjust_period(event, delta, hwc->last_period, true);
9096 }
9097
9098 return ret;
9099}
9100
9101int perf_event_account_interrupt(struct perf_event *event)
9102{
9103 return __perf_event_account_interrupt(event, 1);
9104}
9105
9106
9107
9108
9109
9110static int __perf_event_overflow(struct perf_event *event,
9111 int throttle, struct perf_sample_data *data,
9112 struct pt_regs *regs)
9113{
9114 int events = atomic_read(&event->event_limit);
9115 int ret = 0;
9116
9117
9118
9119
9120
9121 if (unlikely(!is_sampling_event(event)))
9122 return 0;
9123
9124 ret = __perf_event_account_interrupt(event, throttle);
9125
9126
9127
9128
9129
9130
9131 event->pending_kill = POLL_IN;
9132 if (events && atomic_dec_and_test(&event->event_limit)) {
9133 ret = 1;
9134 event->pending_kill = POLL_HUP;
9135 event->pending_addr = data->addr;
9136
9137 perf_event_disable_inatomic(event);
9138 }
9139
9140 READ_ONCE(event->overflow_handler)(event, data, regs);
9141
9142 if (*perf_event_fasync(event) && event->pending_kill) {
9143 event->pending_wakeup = 1;
9144 irq_work_queue(&event->pending);
9145 }
9146
9147 return ret;
9148}
9149
9150int perf_event_overflow(struct perf_event *event,
9151 struct perf_sample_data *data,
9152 struct pt_regs *regs)
9153{
9154 return __perf_event_overflow(event, 1, data, regs);
9155}
9156
9157
9158
9159
9160
9161struct swevent_htable {
9162 struct swevent_hlist *swevent_hlist;
9163 struct mutex hlist_mutex;
9164 int hlist_refcount;
9165
9166
9167 int recursion[PERF_NR_CONTEXTS];
9168};
9169
9170static DEFINE_PER_CPU(struct swevent_htable, swevent_htable);
9171
9172
9173
9174
9175
9176
9177
9178
9179u64 perf_swevent_set_period(struct perf_event *event)
9180{
9181 struct hw_perf_event *hwc = &event->hw;
9182 u64 period = hwc->last_period;
9183 u64 nr, offset;
9184 s64 old, val;
9185
9186 hwc->last_period = hwc->sample_period;
9187
9188again:
9189 old = val = local64_read(&hwc->period_left);
9190 if (val < 0)
9191 return 0;
9192
9193 nr = div64_u64(period + val, period);
9194 offset = nr * period;
9195 val -= offset;
9196 if (local64_cmpxchg(&hwc->period_left, old, val) != old)
9197 goto again;
9198
9199 return nr;
9200}
9201
9202static void perf_swevent_overflow(struct perf_event *event, u64 overflow,
9203 struct perf_sample_data *data,
9204 struct pt_regs *regs)
9205{
9206 struct hw_perf_event *hwc = &event->hw;
9207 int throttle = 0;
9208
9209 if (!overflow)
9210 overflow = perf_swevent_set_period(event);
9211
9212 if (hwc->interrupts == MAX_INTERRUPTS)
9213 return;
9214
9215 for (; overflow; overflow--) {
9216 if (__perf_event_overflow(event, throttle,
9217 data, regs)) {
9218
9219
9220
9221
9222 break;
9223 }
9224 throttle = 1;
9225 }
9226}
9227
9228static void perf_swevent_event(struct perf_event *event, u64 nr,
9229 struct perf_sample_data *data,
9230 struct pt_regs *regs)
9231{
9232 struct hw_perf_event *hwc = &event->hw;
9233
9234 local64_add(nr, &event->count);
9235
9236 if (!regs)
9237 return;
9238
9239 if (!is_sampling_event(event))
9240 return;
9241
9242 if ((event->attr.sample_type & PERF_SAMPLE_PERIOD) && !event->attr.freq) {
9243 data->period = nr;
9244 return perf_swevent_overflow(event, 1, data, regs);
9245 } else
9246 data->period = event->hw.last_period;
9247
9248 if (nr == 1 && hwc->sample_period == 1 && !event->attr.freq)
9249 return perf_swevent_overflow(event, 1, data, regs);
9250
9251 if (local64_add_negative(nr, &hwc->period_left))
9252 return;
9253
9254 perf_swevent_overflow(event, 0, data, regs);
9255}
9256
9257static int perf_exclude_event(struct perf_event *event,
9258 struct pt_regs *regs)
9259{
9260 if (event->hw.state & PERF_HES_STOPPED)
9261 return 1;
9262
9263 if (regs) {
9264 if (event->attr.exclude_user && user_mode(regs))
9265 return 1;
9266
9267 if (event->attr.exclude_kernel && !user_mode(regs))
9268 return 1;
9269 }
9270
9271 return 0;
9272}
9273
9274static int perf_swevent_match(struct perf_event *event,
9275 enum perf_type_id type,
9276 u32 event_id,
9277 struct perf_sample_data *data,
9278 struct pt_regs *regs)
9279{
9280 if (event->attr.type != type)
9281 return 0;
9282
9283 if (event->attr.config != event_id)
9284 return 0;
9285
9286 if (perf_exclude_event(event, regs))
9287 return 0;
9288
9289 return 1;
9290}
9291
9292static inline u64 swevent_hash(u64 type, u32 event_id)
9293{
9294 u64 val = event_id | (type << 32);
9295
9296 return hash_64(val, SWEVENT_HLIST_BITS);
9297}
9298
9299static inline struct hlist_head *
9300__find_swevent_head(struct swevent_hlist *hlist, u64 type, u32 event_id)
9301{
9302 u64 hash = swevent_hash(type, event_id);
9303
9304 return &hlist->heads[hash];
9305}
9306
9307
9308static inline struct hlist_head *
9309find_swevent_head_rcu(struct swevent_htable *swhash, u64 type, u32 event_id)
9310{
9311 struct swevent_hlist *hlist;
9312
9313 hlist = rcu_dereference(swhash->swevent_hlist);
9314 if (!hlist)
9315 return NULL;
9316
9317 return __find_swevent_head(hlist, type, event_id);
9318}
9319
9320
9321static inline struct hlist_head *
9322find_swevent_head(struct swevent_htable *swhash, struct perf_event *event)
9323{
9324 struct swevent_hlist *hlist;
9325 u32 event_id = event->attr.config;
9326 u64 type = event->attr.type;
9327
9328
9329
9330
9331
9332
9333 hlist = rcu_dereference_protected(swhash->swevent_hlist,
9334 lockdep_is_held(&event->ctx->lock));
9335 if (!hlist)
9336 return NULL;
9337
9338 return __find_swevent_head(hlist, type, event_id);
9339}
9340
9341static void do_perf_sw_event(enum perf_type_id type, u32 event_id,
9342 u64 nr,
9343 struct perf_sample_data *data,
9344 struct pt_regs *regs)
9345{
9346 struct swevent_htable *swhash = this_cpu_ptr(&swevent_htable);
9347 struct perf_event *event;
9348 struct hlist_head *head;
9349
9350 rcu_read_lock();
9351 head = find_swevent_head_rcu(swhash, type, event_id);
9352 if (!head)
9353 goto end;
9354
9355 hlist_for_each_entry_rcu(event, head, hlist_entry) {
9356 if (perf_swevent_match(event, type, event_id, data, regs))
9357 perf_swevent_event(event, nr, data, regs);
9358 }
9359end:
9360 rcu_read_unlock();
9361}
9362
9363DEFINE_PER_CPU(struct pt_regs, __perf_regs[4]);
9364
9365int perf_swevent_get_recursion_context(void)
9366{
9367 struct swevent_htable *swhash = this_cpu_ptr(&swevent_htable);
9368
9369 return get_recursion_context(swhash->recursion);
9370}
9371EXPORT_SYMBOL_GPL(perf_swevent_get_recursion_context);
9372
9373void perf_swevent_put_recursion_context(int rctx)
9374{
9375 struct swevent_htable *swhash = this_cpu_ptr(&swevent_htable);
9376
9377 put_recursion_context(swhash->recursion, rctx);
9378}
9379
9380void ___perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr)
9381{
9382 struct perf_sample_data data;
9383
9384 if (WARN_ON_ONCE(!regs))
9385 return;
9386
9387 perf_sample_data_init(&data, addr, 0);
9388 do_perf_sw_event(PERF_TYPE_SOFTWARE, event_id, nr, &data, regs);
9389}
9390
9391void __perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr)
9392{
9393 int rctx;
9394
9395 preempt_disable_notrace();
9396 rctx = perf_swevent_get_recursion_context();
9397 if (unlikely(rctx < 0))
9398 goto fail;
9399
9400 ___perf_sw_event(event_id, nr, regs, addr);
9401
9402 perf_swevent_put_recursion_context(rctx);
9403fail:
9404 preempt_enable_notrace();
9405}
9406
9407static void perf_swevent_read(struct perf_event *event)
9408{
9409}
9410
9411static int perf_swevent_add(struct perf_event *event, int flags)
9412{
9413 struct swevent_htable *swhash = this_cpu_ptr(&swevent_htable);
9414 struct hw_perf_event *hwc = &event->hw;
9415 struct hlist_head *head;
9416
9417 if (is_sampling_event(event)) {
9418 hwc->last_period = hwc->sample_period;
9419 perf_swevent_set_period(event);
9420 }
9421
9422 hwc->state = !(flags & PERF_EF_START);
9423
9424 head = find_swevent_head(swhash, event);
9425 if (WARN_ON_ONCE(!head))
9426 return -EINVAL;
9427
9428 hlist_add_head_rcu(&event->hlist_entry, head);
9429 perf_event_update_userpage(event);
9430
9431 return 0;
9432}
9433
9434static void perf_swevent_del(struct perf_event *event, int flags)
9435{
9436 hlist_del_rcu(&event->hlist_entry);
9437}
9438
9439static void perf_swevent_start(struct perf_event *event, int flags)
9440{
9441 event->hw.state = 0;
9442}
9443
9444static void perf_swevent_stop(struct perf_event *event, int flags)
9445{
9446 event->hw.state = PERF_HES_STOPPED;
9447}
9448
9449
9450static inline struct swevent_hlist *
9451swevent_hlist_deref(struct swevent_htable *swhash)
9452{
9453 return rcu_dereference_protected(swhash->swevent_hlist,
9454 lockdep_is_held(&swhash->hlist_mutex));
9455}
9456
9457static void swevent_hlist_release(struct swevent_htable *swhash)
9458{
9459 struct swevent_hlist *hlist = swevent_hlist_deref(swhash);
9460
9461 if (!hlist)
9462 return;
9463
9464 RCU_INIT_POINTER(swhash->swevent_hlist, NULL);
9465 kfree_rcu(hlist, rcu_head);
9466}
9467
9468static void swevent_hlist_put_cpu(int cpu)
9469{
9470 struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);
9471
9472 mutex_lock(&swhash->hlist_mutex);
9473
9474 if (!--swhash->hlist_refcount)
9475 swevent_hlist_release(swhash);
9476
9477 mutex_unlock(&swhash->hlist_mutex);
9478}
9479
9480static void swevent_hlist_put(void)
9481{
9482 int cpu;
9483
9484 for_each_possible_cpu(cpu)
9485 swevent_hlist_put_cpu(cpu);
9486}
9487
9488static int swevent_hlist_get_cpu(int cpu)
9489{
9490 struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);
9491 int err = 0;
9492
9493 mutex_lock(&swhash->hlist_mutex);
9494 if (!swevent_hlist_deref(swhash) &&
9495 cpumask_test_cpu(cpu, perf_online_mask)) {
9496 struct swevent_hlist *hlist;
9497
9498 hlist = kzalloc(sizeof(*hlist), GFP_KERNEL);
9499 if (!hlist) {
9500 err = -ENOMEM;
9501 goto exit;
9502 }
9503 rcu_assign_pointer(swhash->swevent_hlist, hlist);
9504 }
9505 swhash->hlist_refcount++;
9506exit:
9507 mutex_unlock(&swhash->hlist_mutex);
9508
9509 return err;
9510}
9511
9512static int swevent_hlist_get(void)
9513{
9514 int err, cpu, failed_cpu;
9515
9516 mutex_lock(&pmus_lock);
9517 for_each_possible_cpu(cpu) {
9518 err = swevent_hlist_get_cpu(cpu);
9519 if (err) {
9520 failed_cpu = cpu;
9521 goto fail;
9522 }
9523 }
9524 mutex_unlock(&pmus_lock);
9525 return 0;
9526fail:
9527 for_each_possible_cpu(cpu) {
9528 if (cpu == failed_cpu)
9529 break;
9530 swevent_hlist_put_cpu(cpu);
9531 }
9532 mutex_unlock(&pmus_lock);
9533 return err;
9534}
9535
9536struct static_key perf_swevent_enabled[PERF_COUNT_SW_MAX];
9537
9538static void sw_perf_event_destroy(struct perf_event *event)
9539{
9540 u64 event_id = event->attr.config;
9541
9542 WARN_ON(event->parent);
9543
9544 static_key_slow_dec(&perf_swevent_enabled[event_id]);
9545 swevent_hlist_put();
9546}
9547
9548static int perf_swevent_init(struct perf_event *event)
9549{
9550 u64 event_id = event->attr.config;
9551
9552 if (event->attr.type != PERF_TYPE_SOFTWARE)
9553 return -ENOENT;
9554
9555
9556
9557
9558 if (has_branch_stack(event))
9559 return -EOPNOTSUPP;
9560
9561 switch (event_id) {
9562 case PERF_COUNT_SW_CPU_CLOCK:
9563 case PERF_COUNT_SW_TASK_CLOCK:
9564 return -ENOENT;
9565
9566 default:
9567 break;
9568 }
9569
9570 if (event_id >= PERF_COUNT_SW_MAX)
9571 return -ENOENT;
9572
9573 if (!event->parent) {
9574 int err;
9575
9576 err = swevent_hlist_get();
9577 if (err)
9578 return err;
9579
9580 static_key_slow_inc(&perf_swevent_enabled[event_id]);
9581 event->destroy = sw_perf_event_destroy;
9582 }
9583
9584 return 0;
9585}
9586
9587static struct pmu perf_swevent = {
9588 .task_ctx_nr = perf_sw_context,
9589
9590 .capabilities = PERF_PMU_CAP_NO_NMI,
9591
9592 .event_init = perf_swevent_init,
9593 .add = perf_swevent_add,
9594 .del = perf_swevent_del,
9595 .start = perf_swevent_start,
9596 .stop = perf_swevent_stop,
9597 .read = perf_swevent_read,
9598};
9599
9600#ifdef CONFIG_EVENT_TRACING
9601
9602static int perf_tp_filter_match(struct perf_event *event,
9603 struct perf_sample_data *data)
9604{
9605 void *record = data->raw->frag.data;
9606
9607
9608 if (event->parent)
9609 event = event->parent;
9610
9611 if (likely(!event->filter) || filter_match_preds(event->filter, record))
9612 return 1;
9613 return 0;
9614}
9615
9616static int perf_tp_event_match(struct perf_event *event,
9617 struct perf_sample_data *data,
9618 struct pt_regs *regs)
9619{
9620 if (event->hw.state & PERF_HES_STOPPED)
9621 return 0;
9622
9623
9624
9625 if (event->attr.exclude_kernel && !user_mode(regs))
9626 return 0;
9627
9628 if (!perf_tp_filter_match(event, data))
9629 return 0;
9630
9631 return 1;
9632}
9633
9634void perf_trace_run_bpf_submit(void *raw_data, int size, int rctx,
9635 struct trace_event_call *call, u64 count,
9636 struct pt_regs *regs, struct hlist_head *head,
9637 struct task_struct *task)
9638{
9639 if (bpf_prog_array_valid(call)) {
9640 *(struct pt_regs **)raw_data = regs;
9641 if (!trace_call_bpf(call, raw_data) || hlist_empty(head)) {
9642 perf_swevent_put_recursion_context(rctx);
9643 return;
9644 }
9645 }
9646 perf_tp_event(call->event.type, count, raw_data, size, regs, head,
9647 rctx, task);
9648}
9649EXPORT_SYMBOL_GPL(perf_trace_run_bpf_submit);
9650
9651void perf_tp_event(u16 event_type, u64 count, void *record, int entry_size,
9652 struct pt_regs *regs, struct hlist_head *head, int rctx,
9653 struct task_struct *task)
9654{
9655 struct perf_sample_data data;
9656 struct perf_event *event;
9657
9658 struct perf_raw_record raw = {
9659 .frag = {
9660 .size = entry_size,
9661 .data = record,
9662 },
9663 };
9664
9665 perf_sample_data_init(&data, 0, 0);
9666 data.raw = &raw;
9667
9668 perf_trace_buf_update(record, event_type);
9669
9670 hlist_for_each_entry_rcu(event, head, hlist_entry) {
9671 if (perf_tp_event_match(event, &data, regs))
9672 perf_swevent_event(event, count, &data, regs);
9673 }
9674
9675
9676
9677
9678
9679 if (task && task != current) {
9680 struct perf_event_context *ctx;
9681 struct trace_entry *entry = record;
9682
9683 rcu_read_lock();
9684 ctx = rcu_dereference(task->perf_event_ctxp[perf_sw_context]);
9685 if (!ctx)
9686 goto unlock;
9687
9688 list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
9689 if (event->cpu != smp_processor_id())
9690 continue;
9691 if (event->attr.type != PERF_TYPE_TRACEPOINT)
9692 continue;
9693 if (event->attr.config != entry->type)
9694 continue;
9695 if (perf_tp_event_match(event, &data, regs))
9696 perf_swevent_event(event, count, &data, regs);
9697 }
9698unlock:
9699 rcu_read_unlock();
9700 }
9701
9702 perf_swevent_put_recursion_context(rctx);
9703}
9704EXPORT_SYMBOL_GPL(perf_tp_event);
9705
9706static void tp_perf_event_destroy(struct perf_event *event)
9707{
9708 perf_trace_destroy(event);
9709}
9710
9711static int perf_tp_event_init(struct perf_event *event)
9712{
9713 int err;
9714
9715 if (event->attr.type != PERF_TYPE_TRACEPOINT)
9716 return -ENOENT;
9717
9718
9719
9720
9721 if (has_branch_stack(event))
9722 return -EOPNOTSUPP;
9723
9724 err = perf_trace_init(event);
9725 if (err)
9726 return err;
9727
9728 event->destroy = tp_perf_event_destroy;
9729
9730 return 0;
9731}
9732
9733static struct pmu perf_tracepoint = {
9734 .task_ctx_nr = perf_sw_context,
9735
9736 .event_init = perf_tp_event_init,
9737 .add = perf_trace_add,
9738 .del = perf_trace_del,
9739 .start = perf_swevent_start,
9740 .stop = perf_swevent_stop,
9741 .read = perf_swevent_read,
9742};
9743
9744#if defined(CONFIG_KPROBE_EVENTS) || defined(CONFIG_UPROBE_EVENTS)
9745
9746
9747
9748
9749
9750
9751
9752
9753
9754
9755
9756
9757
9758
9759enum perf_probe_config {
9760 PERF_PROBE_CONFIG_IS_RETPROBE = 1U << 0,
9761 PERF_UPROBE_REF_CTR_OFFSET_BITS = 32,
9762 PERF_UPROBE_REF_CTR_OFFSET_SHIFT = 64 - PERF_UPROBE_REF_CTR_OFFSET_BITS,
9763};
9764
9765PMU_FORMAT_ATTR(retprobe, "config:0");
9766#endif
9767
9768#ifdef CONFIG_KPROBE_EVENTS
9769static struct attribute *kprobe_attrs[] = {
9770 &format_attr_retprobe.attr,
9771 NULL,
9772};
9773
9774static struct attribute_group kprobe_format_group = {
9775 .name = "format",
9776 .attrs = kprobe_attrs,
9777};
9778
9779static const struct attribute_group *kprobe_attr_groups[] = {
9780 &kprobe_format_group,
9781 NULL,
9782};
9783
9784static int perf_kprobe_event_init(struct perf_event *event);
9785static struct pmu perf_kprobe = {
9786 .task_ctx_nr = perf_sw_context,
9787 .event_init = perf_kprobe_event_init,
9788 .add = perf_trace_add,
9789 .del = perf_trace_del,
9790 .start = perf_swevent_start,
9791 .stop = perf_swevent_stop,
9792 .read = perf_swevent_read,
9793 .attr_groups = kprobe_attr_groups,
9794};
9795
9796static int perf_kprobe_event_init(struct perf_event *event)
9797{
9798 int err;
9799 bool is_retprobe;
9800
9801 if (event->attr.type != perf_kprobe.type)
9802 return -ENOENT;
9803
9804 if (!perfmon_capable())
9805 return -EACCES;
9806
9807
9808
9809
9810 if (has_branch_stack(event))
9811 return -EOPNOTSUPP;
9812
9813 is_retprobe = event->attr.config & PERF_PROBE_CONFIG_IS_RETPROBE;
9814 err = perf_kprobe_init(event, is_retprobe);
9815 if (err)
9816 return err;
9817
9818 event->destroy = perf_kprobe_destroy;
9819
9820 return 0;
9821}
9822#endif
9823
9824#ifdef CONFIG_UPROBE_EVENTS
9825PMU_FORMAT_ATTR(ref_ctr_offset, "config:32-63");
9826
9827static struct attribute *uprobe_attrs[] = {
9828 &format_attr_retprobe.attr,
9829 &format_attr_ref_ctr_offset.attr,
9830 NULL,
9831};
9832
9833static struct attribute_group uprobe_format_group = {
9834 .name = "format",
9835 .attrs = uprobe_attrs,
9836};
9837
9838static const struct attribute_group *uprobe_attr_groups[] = {
9839 &uprobe_format_group,
9840 NULL,
9841};
9842
9843static int perf_uprobe_event_init(struct perf_event *event);
9844static struct pmu perf_uprobe = {
9845 .task_ctx_nr = perf_sw_context,
9846 .event_init = perf_uprobe_event_init,
9847 .add = perf_trace_add,
9848 .del = perf_trace_del,
9849 .start = perf_swevent_start,
9850 .stop = perf_swevent_stop,
9851 .read = perf_swevent_read,
9852 .attr_groups = uprobe_attr_groups,
9853};
9854
9855static int perf_uprobe_event_init(struct perf_event *event)
9856{
9857 int err;
9858 unsigned long ref_ctr_offset;
9859 bool is_retprobe;
9860
9861 if (event->attr.type != perf_uprobe.type)
9862 return -ENOENT;
9863
9864 if (!perfmon_capable())
9865 return -EACCES;
9866
9867
9868
9869
9870 if (has_branch_stack(event))
9871 return -EOPNOTSUPP;
9872
9873 is_retprobe = event->attr.config & PERF_PROBE_CONFIG_IS_RETPROBE;
9874 ref_ctr_offset = event->attr.config >> PERF_UPROBE_REF_CTR_OFFSET_SHIFT;
9875 err = perf_uprobe_init(event, ref_ctr_offset, is_retprobe);
9876 if (err)
9877 return err;
9878
9879 event->destroy = perf_uprobe_destroy;
9880
9881 return 0;
9882}
9883#endif
9884
9885static inline void perf_tp_register(void)
9886{
9887 perf_pmu_register(&perf_tracepoint, "tracepoint", PERF_TYPE_TRACEPOINT);
9888#ifdef CONFIG_KPROBE_EVENTS
9889 perf_pmu_register(&perf_kprobe, "kprobe", -1);
9890#endif
9891#ifdef CONFIG_UPROBE_EVENTS
9892 perf_pmu_register(&perf_uprobe, "uprobe", -1);
9893#endif
9894}
9895
9896static void perf_event_free_filter(struct perf_event *event)
9897{
9898 ftrace_profile_free_filter(event);
9899}
9900
9901#ifdef CONFIG_BPF_SYSCALL
9902static void bpf_overflow_handler(struct perf_event *event,
9903 struct perf_sample_data *data,
9904 struct pt_regs *regs)
9905{
9906 struct bpf_perf_event_data_kern ctx = {
9907 .data = data,
9908 .event = event,
9909 };
9910 int ret = 0;
9911
9912 ctx.regs = perf_arch_bpf_user_pt_regs(regs);
9913 if (unlikely(__this_cpu_inc_return(bpf_prog_active) != 1))
9914 goto out;
9915 rcu_read_lock();
9916 ret = BPF_PROG_RUN(event->prog, &ctx);
9917 rcu_read_unlock();
9918out:
9919 __this_cpu_dec(bpf_prog_active);
9920 if (!ret)
9921 return;
9922
9923 event->orig_overflow_handler(event, data, regs);
9924}
9925
9926static int perf_event_set_bpf_handler(struct perf_event *event, u32 prog_fd)
9927{
9928 struct bpf_prog *prog;
9929
9930 if (event->overflow_handler_context)
9931
9932 return -EINVAL;
9933
9934 if (event->prog)
9935 return -EEXIST;
9936
9937 prog = bpf_prog_get_type(prog_fd, BPF_PROG_TYPE_PERF_EVENT);
9938 if (IS_ERR(prog))
9939 return PTR_ERR(prog);
9940
9941 if (event->attr.precise_ip &&
9942 prog->call_get_stack &&
9943 (!(event->attr.sample_type & __PERF_SAMPLE_CALLCHAIN_EARLY) ||
9944 event->attr.exclude_callchain_kernel ||
9945 event->attr.exclude_callchain_user)) {
9946
9947
9948
9949
9950
9951
9952
9953
9954
9955 bpf_prog_put(prog);
9956 return -EPROTO;
9957 }
9958
9959 event->prog = prog;
9960 event->orig_overflow_handler = READ_ONCE(event->overflow_handler);
9961 WRITE_ONCE(event->overflow_handler, bpf_overflow_handler);
9962 return 0;
9963}
9964
9965static void perf_event_free_bpf_handler(struct perf_event *event)
9966{
9967 struct bpf_prog *prog = event->prog;
9968
9969 if (!prog)
9970 return;
9971
9972 WRITE_ONCE(event->overflow_handler, event->orig_overflow_handler);
9973 event->prog = NULL;
9974 bpf_prog_put(prog);
9975}
9976#else
9977static int perf_event_set_bpf_handler(struct perf_event *event, u32 prog_fd)
9978{
9979 return -EOPNOTSUPP;
9980}
9981static void perf_event_free_bpf_handler(struct perf_event *event)
9982{
9983}
9984#endif
9985
9986
9987
9988
9989
9990static inline bool perf_event_is_tracing(struct perf_event *event)
9991{
9992 if (event->pmu == &perf_tracepoint)
9993 return true;
9994#ifdef CONFIG_KPROBE_EVENTS
9995 if (event->pmu == &perf_kprobe)
9996 return true;
9997#endif
9998#ifdef CONFIG_UPROBE_EVENTS
9999 if (event->pmu == &perf_uprobe)
10000 return true;
10001#endif
10002 return false;
10003}
10004
10005static int perf_event_set_bpf_prog(struct perf_event *event, u32 prog_fd)
10006{
10007 bool is_kprobe, is_tracepoint, is_syscall_tp;
10008 struct bpf_prog *prog;
10009 int ret;
10010
10011 if (!perf_event_is_tracing(event))
10012 return perf_event_set_bpf_handler(event, prog_fd);
10013
10014 is_kprobe = event->tp_event->flags & TRACE_EVENT_FL_UKPROBE;
10015 is_tracepoint = event->tp_event->flags & TRACE_EVENT_FL_TRACEPOINT;
10016 is_syscall_tp = is_syscall_trace_event(event->tp_event);
10017 if (!is_kprobe && !is_tracepoint && !is_syscall_tp)
10018
10019 return -EINVAL;
10020
10021 prog = bpf_prog_get(prog_fd);
10022 if (IS_ERR(prog))
10023 return PTR_ERR(prog);
10024
10025 if ((is_kprobe && prog->type != BPF_PROG_TYPE_KPROBE) ||
10026 (is_tracepoint && prog->type != BPF_PROG_TYPE_TRACEPOINT) ||
10027 (is_syscall_tp && prog->type != BPF_PROG_TYPE_TRACEPOINT)) {
10028
10029 bpf_prog_put(prog);
10030 return -EINVAL;
10031 }
10032
10033
10034 if (prog->kprobe_override &&
10035 !(event->tp_event->flags & TRACE_EVENT_FL_KPROBE)) {
10036 bpf_prog_put(prog);
10037 return -EINVAL;
10038 }
10039
10040 if (is_tracepoint || is_syscall_tp) {
10041 int off = trace_event_get_offsets(event->tp_event);
10042
10043 if (prog->aux->max_ctx_offset > off) {
10044 bpf_prog_put(prog);
10045 return -EACCES;
10046 }
10047 }
10048
10049 ret = perf_event_attach_bpf_prog(event, prog);
10050 if (ret)
10051 bpf_prog_put(prog);
10052 return ret;
10053}
10054
10055static void perf_event_free_bpf_prog(struct perf_event *event)
10056{
10057 if (!perf_event_is_tracing(event)) {
10058 perf_event_free_bpf_handler(event);
10059 return;
10060 }
10061 perf_event_detach_bpf_prog(event);
10062}
10063
10064#else
10065
10066static inline void perf_tp_register(void)
10067{
10068}
10069
10070static void perf_event_free_filter(struct perf_event *event)
10071{
10072}
10073
10074static int perf_event_set_bpf_prog(struct perf_event *event, u32 prog_fd)
10075{
10076 return -ENOENT;
10077}
10078
10079static void perf_event_free_bpf_prog(struct perf_event *event)
10080{
10081}
10082#endif
10083
10084#ifdef CONFIG_HAVE_HW_BREAKPOINT
10085void perf_bp_event(struct perf_event *bp, void *data)
10086{
10087 struct perf_sample_data sample;
10088 struct pt_regs *regs = data;
10089
10090 perf_sample_data_init(&sample, bp->attr.bp_addr, 0);
10091
10092 if (!bp->hw.state && !perf_exclude_event(bp, regs))
10093 perf_swevent_event(bp, 1, &sample, regs);
10094}
10095#endif
10096
10097
10098
10099
10100static struct perf_addr_filter *
10101perf_addr_filter_new(struct perf_event *event, struct list_head *filters)
10102{
10103 int node = cpu_to_node(event->cpu == -1 ? 0 : event->cpu);
10104 struct perf_addr_filter *filter;
10105
10106 filter = kzalloc_node(sizeof(*filter), GFP_KERNEL, node);
10107 if (!filter)
10108 return NULL;
10109
10110 INIT_LIST_HEAD(&filter->entry);
10111 list_add_tail(&filter->entry, filters);
10112
10113 return filter;
10114}
10115
10116static void free_filters_list(struct list_head *filters)
10117{
10118 struct perf_addr_filter *filter, *iter;
10119
10120 list_for_each_entry_safe(filter, iter, filters, entry) {
10121 path_put(&filter->path);
10122 list_del(&filter->entry);
10123 kfree(filter);
10124 }
10125}
10126
10127
10128
10129
10130static void perf_addr_filters_splice(struct perf_event *event,
10131 struct list_head *head)
10132{
10133 unsigned long flags;
10134 LIST_HEAD(list);
10135
10136 if (!has_addr_filter(event))
10137 return;
10138
10139
10140 if (event->parent)
10141 return;
10142
10143 raw_spin_lock_irqsave(&event->addr_filters.lock, flags);
10144
10145 list_splice_init(&event->addr_filters.list, &list);
10146 if (head)
10147 list_splice(head, &event->addr_filters.list);
10148
10149 raw_spin_unlock_irqrestore(&event->addr_filters.lock, flags);
10150
10151 free_filters_list(&list);
10152}
10153
10154
10155
10156
10157
10158
10159static void perf_addr_filter_apply(struct perf_addr_filter *filter,
10160 struct mm_struct *mm,
10161 struct perf_addr_filter_range *fr)
10162{
10163 struct vm_area_struct *vma;
10164
10165 for (vma = mm->mmap; vma; vma = vma->vm_next) {
10166 if (!vma->vm_file)
10167 continue;
10168
10169 if (perf_addr_filter_vma_adjust(filter, vma, fr))
10170 return;
10171 }
10172}
10173
10174
10175
10176
10177
10178static void perf_event_addr_filters_apply(struct perf_event *event)
10179{
10180 struct perf_addr_filters_head *ifh = perf_event_addr_filters(event);
10181 struct task_struct *task = READ_ONCE(event->ctx->task);
10182 struct perf_addr_filter *filter;
10183 struct mm_struct *mm = NULL;
10184 unsigned int count = 0;
10185 unsigned long flags;
10186
10187
10188
10189
10190
10191 if (task == TASK_TOMBSTONE)
10192 return;
10193
10194 if (ifh->nr_file_filters) {
10195 mm = get_task_mm(event->ctx->task);
10196 if (!mm)
10197 goto restart;
10198
10199 mmap_read_lock(mm);
10200 }
10201
10202 raw_spin_lock_irqsave(&ifh->lock, flags);
10203 list_for_each_entry(filter, &ifh->list, entry) {
10204 if (filter->path.dentry) {
10205
10206
10207
10208
10209 event->addr_filter_ranges[count].start = 0;
10210 event->addr_filter_ranges[count].size = 0;
10211
10212 perf_addr_filter_apply(filter, mm, &event->addr_filter_ranges[count]);
10213 } else {
10214 event->addr_filter_ranges[count].start = filter->offset;
10215 event->addr_filter_ranges[count].size = filter->size;
10216 }
10217
10218 count++;
10219 }
10220
10221 event->addr_filters_gen++;
10222 raw_spin_unlock_irqrestore(&ifh->lock, flags);
10223
10224 if (ifh->nr_file_filters) {
10225 mmap_read_unlock(mm);
10226
10227 mmput(mm);
10228 }
10229
10230restart:
10231 perf_event_stop(event, 1);
10232}
10233
10234
10235
10236
10237
10238
10239
10240
10241
10242
10243
10244
10245
10246
10247
10248
10249
10250
10251
10252
10253enum {
10254 IF_ACT_NONE = -1,
10255 IF_ACT_FILTER,
10256 IF_ACT_START,
10257 IF_ACT_STOP,
10258 IF_SRC_FILE,
10259 IF_SRC_KERNEL,
10260 IF_SRC_FILEADDR,
10261 IF_SRC_KERNELADDR,
10262};
10263
10264enum {
10265 IF_STATE_ACTION = 0,
10266 IF_STATE_SOURCE,
10267 IF_STATE_END,
10268};
10269
10270static const match_table_t if_tokens = {
10271 { IF_ACT_FILTER, "filter" },
10272 { IF_ACT_START, "start" },
10273 { IF_ACT_STOP, "stop" },
10274 { IF_SRC_FILE, "%u/%u@%s" },
10275 { IF_SRC_KERNEL, "%u/%u" },
10276 { IF_SRC_FILEADDR, "%u@%s" },
10277 { IF_SRC_KERNELADDR, "%u" },
10278 { IF_ACT_NONE, NULL },
10279};
10280
10281
10282
10283
10284static int
10285perf_event_parse_addr_filter(struct perf_event *event, char *fstr,
10286 struct list_head *filters)
10287{
10288 struct perf_addr_filter *filter = NULL;
10289 char *start, *orig, *filename = NULL;
10290 substring_t args[MAX_OPT_ARGS];
10291 int state = IF_STATE_ACTION, token;
10292 unsigned int kernel = 0;
10293 int ret = -EINVAL;
10294
10295 orig = fstr = kstrdup(fstr, GFP_KERNEL);
10296 if (!fstr)
10297 return -ENOMEM;
10298
10299 while ((start = strsep(&fstr, " ,\n")) != NULL) {
10300 static const enum perf_addr_filter_action_t actions[] = {
10301 [IF_ACT_FILTER] = PERF_ADDR_FILTER_ACTION_FILTER,
10302 [IF_ACT_START] = PERF_ADDR_FILTER_ACTION_START,
10303 [IF_ACT_STOP] = PERF_ADDR_FILTER_ACTION_STOP,
10304 };
10305 ret = -EINVAL;
10306
10307 if (!*start)
10308 continue;
10309
10310
10311 if (state == IF_STATE_ACTION) {
10312 filter = perf_addr_filter_new(event, filters);
10313 if (!filter)
10314 goto fail;
10315 }
10316
10317 token = match_token(start, if_tokens, args);
10318 switch (token) {
10319 case IF_ACT_FILTER:
10320 case IF_ACT_START:
10321 case IF_ACT_STOP:
10322 if (state != IF_STATE_ACTION)
10323 goto fail;
10324
10325 filter->action = actions[token];
10326 state = IF_STATE_SOURCE;
10327 break;
10328
10329 case IF_SRC_KERNELADDR:
10330 case IF_SRC_KERNEL:
10331 kernel = 1;
10332 fallthrough;
10333
10334 case IF_SRC_FILEADDR:
10335 case IF_SRC_FILE:
10336 if (state != IF_STATE_SOURCE)
10337 goto fail;
10338
10339 *args[0].to = 0;
10340 ret = kstrtoul(args[0].from, 0, &filter->offset);
10341 if (ret)
10342 goto fail;
10343
10344 if (token == IF_SRC_KERNEL || token == IF_SRC_FILE) {
10345 *args[1].to = 0;
10346 ret = kstrtoul(args[1].from, 0, &filter->size);
10347 if (ret)
10348 goto fail;
10349 }
10350
10351 if (token == IF_SRC_FILE || token == IF_SRC_FILEADDR) {
10352 int fpos = token == IF_SRC_FILE ? 2 : 1;
10353
10354 kfree(filename);
10355 filename = match_strdup(&args[fpos]);
10356 if (!filename) {
10357 ret = -ENOMEM;
10358 goto fail;
10359 }
10360 }
10361
10362 state = IF_STATE_END;
10363 break;
10364
10365 default:
10366 goto fail;
10367 }
10368
10369
10370
10371
10372
10373
10374 if (state == IF_STATE_END) {
10375 ret = -EINVAL;
10376 if (kernel && event->attr.exclude_kernel)
10377 goto fail;
10378
10379
10380
10381
10382
10383 if (filter->action == PERF_ADDR_FILTER_ACTION_FILTER &&
10384 !filter->size)
10385 goto fail;
10386
10387 if (!kernel) {
10388 if (!filename)
10389 goto fail;
10390
10391
10392
10393
10394
10395
10396
10397
10398
10399 ret = -EOPNOTSUPP;
10400 if (!event->ctx->task)
10401 goto fail;
10402
10403
10404 ret = kern_path(filename, LOOKUP_FOLLOW,
10405 &filter->path);
10406 if (ret)
10407 goto fail;
10408
10409 ret = -EINVAL;
10410 if (!filter->path.dentry ||
10411 !S_ISREG(d_inode(filter->path.dentry)
10412 ->i_mode))
10413 goto fail;
10414
10415 event->addr_filters.nr_file_filters++;
10416 }
10417
10418
10419 state = IF_STATE_ACTION;
10420 filter = NULL;
10421 }
10422 }
10423
10424 if (state != IF_STATE_ACTION)
10425 goto fail;
10426
10427 kfree(filename);
10428 kfree(orig);
10429
10430 return 0;
10431
10432fail:
10433 kfree(filename);
10434 free_filters_list(filters);
10435 kfree(orig);
10436
10437 return ret;
10438}
10439
10440static int
10441perf_event_set_addr_filter(struct perf_event *event, char *filter_str)
10442{
10443 LIST_HEAD(filters);
10444 int ret;
10445
10446
10447
10448
10449
10450 lockdep_assert_held(&event->ctx->mutex);
10451
10452 if (WARN_ON_ONCE(event->parent))
10453 return -EINVAL;
10454
10455 ret = perf_event_parse_addr_filter(event, filter_str, &filters);
10456 if (ret)
10457 goto fail_clear_files;
10458
10459 ret = event->pmu->addr_filters_validate(&filters);
10460 if (ret)
10461 goto fail_free_filters;
10462
10463
10464 perf_addr_filters_splice(event, &filters);
10465
10466
10467 perf_event_for_each_child(event, perf_event_addr_filters_apply);
10468
10469 return ret;
10470
10471fail_free_filters:
10472 free_filters_list(&filters);
10473
10474fail_clear_files:
10475 event->addr_filters.nr_file_filters = 0;
10476
10477 return ret;
10478}
10479
10480static int perf_event_set_filter(struct perf_event *event, void __user *arg)
10481{
10482 int ret = -EINVAL;
10483 char *filter_str;
10484
10485 filter_str = strndup_user(arg, PAGE_SIZE);
10486 if (IS_ERR(filter_str))
10487 return PTR_ERR(filter_str);
10488
10489#ifdef CONFIG_EVENT_TRACING
10490 if (perf_event_is_tracing(event)) {
10491 struct perf_event_context *ctx = event->ctx;
10492
10493
10494
10495
10496
10497
10498
10499
10500
10501
10502
10503
10504 mutex_unlock(&ctx->mutex);
10505 ret = ftrace_profile_set_filter(event, event->attr.config, filter_str);
10506 mutex_lock(&ctx->mutex);
10507 } else
10508#endif
10509 if (has_addr_filter(event))
10510 ret = perf_event_set_addr_filter(event, filter_str);
10511
10512 kfree(filter_str);
10513 return ret;
10514}
10515
10516
10517
10518
10519
10520static enum hrtimer_restart perf_swevent_hrtimer(struct hrtimer *hrtimer)
10521{
10522 enum hrtimer_restart ret = HRTIMER_RESTART;
10523 struct perf_sample_data data;
10524 struct pt_regs *regs;
10525 struct perf_event *event;
10526 u64 period;
10527
10528 event = container_of(hrtimer, struct perf_event, hw.hrtimer);
10529
10530 if (event->state != PERF_EVENT_STATE_ACTIVE)
10531 return HRTIMER_NORESTART;
10532
10533 event->pmu->read(event);
10534
10535 perf_sample_data_init(&data, 0, event->hw.last_period);
10536 regs = get_irq_regs();
10537
10538 if (regs && !perf_exclude_event(event, regs)) {
10539 if (!(event->attr.exclude_idle && is_idle_task(current)))
10540 if (__perf_event_overflow(event, 1, &data, regs))
10541 ret = HRTIMER_NORESTART;
10542 }
10543
10544 period = max_t(u64, 10000, event->hw.sample_period);
10545 hrtimer_forward_now(hrtimer, ns_to_ktime(period));
10546
10547 return ret;
10548}
10549
10550static void perf_swevent_start_hrtimer(struct perf_event *event)
10551{
10552 struct hw_perf_event *hwc = &event->hw;
10553 s64 period;
10554
10555 if (!is_sampling_event(event))
10556 return;
10557
10558 period = local64_read(&hwc->period_left);
10559 if (period) {
10560 if (period < 0)
10561 period = 10000;
10562
10563 local64_set(&hwc->period_left, 0);
10564 } else {
10565 period = max_t(u64, 10000, hwc->sample_period);
10566 }
10567 hrtimer_start(&hwc->hrtimer, ns_to_ktime(period),
10568 HRTIMER_MODE_REL_PINNED_HARD);
10569}
10570
10571static void perf_swevent_cancel_hrtimer(struct perf_event *event)
10572{
10573 struct hw_perf_event *hwc = &event->hw;
10574
10575 if (is_sampling_event(event)) {
10576 ktime_t remaining = hrtimer_get_remaining(&hwc->hrtimer);
10577 local64_set(&hwc->period_left, ktime_to_ns(remaining));
10578
10579 hrtimer_cancel(&hwc->hrtimer);
10580 }
10581}
10582
10583static void perf_swevent_init_hrtimer(struct perf_event *event)
10584{
10585 struct hw_perf_event *hwc = &event->hw;
10586
10587 if (!is_sampling_event(event))
10588 return;
10589
10590 hrtimer_init(&hwc->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD);
10591 hwc->hrtimer.function = perf_swevent_hrtimer;
10592
10593
10594
10595
10596
10597 if (event->attr.freq) {
10598 long freq = event->attr.sample_freq;
10599
10600 event->attr.sample_period = NSEC_PER_SEC / freq;
10601 hwc->sample_period = event->attr.sample_period;
10602 local64_set(&hwc->period_left, hwc->sample_period);
10603 hwc->last_period = hwc->sample_period;
10604 event->attr.freq = 0;
10605 }
10606}
10607
10608
10609
10610
10611
10612static void cpu_clock_event_update(struct perf_event *event)
10613{
10614 s64 prev;
10615 u64 now;
10616
10617 now = local_clock();
10618 prev = local64_xchg(&event->hw.prev_count, now);
10619 local64_add(now - prev, &event->count);
10620}
10621
10622static void cpu_clock_event_start(struct perf_event *event, int flags)
10623{
10624 local64_set(&event->hw.prev_count, local_clock());
10625 perf_swevent_start_hrtimer(event);
10626}
10627
10628static void cpu_clock_event_stop(struct perf_event *event, int flags)
10629{
10630 perf_swevent_cancel_hrtimer(event);
10631 cpu_clock_event_update(event);
10632}
10633
10634static int cpu_clock_event_add(struct perf_event *event, int flags)
10635{
10636 if (flags & PERF_EF_START)
10637 cpu_clock_event_start(event, flags);
10638 perf_event_update_userpage(event);
10639
10640 return 0;
10641}
10642
10643static void cpu_clock_event_del(struct perf_event *event, int flags)
10644{
10645 cpu_clock_event_stop(event, flags);
10646}
10647
10648static void cpu_clock_event_read(struct perf_event *event)
10649{
10650 cpu_clock_event_update(event);
10651}
10652
10653static int cpu_clock_event_init(struct perf_event *event)
10654{
10655 if (event->attr.type != PERF_TYPE_SOFTWARE)
10656 return -ENOENT;
10657
10658 if (event->attr.config != PERF_COUNT_SW_CPU_CLOCK)
10659 return -ENOENT;
10660
10661
10662
10663
10664 if (has_branch_stack(event))
10665 return -EOPNOTSUPP;
10666
10667 perf_swevent_init_hrtimer(event);
10668
10669 return 0;
10670}
10671
10672static struct pmu perf_cpu_clock = {
10673 .task_ctx_nr = perf_sw_context,
10674
10675 .capabilities = PERF_PMU_CAP_NO_NMI,
10676
10677 .event_init = cpu_clock_event_init,
10678 .add = cpu_clock_event_add,
10679 .del = cpu_clock_event_del,
10680 .start = cpu_clock_event_start,
10681 .stop = cpu_clock_event_stop,
10682 .read = cpu_clock_event_read,
10683};
10684
10685
10686
10687
10688
10689static void task_clock_event_update(struct perf_event *event, u64 now)
10690{
10691 u64 prev;
10692 s64 delta;
10693
10694 prev = local64_xchg(&event->hw.prev_count, now);
10695 delta = now - prev;
10696 local64_add(delta, &event->count);
10697}
10698
10699static void task_clock_event_start(struct perf_event *event, int flags)
10700{
10701 local64_set(&event->hw.prev_count, event->ctx->time);
10702 perf_swevent_start_hrtimer(event);
10703}
10704
10705static void task_clock_event_stop(struct perf_event *event, int flags)
10706{
10707 perf_swevent_cancel_hrtimer(event);
10708 task_clock_event_update(event, event->ctx->time);
10709}
10710
10711static int task_clock_event_add(struct perf_event *event, int flags)
10712{
10713 if (flags & PERF_EF_START)
10714 task_clock_event_start(event, flags);
10715 perf_event_update_userpage(event);
10716
10717 return 0;
10718}
10719
10720static void task_clock_event_del(struct perf_event *event, int flags)
10721{
10722 task_clock_event_stop(event, PERF_EF_UPDATE);
10723}
10724
10725static void task_clock_event_read(struct perf_event *event)
10726{
10727 u64 now = perf_clock();
10728 u64 delta = now - event->ctx->timestamp;
10729 u64 time = event->ctx->time + delta;
10730
10731 task_clock_event_update(event, time);
10732}
10733
10734static int task_clock_event_init(struct perf_event *event)
10735{
10736 if (event->attr.type != PERF_TYPE_SOFTWARE)
10737 return -ENOENT;
10738
10739 if (event->attr.config != PERF_COUNT_SW_TASK_CLOCK)
10740 return -ENOENT;
10741
10742
10743
10744
10745 if (has_branch_stack(event))
10746 return -EOPNOTSUPP;
10747
10748 perf_swevent_init_hrtimer(event);
10749
10750 return 0;
10751}
10752
10753static struct pmu perf_task_clock = {
10754 .task_ctx_nr = perf_sw_context,
10755
10756 .capabilities = PERF_PMU_CAP_NO_NMI,
10757
10758 .event_init = task_clock_event_init,
10759 .add = task_clock_event_add,
10760 .del = task_clock_event_del,
10761 .start = task_clock_event_start,
10762 .stop = task_clock_event_stop,
10763 .read = task_clock_event_read,
10764};
10765
10766static void perf_pmu_nop_void(struct pmu *pmu)
10767{
10768}
10769
10770static void perf_pmu_nop_txn(struct pmu *pmu, unsigned int flags)
10771{
10772}
10773
10774static int perf_pmu_nop_int(struct pmu *pmu)
10775{
10776 return 0;
10777}
10778
10779static int perf_event_nop_int(struct perf_event *event, u64 value)
10780{
10781 return 0;
10782}
10783
10784static DEFINE_PER_CPU(unsigned int, nop_txn_flags);
10785
10786static void perf_pmu_start_txn(struct pmu *pmu, unsigned int flags)
10787{
10788 __this_cpu_write(nop_txn_flags, flags);
10789
10790 if (flags & ~PERF_PMU_TXN_ADD)
10791 return;
10792
10793 perf_pmu_disable(pmu);
10794}
10795
10796static int perf_pmu_commit_txn(struct pmu *pmu)
10797{
10798 unsigned int flags = __this_cpu_read(nop_txn_flags);
10799
10800 __this_cpu_write(nop_txn_flags, 0);
10801
10802 if (flags & ~PERF_PMU_TXN_ADD)
10803 return 0;
10804
10805 perf_pmu_enable(pmu);
10806 return 0;
10807}
10808
10809static void perf_pmu_cancel_txn(struct pmu *pmu)
10810{
10811 unsigned int flags = __this_cpu_read(nop_txn_flags);
10812
10813 __this_cpu_write(nop_txn_flags, 0);
10814
10815 if (flags & ~PERF_PMU_TXN_ADD)
10816 return;
10817
10818 perf_pmu_enable(pmu);
10819}
10820
10821static int perf_event_idx_default(struct perf_event *event)
10822{
10823 return 0;
10824}
10825
10826
10827
10828
10829
10830static struct perf_cpu_context __percpu *find_pmu_context(int ctxn)
10831{
10832 struct pmu *pmu;
10833
10834 if (ctxn < 0)
10835 return NULL;
10836
10837 list_for_each_entry(pmu, &pmus, entry) {
10838 if (pmu->task_ctx_nr == ctxn)
10839 return pmu->pmu_cpu_context;
10840 }
10841
10842 return NULL;
10843}
10844
10845static void free_pmu_context(struct pmu *pmu)
10846{
10847
10848
10849
10850
10851
10852 if (pmu->task_ctx_nr > perf_invalid_context)
10853 return;
10854
10855 free_percpu(pmu->pmu_cpu_context);
10856}
10857
10858
10859
10860
10861static ssize_t nr_addr_filters_show(struct device *dev,
10862 struct device_attribute *attr,
10863 char *page)
10864{
10865 struct pmu *pmu = dev_get_drvdata(dev);
10866
10867 return snprintf(page, PAGE_SIZE - 1, "%d\n", pmu->nr_addr_filters);
10868}
10869DEVICE_ATTR_RO(nr_addr_filters);
10870
10871static struct idr pmu_idr;
10872
10873static ssize_t
10874type_show(struct device *dev, struct device_attribute *attr, char *page)
10875{
10876 struct pmu *pmu = dev_get_drvdata(dev);
10877
10878 return snprintf(page, PAGE_SIZE-1, "%d\n", pmu->type);
10879}
10880static DEVICE_ATTR_RO(type);
10881
10882static ssize_t
10883perf_event_mux_interval_ms_show(struct device *dev,
10884 struct device_attribute *attr,
10885 char *page)
10886{
10887 struct pmu *pmu = dev_get_drvdata(dev);
10888
10889 return snprintf(page, PAGE_SIZE-1, "%d\n", pmu->hrtimer_interval_ms);
10890}
10891
10892static DEFINE_MUTEX(mux_interval_mutex);
10893
10894static ssize_t
10895perf_event_mux_interval_ms_store(struct device *dev,
10896 struct device_attribute *attr,
10897 const char *buf, size_t count)
10898{
10899 struct pmu *pmu = dev_get_drvdata(dev);
10900 int timer, cpu, ret;
10901
10902 ret = kstrtoint(buf, 0, &timer);
10903 if (ret)
10904 return ret;
10905
10906 if (timer < 1)
10907 return -EINVAL;
10908
10909
10910 if (timer == pmu->hrtimer_interval_ms)
10911 return count;
10912
10913 mutex_lock(&mux_interval_mutex);
10914 pmu->hrtimer_interval_ms = timer;
10915
10916
10917 cpus_read_lock();
10918 for_each_online_cpu(cpu) {
10919 struct perf_cpu_context *cpuctx;
10920 cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu);
10921 cpuctx->hrtimer_interval = ns_to_ktime(NSEC_PER_MSEC * timer);
10922
10923 cpu_function_call(cpu,
10924 (remote_function_f)perf_mux_hrtimer_restart, cpuctx);
10925 }
10926 cpus_read_unlock();
10927 mutex_unlock(&mux_interval_mutex);
10928
10929 return count;
10930}
10931static DEVICE_ATTR_RW(perf_event_mux_interval_ms);
10932
10933static struct attribute *pmu_dev_attrs[] = {
10934 &dev_attr_type.attr,
10935 &dev_attr_perf_event_mux_interval_ms.attr,
10936 NULL,
10937};
10938ATTRIBUTE_GROUPS(pmu_dev);
10939
10940static int pmu_bus_running;
10941static struct bus_type pmu_bus = {
10942 .name = "event_source",
10943 .dev_groups = pmu_dev_groups,
10944};
10945
10946static void pmu_dev_release(struct device *dev)
10947{
10948 kfree(dev);
10949}
10950
10951static int pmu_dev_alloc(struct pmu *pmu)
10952{
10953 int ret = -ENOMEM;
10954
10955 pmu->dev = kzalloc(sizeof(struct device), GFP_KERNEL);
10956 if (!pmu->dev)
10957 goto out;
10958
10959 pmu->dev->groups = pmu->attr_groups;
10960 device_initialize(pmu->dev);
10961 ret = dev_set_name(pmu->dev, "%s", pmu->name);
10962 if (ret)
10963 goto free_dev;
10964
10965 dev_set_drvdata(pmu->dev, pmu);
10966 pmu->dev->bus = &pmu_bus;
10967 pmu->dev->release = pmu_dev_release;
10968 ret = device_add(pmu->dev);
10969 if (ret)
10970 goto free_dev;
10971
10972
10973 if (pmu->nr_addr_filters)
10974 ret = device_create_file(pmu->dev, &dev_attr_nr_addr_filters);
10975
10976 if (ret)
10977 goto del_dev;
10978
10979 if (pmu->attr_update)
10980 ret = sysfs_update_groups(&pmu->dev->kobj, pmu->attr_update);
10981
10982 if (ret)
10983 goto del_dev;
10984
10985out:
10986 return ret;
10987
10988del_dev:
10989 device_del(pmu->dev);
10990
10991free_dev:
10992 put_device(pmu->dev);
10993 goto out;
10994}
10995
10996static struct lock_class_key cpuctx_mutex;
10997static struct lock_class_key cpuctx_lock;
10998
10999int perf_pmu_register(struct pmu *pmu, const char *name, int type)
11000{
11001 int cpu, ret, max = PERF_TYPE_MAX;
11002
11003 mutex_lock(&pmus_lock);
11004 ret = -ENOMEM;
11005 pmu->pmu_disable_count = alloc_percpu(int);
11006 if (!pmu->pmu_disable_count)
11007 goto unlock;
11008
11009 pmu->type = -1;
11010 if (!name)
11011 goto skip_type;
11012 pmu->name = name;
11013
11014 if (type != PERF_TYPE_SOFTWARE) {
11015 if (type >= 0)
11016 max = type;
11017
11018 ret = idr_alloc(&pmu_idr, pmu, max, 0, GFP_KERNEL);
11019 if (ret < 0)
11020 goto free_pdc;
11021
11022 WARN_ON(type >= 0 && ret != type);
11023
11024 type = ret;
11025 }
11026 pmu->type = type;
11027
11028 if (pmu_bus_running) {
11029 ret = pmu_dev_alloc(pmu);
11030 if (ret)
11031 goto free_idr;
11032 }
11033
11034skip_type:
11035 if (pmu->task_ctx_nr == perf_hw_context) {
11036 static int hw_context_taken = 0;
11037
11038
11039
11040
11041
11042
11043 if (WARN_ON_ONCE(hw_context_taken &&
11044 !(pmu->capabilities & PERF_PMU_CAP_HETEROGENEOUS_CPUS)))
11045 pmu->task_ctx_nr = perf_invalid_context;
11046
11047 hw_context_taken = 1;
11048 }
11049
11050 pmu->pmu_cpu_context = find_pmu_context(pmu->task_ctx_nr);
11051 if (pmu->pmu_cpu_context)
11052 goto got_cpu_context;
11053
11054 ret = -ENOMEM;
11055 pmu->pmu_cpu_context = alloc_percpu(struct perf_cpu_context);
11056 if (!pmu->pmu_cpu_context)
11057 goto free_dev;
11058
11059 for_each_possible_cpu(cpu) {
11060 struct perf_cpu_context *cpuctx;
11061
11062 cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu);
11063 __perf_event_init_context(&cpuctx->ctx);
11064 lockdep_set_class(&cpuctx->ctx.mutex, &cpuctx_mutex);
11065 lockdep_set_class(&cpuctx->ctx.lock, &cpuctx_lock);
11066 cpuctx->ctx.pmu = pmu;
11067 cpuctx->online = cpumask_test_cpu(cpu, perf_online_mask);
11068
11069 __perf_mux_hrtimer_init(cpuctx, cpu);
11070
11071 cpuctx->heap_size = ARRAY_SIZE(cpuctx->heap_default);
11072 cpuctx->heap = cpuctx->heap_default;
11073 }
11074
11075got_cpu_context:
11076 if (!pmu->start_txn) {
11077 if (pmu->pmu_enable) {
11078
11079
11080
11081
11082
11083 pmu->start_txn = perf_pmu_start_txn;
11084 pmu->commit_txn = perf_pmu_commit_txn;
11085 pmu->cancel_txn = perf_pmu_cancel_txn;
11086 } else {
11087 pmu->start_txn = perf_pmu_nop_txn;
11088 pmu->commit_txn = perf_pmu_nop_int;
11089 pmu->cancel_txn = perf_pmu_nop_void;
11090 }
11091 }
11092
11093 if (!pmu->pmu_enable) {
11094 pmu->pmu_enable = perf_pmu_nop_void;
11095 pmu->pmu_disable = perf_pmu_nop_void;
11096 }
11097
11098 if (!pmu->check_period)
11099 pmu->check_period = perf_event_nop_int;
11100
11101 if (!pmu->event_idx)
11102 pmu->event_idx = perf_event_idx_default;
11103
11104
11105
11106
11107
11108
11109 if (type == PERF_TYPE_SOFTWARE || !name)
11110 list_add_rcu(&pmu->entry, &pmus);
11111 else
11112 list_add_tail_rcu(&pmu->entry, &pmus);
11113
11114 atomic_set(&pmu->exclusive_cnt, 0);
11115 ret = 0;
11116unlock:
11117 mutex_unlock(&pmus_lock);
11118
11119 return ret;
11120
11121free_dev:
11122 device_del(pmu->dev);
11123 put_device(pmu->dev);
11124
11125free_idr:
11126 if (pmu->type != PERF_TYPE_SOFTWARE)
11127 idr_remove(&pmu_idr, pmu->type);
11128
11129free_pdc:
11130 free_percpu(pmu->pmu_disable_count);
11131 goto unlock;
11132}
11133EXPORT_SYMBOL_GPL(perf_pmu_register);
11134
11135void perf_pmu_unregister(struct pmu *pmu)
11136{
11137 mutex_lock(&pmus_lock);
11138 list_del_rcu(&pmu->entry);
11139
11140
11141
11142
11143
11144 synchronize_srcu(&pmus_srcu);
11145 synchronize_rcu();
11146
11147 free_percpu(pmu->pmu_disable_count);
11148 if (pmu->type != PERF_TYPE_SOFTWARE)
11149 idr_remove(&pmu_idr, pmu->type);
11150 if (pmu_bus_running) {
11151 if (pmu->nr_addr_filters)
11152 device_remove_file(pmu->dev, &dev_attr_nr_addr_filters);
11153 device_del(pmu->dev);
11154 put_device(pmu->dev);
11155 }
11156 free_pmu_context(pmu);
11157 mutex_unlock(&pmus_lock);
11158}
11159EXPORT_SYMBOL_GPL(perf_pmu_unregister);
11160
11161static inline bool has_extended_regs(struct perf_event *event)
11162{
11163 return (event->attr.sample_regs_user & PERF_REG_EXTENDED_MASK) ||
11164 (event->attr.sample_regs_intr & PERF_REG_EXTENDED_MASK);
11165}
11166
11167static int perf_try_init_event(struct pmu *pmu, struct perf_event *event)
11168{
11169 struct perf_event_context *ctx = NULL;
11170 int ret;
11171
11172 if (!try_module_get(pmu->module))
11173 return -ENODEV;
11174
11175
11176
11177
11178
11179
11180
11181 if (event->group_leader != event && pmu->task_ctx_nr != perf_sw_context) {
11182
11183
11184
11185
11186 ctx = perf_event_ctx_lock_nested(event->group_leader,
11187 SINGLE_DEPTH_NESTING);
11188 BUG_ON(!ctx);
11189 }
11190
11191 event->pmu = pmu;
11192 ret = pmu->event_init(event);
11193
11194 if (ctx)
11195 perf_event_ctx_unlock(event->group_leader, ctx);
11196
11197 if (!ret) {
11198 if (!(pmu->capabilities & PERF_PMU_CAP_EXTENDED_REGS) &&
11199 has_extended_regs(event))
11200 ret = -EOPNOTSUPP;
11201
11202 if (pmu->capabilities & PERF_PMU_CAP_NO_EXCLUDE &&
11203 event_has_any_exclude_flag(event))
11204 ret = -EINVAL;
11205
11206 if (ret && event->destroy)
11207 event->destroy(event);
11208 }
11209
11210 if (ret)
11211 module_put(pmu->module);
11212
11213 return ret;
11214}
11215
11216static struct pmu *perf_init_event(struct perf_event *event)
11217{
11218 bool extended_type = false;
11219 int idx, type, ret;
11220 struct pmu *pmu;
11221
11222 idx = srcu_read_lock(&pmus_srcu);
11223
11224
11225 if (event->parent && event->parent->pmu) {
11226 pmu = event->parent->pmu;
11227 ret = perf_try_init_event(pmu, event);
11228 if (!ret)
11229 goto unlock;
11230 }
11231
11232
11233
11234
11235
11236 type = event->attr.type;
11237 if (type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE) {
11238 type = event->attr.config >> PERF_PMU_TYPE_SHIFT;
11239 if (!type) {
11240 type = PERF_TYPE_RAW;
11241 } else {
11242 extended_type = true;
11243 event->attr.config &= PERF_HW_EVENT_MASK;
11244 }
11245 }
11246
11247again:
11248 rcu_read_lock();
11249 pmu = idr_find(&pmu_idr, type);
11250 rcu_read_unlock();
11251 if (pmu) {
11252 if (event->attr.type != type && type != PERF_TYPE_RAW &&
11253 !(pmu->capabilities & PERF_PMU_CAP_EXTENDED_HW_TYPE))
11254 goto fail;
11255
11256 ret = perf_try_init_event(pmu, event);
11257 if (ret == -ENOENT && event->attr.type != type && !extended_type) {
11258 type = event->attr.type;
11259 goto again;
11260 }
11261
11262 if (ret)
11263 pmu = ERR_PTR(ret);
11264
11265 goto unlock;
11266 }
11267
11268 list_for_each_entry_rcu(pmu, &pmus, entry, lockdep_is_held(&pmus_srcu)) {
11269 ret = perf_try_init_event(pmu, event);
11270 if (!ret)
11271 goto unlock;
11272
11273 if (ret != -ENOENT) {
11274 pmu = ERR_PTR(ret);
11275 goto unlock;
11276 }
11277 }
11278fail:
11279 pmu = ERR_PTR(-ENOENT);
11280unlock:
11281 srcu_read_unlock(&pmus_srcu, idx);
11282
11283 return pmu;
11284}
11285
11286static void attach_sb_event(struct perf_event *event)
11287{
11288 struct pmu_event_list *pel = per_cpu_ptr(&pmu_sb_events, event->cpu);
11289
11290 raw_spin_lock(&pel->lock);
11291 list_add_rcu(&event->sb_list, &pel->list);
11292 raw_spin_unlock(&pel->lock);
11293}
11294
11295
11296
11297
11298
11299
11300
11301
11302static void account_pmu_sb_event(struct perf_event *event)
11303{
11304 if (is_sb_event(event))
11305 attach_sb_event(event);
11306}
11307
11308static void account_event_cpu(struct perf_event *event, int cpu)
11309{
11310 if (event->parent)
11311 return;
11312
11313 if (is_cgroup_event(event))
11314 atomic_inc(&per_cpu(perf_cgroup_events, cpu));
11315}
11316
11317
11318static void account_freq_event_nohz(void)
11319{
11320#ifdef CONFIG_NO_HZ_FULL
11321
11322 spin_lock(&nr_freq_lock);
11323 if (atomic_inc_return(&nr_freq_events) == 1)
11324 tick_nohz_dep_set(TICK_DEP_BIT_PERF_EVENTS);
11325 spin_unlock(&nr_freq_lock);
11326#endif
11327}
11328
11329static void account_freq_event(void)
11330{
11331 if (tick_nohz_full_enabled())
11332 account_freq_event_nohz();
11333 else
11334 atomic_inc(&nr_freq_events);
11335}
11336
11337
11338static void account_event(struct perf_event *event)
11339{
11340 bool inc = false;
11341
11342 if (event->parent)
11343 return;
11344
11345 if (event->attach_state & (PERF_ATTACH_TASK | PERF_ATTACH_SCHED_CB))
11346 inc = true;
11347 if (event->attr.mmap || event->attr.mmap_data)
11348 atomic_inc(&nr_mmap_events);
11349 if (event->attr.build_id)
11350 atomic_inc(&nr_build_id_events);
11351 if (event->attr.comm)
11352 atomic_inc(&nr_comm_events);
11353 if (event->attr.namespaces)
11354 atomic_inc(&nr_namespaces_events);
11355 if (event->attr.cgroup)
11356 atomic_inc(&nr_cgroup_events);
11357 if (event->attr.task)
11358 atomic_inc(&nr_task_events);
11359 if (event->attr.freq)
11360 account_freq_event();
11361 if (event->attr.context_switch) {
11362 atomic_inc(&nr_switch_events);
11363 inc = true;
11364 }
11365 if (has_branch_stack(event))
11366 inc = true;
11367 if (is_cgroup_event(event))
11368 inc = true;
11369 if (event->attr.ksymbol)
11370 atomic_inc(&nr_ksymbol_events);
11371 if (event->attr.bpf_event)
11372 atomic_inc(&nr_bpf_events);
11373 if (event->attr.text_poke)
11374 atomic_inc(&nr_text_poke_events);
11375
11376 if (inc) {
11377
11378
11379
11380
11381
11382 if (atomic_inc_not_zero(&perf_sched_count))
11383 goto enabled;
11384
11385 mutex_lock(&perf_sched_mutex);
11386 if (!atomic_read(&perf_sched_count)) {
11387 static_branch_enable(&perf_sched_events);
11388
11389
11390
11391
11392
11393 synchronize_rcu();
11394 }
11395
11396
11397
11398
11399 atomic_inc(&perf_sched_count);
11400 mutex_unlock(&perf_sched_mutex);
11401 }
11402enabled:
11403
11404 account_event_cpu(event, event->cpu);
11405
11406 account_pmu_sb_event(event);
11407}
11408
11409
11410
11411
11412static struct perf_event *
11413perf_event_alloc(struct perf_event_attr *attr, int cpu,
11414 struct task_struct *task,
11415 struct perf_event *group_leader,
11416 struct perf_event *parent_event,
11417 perf_overflow_handler_t overflow_handler,
11418 void *context, int cgroup_fd)
11419{
11420 struct pmu *pmu;
11421 struct perf_event *event;
11422 struct hw_perf_event *hwc;
11423 long err = -EINVAL;
11424 int node;
11425
11426 if ((unsigned)cpu >= nr_cpu_ids) {
11427 if (!task || cpu != -1)
11428 return ERR_PTR(-EINVAL);
11429 }
11430 if (attr->sigtrap && !task) {
11431
11432 return ERR_PTR(-EINVAL);
11433 }
11434
11435 node = (cpu >= 0) ? cpu_to_node(cpu) : -1;
11436 event = kmem_cache_alloc_node(perf_event_cache, GFP_KERNEL | __GFP_ZERO,
11437 node);
11438 if (!event)
11439 return ERR_PTR(-ENOMEM);
11440
11441
11442
11443
11444
11445 if (!group_leader)
11446 group_leader = event;
11447
11448 mutex_init(&event->child_mutex);
11449 INIT_LIST_HEAD(&event->child_list);
11450
11451 INIT_LIST_HEAD(&event->event_entry);
11452 INIT_LIST_HEAD(&event->sibling_list);
11453 INIT_LIST_HEAD(&event->active_list);
11454 init_event_group(event);
11455 INIT_LIST_HEAD(&event->rb_entry);
11456 INIT_LIST_HEAD(&event->active_entry);
11457 INIT_LIST_HEAD(&event->addr_filters.list);
11458 INIT_HLIST_NODE(&event->hlist_entry);
11459
11460
11461 init_waitqueue_head(&event->waitq);
11462 event->pending_disable = -1;
11463 init_irq_work(&event->pending, perf_pending_event);
11464
11465 mutex_init(&event->mmap_mutex);
11466 raw_spin_lock_init(&event->addr_filters.lock);
11467
11468 atomic_long_set(&event->refcount, 1);
11469 event->cpu = cpu;
11470 event->attr = *attr;
11471 event->group_leader = group_leader;
11472 event->pmu = NULL;
11473 event->oncpu = -1;
11474
11475 event->parent = parent_event;
11476
11477 event->ns = get_pid_ns(task_active_pid_ns(current));
11478 event->id = atomic64_inc_return(&perf_event_id);
11479
11480 event->state = PERF_EVENT_STATE_INACTIVE;
11481
11482 if (event->attr.sigtrap)
11483 atomic_set(&event->event_limit, 1);
11484
11485 if (task) {
11486 event->attach_state = PERF_ATTACH_TASK;
11487
11488
11489
11490
11491
11492 event->hw.target = get_task_struct(task);
11493 }
11494
11495 event->clock = &local_clock;
11496 if (parent_event)
11497 event->clock = parent_event->clock;
11498
11499 if (!overflow_handler && parent_event) {
11500 overflow_handler = parent_event->overflow_handler;
11501 context = parent_event->overflow_handler_context;
11502#if defined(CONFIG_BPF_SYSCALL) && defined(CONFIG_EVENT_TRACING)
11503 if (overflow_handler == bpf_overflow_handler) {
11504 struct bpf_prog *prog = parent_event->prog;
11505
11506 bpf_prog_inc(prog);
11507 event->prog = prog;
11508 event->orig_overflow_handler =
11509 parent_event->orig_overflow_handler;
11510 }
11511#endif
11512 }
11513
11514 if (overflow_handler) {
11515 event->overflow_handler = overflow_handler;
11516 event->overflow_handler_context = context;
11517 } else if (is_write_backward(event)){
11518 event->overflow_handler = perf_event_output_backward;
11519 event->overflow_handler_context = NULL;
11520 } else {
11521 event->overflow_handler = perf_event_output_forward;
11522 event->overflow_handler_context = NULL;
11523 }
11524
11525 perf_event__state_init(event);
11526
11527 pmu = NULL;
11528
11529 hwc = &event->hw;
11530 hwc->sample_period = attr->sample_period;
11531 if (attr->freq && attr->sample_freq)
11532 hwc->sample_period = 1;
11533 hwc->last_period = hwc->sample_period;
11534
11535 local64_set(&hwc->period_left, hwc->sample_period);
11536
11537
11538
11539
11540
11541 if (attr->inherit && (attr->sample_type & PERF_SAMPLE_READ))
11542 goto err_ns;
11543
11544 if (!has_branch_stack(event))
11545 event->attr.branch_sample_type = 0;
11546
11547 pmu = perf_init_event(event);
11548 if (IS_ERR(pmu)) {
11549 err = PTR_ERR(pmu);
11550 goto err_ns;
11551 }
11552
11553
11554
11555
11556
11557 if (pmu->task_ctx_nr == perf_invalid_context && cgroup_fd != -1) {
11558 err = -EINVAL;
11559 goto err_pmu;
11560 }
11561
11562 if (event->attr.aux_output &&
11563 !(pmu->capabilities & PERF_PMU_CAP_AUX_OUTPUT)) {
11564 err = -EOPNOTSUPP;
11565 goto err_pmu;
11566 }
11567
11568 if (cgroup_fd != -1) {
11569 err = perf_cgroup_connect(cgroup_fd, event, attr, group_leader);
11570 if (err)
11571 goto err_pmu;
11572 }
11573
11574 err = exclusive_event_init(event);
11575 if (err)
11576 goto err_pmu;
11577
11578 if (has_addr_filter(event)) {
11579 event->addr_filter_ranges = kcalloc(pmu->nr_addr_filters,
11580 sizeof(struct perf_addr_filter_range),
11581 GFP_KERNEL);
11582 if (!event->addr_filter_ranges) {
11583 err = -ENOMEM;
11584 goto err_per_task;
11585 }
11586
11587
11588
11589
11590
11591 if (event->parent) {
11592 struct perf_addr_filters_head *ifh = perf_event_addr_filters(event);
11593
11594 raw_spin_lock_irq(&ifh->lock);
11595 memcpy(event->addr_filter_ranges,
11596 event->parent->addr_filter_ranges,
11597 pmu->nr_addr_filters * sizeof(struct perf_addr_filter_range));
11598 raw_spin_unlock_irq(&ifh->lock);
11599 }
11600
11601
11602 event->addr_filters_gen = 1;
11603 }
11604
11605 if (!event->parent) {
11606 if (event->attr.sample_type & PERF_SAMPLE_CALLCHAIN) {
11607 err = get_callchain_buffers(attr->sample_max_stack);
11608 if (err)
11609 goto err_addr_filters;
11610 }
11611 }
11612
11613 err = security_perf_event_alloc(event);
11614 if (err)
11615 goto err_callchain_buffer;
11616
11617
11618 account_event(event);
11619
11620 return event;
11621
11622err_callchain_buffer:
11623 if (!event->parent) {
11624 if (event->attr.sample_type & PERF_SAMPLE_CALLCHAIN)
11625 put_callchain_buffers();
11626 }
11627err_addr_filters:
11628 kfree(event->addr_filter_ranges);
11629
11630err_per_task:
11631 exclusive_event_destroy(event);
11632
11633err_pmu:
11634 if (is_cgroup_event(event))
11635 perf_detach_cgroup(event);
11636 if (event->destroy)
11637 event->destroy(event);
11638 module_put(pmu->module);
11639err_ns:
11640 if (event->ns)
11641 put_pid_ns(event->ns);
11642 if (event->hw.target)
11643 put_task_struct(event->hw.target);
11644 kmem_cache_free(perf_event_cache, event);
11645
11646 return ERR_PTR(err);
11647}
11648
11649static int perf_copy_attr(struct perf_event_attr __user *uattr,
11650 struct perf_event_attr *attr)
11651{
11652 u32 size;
11653 int ret;
11654
11655
11656 memset(attr, 0, sizeof(*attr));
11657
11658 ret = get_user(size, &uattr->size);
11659 if (ret)
11660 return ret;
11661
11662
11663 if (!size)
11664 size = PERF_ATTR_SIZE_VER0;
11665 if (size < PERF_ATTR_SIZE_VER0 || size > PAGE_SIZE)
11666 goto err_size;
11667
11668 ret = copy_struct_from_user(attr, sizeof(*attr), uattr, size);
11669 if (ret) {
11670 if (ret == -E2BIG)
11671 goto err_size;
11672 return ret;
11673 }
11674
11675 attr->size = size;
11676
11677 if (attr->__reserved_1 || attr->__reserved_2 || attr->__reserved_3)
11678 return -EINVAL;
11679
11680 if (attr->sample_type & ~(PERF_SAMPLE_MAX-1))
11681 return -EINVAL;
11682
11683 if (attr->read_format & ~(PERF_FORMAT_MAX-1))
11684 return -EINVAL;
11685
11686 if (attr->sample_type & PERF_SAMPLE_BRANCH_STACK) {
11687 u64 mask = attr->branch_sample_type;
11688
11689
11690 if (mask & ~(PERF_SAMPLE_BRANCH_MAX-1))
11691 return -EINVAL;
11692
11693
11694 if (!(mask & ~PERF_SAMPLE_BRANCH_PLM_ALL))
11695 return -EINVAL;
11696
11697
11698 if (!(mask & PERF_SAMPLE_BRANCH_PLM_ALL)) {
11699
11700
11701 if (!attr->exclude_kernel)
11702 mask |= PERF_SAMPLE_BRANCH_KERNEL;
11703
11704 if (!attr->exclude_user)
11705 mask |= PERF_SAMPLE_BRANCH_USER;
11706
11707 if (!attr->exclude_hv)
11708 mask |= PERF_SAMPLE_BRANCH_HV;
11709
11710
11711
11712 attr->branch_sample_type = mask;
11713 }
11714
11715 if (mask & PERF_SAMPLE_BRANCH_PERM_PLM) {
11716 ret = perf_allow_kernel(attr);
11717 if (ret)
11718 return ret;
11719 }
11720 }
11721
11722 if (attr->sample_type & PERF_SAMPLE_REGS_USER) {
11723 ret = perf_reg_validate(attr->sample_regs_user);
11724 if (ret)
11725 return ret;
11726 }
11727
11728 if (attr->sample_type & PERF_SAMPLE_STACK_USER) {
11729 if (!arch_perf_have_user_stack_dump())
11730 return -ENOSYS;
11731
11732
11733
11734
11735
11736
11737 if (attr->sample_stack_user >= USHRT_MAX)
11738 return -EINVAL;
11739 else if (!IS_ALIGNED(attr->sample_stack_user, sizeof(u64)))
11740 return -EINVAL;
11741 }
11742
11743 if (!attr->sample_max_stack)
11744 attr->sample_max_stack = sysctl_perf_event_max_stack;
11745
11746 if (attr->sample_type & PERF_SAMPLE_REGS_INTR)
11747 ret = perf_reg_validate(attr->sample_regs_intr);
11748
11749#ifndef CONFIG_CGROUP_PERF
11750 if (attr->sample_type & PERF_SAMPLE_CGROUP)
11751 return -EINVAL;
11752#endif
11753 if ((attr->sample_type & PERF_SAMPLE_WEIGHT) &&
11754 (attr->sample_type & PERF_SAMPLE_WEIGHT_STRUCT))
11755 return -EINVAL;
11756
11757 if (!attr->inherit && attr->inherit_thread)
11758 return -EINVAL;
11759
11760 if (attr->remove_on_exec && attr->enable_on_exec)
11761 return -EINVAL;
11762
11763 if (attr->sigtrap && !attr->remove_on_exec)
11764 return -EINVAL;
11765
11766out:
11767 return ret;
11768
11769err_size:
11770 put_user(sizeof(*attr), &uattr->size);
11771 ret = -E2BIG;
11772 goto out;
11773}
11774
11775static int
11776perf_event_set_output(struct perf_event *event, struct perf_event *output_event)
11777{
11778 struct perf_buffer *rb = NULL;
11779 int ret = -EINVAL;
11780
11781 if (!output_event)
11782 goto set;
11783
11784
11785 if (event == output_event)
11786 goto out;
11787
11788
11789
11790
11791 if (output_event->cpu != event->cpu)
11792 goto out;
11793
11794
11795
11796
11797 if (output_event->cpu == -1 && output_event->ctx != event->ctx)
11798 goto out;
11799
11800
11801
11802
11803 if (output_event->clock != event->clock)
11804 goto out;
11805
11806
11807
11808
11809
11810 if (is_write_backward(output_event) != is_write_backward(event))
11811 goto out;
11812
11813
11814
11815
11816 if (has_aux(event) && has_aux(output_event) &&
11817 event->pmu != output_event->pmu)
11818 goto out;
11819
11820set:
11821 mutex_lock(&event->mmap_mutex);
11822
11823 if (atomic_read(&event->mmap_count))
11824 goto unlock;
11825
11826 if (output_event) {
11827
11828 rb = ring_buffer_get(output_event);
11829 if (!rb)
11830 goto unlock;
11831 }
11832
11833 ring_buffer_attach(event, rb);
11834
11835 ret = 0;
11836unlock:
11837 mutex_unlock(&event->mmap_mutex);
11838
11839out:
11840 return ret;
11841}
11842
11843static void mutex_lock_double(struct mutex *a, struct mutex *b)
11844{
11845 if (b < a)
11846 swap(a, b);
11847
11848 mutex_lock(a);
11849 mutex_lock_nested(b, SINGLE_DEPTH_NESTING);
11850}
11851
11852static int perf_event_set_clock(struct perf_event *event, clockid_t clk_id)
11853{
11854 bool nmi_safe = false;
11855
11856 switch (clk_id) {
11857 case CLOCK_MONOTONIC:
11858 event->clock = &ktime_get_mono_fast_ns;
11859 nmi_safe = true;
11860 break;
11861
11862 case CLOCK_MONOTONIC_RAW:
11863 event->clock = &ktime_get_raw_fast_ns;
11864 nmi_safe = true;
11865 break;
11866
11867 case CLOCK_REALTIME:
11868 event->clock = &ktime_get_real_ns;
11869 break;
11870
11871 case CLOCK_BOOTTIME:
11872 event->clock = &ktime_get_boottime_ns;
11873 break;
11874
11875 case CLOCK_TAI:
11876 event->clock = &ktime_get_clocktai_ns;
11877 break;
11878
11879 default:
11880 return -EINVAL;
11881 }
11882
11883 if (!nmi_safe && !(event->pmu->capabilities & PERF_PMU_CAP_NO_NMI))
11884 return -EINVAL;
11885
11886 return 0;
11887}
11888
11889
11890
11891
11892
11893static struct perf_event_context *
11894__perf_event_ctx_lock_double(struct perf_event *group_leader,
11895 struct perf_event_context *ctx)
11896{
11897 struct perf_event_context *gctx;
11898
11899again:
11900 rcu_read_lock();
11901 gctx = READ_ONCE(group_leader->ctx);
11902 if (!refcount_inc_not_zero(&gctx->refcount)) {
11903 rcu_read_unlock();
11904 goto again;
11905 }
11906 rcu_read_unlock();
11907
11908 mutex_lock_double(&gctx->mutex, &ctx->mutex);
11909
11910 if (group_leader->ctx != gctx) {
11911 mutex_unlock(&ctx->mutex);
11912 mutex_unlock(&gctx->mutex);
11913 put_ctx(gctx);
11914 goto again;
11915 }
11916
11917 return gctx;
11918}
11919
11920static bool
11921perf_check_permission(struct perf_event_attr *attr, struct task_struct *task)
11922{
11923 unsigned int ptrace_mode = PTRACE_MODE_READ_REALCREDS;
11924 bool is_capable = perfmon_capable();
11925
11926 if (attr->sigtrap) {
11927
11928
11929
11930
11931 rcu_read_lock();
11932 is_capable &= ns_capable(__task_cred(task)->user_ns, CAP_KILL);
11933 rcu_read_unlock();
11934
11935
11936
11937
11938
11939
11940 ptrace_mode = PTRACE_MODE_ATTACH_REALCREDS;
11941 }
11942
11943
11944
11945
11946
11947
11948 return is_capable || ptrace_may_access(task, ptrace_mode);
11949}
11950
11951
11952
11953
11954
11955
11956
11957
11958
11959
11960SYSCALL_DEFINE5(perf_event_open,
11961 struct perf_event_attr __user *, attr_uptr,
11962 pid_t, pid, int, cpu, int, group_fd, unsigned long, flags)
11963{
11964 struct perf_event *group_leader = NULL, *output_event = NULL;
11965 struct perf_event *event, *sibling;
11966 struct perf_event_attr attr;
11967 struct perf_event_context *ctx, *gctx;
11968 struct file *event_file = NULL;
11969 struct fd group = {NULL, 0};
11970 struct task_struct *task = NULL;
11971 struct pmu *pmu;
11972 int event_fd;
11973 int move_group = 0;
11974 int err;
11975 int f_flags = O_RDWR;
11976 int cgroup_fd = -1;
11977
11978
11979 if (flags & ~PERF_FLAG_ALL)
11980 return -EINVAL;
11981
11982
11983 err = security_perf_event_open(&attr, PERF_SECURITY_OPEN);
11984 if (err)
11985 return err;
11986
11987 err = perf_copy_attr(attr_uptr, &attr);
11988 if (err)
11989 return err;
11990
11991 if (!attr.exclude_kernel) {
11992 err = perf_allow_kernel(&attr);
11993 if (err)
11994 return err;
11995 }
11996
11997 if (attr.namespaces) {
11998 if (!perfmon_capable())
11999 return -EACCES;
12000 }
12001
12002 if (attr.freq) {
12003 if (attr.sample_freq > sysctl_perf_event_sample_rate)
12004 return -EINVAL;
12005 } else {
12006 if (attr.sample_period & (1ULL << 63))
12007 return -EINVAL;
12008 }
12009
12010
12011 if ((attr.sample_type & PERF_SAMPLE_PHYS_ADDR)) {
12012 err = perf_allow_kernel(&attr);
12013 if (err)
12014 return err;
12015 }
12016
12017
12018 if (attr.sample_type & PERF_SAMPLE_REGS_INTR) {
12019 err = security_locked_down(LOCKDOWN_PERF);
12020 if (err)
12021 return err;
12022 }
12023
12024
12025
12026
12027
12028
12029
12030 if ((flags & PERF_FLAG_PID_CGROUP) && (pid == -1 || cpu == -1))
12031 return -EINVAL;
12032
12033 if (flags & PERF_FLAG_FD_CLOEXEC)
12034 f_flags |= O_CLOEXEC;
12035
12036 event_fd = get_unused_fd_flags(f_flags);
12037 if (event_fd < 0)
12038 return event_fd;
12039
12040 if (group_fd != -1) {
12041 err = perf_fget_light(group_fd, &group);
12042 if (err)
12043 goto err_fd;
12044 group_leader = group.file->private_data;
12045 if (flags & PERF_FLAG_FD_OUTPUT)
12046 output_event = group_leader;
12047 if (flags & PERF_FLAG_FD_NO_GROUP)
12048 group_leader = NULL;
12049 }
12050
12051 if (pid != -1 && !(flags & PERF_FLAG_PID_CGROUP)) {
12052 task = find_lively_task_by_vpid(pid);
12053 if (IS_ERR(task)) {
12054 err = PTR_ERR(task);
12055 goto err_group_fd;
12056 }
12057 }
12058
12059 if (task && group_leader &&
12060 group_leader->attr.inherit != attr.inherit) {
12061 err = -EINVAL;
12062 goto err_task;
12063 }
12064
12065 if (flags & PERF_FLAG_PID_CGROUP)
12066 cgroup_fd = pid;
12067
12068 event = perf_event_alloc(&attr, cpu, task, group_leader, NULL,
12069 NULL, NULL, cgroup_fd);
12070 if (IS_ERR(event)) {
12071 err = PTR_ERR(event);
12072 goto err_task;
12073 }
12074
12075 if (is_sampling_event(event)) {
12076 if (event->pmu->capabilities & PERF_PMU_CAP_NO_INTERRUPT) {
12077 err = -EOPNOTSUPP;
12078 goto err_alloc;
12079 }
12080 }
12081
12082
12083
12084
12085
12086 pmu = event->pmu;
12087
12088 if (attr.use_clockid) {
12089 err = perf_event_set_clock(event, attr.clockid);
12090 if (err)
12091 goto err_alloc;
12092 }
12093
12094 if (pmu->task_ctx_nr == perf_sw_context)
12095 event->event_caps |= PERF_EV_CAP_SOFTWARE;
12096
12097 if (group_leader) {
12098 if (is_software_event(event) &&
12099 !in_software_context(group_leader)) {
12100
12101
12102
12103
12104
12105
12106
12107
12108 pmu = group_leader->ctx->pmu;
12109 } else if (!is_software_event(event) &&
12110 is_software_event(group_leader) &&
12111 (group_leader->group_caps & PERF_EV_CAP_SOFTWARE)) {
12112
12113
12114
12115
12116
12117 move_group = 1;
12118 }
12119 }
12120
12121
12122
12123
12124 ctx = find_get_context(pmu, task, event);
12125 if (IS_ERR(ctx)) {
12126 err = PTR_ERR(ctx);
12127 goto err_alloc;
12128 }
12129
12130
12131
12132
12133 if (group_leader) {
12134 err = -EINVAL;
12135
12136
12137
12138
12139
12140 if (group_leader->group_leader != group_leader)
12141 goto err_context;
12142
12143
12144 if (group_leader->clock != event->clock)
12145 goto err_context;
12146
12147
12148
12149
12150
12151
12152 if (group_leader->cpu != event->cpu)
12153 goto err_context;
12154
12155
12156
12157
12158
12159 if (group_leader->ctx->task != ctx->task)
12160 goto err_context;
12161
12162
12163
12164
12165
12166
12167 if (!move_group && group_leader->ctx != ctx)
12168 goto err_context;
12169
12170
12171
12172
12173 if (attr.exclusive || attr.pinned)
12174 goto err_context;
12175 }
12176
12177 if (output_event) {
12178 err = perf_event_set_output(event, output_event);
12179 if (err)
12180 goto err_context;
12181 }
12182
12183 event_file = anon_inode_getfile("[perf_event]", &perf_fops, event,
12184 f_flags);
12185 if (IS_ERR(event_file)) {
12186 err = PTR_ERR(event_file);
12187 event_file = NULL;
12188 goto err_context;
12189 }
12190
12191 if (task) {
12192 err = down_read_interruptible(&task->signal->exec_update_lock);
12193 if (err)
12194 goto err_file;
12195
12196
12197
12198
12199
12200
12201
12202 err = -EACCES;
12203 if (!perf_check_permission(&attr, task))
12204 goto err_cred;
12205 }
12206
12207 if (move_group) {
12208 gctx = __perf_event_ctx_lock_double(group_leader, ctx);
12209
12210 if (gctx->task == TASK_TOMBSTONE) {
12211 err = -ESRCH;
12212 goto err_locked;
12213 }
12214
12215
12216
12217
12218
12219 if (!(group_leader->group_caps & PERF_EV_CAP_SOFTWARE)) {
12220
12221
12222
12223
12224
12225 if (gctx != ctx) {
12226 err = -EINVAL;
12227 goto err_locked;
12228 } else {
12229 perf_event_ctx_unlock(group_leader, gctx);
12230 move_group = 0;
12231 }
12232 }
12233
12234
12235
12236
12237 err = -EBUSY;
12238 if (!exclusive_event_installable(group_leader, ctx))
12239 goto err_locked;
12240
12241 for_each_sibling_event(sibling, group_leader) {
12242 if (!exclusive_event_installable(sibling, ctx))
12243 goto err_locked;
12244 }
12245 } else {
12246 mutex_lock(&ctx->mutex);
12247 }
12248
12249 if (ctx->task == TASK_TOMBSTONE) {
12250 err = -ESRCH;
12251 goto err_locked;
12252 }
12253
12254 if (!perf_event_validate_size(event)) {
12255 err = -E2BIG;
12256 goto err_locked;
12257 }
12258
12259 if (!task) {
12260
12261
12262
12263
12264
12265
12266 struct perf_cpu_context *cpuctx =
12267 container_of(ctx, struct perf_cpu_context, ctx);
12268
12269 if (!cpuctx->online) {
12270 err = -ENODEV;
12271 goto err_locked;
12272 }
12273 }
12274
12275 if (perf_need_aux_event(event) && !perf_get_aux_event(event, group_leader)) {
12276 err = -EINVAL;
12277 goto err_locked;
12278 }
12279
12280
12281
12282
12283
12284 if (!exclusive_event_installable(event, ctx)) {
12285 err = -EBUSY;
12286 goto err_locked;
12287 }
12288
12289 WARN_ON_ONCE(ctx->parent_ctx);
12290
12291
12292
12293
12294
12295
12296 if (move_group) {
12297
12298
12299
12300
12301 perf_remove_from_context(group_leader, 0);
12302 put_ctx(gctx);
12303
12304 for_each_sibling_event(sibling, group_leader) {
12305 perf_remove_from_context(sibling, 0);
12306 put_ctx(gctx);
12307 }
12308
12309
12310
12311
12312
12313 synchronize_rcu();
12314
12315
12316
12317
12318
12319
12320
12321
12322
12323
12324
12325 for_each_sibling_event(sibling, group_leader) {
12326 perf_event__state_init(sibling);
12327 perf_install_in_context(ctx, sibling, sibling->cpu);
12328 get_ctx(ctx);
12329 }
12330
12331
12332
12333
12334
12335
12336 perf_event__state_init(group_leader);
12337 perf_install_in_context(ctx, group_leader, group_leader->cpu);
12338 get_ctx(ctx);
12339 }
12340
12341
12342
12343
12344
12345
12346
12347 perf_event__header_size(event);
12348 perf_event__id_header_size(event);
12349
12350 event->owner = current;
12351
12352 perf_install_in_context(ctx, event, event->cpu);
12353 perf_unpin_context(ctx);
12354
12355 if (move_group)
12356 perf_event_ctx_unlock(group_leader, gctx);
12357 mutex_unlock(&ctx->mutex);
12358
12359 if (task) {
12360 up_read(&task->signal->exec_update_lock);
12361 put_task_struct(task);
12362 }
12363
12364 mutex_lock(¤t->perf_event_mutex);
12365 list_add_tail(&event->owner_entry, ¤t->perf_event_list);
12366 mutex_unlock(¤t->perf_event_mutex);
12367
12368
12369
12370
12371
12372
12373
12374 fdput(group);
12375 fd_install(event_fd, event_file);
12376 return event_fd;
12377
12378err_locked:
12379 if (move_group)
12380 perf_event_ctx_unlock(group_leader, gctx);
12381 mutex_unlock(&ctx->mutex);
12382err_cred:
12383 if (task)
12384 up_read(&task->signal->exec_update_lock);
12385err_file:
12386 fput(event_file);
12387err_context:
12388 perf_unpin_context(ctx);
12389 put_ctx(ctx);
12390err_alloc:
12391
12392
12393
12394
12395 if (!event_file)
12396 free_event(event);
12397err_task:
12398 if (task)
12399 put_task_struct(task);
12400err_group_fd:
12401 fdput(group);
12402err_fd:
12403 put_unused_fd(event_fd);
12404 return err;
12405}
12406
12407
12408
12409
12410
12411
12412
12413
12414
12415
12416struct perf_event *
12417perf_event_create_kernel_counter(struct perf_event_attr *attr, int cpu,
12418 struct task_struct *task,
12419 perf_overflow_handler_t overflow_handler,
12420 void *context)
12421{
12422 struct perf_event_context *ctx;
12423 struct perf_event *event;
12424 int err;
12425
12426
12427
12428
12429
12430 if (attr->aux_output)
12431 return ERR_PTR(-EINVAL);
12432
12433 event = perf_event_alloc(attr, cpu, task, NULL, NULL,
12434 overflow_handler, context, -1);
12435 if (IS_ERR(event)) {
12436 err = PTR_ERR(event);
12437 goto err;
12438 }
12439
12440
12441 event->owner = TASK_TOMBSTONE;
12442
12443
12444
12445
12446 ctx = find_get_context(event->pmu, task, event);
12447 if (IS_ERR(ctx)) {
12448 err = PTR_ERR(ctx);
12449 goto err_free;
12450 }
12451
12452 WARN_ON_ONCE(ctx->parent_ctx);
12453 mutex_lock(&ctx->mutex);
12454 if (ctx->task == TASK_TOMBSTONE) {
12455 err = -ESRCH;
12456 goto err_unlock;
12457 }
12458
12459 if (!task) {
12460
12461
12462
12463
12464
12465
12466 struct perf_cpu_context *cpuctx =
12467 container_of(ctx, struct perf_cpu_context, ctx);
12468 if (!cpuctx->online) {
12469 err = -ENODEV;
12470 goto err_unlock;
12471 }
12472 }
12473
12474 if (!exclusive_event_installable(event, ctx)) {
12475 err = -EBUSY;
12476 goto err_unlock;
12477 }
12478
12479 perf_install_in_context(ctx, event, event->cpu);
12480 perf_unpin_context(ctx);
12481 mutex_unlock(&ctx->mutex);
12482
12483 return event;
12484
12485err_unlock:
12486 mutex_unlock(&ctx->mutex);
12487 perf_unpin_context(ctx);
12488 put_ctx(ctx);
12489err_free:
12490 free_event(event);
12491err:
12492 return ERR_PTR(err);
12493}
12494EXPORT_SYMBOL_GPL(perf_event_create_kernel_counter);
12495
12496void perf_pmu_migrate_context(struct pmu *pmu, int src_cpu, int dst_cpu)
12497{
12498 struct perf_event_context *src_ctx;
12499 struct perf_event_context *dst_ctx;
12500 struct perf_event *event, *tmp;
12501 LIST_HEAD(events);
12502
12503 src_ctx = &per_cpu_ptr(pmu->pmu_cpu_context, src_cpu)->ctx;
12504 dst_ctx = &per_cpu_ptr(pmu->pmu_cpu_context, dst_cpu)->ctx;
12505
12506
12507
12508
12509
12510 mutex_lock_double(&src_ctx->mutex, &dst_ctx->mutex);
12511 list_for_each_entry_safe(event, tmp, &src_ctx->event_list,
12512 event_entry) {
12513 perf_remove_from_context(event, 0);
12514 unaccount_event_cpu(event, src_cpu);
12515 put_ctx(src_ctx);
12516 list_add(&event->migrate_entry, &events);
12517 }
12518
12519
12520
12521
12522 synchronize_rcu();
12523
12524
12525
12526
12527
12528
12529
12530
12531
12532 list_for_each_entry_safe(event, tmp, &events, migrate_entry) {
12533 if (event->group_leader == event)
12534 continue;
12535
12536 list_del(&event->migrate_entry);
12537 if (event->state >= PERF_EVENT_STATE_OFF)
12538 event->state = PERF_EVENT_STATE_INACTIVE;
12539 account_event_cpu(event, dst_cpu);
12540 perf_install_in_context(dst_ctx, event, dst_cpu);
12541 get_ctx(dst_ctx);
12542 }
12543
12544
12545
12546
12547
12548 list_for_each_entry_safe(event, tmp, &events, migrate_entry) {
12549 list_del(&event->migrate_entry);
12550 if (event->state >= PERF_EVENT_STATE_OFF)
12551 event->state = PERF_EVENT_STATE_INACTIVE;
12552 account_event_cpu(event, dst_cpu);
12553 perf_install_in_context(dst_ctx, event, dst_cpu);
12554 get_ctx(dst_ctx);
12555 }
12556 mutex_unlock(&dst_ctx->mutex);
12557 mutex_unlock(&src_ctx->mutex);
12558}
12559EXPORT_SYMBOL_GPL(perf_pmu_migrate_context);
12560
12561static void sync_child_event(struct perf_event *child_event)
12562{
12563 struct perf_event *parent_event = child_event->parent;
12564 u64 child_val;
12565
12566 if (child_event->attr.inherit_stat) {
12567 struct task_struct *task = child_event->ctx->task;
12568
12569 if (task && task != TASK_TOMBSTONE)
12570 perf_event_read_event(child_event, task);
12571 }
12572
12573 child_val = perf_event_count(child_event);
12574
12575
12576
12577
12578 atomic64_add(child_val, &parent_event->child_count);
12579 atomic64_add(child_event->total_time_enabled,
12580 &parent_event->child_total_time_enabled);
12581 atomic64_add(child_event->total_time_running,
12582 &parent_event->child_total_time_running);
12583}
12584
12585static void
12586perf_event_exit_event(struct perf_event *event, struct perf_event_context *ctx)
12587{
12588 struct perf_event *parent_event = event->parent;
12589 unsigned long detach_flags = 0;
12590
12591 if (parent_event) {
12592
12593
12594
12595
12596
12597
12598
12599
12600
12601
12602
12603
12604 detach_flags = DETACH_GROUP | DETACH_CHILD;
12605 mutex_lock(&parent_event->child_mutex);
12606 }
12607
12608 perf_remove_from_context(event, detach_flags);
12609
12610 raw_spin_lock_irq(&ctx->lock);
12611 if (event->state > PERF_EVENT_STATE_EXIT)
12612 perf_event_set_state(event, PERF_EVENT_STATE_EXIT);
12613 raw_spin_unlock_irq(&ctx->lock);
12614
12615
12616
12617
12618 if (parent_event) {
12619 mutex_unlock(&parent_event->child_mutex);
12620
12621
12622
12623 perf_event_wakeup(parent_event);
12624 free_event(event);
12625 put_event(parent_event);
12626 return;
12627 }
12628
12629
12630
12631
12632 perf_event_wakeup(event);
12633}
12634
12635static void perf_event_exit_task_context(struct task_struct *child, int ctxn)
12636{
12637 struct perf_event_context *child_ctx, *clone_ctx = NULL;
12638 struct perf_event *child_event, *next;
12639
12640 WARN_ON_ONCE(child != current);
12641
12642 child_ctx = perf_pin_task_context(child, ctxn);
12643 if (!child_ctx)
12644 return;
12645
12646
12647
12648
12649
12650
12651
12652
12653
12654
12655
12656 mutex_lock(&child_ctx->mutex);
12657
12658
12659
12660
12661
12662
12663 raw_spin_lock_irq(&child_ctx->lock);
12664 task_ctx_sched_out(__get_cpu_context(child_ctx), child_ctx, EVENT_ALL);
12665
12666
12667
12668
12669
12670 RCU_INIT_POINTER(child->perf_event_ctxp[ctxn], NULL);
12671 put_ctx(child_ctx);
12672 WRITE_ONCE(child_ctx->task, TASK_TOMBSTONE);
12673 put_task_struct(current);
12674
12675 clone_ctx = unclone_ctx(child_ctx);
12676 raw_spin_unlock_irq(&child_ctx->lock);
12677
12678 if (clone_ctx)
12679 put_ctx(clone_ctx);
12680
12681
12682
12683
12684
12685
12686 perf_event_task(child, child_ctx, 0);
12687
12688 list_for_each_entry_safe(child_event, next, &child_ctx->event_list, event_entry)
12689 perf_event_exit_event(child_event, child_ctx);
12690
12691 mutex_unlock(&child_ctx->mutex);
12692
12693 put_ctx(child_ctx);
12694}
12695
12696
12697
12698
12699
12700
12701
12702void perf_event_exit_task(struct task_struct *child)
12703{
12704 struct perf_event *event, *tmp;
12705 int ctxn;
12706
12707 mutex_lock(&child->perf_event_mutex);
12708 list_for_each_entry_safe(event, tmp, &child->perf_event_list,
12709 owner_entry) {
12710 list_del_init(&event->owner_entry);
12711
12712
12713
12714
12715
12716
12717 smp_store_release(&event->owner, NULL);
12718 }
12719 mutex_unlock(&child->perf_event_mutex);
12720
12721 for_each_task_context_nr(ctxn)
12722 perf_event_exit_task_context(child, ctxn);
12723
12724
12725
12726
12727
12728
12729
12730 perf_event_task(child, NULL, 0);
12731}
12732
12733static void perf_free_event(struct perf_event *event,
12734 struct perf_event_context *ctx)
12735{
12736 struct perf_event *parent = event->parent;
12737
12738 if (WARN_ON_ONCE(!parent))
12739 return;
12740
12741 mutex_lock(&parent->child_mutex);
12742 list_del_init(&event->child_list);
12743 mutex_unlock(&parent->child_mutex);
12744
12745 put_event(parent);
12746
12747 raw_spin_lock_irq(&ctx->lock);
12748 perf_group_detach(event);
12749 list_del_event(event, ctx);
12750 raw_spin_unlock_irq(&ctx->lock);
12751 free_event(event);
12752}
12753
12754
12755
12756
12757
12758
12759
12760
12761void perf_event_free_task(struct task_struct *task)
12762{
12763 struct perf_event_context *ctx;
12764 struct perf_event *event, *tmp;
12765 int ctxn;
12766
12767 for_each_task_context_nr(ctxn) {
12768 ctx = task->perf_event_ctxp[ctxn];
12769 if (!ctx)
12770 continue;
12771
12772 mutex_lock(&ctx->mutex);
12773 raw_spin_lock_irq(&ctx->lock);
12774
12775
12776
12777
12778
12779
12780 RCU_INIT_POINTER(task->perf_event_ctxp[ctxn], NULL);
12781 WRITE_ONCE(ctx->task, TASK_TOMBSTONE);
12782 put_task_struct(task);
12783 raw_spin_unlock_irq(&ctx->lock);
12784
12785 list_for_each_entry_safe(event, tmp, &ctx->event_list, event_entry)
12786 perf_free_event(event, ctx);
12787
12788 mutex_unlock(&ctx->mutex);
12789
12790
12791
12792
12793
12794
12795
12796
12797
12798
12799
12800
12801
12802
12803
12804 wait_var_event(&ctx->refcount, refcount_read(&ctx->refcount) == 1);
12805 put_ctx(ctx);
12806 }
12807}
12808
12809void perf_event_delayed_put(struct task_struct *task)
12810{
12811 int ctxn;
12812
12813 for_each_task_context_nr(ctxn)
12814 WARN_ON_ONCE(task->perf_event_ctxp[ctxn]);
12815}
12816
12817struct file *perf_event_get(unsigned int fd)
12818{
12819 struct file *file = fget(fd);
12820 if (!file)
12821 return ERR_PTR(-EBADF);
12822
12823 if (file->f_op != &perf_fops) {
12824 fput(file);
12825 return ERR_PTR(-EBADF);
12826 }
12827
12828 return file;
12829}
12830
12831const struct perf_event *perf_get_event(struct file *file)
12832{
12833 if (file->f_op != &perf_fops)
12834 return ERR_PTR(-EINVAL);
12835
12836 return file->private_data;
12837}
12838
12839const struct perf_event_attr *perf_event_attrs(struct perf_event *event)
12840{
12841 if (!event)
12842 return ERR_PTR(-EINVAL);
12843
12844 return &event->attr;
12845}
12846
12847
12848
12849
12850
12851
12852
12853
12854
12855static struct perf_event *
12856inherit_event(struct perf_event *parent_event,
12857 struct task_struct *parent,
12858 struct perf_event_context *parent_ctx,
12859 struct task_struct *child,
12860 struct perf_event *group_leader,
12861 struct perf_event_context *child_ctx)
12862{
12863 enum perf_event_state parent_state = parent_event->state;
12864 struct perf_event *child_event;
12865 unsigned long flags;
12866
12867
12868
12869
12870
12871
12872
12873 if (parent_event->parent)
12874 parent_event = parent_event->parent;
12875
12876 child_event = perf_event_alloc(&parent_event->attr,
12877 parent_event->cpu,
12878 child,
12879 group_leader, parent_event,
12880 NULL, NULL, -1);
12881 if (IS_ERR(child_event))
12882 return child_event;
12883
12884
12885 if ((child_event->attach_state & PERF_ATTACH_TASK_DATA) &&
12886 !child_ctx->task_ctx_data) {
12887 struct pmu *pmu = child_event->pmu;
12888
12889 child_ctx->task_ctx_data = alloc_task_ctx_data(pmu);
12890 if (!child_ctx->task_ctx_data) {
12891 free_event(child_event);
12892 return ERR_PTR(-ENOMEM);
12893 }
12894 }
12895
12896
12897
12898
12899
12900
12901
12902 mutex_lock(&parent_event->child_mutex);
12903 if (is_orphaned_event(parent_event) ||
12904 !atomic_long_inc_not_zero(&parent_event->refcount)) {
12905 mutex_unlock(&parent_event->child_mutex);
12906
12907 free_event(child_event);
12908 return NULL;
12909 }
12910
12911 get_ctx(child_ctx);
12912
12913
12914
12915
12916
12917
12918 if (parent_state >= PERF_EVENT_STATE_INACTIVE)
12919 child_event->state = PERF_EVENT_STATE_INACTIVE;
12920 else
12921 child_event->state = PERF_EVENT_STATE_OFF;
12922
12923 if (parent_event->attr.freq) {
12924 u64 sample_period = parent_event->hw.sample_period;
12925 struct hw_perf_event *hwc = &child_event->hw;
12926
12927 hwc->sample_period = sample_period;
12928 hwc->last_period = sample_period;
12929
12930 local64_set(&hwc->period_left, sample_period);
12931 }
12932
12933 child_event->ctx = child_ctx;
12934 child_event->overflow_handler = parent_event->overflow_handler;
12935 child_event->overflow_handler_context
12936 = parent_event->overflow_handler_context;
12937
12938
12939
12940
12941 perf_event__header_size(child_event);
12942 perf_event__id_header_size(child_event);
12943
12944
12945
12946
12947 raw_spin_lock_irqsave(&child_ctx->lock, flags);
12948 add_event_to_ctx(child_event, child_ctx);
12949 child_event->attach_state |= PERF_ATTACH_CHILD;
12950 raw_spin_unlock_irqrestore(&child_ctx->lock, flags);
12951
12952
12953
12954
12955 list_add_tail(&child_event->child_list, &parent_event->child_list);
12956 mutex_unlock(&parent_event->child_mutex);
12957
12958 return child_event;
12959}
12960
12961
12962
12963
12964
12965
12966
12967
12968
12969
12970
12971static int inherit_group(struct perf_event *parent_event,
12972 struct task_struct *parent,
12973 struct perf_event_context *parent_ctx,
12974 struct task_struct *child,
12975 struct perf_event_context *child_ctx)
12976{
12977 struct perf_event *leader;
12978 struct perf_event *sub;
12979 struct perf_event *child_ctr;
12980
12981 leader = inherit_event(parent_event, parent, parent_ctx,
12982 child, NULL, child_ctx);
12983 if (IS_ERR(leader))
12984 return PTR_ERR(leader);
12985
12986
12987
12988
12989
12990 for_each_sibling_event(sub, parent_event) {
12991 child_ctr = inherit_event(sub, parent, parent_ctx,
12992 child, leader, child_ctx);
12993 if (IS_ERR(child_ctr))
12994 return PTR_ERR(child_ctr);
12995
12996 if (sub->aux_event == parent_event && child_ctr &&
12997 !perf_get_aux_event(child_ctr, leader))
12998 return -EINVAL;
12999 }
13000 return 0;
13001}
13002
13003
13004
13005
13006
13007
13008
13009
13010
13011
13012
13013
13014static int
13015inherit_task_group(struct perf_event *event, struct task_struct *parent,
13016 struct perf_event_context *parent_ctx,
13017 struct task_struct *child, int ctxn,
13018 u64 clone_flags, int *inherited_all)
13019{
13020 int ret;
13021 struct perf_event_context *child_ctx;
13022
13023 if (!event->attr.inherit ||
13024 (event->attr.inherit_thread && !(clone_flags & CLONE_THREAD)) ||
13025
13026 (event->attr.sigtrap && (clone_flags & CLONE_CLEAR_SIGHAND))) {
13027 *inherited_all = 0;
13028 return 0;
13029 }
13030
13031 child_ctx = child->perf_event_ctxp[ctxn];
13032 if (!child_ctx) {
13033
13034
13035
13036
13037
13038
13039 child_ctx = alloc_perf_context(parent_ctx->pmu, child);
13040 if (!child_ctx)
13041 return -ENOMEM;
13042
13043 child->perf_event_ctxp[ctxn] = child_ctx;
13044 }
13045
13046 ret = inherit_group(event, parent, parent_ctx,
13047 child, child_ctx);
13048
13049 if (ret)
13050 *inherited_all = 0;
13051
13052 return ret;
13053}
13054
13055
13056
13057
13058static int perf_event_init_context(struct task_struct *child, int ctxn,
13059 u64 clone_flags)
13060{
13061 struct perf_event_context *child_ctx, *parent_ctx;
13062 struct perf_event_context *cloned_ctx;
13063 struct perf_event *event;
13064 struct task_struct *parent = current;
13065 int inherited_all = 1;
13066 unsigned long flags;
13067 int ret = 0;
13068
13069 if (likely(!parent->perf_event_ctxp[ctxn]))
13070 return 0;
13071
13072
13073
13074
13075
13076 parent_ctx = perf_pin_task_context(parent, ctxn);
13077 if (!parent_ctx)
13078 return 0;
13079
13080
13081
13082
13083
13084
13085
13086
13087
13088
13089
13090
13091 mutex_lock(&parent_ctx->mutex);
13092
13093
13094
13095
13096
13097 perf_event_groups_for_each(event, &parent_ctx->pinned_groups) {
13098 ret = inherit_task_group(event, parent, parent_ctx,
13099 child, ctxn, clone_flags,
13100 &inherited_all);
13101 if (ret)
13102 goto out_unlock;
13103 }
13104
13105
13106
13107
13108
13109
13110 raw_spin_lock_irqsave(&parent_ctx->lock, flags);
13111 parent_ctx->rotate_disable = 1;
13112 raw_spin_unlock_irqrestore(&parent_ctx->lock, flags);
13113
13114 perf_event_groups_for_each(event, &parent_ctx->flexible_groups) {
13115 ret = inherit_task_group(event, parent, parent_ctx,
13116 child, ctxn, clone_flags,
13117 &inherited_all);
13118 if (ret)
13119 goto out_unlock;
13120 }
13121
13122 raw_spin_lock_irqsave(&parent_ctx->lock, flags);
13123 parent_ctx->rotate_disable = 0;
13124
13125 child_ctx = child->perf_event_ctxp[ctxn];
13126
13127 if (child_ctx && inherited_all) {
13128
13129
13130
13131
13132
13133
13134
13135 cloned_ctx = parent_ctx->parent_ctx;
13136 if (cloned_ctx) {
13137 child_ctx->parent_ctx = cloned_ctx;
13138 child_ctx->parent_gen = parent_ctx->parent_gen;
13139 } else {
13140 child_ctx->parent_ctx = parent_ctx;
13141 child_ctx->parent_gen = parent_ctx->generation;
13142 }
13143 get_ctx(child_ctx->parent_ctx);
13144 }
13145
13146 raw_spin_unlock_irqrestore(&parent_ctx->lock, flags);
13147out_unlock:
13148 mutex_unlock(&parent_ctx->mutex);
13149
13150 perf_unpin_context(parent_ctx);
13151 put_ctx(parent_ctx);
13152
13153 return ret;
13154}
13155
13156
13157
13158
13159int perf_event_init_task(struct task_struct *child, u64 clone_flags)
13160{
13161 int ctxn, ret;
13162
13163 memset(child->perf_event_ctxp, 0, sizeof(child->perf_event_ctxp));
13164 mutex_init(&child->perf_event_mutex);
13165 INIT_LIST_HEAD(&child->perf_event_list);
13166
13167 for_each_task_context_nr(ctxn) {
13168 ret = perf_event_init_context(child, ctxn, clone_flags);
13169 if (ret) {
13170 perf_event_free_task(child);
13171 return ret;
13172 }
13173 }
13174
13175 return 0;
13176}
13177
13178static void __init perf_event_init_all_cpus(void)
13179{
13180 struct swevent_htable *swhash;
13181 int cpu;
13182
13183 zalloc_cpumask_var(&perf_online_mask, GFP_KERNEL);
13184
13185 for_each_possible_cpu(cpu) {
13186 swhash = &per_cpu(swevent_htable, cpu);
13187 mutex_init(&swhash->hlist_mutex);
13188 INIT_LIST_HEAD(&per_cpu(active_ctx_list, cpu));
13189
13190 INIT_LIST_HEAD(&per_cpu(pmu_sb_events.list, cpu));
13191 raw_spin_lock_init(&per_cpu(pmu_sb_events.lock, cpu));
13192
13193#ifdef CONFIG_CGROUP_PERF
13194 INIT_LIST_HEAD(&per_cpu(cgrp_cpuctx_list, cpu));
13195#endif
13196 INIT_LIST_HEAD(&per_cpu(sched_cb_list, cpu));
13197 }
13198}
13199
13200static void perf_swevent_init_cpu(unsigned int cpu)
13201{
13202 struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);
13203
13204 mutex_lock(&swhash->hlist_mutex);
13205 if (swhash->hlist_refcount > 0 && !swevent_hlist_deref(swhash)) {
13206 struct swevent_hlist *hlist;
13207
13208 hlist = kzalloc_node(sizeof(*hlist), GFP_KERNEL, cpu_to_node(cpu));
13209 WARN_ON(!hlist);
13210 rcu_assign_pointer(swhash->swevent_hlist, hlist);
13211 }
13212 mutex_unlock(&swhash->hlist_mutex);
13213}
13214
13215#if defined CONFIG_HOTPLUG_CPU || defined CONFIG_KEXEC_CORE
13216static void __perf_event_exit_context(void *__info)
13217{
13218 struct perf_event_context *ctx = __info;
13219 struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
13220 struct perf_event *event;
13221
13222 raw_spin_lock(&ctx->lock);
13223 ctx_sched_out(ctx, cpuctx, EVENT_TIME);
13224 list_for_each_entry(event, &ctx->event_list, event_entry)
13225 __perf_remove_from_context(event, cpuctx, ctx, (void *)DETACH_GROUP);
13226 raw_spin_unlock(&ctx->lock);
13227}
13228
13229static void perf_event_exit_cpu_context(int cpu)
13230{
13231 struct perf_cpu_context *cpuctx;
13232 struct perf_event_context *ctx;
13233 struct pmu *pmu;
13234
13235 mutex_lock(&pmus_lock);
13236 list_for_each_entry(pmu, &pmus, entry) {
13237 cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu);
13238 ctx = &cpuctx->ctx;
13239
13240 mutex_lock(&ctx->mutex);
13241 smp_call_function_single(cpu, __perf_event_exit_context, ctx, 1);
13242 cpuctx->online = 0;
13243 mutex_unlock(&ctx->mutex);
13244 }
13245 cpumask_clear_cpu(cpu, perf_online_mask);
13246 mutex_unlock(&pmus_lock);
13247}
13248#else
13249
13250static void perf_event_exit_cpu_context(int cpu) { }
13251
13252#endif
13253
13254int perf_event_init_cpu(unsigned int cpu)
13255{
13256 struct perf_cpu_context *cpuctx;
13257 struct perf_event_context *ctx;
13258 struct pmu *pmu;
13259
13260 perf_swevent_init_cpu(cpu);
13261
13262 mutex_lock(&pmus_lock);
13263 cpumask_set_cpu(cpu, perf_online_mask);
13264 list_for_each_entry(pmu, &pmus, entry) {
13265 cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu);
13266 ctx = &cpuctx->ctx;
13267
13268 mutex_lock(&ctx->mutex);
13269 cpuctx->online = 1;
13270 mutex_unlock(&ctx->mutex);
13271 }
13272 mutex_unlock(&pmus_lock);
13273
13274 return 0;
13275}
13276
13277int perf_event_exit_cpu(unsigned int cpu)
13278{
13279 perf_event_exit_cpu_context(cpu);
13280 return 0;
13281}
13282
13283static int
13284perf_reboot(struct notifier_block *notifier, unsigned long val, void *v)
13285{
13286 int cpu;
13287
13288 for_each_online_cpu(cpu)
13289 perf_event_exit_cpu(cpu);
13290
13291 return NOTIFY_OK;
13292}
13293
13294
13295
13296
13297
13298static struct notifier_block perf_reboot_notifier = {
13299 .notifier_call = perf_reboot,
13300 .priority = INT_MIN,
13301};
13302
13303void __init perf_event_init(void)
13304{
13305 int ret;
13306
13307 idr_init(&pmu_idr);
13308
13309 perf_event_init_all_cpus();
13310 init_srcu_struct(&pmus_srcu);
13311 perf_pmu_register(&perf_swevent, "software", PERF_TYPE_SOFTWARE);
13312 perf_pmu_register(&perf_cpu_clock, NULL, -1);
13313 perf_pmu_register(&perf_task_clock, NULL, -1);
13314 perf_tp_register();
13315 perf_event_init_cpu(smp_processor_id());
13316 register_reboot_notifier(&perf_reboot_notifier);
13317
13318 ret = init_hw_breakpoint();
13319 WARN(ret, "hw_breakpoint initialization failed with: %d", ret);
13320
13321 perf_event_cache = KMEM_CACHE(perf_event, SLAB_PANIC);
13322
13323
13324
13325
13326
13327 BUILD_BUG_ON((offsetof(struct perf_event_mmap_page, data_head))
13328 != 1024);
13329}
13330
13331ssize_t perf_event_sysfs_show(struct device *dev, struct device_attribute *attr,
13332 char *page)
13333{
13334 struct perf_pmu_events_attr *pmu_attr =
13335 container_of(attr, struct perf_pmu_events_attr, attr);
13336
13337 if (pmu_attr->event_str)
13338 return sprintf(page, "%s\n", pmu_attr->event_str);
13339
13340 return 0;
13341}
13342EXPORT_SYMBOL_GPL(perf_event_sysfs_show);
13343
13344static int __init perf_event_sysfs_init(void)
13345{
13346 struct pmu *pmu;
13347 int ret;
13348
13349 mutex_lock(&pmus_lock);
13350
13351 ret = bus_register(&pmu_bus);
13352 if (ret)
13353 goto unlock;
13354
13355 list_for_each_entry(pmu, &pmus, entry) {
13356 if (!pmu->name || pmu->type < 0)
13357 continue;
13358
13359 ret = pmu_dev_alloc(pmu);
13360 WARN(ret, "Failed to register pmu: %s, reason %d\n", pmu->name, ret);
13361 }
13362 pmu_bus_running = 1;
13363 ret = 0;
13364
13365unlock:
13366 mutex_unlock(&pmus_lock);
13367
13368 return ret;
13369}
13370device_initcall(perf_event_sysfs_init);
13371
13372#ifdef CONFIG_CGROUP_PERF
13373static struct cgroup_subsys_state *
13374perf_cgroup_css_alloc(struct cgroup_subsys_state *parent_css)
13375{
13376 struct perf_cgroup *jc;
13377
13378 jc = kzalloc(sizeof(*jc), GFP_KERNEL);
13379 if (!jc)
13380 return ERR_PTR(-ENOMEM);
13381
13382 jc->info = alloc_percpu(struct perf_cgroup_info);
13383 if (!jc->info) {
13384 kfree(jc);
13385 return ERR_PTR(-ENOMEM);
13386 }
13387
13388 return &jc->css;
13389}
13390
13391static void perf_cgroup_css_free(struct cgroup_subsys_state *css)
13392{
13393 struct perf_cgroup *jc = container_of(css, struct perf_cgroup, css);
13394
13395 free_percpu(jc->info);
13396 kfree(jc);
13397}
13398
13399static int perf_cgroup_css_online(struct cgroup_subsys_state *css)
13400{
13401 perf_event_cgroup(css->cgroup);
13402 return 0;
13403}
13404
13405static int __perf_cgroup_move(void *info)
13406{
13407 struct task_struct *task = info;
13408 rcu_read_lock();
13409 perf_cgroup_switch(task, PERF_CGROUP_SWOUT | PERF_CGROUP_SWIN);
13410 rcu_read_unlock();
13411 return 0;
13412}
13413
13414static void perf_cgroup_attach(struct cgroup_taskset *tset)
13415{
13416 struct task_struct *task;
13417 struct cgroup_subsys_state *css;
13418
13419 cgroup_taskset_for_each(task, css, tset)
13420 task_function_call(task, __perf_cgroup_move, task);
13421}
13422
13423struct cgroup_subsys perf_event_cgrp_subsys = {
13424 .css_alloc = perf_cgroup_css_alloc,
13425 .css_free = perf_cgroup_css_free,
13426 .css_online = perf_cgroup_css_online,
13427 .attach = perf_cgroup_attach,
13428
13429
13430
13431
13432
13433 .implicit_on_dfl = true,
13434 .threaded = true,
13435};
13436#endif
13437