~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to kernel/events/core.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Performance events core code:
 
3
 *
 
4
 *  Copyright (C) 2008 Thomas Gleixner <tglx@linutronix.de>
 
5
 *  Copyright (C) 2008-2011 Red Hat, Inc., Ingo Molnar
 
6
 *  Copyright (C) 2008-2011 Red Hat, Inc., Peter Zijlstra <pzijlstr@redhat.com>
 
7
 *  Copyright  �  2009 Paul Mackerras, IBM Corp. <paulus@au1.ibm.com>
 
8
 *
 
9
 * For licensing details see kernel-base/COPYING
 
10
 */
 
11
 
 
12
#include <linux/fs.h>
 
13
#include <linux/mm.h>
 
14
#include <linux/cpu.h>
 
15
#include <linux/smp.h>
 
16
#include <linux/idr.h>
 
17
#include <linux/file.h>
 
18
#include <linux/poll.h>
 
19
#include <linux/slab.h>
 
20
#include <linux/hash.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/vmalloc.h>
 
29
#include <linux/hardirq.h>
 
30
#include <linux/rculist.h>
 
31
#include <linux/uaccess.h>
 
32
#include <linux/syscalls.h>
 
33
#include <linux/anon_inodes.h>
 
34
#include <linux/kernel_stat.h>
 
35
#include <linux/perf_event.h>
 
36
#include <linux/ftrace_event.h>
 
37
#include <linux/hw_breakpoint.h>
 
38
 
 
39
#include <asm/irq_regs.h>
 
40
 
 
41
struct remote_function_call {
 
42
        struct task_struct      *p;
 
43
        int                     (*func)(void *info);
 
44
        void                    *info;
 
45
        int                     ret;
 
46
};
 
47
 
 
48
static void remote_function(void *data)
 
49
{
 
50
        struct remote_function_call *tfc = data;
 
51
        struct task_struct *p = tfc->p;
 
52
 
 
53
        if (p) {
 
54
                tfc->ret = -EAGAIN;
 
55
                if (task_cpu(p) != smp_processor_id() || !task_curr(p))
 
56
                        return;
 
57
        }
 
58
 
 
59
        tfc->ret = tfc->func(tfc->info);
 
60
}
 
61
 
 
62
/**
 
63
 * task_function_call - call a function on the cpu on which a task runs
 
64
 * @p:          the task to evaluate
 
65
 * @func:       the function to be called
 
66
 * @info:       the function call argument
 
67
 *
 
68
 * Calls the function @func when the task is currently running. This might
 
69
 * be on the current CPU, which just calls the function directly
 
70
 *
 
71
 * returns: @func return value, or
 
72
 *          -ESRCH  - when the process isn't running
 
73
 *          -EAGAIN - when the process moved away
 
74
 */
 
75
static int
 
76
task_function_call(struct task_struct *p, int (*func) (void *info), void *info)
 
77
{
 
78
        struct remote_function_call data = {
 
79
                .p      = p,
 
80
                .func   = func,
 
81
                .info   = info,
 
82
                .ret    = -ESRCH, /* No such (running) process */
 
83
        };
 
84
 
 
85
        if (task_curr(p))
 
86
                smp_call_function_single(task_cpu(p), remote_function, &data, 1);
 
87
 
 
88
        return data.ret;
 
89
}
 
90
 
 
91
/**
 
92
 * cpu_function_call - call a function on the cpu
 
93
 * @func:       the function to be called
 
94
 * @info:       the function call argument
 
95
 *
 
96
 * Calls the function @func on the remote cpu.
 
97
 *
 
98
 * returns: @func return value or -ENXIO when the cpu is offline
 
99
 */
 
100
static int cpu_function_call(int cpu, int (*func) (void *info), void *info)
 
101
{
 
102
        struct remote_function_call data = {
 
103
                .p      = NULL,
 
104
                .func   = func,
 
105
                .info   = info,
 
106
                .ret    = -ENXIO, /* No such CPU */
 
107
        };
 
108
 
 
109
        smp_call_function_single(cpu, remote_function, &data, 1);
 
110
 
 
111
        return data.ret;
 
112
}
 
113
 
 
114
#define PERF_FLAG_ALL (PERF_FLAG_FD_NO_GROUP |\
 
115
                       PERF_FLAG_FD_OUTPUT  |\
 
116
                       PERF_FLAG_PID_CGROUP)
 
117
 
 
118
enum event_type_t {
 
119
        EVENT_FLEXIBLE = 0x1,
 
120
        EVENT_PINNED = 0x2,
 
121
        EVENT_ALL = EVENT_FLEXIBLE | EVENT_PINNED,
 
122
};
 
123
 
 
124
/*
 
125
 * perf_sched_events : >0 events exist
 
126
 * perf_cgroup_events: >0 per-cpu cgroup events exist on this cpu
 
127
 */
 
128
struct jump_label_key perf_sched_events __read_mostly;
 
129
static DEFINE_PER_CPU(atomic_t, perf_cgroup_events);
 
130
 
 
131
static atomic_t nr_mmap_events __read_mostly;
 
132
static atomic_t nr_comm_events __read_mostly;
 
133
static atomic_t nr_task_events __read_mostly;
 
134
 
 
135
static LIST_HEAD(pmus);
 
136
static DEFINE_MUTEX(pmus_lock);
 
137
static struct srcu_struct pmus_srcu;
 
138
 
 
139
/*
 
140
 * perf event paranoia level:
 
141
 *  -1 - not paranoid at all
 
142
 *   0 - disallow raw tracepoint access for unpriv
 
143
 *   1 - disallow cpu events for unpriv
 
144
 *   2 - disallow kernel profiling for unpriv
 
145
 */
 
146
int sysctl_perf_event_paranoid __read_mostly = 1;
 
147
 
 
148
/* Minimum for 512 kiB + 1 user control page */
 
149
int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */
 
150
 
 
151
/*
 
152
 * max perf event sample rate
 
153
 */
 
154
#define DEFAULT_MAX_SAMPLE_RATE 100000
 
155
int sysctl_perf_event_sample_rate __read_mostly = DEFAULT_MAX_SAMPLE_RATE;
 
156
static int max_samples_per_tick __read_mostly =
 
157
        DIV_ROUND_UP(DEFAULT_MAX_SAMPLE_RATE, HZ);
 
158
 
 
159
int perf_proc_update_handler(struct ctl_table *table, int write,
 
160
                void __user *buffer, size_t *lenp,
 
161
                loff_t *ppos)
 
162
{
 
163
        int ret = proc_dointvec(table, write, buffer, lenp, ppos);
 
164
 
 
165
        if (ret || !write)
 
166
                return ret;
 
167
 
 
168
        max_samples_per_tick = DIV_ROUND_UP(sysctl_perf_event_sample_rate, HZ);
 
169
 
 
170
        return 0;
 
171
}
 
172
 
 
173
static atomic64_t perf_event_id;
 
174
 
 
175
static void cpu_ctx_sched_out(struct perf_cpu_context *cpuctx,
 
176
                              enum event_type_t event_type);
 
177
 
 
178
static void cpu_ctx_sched_in(struct perf_cpu_context *cpuctx,
 
179
                             enum event_type_t event_type,
 
180
                             struct task_struct *task);
 
181
 
 
182
static void update_context_time(struct perf_event_context *ctx);
 
183
static u64 perf_event_time(struct perf_event *event);
 
184
 
 
185
void __weak perf_event_print_debug(void)        { }
 
186
 
 
187
extern __weak const char *perf_pmu_name(void)
 
188
{
 
189
        return "pmu";
 
190
}
 
191
 
 
192
static inline u64 perf_clock(void)
 
193
{
 
194
        return local_clock();
 
195
}
 
196
 
 
197
static inline struct perf_cpu_context *
 
198
__get_cpu_context(struct perf_event_context *ctx)
 
199
{
 
200
        return this_cpu_ptr(ctx->pmu->pmu_cpu_context);
 
201
}
 
202
 
 
203
#ifdef CONFIG_CGROUP_PERF
 
204
 
 
205
/*
 
206
 * Must ensure cgroup is pinned (css_get) before calling
 
207
 * this function. In other words, we cannot call this function
 
208
 * if there is no cgroup event for the current CPU context.
 
209
 */
 
210
static inline struct perf_cgroup *
 
211
perf_cgroup_from_task(struct task_struct *task)
 
212
{
 
213
        return container_of(task_subsys_state(task, perf_subsys_id),
 
214
                        struct perf_cgroup, css);
 
215
}
 
216
 
 
217
static inline bool
 
218
perf_cgroup_match(struct perf_event *event)
 
219
{
 
220
        struct perf_event_context *ctx = event->ctx;
 
221
        struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
 
222
 
 
223
        return !event->cgrp || event->cgrp == cpuctx->cgrp;
 
224
}
 
225
 
 
226
static inline void perf_get_cgroup(struct perf_event *event)
 
227
{
 
228
        css_get(&event->cgrp->css);
 
229
}
 
230
 
 
231
static inline void perf_put_cgroup(struct perf_event *event)
 
232
{
 
233
        css_put(&event->cgrp->css);
 
234
}
 
235
 
 
236
static inline void perf_detach_cgroup(struct perf_event *event)
 
237
{
 
238
        perf_put_cgroup(event);
 
239
        event->cgrp = NULL;
 
240
}
 
241
 
 
242
static inline int is_cgroup_event(struct perf_event *event)
 
243
{
 
244
        return event->cgrp != NULL;
 
245
}
 
246
 
 
247
static inline u64 perf_cgroup_event_time(struct perf_event *event)
 
248
{
 
249
        struct perf_cgroup_info *t;
 
250
 
 
251
        t = per_cpu_ptr(event->cgrp->info, event->cpu);
 
252
        return t->time;
 
253
}
 
254
 
 
255
static inline void __update_cgrp_time(struct perf_cgroup *cgrp)
 
256
{
 
257
        struct perf_cgroup_info *info;
 
258
        u64 now;
 
259
 
 
260
        now = perf_clock();
 
261
 
 
262
        info = this_cpu_ptr(cgrp->info);
 
263
 
 
264
        info->time += now - info->timestamp;
 
265
        info->timestamp = now;
 
266
}
 
267
 
 
268
static inline void update_cgrp_time_from_cpuctx(struct perf_cpu_context *cpuctx)
 
269
{
 
270
        struct perf_cgroup *cgrp_out = cpuctx->cgrp;
 
271
        if (cgrp_out)
 
272
                __update_cgrp_time(cgrp_out);
 
273
}
 
274
 
 
275
static inline void update_cgrp_time_from_event(struct perf_event *event)
 
276
{
 
277
        struct perf_cgroup *cgrp;
 
278
 
 
279
        /*
 
280
         * ensure we access cgroup data only when needed and
 
281
         * when we know the cgroup is pinned (css_get)
 
282
         */
 
283
        if (!is_cgroup_event(event))
 
284
                return;
 
285
 
 
286
        cgrp = perf_cgroup_from_task(current);
 
287
        /*
 
288
         * Do not update time when cgroup is not active
 
289
         */
 
290
        if (cgrp == event->cgrp)
 
291
                __update_cgrp_time(event->cgrp);
 
292
}
 
293
 
 
294
static inline void
 
295
perf_cgroup_set_timestamp(struct task_struct *task,
 
296
                          struct perf_event_context *ctx)
 
297
{
 
298
        struct perf_cgroup *cgrp;
 
299
        struct perf_cgroup_info *info;
 
300
 
 
301
        /*
 
302
         * ctx->lock held by caller
 
303
         * ensure we do not access cgroup data
 
304
         * unless we have the cgroup pinned (css_get)
 
305
         */
 
306
        if (!task || !ctx->nr_cgroups)
 
307
                return;
 
308
 
 
309
        cgrp = perf_cgroup_from_task(task);
 
310
        info = this_cpu_ptr(cgrp->info);
 
311
        info->timestamp = ctx->timestamp;
 
312
}
 
313
 
 
314
#define PERF_CGROUP_SWOUT       0x1 /* cgroup switch out every event */
 
315
#define PERF_CGROUP_SWIN        0x2 /* cgroup switch in events based on task */
 
316
 
 
317
/*
 
318
 * reschedule events based on the cgroup constraint of task.
 
319
 *
 
320
 * mode SWOUT : schedule out everything
 
321
 * mode SWIN : schedule in based on cgroup for next
 
322
 */
 
323
void perf_cgroup_switch(struct task_struct *task, int mode)
 
324
{
 
325
        struct perf_cpu_context *cpuctx;
 
326
        struct pmu *pmu;
 
327
        unsigned long flags;
 
328
 
 
329
        /*
 
330
         * disable interrupts to avoid geting nr_cgroup
 
331
         * changes via __perf_event_disable(). Also
 
332
         * avoids preemption.
 
333
         */
 
334
        local_irq_save(flags);
 
335
 
 
336
        /*
 
337
         * we reschedule only in the presence of cgroup
 
338
         * constrained events.
 
339
         */
 
340
        rcu_read_lock();
 
341
 
 
342
        list_for_each_entry_rcu(pmu, &pmus, entry) {
 
343
 
 
344
                cpuctx = this_cpu_ptr(pmu->pmu_cpu_context);
 
345
 
 
346
                perf_pmu_disable(cpuctx->ctx.pmu);
 
347
 
 
348
                /*
 
349
                 * perf_cgroup_events says at least one
 
350
                 * context on this CPU has cgroup events.
 
351
                 *
 
352
                 * ctx->nr_cgroups reports the number of cgroup
 
353
                 * events for a context.
 
354
                 */
 
355
                if (cpuctx->ctx.nr_cgroups > 0) {
 
356
 
 
357
                        if (mode & PERF_CGROUP_SWOUT) {
 
358
                                cpu_ctx_sched_out(cpuctx, EVENT_ALL);
 
359
                                /*
 
360
                                 * must not be done before ctxswout due
 
361
                                 * to event_filter_match() in event_sched_out()
 
362
                                 */
 
363
                                cpuctx->cgrp = NULL;
 
364
                        }
 
365
 
 
366
                        if (mode & PERF_CGROUP_SWIN) {
 
367
                                WARN_ON_ONCE(cpuctx->cgrp);
 
368
                                /* set cgrp before ctxsw in to
 
369
                                 * allow event_filter_match() to not
 
370
                                 * have to pass task around
 
371
                                 */
 
372
                                cpuctx->cgrp = perf_cgroup_from_task(task);
 
373
                                cpu_ctx_sched_in(cpuctx, EVENT_ALL, task);
 
374
                        }
 
375
                }
 
376
 
 
377
                perf_pmu_enable(cpuctx->ctx.pmu);
 
378
        }
 
379
 
 
380
        rcu_read_unlock();
 
381
 
 
382
        local_irq_restore(flags);
 
383
}
 
384
 
 
385
static inline void perf_cgroup_sched_out(struct task_struct *task)
 
386
{
 
387
        perf_cgroup_switch(task, PERF_CGROUP_SWOUT);
 
388
}
 
389
 
 
390
static inline void perf_cgroup_sched_in(struct task_struct *task)
 
391
{
 
392
        perf_cgroup_switch(task, PERF_CGROUP_SWIN);
 
393
}
 
394
 
 
395
static inline int perf_cgroup_connect(int fd, struct perf_event *event,
 
396
                                      struct perf_event_attr *attr,
 
397
                                      struct perf_event *group_leader)
 
398
{
 
399
        struct perf_cgroup *cgrp;
 
400
        struct cgroup_subsys_state *css;
 
401
        struct file *file;
 
402
        int ret = 0, fput_needed;
 
403
 
 
404
        file = fget_light(fd, &fput_needed);
 
405
        if (!file)
 
406
                return -EBADF;
 
407
 
 
408
        css = cgroup_css_from_dir(file, perf_subsys_id);
 
409
        if (IS_ERR(css)) {
 
410
                ret = PTR_ERR(css);
 
411
                goto out;
 
412
        }
 
413
 
 
414
        cgrp = container_of(css, struct perf_cgroup, css);
 
415
        event->cgrp = cgrp;
 
416
 
 
417
        /* must be done before we fput() the file */
 
418
        perf_get_cgroup(event);
 
419
 
 
420
        /*
 
421
         * all events in a group must monitor
 
422
         * the same cgroup because a task belongs
 
423
         * to only one perf cgroup at a time
 
424
         */
 
425
        if (group_leader && group_leader->cgrp != cgrp) {
 
426
                perf_detach_cgroup(event);
 
427
                ret = -EINVAL;
 
428
        }
 
429
out:
 
430
        fput_light(file, fput_needed);
 
431
        return ret;
 
432
}
 
433
 
 
434
static inline void
 
435
perf_cgroup_set_shadow_time(struct perf_event *event, u64 now)
 
436
{
 
437
        struct perf_cgroup_info *t;
 
438
        t = per_cpu_ptr(event->cgrp->info, event->cpu);
 
439
        event->shadow_ctx_time = now - t->timestamp;
 
440
}
 
441
 
 
442
static inline void
 
443
perf_cgroup_defer_enabled(struct perf_event *event)
 
444
{
 
445
        /*
 
446
         * when the current task's perf cgroup does not match
 
447
         * the event's, we need to remember to call the
 
448
         * perf_mark_enable() function the first time a task with
 
449
         * a matching perf cgroup is scheduled in.
 
450
         */
 
451
        if (is_cgroup_event(event) && !perf_cgroup_match(event))
 
452
                event->cgrp_defer_enabled = 1;
 
453
}
 
454
 
 
455
static inline void
 
456
perf_cgroup_mark_enabled(struct perf_event *event,
 
457
                         struct perf_event_context *ctx)
 
458
{
 
459
        struct perf_event *sub;
 
460
        u64 tstamp = perf_event_time(event);
 
461
 
 
462
        if (!event->cgrp_defer_enabled)
 
463
                return;
 
464
 
 
465
        event->cgrp_defer_enabled = 0;
 
466
 
 
467
        event->tstamp_enabled = tstamp - event->total_time_enabled;
 
468
        list_for_each_entry(sub, &event->sibling_list, group_entry) {
 
469
                if (sub->state >= PERF_EVENT_STATE_INACTIVE) {
 
470
                        sub->tstamp_enabled = tstamp - sub->total_time_enabled;
 
471
                        sub->cgrp_defer_enabled = 0;
 
472
                }
 
473
        }
 
474
}
 
475
#else /* !CONFIG_CGROUP_PERF */
 
476
 
 
477
static inline bool
 
478
perf_cgroup_match(struct perf_event *event)
 
479
{
 
480
        return true;
 
481
}
 
482
 
 
483
static inline void perf_detach_cgroup(struct perf_event *event)
 
484
{}
 
485
 
 
486
static inline int is_cgroup_event(struct perf_event *event)
 
487
{
 
488
        return 0;
 
489
}
 
490
 
 
491
static inline u64 perf_cgroup_event_cgrp_time(struct perf_event *event)
 
492
{
 
493
        return 0;
 
494
}
 
495
 
 
496
static inline void update_cgrp_time_from_event(struct perf_event *event)
 
497
{
 
498
}
 
499
 
 
500
static inline void update_cgrp_time_from_cpuctx(struct perf_cpu_context *cpuctx)
 
501
{
 
502
}
 
503
 
 
504
static inline void perf_cgroup_sched_out(struct task_struct *task)
 
505
{
 
506
}
 
507
 
 
508
static inline void perf_cgroup_sched_in(struct task_struct *task)
 
509
{
 
510
}
 
511
 
 
512
static inline int perf_cgroup_connect(pid_t pid, struct perf_event *event,
 
513
                                      struct perf_event_attr *attr,
 
514
                                      struct perf_event *group_leader)
 
515
{
 
516
        return -EINVAL;
 
517
}
 
518
 
 
519
static inline void
 
520
perf_cgroup_set_timestamp(struct task_struct *task,
 
521
                          struct perf_event_context *ctx)
 
522
{
 
523
}
 
524
 
 
525
void
 
526
perf_cgroup_switch(struct task_struct *task, struct task_struct *next)
 
527
{
 
528
}
 
529
 
 
530
static inline void
 
531
perf_cgroup_set_shadow_time(struct perf_event *event, u64 now)
 
532
{
 
533
}
 
534
 
 
535
static inline u64 perf_cgroup_event_time(struct perf_event *event)
 
536
{
 
537
        return 0;
 
538
}
 
539
 
 
540
static inline void
 
541
perf_cgroup_defer_enabled(struct perf_event *event)
 
542
{
 
543
}
 
544
 
 
545
static inline void
 
546
perf_cgroup_mark_enabled(struct perf_event *event,
 
547
                         struct perf_event_context *ctx)
 
548
{
 
549
}
 
550
#endif
 
551
 
 
552
void perf_pmu_disable(struct pmu *pmu)
 
553
{
 
554
        int *count = this_cpu_ptr(pmu->pmu_disable_count);
 
555
        if (!(*count)++)
 
556
                pmu->pmu_disable(pmu);
 
557
}
 
558
 
 
559
void perf_pmu_enable(struct pmu *pmu)
 
560
{
 
561
        int *count = this_cpu_ptr(pmu->pmu_disable_count);
 
562
        if (!--(*count))
 
563
                pmu->pmu_enable(pmu);
 
564
}
 
565
 
 
566
static DEFINE_PER_CPU(struct list_head, rotation_list);
 
567
 
 
568
/*
 
569
 * perf_pmu_rotate_start() and perf_rotate_context() are fully serialized
 
570
 * because they're strictly cpu affine and rotate_start is called with IRQs
 
571
 * disabled, while rotate_context is called from IRQ context.
 
572
 */
 
573
static void perf_pmu_rotate_start(struct pmu *pmu)
 
574
{
 
575
        struct perf_cpu_context *cpuctx = this_cpu_ptr(pmu->pmu_cpu_context);
 
576
        struct list_head *head = &__get_cpu_var(rotation_list);
 
577
 
 
578
        WARN_ON(!irqs_disabled());
 
579
 
 
580
        if (list_empty(&cpuctx->rotation_list))
 
581
                list_add(&cpuctx->rotation_list, head);
 
582
}
 
583
 
 
584
static void get_ctx(struct perf_event_context *ctx)
 
585
{
 
586
        WARN_ON(!atomic_inc_not_zero(&ctx->refcount));
 
587
}
 
588
 
 
589
static void put_ctx(struct perf_event_context *ctx)
 
590
{
 
591
        if (atomic_dec_and_test(&ctx->refcount)) {
 
592
                if (ctx->parent_ctx)
 
593
                        put_ctx(ctx->parent_ctx);
 
594
                if (ctx->task)
 
595
                        put_task_struct(ctx->task);
 
596
                kfree_rcu(ctx, rcu_head);
 
597
        }
 
598
}
 
599
 
 
600
static void unclone_ctx(struct perf_event_context *ctx)
 
601
{
 
602
        if (ctx->parent_ctx) {
 
603
                put_ctx(ctx->parent_ctx);
 
604
                ctx->parent_ctx = NULL;
 
605
        }
 
606
}
 
607
 
 
608
static u32 perf_event_pid(struct perf_event *event, struct task_struct *p)
 
609
{
 
610
        /*
 
611
         * only top level events have the pid namespace they were created in
 
612
         */
 
613
        if (event->parent)
 
614
                event = event->parent;
 
615
 
 
616
        return task_tgid_nr_ns(p, event->ns);
 
617
}
 
618
 
 
619
static u32 perf_event_tid(struct perf_event *event, struct task_struct *p)
 
620
{
 
621
        /*
 
622
         * only top level events have the pid namespace they were created in
 
623
         */
 
624
        if (event->parent)
 
625
                event = event->parent;
 
626
 
 
627
        return task_pid_nr_ns(p, event->ns);
 
628
}
 
629
 
 
630
/*
 
631
 * If we inherit events we want to return the parent event id
 
632
 * to userspace.
 
633
 */
 
634
static u64 primary_event_id(struct perf_event *event)
 
635
{
 
636
        u64 id = event->id;
 
637
 
 
638
        if (event->parent)
 
639
                id = event->parent->id;
 
640
 
 
641
        return id;
 
642
}
 
643
 
 
644
/*
 
645
 * Get the perf_event_context for a task and lock it.
 
646
 * This has to cope with with the fact that until it is locked,
 
647
 * the context could get moved to another task.
 
648
 */
 
649
static struct perf_event_context *
 
650
perf_lock_task_context(struct task_struct *task, int ctxn, unsigned long *flags)
 
651
{
 
652
        struct perf_event_context *ctx;
 
653
 
 
654
        rcu_read_lock();
 
655
retry:
 
656
        ctx = rcu_dereference(task->perf_event_ctxp[ctxn]);
 
657
        if (ctx) {
 
658
                /*
 
659
                 * If this context is a clone of another, it might
 
660
                 * get swapped for another underneath us by
 
661
                 * perf_event_task_sched_out, though the
 
662
                 * rcu_read_lock() protects us from any context
 
663
                 * getting freed.  Lock the context and check if it
 
664
                 * got swapped before we could get the lock, and retry
 
665
                 * if so.  If we locked the right context, then it
 
666
                 * can't get swapped on us any more.
 
667
                 */
 
668
                raw_spin_lock_irqsave(&ctx->lock, *flags);
 
669
                if (ctx != rcu_dereference(task->perf_event_ctxp[ctxn])) {
 
670
                        raw_spin_unlock_irqrestore(&ctx->lock, *flags);
 
671
                        goto retry;
 
672
                }
 
673
 
 
674
                if (!atomic_inc_not_zero(&ctx->refcount)) {
 
675
                        raw_spin_unlock_irqrestore(&ctx->lock, *flags);
 
676
                        ctx = NULL;
 
677
                }
 
678
        }
 
679
        rcu_read_unlock();
 
680
        return ctx;
 
681
}
 
682
 
 
683
/*
 
684
 * Get the context for a task and increment its pin_count so it
 
685
 * can't get swapped to another task.  This also increments its
 
686
 * reference count so that the context can't get freed.
 
687
 */
 
688
static struct perf_event_context *
 
689
perf_pin_task_context(struct task_struct *task, int ctxn)
 
690
{
 
691
        struct perf_event_context *ctx;
 
692
        unsigned long flags;
 
693
 
 
694
        ctx = perf_lock_task_context(task, ctxn, &flags);
 
695
        if (ctx) {
 
696
                ++ctx->pin_count;
 
697
                raw_spin_unlock_irqrestore(&ctx->lock, flags);
 
698
        }
 
699
        return ctx;
 
700
}
 
701
 
 
702
static void perf_unpin_context(struct perf_event_context *ctx)
 
703
{
 
704
        unsigned long flags;
 
705
 
 
706
        raw_spin_lock_irqsave(&ctx->lock, flags);
 
707
        --ctx->pin_count;
 
708
        raw_spin_unlock_irqrestore(&ctx->lock, flags);
 
709
}
 
710
 
 
711
/*
 
712
 * Update the record of the current time in a context.
 
713
 */
 
714
static void update_context_time(struct perf_event_context *ctx)
 
715
{
 
716
        u64 now = perf_clock();
 
717
 
 
718
        ctx->time += now - ctx->timestamp;
 
719
        ctx->timestamp = now;
 
720
}
 
721
 
 
722
static u64 perf_event_time(struct perf_event *event)
 
723
{
 
724
        struct perf_event_context *ctx = event->ctx;
 
725
 
 
726
        if (is_cgroup_event(event))
 
727
                return perf_cgroup_event_time(event);
 
728
 
 
729
        return ctx ? ctx->time : 0;
 
730
}
 
731
 
 
732
/*
 
733
 * Update the total_time_enabled and total_time_running fields for a event.
 
734
 */
 
735
static void update_event_times(struct perf_event *event)
 
736
{
 
737
        struct perf_event_context *ctx = event->ctx;
 
738
        u64 run_end;
 
739
 
 
740
        if (event->state < PERF_EVENT_STATE_INACTIVE ||
 
741
            event->group_leader->state < PERF_EVENT_STATE_INACTIVE)
 
742
                return;
 
743
        /*
 
744
         * in cgroup mode, time_enabled represents
 
745
         * the time the event was enabled AND active
 
746
         * tasks were in the monitored cgroup. This is
 
747
         * independent of the activity of the context as
 
748
         * there may be a mix of cgroup and non-cgroup events.
 
749
         *
 
750
         * That is why we treat cgroup events differently
 
751
         * here.
 
752
         */
 
753
        if (is_cgroup_event(event))
 
754
                run_end = perf_event_time(event);
 
755
        else if (ctx->is_active)
 
756
                run_end = ctx->time;
 
757
        else
 
758
                run_end = event->tstamp_stopped;
 
759
 
 
760
        event->total_time_enabled = run_end - event->tstamp_enabled;
 
761
 
 
762
        if (event->state == PERF_EVENT_STATE_INACTIVE)
 
763
                run_end = event->tstamp_stopped;
 
764
        else
 
765
                run_end = perf_event_time(event);
 
766
 
 
767
        event->total_time_running = run_end - event->tstamp_running;
 
768
 
 
769
}
 
770
 
 
771
/*
 
772
 * Update total_time_enabled and total_time_running for all events in a group.
 
773
 */
 
774
static void update_group_times(struct perf_event *leader)
 
775
{
 
776
        struct perf_event *event;
 
777
 
 
778
        update_event_times(leader);
 
779
        list_for_each_entry(event, &leader->sibling_list, group_entry)
 
780
                update_event_times(event);
 
781
}
 
782
 
 
783
static struct list_head *
 
784
ctx_group_list(struct perf_event *event, struct perf_event_context *ctx)
 
785
{
 
786
        if (event->attr.pinned)
 
787
                return &ctx->pinned_groups;
 
788
        else
 
789
                return &ctx->flexible_groups;
 
790
}
 
791
 
 
792
/*
 
793
 * Add a event from the lists for its context.
 
794
 * Must be called with ctx->mutex and ctx->lock held.
 
795
 */
 
796
static void
 
797
list_add_event(struct perf_event *event, struct perf_event_context *ctx)
 
798
{
 
799
        WARN_ON_ONCE(event->attach_state & PERF_ATTACH_CONTEXT);
 
800
        event->attach_state |= PERF_ATTACH_CONTEXT;
 
801
 
 
802
        /*
 
803
         * If we're a stand alone event or group leader, we go to the context
 
804
         * list, group events are kept attached to the group so that
 
805
         * perf_group_detach can, at all times, locate all siblings.
 
806
         */
 
807
        if (event->group_leader == event) {
 
808
                struct list_head *list;
 
809
 
 
810
                if (is_software_event(event))
 
811
                        event->group_flags |= PERF_GROUP_SOFTWARE;
 
812
 
 
813
                list = ctx_group_list(event, ctx);
 
814
                list_add_tail(&event->group_entry, list);
 
815
        }
 
816
 
 
817
        if (is_cgroup_event(event))
 
818
                ctx->nr_cgroups++;
 
819
 
 
820
        list_add_rcu(&event->event_entry, &ctx->event_list);
 
821
        if (!ctx->nr_events)
 
822
                perf_pmu_rotate_start(ctx->pmu);
 
823
        ctx->nr_events++;
 
824
        if (event->attr.inherit_stat)
 
825
                ctx->nr_stat++;
 
826
}
 
827
 
 
828
/*
 
829
 * Called at perf_event creation and when events are attached/detached from a
 
830
 * group.
 
831
 */
 
832
static void perf_event__read_size(struct perf_event *event)
 
833
{
 
834
        int entry = sizeof(u64); /* value */
 
835
        int size = 0;
 
836
        int nr = 1;
 
837
 
 
838
        if (event->attr.read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
 
839
                size += sizeof(u64);
 
840
 
 
841
        if (event->attr.read_format & PERF_FORMAT_TOTAL_TIME_RUNNING)
 
842
                size += sizeof(u64);
 
843
 
 
844
        if (event->attr.read_format & PERF_FORMAT_ID)
 
845
                entry += sizeof(u64);
 
846
 
 
847
        if (event->attr.read_format & PERF_FORMAT_GROUP) {
 
848
                nr += event->group_leader->nr_siblings;
 
849
                size += sizeof(u64);
 
850
        }
 
851
 
 
852
        size += entry * nr;
 
853
        event->read_size = size;
 
854
}
 
855
 
 
856
static void perf_event__header_size(struct perf_event *event)
 
857
{
 
858
        struct perf_sample_data *data;
 
859
        u64 sample_type = event->attr.sample_type;
 
860
        u16 size = 0;
 
861
 
 
862
        perf_event__read_size(event);
 
863
 
 
864
        if (sample_type & PERF_SAMPLE_IP)
 
865
                size += sizeof(data->ip);
 
866
 
 
867
        if (sample_type & PERF_SAMPLE_ADDR)
 
868
                size += sizeof(data->addr);
 
869
 
 
870
        if (sample_type & PERF_SAMPLE_PERIOD)
 
871
                size += sizeof(data->period);
 
872
 
 
873
        if (sample_type & PERF_SAMPLE_READ)
 
874
                size += event->read_size;
 
875
 
 
876
        event->header_size = size;
 
877
}
 
878
 
 
879
static void perf_event__id_header_size(struct perf_event *event)
 
880
{
 
881
        struct perf_sample_data *data;
 
882
        u64 sample_type = event->attr.sample_type;
 
883
        u16 size = 0;
 
884
 
 
885
        if (sample_type & PERF_SAMPLE_TID)
 
886
                size += sizeof(data->tid_entry);
 
887
 
 
888
        if (sample_type & PERF_SAMPLE_TIME)
 
889
                size += sizeof(data->time);
 
890
 
 
891
        if (sample_type & PERF_SAMPLE_ID)
 
892
                size += sizeof(data->id);
 
893
 
 
894
        if (sample_type & PERF_SAMPLE_STREAM_ID)
 
895
                size += sizeof(data->stream_id);
 
896
 
 
897
        if (sample_type & PERF_SAMPLE_CPU)
 
898
                size += sizeof(data->cpu_entry);
 
899
 
 
900
        event->id_header_size = size;
 
901
}
 
902
 
 
903
static void perf_group_attach(struct perf_event *event)
 
904
{
 
905
        struct perf_event *group_leader = event->group_leader, *pos;
 
906
 
 
907
        /*
 
908
         * We can have double attach due to group movement in perf_event_open.
 
909
         */
 
910
        if (event->attach_state & PERF_ATTACH_GROUP)
 
911
                return;
 
912
 
 
913
        event->attach_state |= PERF_ATTACH_GROUP;
 
914
 
 
915
        if (group_leader == event)
 
916
                return;
 
917
 
 
918
        if (group_leader->group_flags & PERF_GROUP_SOFTWARE &&
 
919
                        !is_software_event(event))
 
920
                group_leader->group_flags &= ~PERF_GROUP_SOFTWARE;
 
921
 
 
922
        list_add_tail(&event->group_entry, &group_leader->sibling_list);
 
923
        group_leader->nr_siblings++;
 
924
 
 
925
        perf_event__header_size(group_leader);
 
926
 
 
927
        list_for_each_entry(pos, &group_leader->sibling_list, group_entry)
 
928
                perf_event__header_size(pos);
 
929
}
 
930
 
 
931
/*
 
932
 * Remove a event from the lists for its context.
 
933
 * Must be called with ctx->mutex and ctx->lock held.
 
934
 */
 
935
static void
 
936
list_del_event(struct perf_event *event, struct perf_event_context *ctx)
 
937
{
 
938
        struct perf_cpu_context *cpuctx;
 
939
        /*
 
940
         * We can have double detach due to exit/hot-unplug + close.
 
941
         */
 
942
        if (!(event->attach_state & PERF_ATTACH_CONTEXT))
 
943
                return;
 
944
 
 
945
        event->attach_state &= ~PERF_ATTACH_CONTEXT;
 
946
 
 
947
        if (is_cgroup_event(event)) {
 
948
                ctx->nr_cgroups--;
 
949
                cpuctx = __get_cpu_context(ctx);
 
950
                /*
 
951
                 * if there are no more cgroup events
 
952
                 * then cler cgrp to avoid stale pointer
 
953
                 * in update_cgrp_time_from_cpuctx()
 
954
                 */
 
955
                if (!ctx->nr_cgroups)
 
956
                        cpuctx->cgrp = NULL;
 
957
        }
 
958
 
 
959
        ctx->nr_events--;
 
960
        if (event->attr.inherit_stat)
 
961
                ctx->nr_stat--;
 
962
 
 
963
        list_del_rcu(&event->event_entry);
 
964
 
 
965
        if (event->group_leader == event)
 
966
                list_del_init(&event->group_entry);
 
967
 
 
968
        update_group_times(event);
 
969
 
 
970
        /*
 
971
         * If event was in error state, then keep it
 
972
         * that way, otherwise bogus counts will be
 
973
         * returned on read(). The only way to get out
 
974
         * of error state is by explicit re-enabling
 
975
         * of the event
 
976
         */
 
977
        if (event->state > PERF_EVENT_STATE_OFF)
 
978
                event->state = PERF_EVENT_STATE_OFF;
 
979
}
 
980
 
 
981
static void perf_group_detach(struct perf_event *event)
 
982
{
 
983
        struct perf_event *sibling, *tmp;
 
984
        struct list_head *list = NULL;
 
985
 
 
986
        /*
 
987
         * We can have double detach due to exit/hot-unplug + close.
 
988
         */
 
989
        if (!(event->attach_state & PERF_ATTACH_GROUP))
 
990
                return;
 
991
 
 
992
        event->attach_state &= ~PERF_ATTACH_GROUP;
 
993
 
 
994
        /*
 
995
         * If this is a sibling, remove it from its group.
 
996
         */
 
997
        if (event->group_leader != event) {
 
998
                list_del_init(&event->group_entry);
 
999
                event->group_leader->nr_siblings--;
 
1000
                goto out;
 
1001
        }
 
1002
 
 
1003
        if (!list_empty(&event->group_entry))
 
1004
                list = &event->group_entry;
 
1005
 
 
1006
        /*
 
1007
         * If this was a group event with sibling events then
 
1008
         * upgrade the siblings to singleton events by adding them
 
1009
         * to whatever list we are on.
 
1010
         */
 
1011
        list_for_each_entry_safe(sibling, tmp, &event->sibling_list, group_entry) {
 
1012
                if (list)
 
1013
                        list_move_tail(&sibling->group_entry, list);
 
1014
                sibling->group_leader = sibling;
 
1015
 
 
1016
                /* Inherit group flags from the previous leader */
 
1017
                sibling->group_flags = event->group_flags;
 
1018
        }
 
1019
 
 
1020
out:
 
1021
        perf_event__header_size(event->group_leader);
 
1022
 
 
1023
        list_for_each_entry(tmp, &event->group_leader->sibling_list, group_entry)
 
1024
                perf_event__header_size(tmp);
 
1025
}
 
1026
 
 
1027
static inline int
 
1028
event_filter_match(struct perf_event *event)
 
1029
{
 
1030
        return (event->cpu == -1 || event->cpu == smp_processor_id())
 
1031
            && perf_cgroup_match(event);
 
1032
}
 
1033
 
 
1034
static void
 
1035
event_sched_out(struct perf_event *event,
 
1036
                  struct perf_cpu_context *cpuctx,
 
1037
                  struct perf_event_context *ctx)
 
1038
{
 
1039
        u64 tstamp = perf_event_time(event);
 
1040
        u64 delta;
 
1041
        /*
 
1042
         * An event which could not be activated because of
 
1043
         * filter mismatch still needs to have its timings
 
1044
         * maintained, otherwise bogus information is return
 
1045
         * via read() for time_enabled, time_running:
 
1046
         */
 
1047
        if (event->state == PERF_EVENT_STATE_INACTIVE
 
1048
            && !event_filter_match(event)) {
 
1049
                delta = tstamp - event->tstamp_stopped;
 
1050
                event->tstamp_running += delta;
 
1051
                event->tstamp_stopped = tstamp;
 
1052
        }
 
1053
 
 
1054
        if (event->state != PERF_EVENT_STATE_ACTIVE)
 
1055
                return;
 
1056
 
 
1057
        event->state = PERF_EVENT_STATE_INACTIVE;
 
1058
        if (event->pending_disable) {
 
1059
                event->pending_disable = 0;
 
1060
                event->state = PERF_EVENT_STATE_OFF;
 
1061
        }
 
1062
        event->tstamp_stopped = tstamp;
 
1063
        event->pmu->del(event, 0);
 
1064
        event->oncpu = -1;
 
1065
 
 
1066
        if (!is_software_event(event))
 
1067
                cpuctx->active_oncpu--;
 
1068
        ctx->nr_active--;
 
1069
        if (event->attr.exclusive || !cpuctx->active_oncpu)
 
1070
                cpuctx->exclusive = 0;
 
1071
}
 
1072
 
 
1073
static void
 
1074
group_sched_out(struct perf_event *group_event,
 
1075
                struct perf_cpu_context *cpuctx,
 
1076
                struct perf_event_context *ctx)
 
1077
{
 
1078
        struct perf_event *event;
 
1079
        int state = group_event->state;
 
1080
 
 
1081
        event_sched_out(group_event, cpuctx, ctx);
 
1082
 
 
1083
        /*
 
1084
         * Schedule out siblings (if any):
 
1085
         */
 
1086
        list_for_each_entry(event, &group_event->sibling_list, group_entry)
 
1087
                event_sched_out(event, cpuctx, ctx);
 
1088
 
 
1089
        if (state == PERF_EVENT_STATE_ACTIVE && group_event->attr.exclusive)
 
1090
                cpuctx->exclusive = 0;
 
1091
}
 
1092
 
 
1093
/*
 
1094
 * Cross CPU call to remove a performance event
 
1095
 *
 
1096
 * We disable the event on the hardware level first. After that we
 
1097
 * remove it from the context list.
 
1098
 */
 
1099
static int __perf_remove_from_context(void *info)
 
1100
{
 
1101
        struct perf_event *event = info;
 
1102
        struct perf_event_context *ctx = event->ctx;
 
1103
        struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
 
1104
 
 
1105
        raw_spin_lock(&ctx->lock);
 
1106
        event_sched_out(event, cpuctx, ctx);
 
1107
        list_del_event(event, ctx);
 
1108
        raw_spin_unlock(&ctx->lock);
 
1109
 
 
1110
        return 0;
 
1111
}
 
1112
 
 
1113
 
 
1114
/*
 
1115
 * Remove the event from a task's (or a CPU's) list of events.
 
1116
 *
 
1117
 * CPU events are removed with a smp call. For task events we only
 
1118
 * call when the task is on a CPU.
 
1119
 *
 
1120
 * If event->ctx is a cloned context, callers must make sure that
 
1121
 * every task struct that event->ctx->task could possibly point to
 
1122
 * remains valid.  This is OK when called from perf_release since
 
1123
 * that only calls us on the top-level context, which can't be a clone.
 
1124
 * When called from perf_event_exit_task, it's OK because the
 
1125
 * context has been detached from its task.
 
1126
 */
 
1127
static void perf_remove_from_context(struct perf_event *event)
 
1128
{
 
1129
        struct perf_event_context *ctx = event->ctx;
 
1130
        struct task_struct *task = ctx->task;
 
1131
 
 
1132
        lockdep_assert_held(&ctx->mutex);
 
1133
 
 
1134
        if (!task) {
 
1135
                /*
 
1136
                 * Per cpu events are removed via an smp call and
 
1137
                 * the removal is always successful.
 
1138
                 */
 
1139
                cpu_function_call(event->cpu, __perf_remove_from_context, event);
 
1140
                return;
 
1141
        }
 
1142
 
 
1143
retry:
 
1144
        if (!task_function_call(task, __perf_remove_from_context, event))
 
1145
                return;
 
1146
 
 
1147
        raw_spin_lock_irq(&ctx->lock);
 
1148
        /*
 
1149
         * If we failed to find a running task, but find the context active now
 
1150
         * that we've acquired the ctx->lock, retry.
 
1151
         */
 
1152
        if (ctx->is_active) {
 
1153
                raw_spin_unlock_irq(&ctx->lock);
 
1154
                goto retry;
 
1155
        }
 
1156
 
 
1157
        /*
 
1158
         * Since the task isn't running, its safe to remove the event, us
 
1159
         * holding the ctx->lock ensures the task won't get scheduled in.
 
1160
         */
 
1161
        list_del_event(event, ctx);
 
1162
        raw_spin_unlock_irq(&ctx->lock);
 
1163
}
 
1164
 
 
1165
/*
 
1166
 * Cross CPU call to disable a performance event
 
1167
 */
 
1168
static int __perf_event_disable(void *info)
 
1169
{
 
1170
        struct perf_event *event = info;
 
1171
        struct perf_event_context *ctx = event->ctx;
 
1172
        struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
 
1173
 
 
1174
        /*
 
1175
         * If this is a per-task event, need to check whether this
 
1176
         * event's task is the current task on this cpu.
 
1177
         *
 
1178
         * Can trigger due to concurrent perf_event_context_sched_out()
 
1179
         * flipping contexts around.
 
1180
         */
 
1181
        if (ctx->task && cpuctx->task_ctx != ctx)
 
1182
                return -EINVAL;
 
1183
 
 
1184
        raw_spin_lock(&ctx->lock);
 
1185
 
 
1186
        /*
 
1187
         * If the event is on, turn it off.
 
1188
         * If it is in error state, leave it in error state.
 
1189
         */
 
1190
        if (event->state >= PERF_EVENT_STATE_INACTIVE) {
 
1191
                update_context_time(ctx);
 
1192
                update_cgrp_time_from_event(event);
 
1193
                update_group_times(event);
 
1194
                if (event == event->group_leader)
 
1195
                        group_sched_out(event, cpuctx, ctx);
 
1196
                else
 
1197
                        event_sched_out(event, cpuctx, ctx);
 
1198
                event->state = PERF_EVENT_STATE_OFF;
 
1199
        }
 
1200
 
 
1201
        raw_spin_unlock(&ctx->lock);
 
1202
 
 
1203
        return 0;
 
1204
}
 
1205
 
 
1206
/*
 
1207
 * Disable a event.
 
1208
 *
 
1209
 * If event->ctx is a cloned context, callers must make sure that
 
1210
 * every task struct that event->ctx->task could possibly point to
 
1211
 * remains valid.  This condition is satisifed when called through
 
1212
 * perf_event_for_each_child or perf_event_for_each because they
 
1213
 * hold the top-level event's child_mutex, so any descendant that
 
1214
 * goes to exit will block in sync_child_event.
 
1215
 * When called from perf_pending_event it's OK because event->ctx
 
1216
 * is the current context on this CPU and preemption is disabled,
 
1217
 * hence we can't get into perf_event_task_sched_out for this context.
 
1218
 */
 
1219
void perf_event_disable(struct perf_event *event)
 
1220
{
 
1221
        struct perf_event_context *ctx = event->ctx;
 
1222
        struct task_struct *task = ctx->task;
 
1223
 
 
1224
        if (!task) {
 
1225
                /*
 
1226
                 * Disable the event on the cpu that it's on
 
1227
                 */
 
1228
                cpu_function_call(event->cpu, __perf_event_disable, event);
 
1229
                return;
 
1230
        }
 
1231
 
 
1232
retry:
 
1233
        if (!task_function_call(task, __perf_event_disable, event))
 
1234
                return;
 
1235
 
 
1236
        raw_spin_lock_irq(&ctx->lock);
 
1237
        /*
 
1238
         * If the event is still active, we need to retry the cross-call.
 
1239
         */
 
1240
        if (event->state == PERF_EVENT_STATE_ACTIVE) {
 
1241
                raw_spin_unlock_irq(&ctx->lock);
 
1242
                /*
 
1243
                 * Reload the task pointer, it might have been changed by
 
1244
                 * a concurrent perf_event_context_sched_out().
 
1245
                 */
 
1246
                task = ctx->task;
 
1247
                goto retry;
 
1248
        }
 
1249
 
 
1250
        /*
 
1251
         * Since we have the lock this context can't be scheduled
 
1252
         * in, so we can change the state safely.
 
1253
         */
 
1254
        if (event->state == PERF_EVENT_STATE_INACTIVE) {
 
1255
                update_group_times(event);
 
1256
                event->state = PERF_EVENT_STATE_OFF;
 
1257
        }
 
1258
        raw_spin_unlock_irq(&ctx->lock);
 
1259
}
 
1260
 
 
1261
static void perf_set_shadow_time(struct perf_event *event,
 
1262
                                 struct perf_event_context *ctx,
 
1263
                                 u64 tstamp)
 
1264
{
 
1265
        /*
 
1266
         * use the correct time source for the time snapshot
 
1267
         *
 
1268
         * We could get by without this by leveraging the
 
1269
         * fact that to get to this function, the caller
 
1270
         * has most likely already called update_context_time()
 
1271
         * and update_cgrp_time_xx() and thus both timestamp
 
1272
         * are identical (or very close). Given that tstamp is,
 
1273
         * already adjusted for cgroup, we could say that:
 
1274
         *    tstamp - ctx->timestamp
 
1275
         * is equivalent to
 
1276
         *    tstamp - cgrp->timestamp.
 
1277
         *
 
1278
         * Then, in perf_output_read(), the calculation would
 
1279
         * work with no changes because:
 
1280
         * - event is guaranteed scheduled in
 
1281
         * - no scheduled out in between
 
1282
         * - thus the timestamp would be the same
 
1283
         *
 
1284
         * But this is a bit hairy.
 
1285
         *
 
1286
         * So instead, we have an explicit cgroup call to remain
 
1287
         * within the time time source all along. We believe it
 
1288
         * is cleaner and simpler to understand.
 
1289
         */
 
1290
        if (is_cgroup_event(event))
 
1291
                perf_cgroup_set_shadow_time(event, tstamp);
 
1292
        else
 
1293
                event->shadow_ctx_time = tstamp - ctx->timestamp;
 
1294
}
 
1295
 
 
1296
#define MAX_INTERRUPTS (~0ULL)
 
1297
 
 
1298
static void perf_log_throttle(struct perf_event *event, int enable);
 
1299
 
 
1300
static int
 
1301
event_sched_in(struct perf_event *event,
 
1302
                 struct perf_cpu_context *cpuctx,
 
1303
                 struct perf_event_context *ctx)
 
1304
{
 
1305
        u64 tstamp = perf_event_time(event);
 
1306
 
 
1307
        if (event->state <= PERF_EVENT_STATE_OFF)
 
1308
                return 0;
 
1309
 
 
1310
        event->state = PERF_EVENT_STATE_ACTIVE;
 
1311
        event->oncpu = smp_processor_id();
 
1312
 
 
1313
        /*
 
1314
         * Unthrottle events, since we scheduled we might have missed several
 
1315
         * ticks already, also for a heavily scheduling task there is little
 
1316
         * guarantee it'll get a tick in a timely manner.
 
1317
         */
 
1318
        if (unlikely(event->hw.interrupts == MAX_INTERRUPTS)) {
 
1319
                perf_log_throttle(event, 1);
 
1320
                event->hw.interrupts = 0;
 
1321
        }
 
1322
 
 
1323
        /*
 
1324
         * The new state must be visible before we turn it on in the hardware:
 
1325
         */
 
1326
        smp_wmb();
 
1327
 
 
1328
        if (event->pmu->add(event, PERF_EF_START)) {
 
1329
                event->state = PERF_EVENT_STATE_INACTIVE;
 
1330
                event->oncpu = -1;
 
1331
                return -EAGAIN;
 
1332
        }
 
1333
 
 
1334
        event->tstamp_running += tstamp - event->tstamp_stopped;
 
1335
 
 
1336
        perf_set_shadow_time(event, ctx, tstamp);
 
1337
 
 
1338
        if (!is_software_event(event))
 
1339
                cpuctx->active_oncpu++;
 
1340
        ctx->nr_active++;
 
1341
 
 
1342
        if (event->attr.exclusive)
 
1343
                cpuctx->exclusive = 1;
 
1344
 
 
1345
        return 0;
 
1346
}
 
1347
 
 
1348
static int
 
1349
group_sched_in(struct perf_event *group_event,
 
1350
               struct perf_cpu_context *cpuctx,
 
1351
               struct perf_event_context *ctx)
 
1352
{
 
1353
        struct perf_event *event, *partial_group = NULL;
 
1354
        struct pmu *pmu = group_event->pmu;
 
1355
        u64 now = ctx->time;
 
1356
        bool simulate = false;
 
1357
 
 
1358
        if (group_event->state == PERF_EVENT_STATE_OFF)
 
1359
                return 0;
 
1360
 
 
1361
        pmu->start_txn(pmu);
 
1362
 
 
1363
        if (event_sched_in(group_event, cpuctx, ctx)) {
 
1364
                pmu->cancel_txn(pmu);
 
1365
                return -EAGAIN;
 
1366
        }
 
1367
 
 
1368
        /*
 
1369
         * Schedule in siblings as one group (if any):
 
1370
         */
 
1371
        list_for_each_entry(event, &group_event->sibling_list, group_entry) {
 
1372
                if (event_sched_in(event, cpuctx, ctx)) {
 
1373
                        partial_group = event;
 
1374
                        goto group_error;
 
1375
                }
 
1376
        }
 
1377
 
 
1378
        if (!pmu->commit_txn(pmu))
 
1379
                return 0;
 
1380
 
 
1381
group_error:
 
1382
        /*
 
1383
         * Groups can be scheduled in as one unit only, so undo any
 
1384
         * partial group before returning:
 
1385
         * The events up to the failed event are scheduled out normally,
 
1386
         * tstamp_stopped will be updated.
 
1387
         *
 
1388
         * The failed events and the remaining siblings need to have
 
1389
         * their timings updated as if they had gone thru event_sched_in()
 
1390
         * and event_sched_out(). This is required to get consistent timings
 
1391
         * across the group. This also takes care of the case where the group
 
1392
         * could never be scheduled by ensuring tstamp_stopped is set to mark
 
1393
         * the time the event was actually stopped, such that time delta
 
1394
         * calculation in update_event_times() is correct.
 
1395
         */
 
1396
        list_for_each_entry(event, &group_event->sibling_list, group_entry) {
 
1397
                if (event == partial_group)
 
1398
                        simulate = true;
 
1399
 
 
1400
                if (simulate) {
 
1401
                        event->tstamp_running += now - event->tstamp_stopped;
 
1402
                        event->tstamp_stopped = now;
 
1403
                } else {
 
1404
                        event_sched_out(event, cpuctx, ctx);
 
1405
                }
 
1406
        }
 
1407
        event_sched_out(group_event, cpuctx, ctx);
 
1408
 
 
1409
        pmu->cancel_txn(pmu);
 
1410
 
 
1411
        return -EAGAIN;
 
1412
}
 
1413
 
 
1414
/*
 
1415
 * Work out whether we can put this event group on the CPU now.
 
1416
 */
 
1417
static int group_can_go_on(struct perf_event *event,
 
1418
                           struct perf_cpu_context *cpuctx,
 
1419
                           int can_add_hw)
 
1420
{
 
1421
        /*
 
1422
         * Groups consisting entirely of software events can always go on.
 
1423
         */
 
1424
        if (event->group_flags & PERF_GROUP_SOFTWARE)
 
1425
                return 1;
 
1426
        /*
 
1427
         * If an exclusive group is already on, no other hardware
 
1428
         * events can go on.
 
1429
         */
 
1430
        if (cpuctx->exclusive)
 
1431
                return 0;
 
1432
        /*
 
1433
         * If this group is exclusive and there are already
 
1434
         * events on the CPU, it can't go on.
 
1435
         */
 
1436
        if (event->attr.exclusive && cpuctx->active_oncpu)
 
1437
                return 0;
 
1438
        /*
 
1439
         * Otherwise, try to add it if all previous groups were able
 
1440
         * to go on.
 
1441
         */
 
1442
        return can_add_hw;
 
1443
}
 
1444
 
 
1445
static void add_event_to_ctx(struct perf_event *event,
 
1446
                               struct perf_event_context *ctx)
 
1447
{
 
1448
        u64 tstamp = perf_event_time(event);
 
1449
 
 
1450
        list_add_event(event, ctx);
 
1451
        perf_group_attach(event);
 
1452
        event->tstamp_enabled = tstamp;
 
1453
        event->tstamp_running = tstamp;
 
1454
        event->tstamp_stopped = tstamp;
 
1455
}
 
1456
 
 
1457
static void perf_event_context_sched_in(struct perf_event_context *ctx,
 
1458
                                        struct task_struct *tsk);
 
1459
 
 
1460
/*
 
1461
 * Cross CPU call to install and enable a performance event
 
1462
 *
 
1463
 * Must be called with ctx->mutex held
 
1464
 */
 
1465
static int  __perf_install_in_context(void *info)
 
1466
{
 
1467
        struct perf_event *event = info;
 
1468
        struct perf_event_context *ctx = event->ctx;
 
1469
        struct perf_event *leader = event->group_leader;
 
1470
        struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
 
1471
        int err;
 
1472
 
 
1473
        /*
 
1474
         * In case we're installing a new context to an already running task,
 
1475
         * could also happen before perf_event_task_sched_in() on architectures
 
1476
         * which do context switches with IRQs enabled.
 
1477
         */
 
1478
        if (ctx->task && !cpuctx->task_ctx)
 
1479
                perf_event_context_sched_in(ctx, ctx->task);
 
1480
 
 
1481
        raw_spin_lock(&ctx->lock);
 
1482
        ctx->is_active = 1;
 
1483
        update_context_time(ctx);
 
1484
        /*
 
1485
         * update cgrp time only if current cgrp
 
1486
         * matches event->cgrp. Must be done before
 
1487
         * calling add_event_to_ctx()
 
1488
         */
 
1489
        update_cgrp_time_from_event(event);
 
1490
 
 
1491
        add_event_to_ctx(event, ctx);
 
1492
 
 
1493
        if (!event_filter_match(event))
 
1494
                goto unlock;
 
1495
 
 
1496
        /*
 
1497
         * Don't put the event on if it is disabled or if
 
1498
         * it is in a group and the group isn't on.
 
1499
         */
 
1500
        if (event->state != PERF_EVENT_STATE_INACTIVE ||
 
1501
            (leader != event && leader->state != PERF_EVENT_STATE_ACTIVE))
 
1502
                goto unlock;
 
1503
 
 
1504
        /*
 
1505
         * An exclusive event can't go on if there are already active
 
1506
         * hardware events, and no hardware event can go on if there
 
1507
         * is already an exclusive event on.
 
1508
         */
 
1509
        if (!group_can_go_on(event, cpuctx, 1))
 
1510
                err = -EEXIST;
 
1511
        else
 
1512
                err = event_sched_in(event, cpuctx, ctx);
 
1513
 
 
1514
        if (err) {
 
1515
                /*
 
1516
                 * This event couldn't go on.  If it is in a group
 
1517
                 * then we have to pull the whole group off.
 
1518
                 * If the event group is pinned then put it in error state.
 
1519
                 */
 
1520
                if (leader != event)
 
1521
                        group_sched_out(leader, cpuctx, ctx);
 
1522
                if (leader->attr.pinned) {
 
1523
                        update_group_times(leader);
 
1524
                        leader->state = PERF_EVENT_STATE_ERROR;
 
1525
                }
 
1526
        }
 
1527
 
 
1528
unlock:
 
1529
        raw_spin_unlock(&ctx->lock);
 
1530
 
 
1531
        return 0;
 
1532
}
 
1533
 
 
1534
/*
 
1535
 * Attach a performance event to a context
 
1536
 *
 
1537
 * First we add the event to the list with the hardware enable bit
 
1538
 * in event->hw_config cleared.
 
1539
 *
 
1540
 * If the event is attached to a task which is on a CPU we use a smp
 
1541
 * call to enable it in the task context. The task might have been
 
1542
 * scheduled away, but we check this in the smp call again.
 
1543
 */
 
1544
static void
 
1545
perf_install_in_context(struct perf_event_context *ctx,
 
1546
                        struct perf_event *event,
 
1547
                        int cpu)
 
1548
{
 
1549
        struct task_struct *task = ctx->task;
 
1550
 
 
1551
        lockdep_assert_held(&ctx->mutex);
 
1552
 
 
1553
        event->ctx = ctx;
 
1554
 
 
1555
        if (!task) {
 
1556
                /*
 
1557
                 * Per cpu events are installed via an smp call and
 
1558
                 * the install is always successful.
 
1559
                 */
 
1560
                cpu_function_call(cpu, __perf_install_in_context, event);
 
1561
                return;
 
1562
        }
 
1563
 
 
1564
retry:
 
1565
        if (!task_function_call(task, __perf_install_in_context, event))
 
1566
                return;
 
1567
 
 
1568
        raw_spin_lock_irq(&ctx->lock);
 
1569
        /*
 
1570
         * If we failed to find a running task, but find the context active now
 
1571
         * that we've acquired the ctx->lock, retry.
 
1572
         */
 
1573
        if (ctx->is_active) {
 
1574
                raw_spin_unlock_irq(&ctx->lock);
 
1575
                goto retry;
 
1576
        }
 
1577
 
 
1578
        /*
 
1579
         * Since the task isn't running, its safe to add the event, us holding
 
1580
         * the ctx->lock ensures the task won't get scheduled in.
 
1581
         */
 
1582
        add_event_to_ctx(event, ctx);
 
1583
        raw_spin_unlock_irq(&ctx->lock);
 
1584
}
 
1585
 
 
1586
/*
 
1587
 * Put a event into inactive state and update time fields.
 
1588
 * Enabling the leader of a group effectively enables all
 
1589
 * the group members that aren't explicitly disabled, so we
 
1590
 * have to update their ->tstamp_enabled also.
 
1591
 * Note: this works for group members as well as group leaders
 
1592
 * since the non-leader members' sibling_lists will be empty.
 
1593
 */
 
1594
static void __perf_event_mark_enabled(struct perf_event *event,
 
1595
                                        struct perf_event_context *ctx)
 
1596
{
 
1597
        struct perf_event *sub;
 
1598
        u64 tstamp = perf_event_time(event);
 
1599
 
 
1600
        event->state = PERF_EVENT_STATE_INACTIVE;
 
1601
        event->tstamp_enabled = tstamp - event->total_time_enabled;
 
1602
        list_for_each_entry(sub, &event->sibling_list, group_entry) {
 
1603
                if (sub->state >= PERF_EVENT_STATE_INACTIVE)
 
1604
                        sub->tstamp_enabled = tstamp - sub->total_time_enabled;
 
1605
        }
 
1606
}
 
1607
 
 
1608
/*
 
1609
 * Cross CPU call to enable a performance event
 
1610
 */
 
1611
static int __perf_event_enable(void *info)
 
1612
{
 
1613
        struct perf_event *event = info;
 
1614
        struct perf_event_context *ctx = event->ctx;
 
1615
        struct perf_event *leader = event->group_leader;
 
1616
        struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
 
1617
        int err;
 
1618
 
 
1619
        if (WARN_ON_ONCE(!ctx->is_active))
 
1620
                return -EINVAL;
 
1621
 
 
1622
        raw_spin_lock(&ctx->lock);
 
1623
        update_context_time(ctx);
 
1624
 
 
1625
        if (event->state >= PERF_EVENT_STATE_INACTIVE)
 
1626
                goto unlock;
 
1627
 
 
1628
        /*
 
1629
         * set current task's cgroup time reference point
 
1630
         */
 
1631
        perf_cgroup_set_timestamp(current, ctx);
 
1632
 
 
1633
        __perf_event_mark_enabled(event, ctx);
 
1634
 
 
1635
        if (!event_filter_match(event)) {
 
1636
                if (is_cgroup_event(event))
 
1637
                        perf_cgroup_defer_enabled(event);
 
1638
                goto unlock;
 
1639
        }
 
1640
 
 
1641
        /*
 
1642
         * If the event is in a group and isn't the group leader,
 
1643
         * then don't put it on unless the group is on.
 
1644
         */
 
1645
        if (leader != event && leader->state != PERF_EVENT_STATE_ACTIVE)
 
1646
                goto unlock;
 
1647
 
 
1648
        if (!group_can_go_on(event, cpuctx, 1)) {
 
1649
                err = -EEXIST;
 
1650
        } else {
 
1651
                if (event == leader)
 
1652
                        err = group_sched_in(event, cpuctx, ctx);
 
1653
                else
 
1654
                        err = event_sched_in(event, cpuctx, ctx);
 
1655
        }
 
1656
 
 
1657
        if (err) {
 
1658
                /*
 
1659
                 * If this event can't go on and it's part of a
 
1660
                 * group, then the whole group has to come off.
 
1661
                 */
 
1662
                if (leader != event)
 
1663
                        group_sched_out(leader, cpuctx, ctx);
 
1664
                if (leader->attr.pinned) {
 
1665
                        update_group_times(leader);
 
1666
                        leader->state = PERF_EVENT_STATE_ERROR;
 
1667
                }
 
1668
        }
 
1669
 
 
1670
unlock:
 
1671
        raw_spin_unlock(&ctx->lock);
 
1672
 
 
1673
        return 0;
 
1674
}
 
1675
 
 
1676
/*
 
1677
 * Enable a event.
 
1678
 *
 
1679
 * If event->ctx is a cloned context, callers must make sure that
 
1680
 * every task struct that event->ctx->task could possibly point to
 
1681
 * remains valid.  This condition is satisfied when called through
 
1682
 * perf_event_for_each_child or perf_event_for_each as described
 
1683
 * for perf_event_disable.
 
1684
 */
 
1685
void perf_event_enable(struct perf_event *event)
 
1686
{
 
1687
        struct perf_event_context *ctx = event->ctx;
 
1688
        struct task_struct *task = ctx->task;
 
1689
 
 
1690
        if (!task) {
 
1691
                /*
 
1692
                 * Enable the event on the cpu that it's on
 
1693
                 */
 
1694
                cpu_function_call(event->cpu, __perf_event_enable, event);
 
1695
                return;
 
1696
        }
 
1697
 
 
1698
        raw_spin_lock_irq(&ctx->lock);
 
1699
        if (event->state >= PERF_EVENT_STATE_INACTIVE)
 
1700
                goto out;
 
1701
 
 
1702
        /*
 
1703
         * If the event is in error state, clear that first.
 
1704
         * That way, if we see the event in error state below, we
 
1705
         * know that it has gone back into error state, as distinct
 
1706
         * from the task having been scheduled away before the
 
1707
         * cross-call arrived.
 
1708
         */
 
1709
        if (event->state == PERF_EVENT_STATE_ERROR)
 
1710
                event->state = PERF_EVENT_STATE_OFF;
 
1711
 
 
1712
retry:
 
1713
        if (!ctx->is_active) {
 
1714
                __perf_event_mark_enabled(event, ctx);
 
1715
                goto out;
 
1716
        }
 
1717
 
 
1718
        raw_spin_unlock_irq(&ctx->lock);
 
1719
 
 
1720
        if (!task_function_call(task, __perf_event_enable, event))
 
1721
                return;
 
1722
 
 
1723
        raw_spin_lock_irq(&ctx->lock);
 
1724
 
 
1725
        /*
 
1726
         * If the context is active and the event is still off,
 
1727
         * we need to retry the cross-call.
 
1728
         */
 
1729
        if (ctx->is_active && event->state == PERF_EVENT_STATE_OFF) {
 
1730
                /*
 
1731
                 * task could have been flipped by a concurrent
 
1732
                 * perf_event_context_sched_out()
 
1733
                 */
 
1734
                task = ctx->task;
 
1735
                goto retry;
 
1736
        }
 
1737
 
 
1738
out:
 
1739
        raw_spin_unlock_irq(&ctx->lock);
 
1740
}
 
1741
 
 
1742
static int perf_event_refresh(struct perf_event *event, int refresh)
 
1743
{
 
1744
        /*
 
1745
         * not supported on inherited events
 
1746
         */
 
1747
        if (event->attr.inherit || !is_sampling_event(event))
 
1748
                return -EINVAL;
 
1749
 
 
1750
        atomic_add(refresh, &event->event_limit);
 
1751
        perf_event_enable(event);
 
1752
 
 
1753
        return 0;
 
1754
}
 
1755
 
 
1756
static void ctx_sched_out(struct perf_event_context *ctx,
 
1757
                          struct perf_cpu_context *cpuctx,
 
1758
                          enum event_type_t event_type)
 
1759
{
 
1760
        struct perf_event *event;
 
1761
 
 
1762
        raw_spin_lock(&ctx->lock);
 
1763
        perf_pmu_disable(ctx->pmu);
 
1764
        ctx->is_active = 0;
 
1765
        if (likely(!ctx->nr_events))
 
1766
                goto out;
 
1767
        update_context_time(ctx);
 
1768
        update_cgrp_time_from_cpuctx(cpuctx);
 
1769
 
 
1770
        if (!ctx->nr_active)
 
1771
                goto out;
 
1772
 
 
1773
        if (event_type & EVENT_PINNED) {
 
1774
                list_for_each_entry(event, &ctx->pinned_groups, group_entry)
 
1775
                        group_sched_out(event, cpuctx, ctx);
 
1776
        }
 
1777
 
 
1778
        if (event_type & EVENT_FLEXIBLE) {
 
1779
                list_for_each_entry(event, &ctx->flexible_groups, group_entry)
 
1780
                        group_sched_out(event, cpuctx, ctx);
 
1781
        }
 
1782
out:
 
1783
        perf_pmu_enable(ctx->pmu);
 
1784
        raw_spin_unlock(&ctx->lock);
 
1785
}
 
1786
 
 
1787
/*
 
1788
 * Test whether two contexts are equivalent, i.e. whether they
 
1789
 * have both been cloned from the same version of the same context
 
1790
 * and they both have the same number of enabled events.
 
1791
 * If the number of enabled events is the same, then the set
 
1792
 * of enabled events should be the same, because these are both
 
1793
 * inherited contexts, therefore we can't access individual events
 
1794
 * in them directly with an fd; we can only enable/disable all
 
1795
 * events via prctl, or enable/disable all events in a family
 
1796
 * via ioctl, which will have the same effect on both contexts.
 
1797
 */
 
1798
static int context_equiv(struct perf_event_context *ctx1,
 
1799
                         struct perf_event_context *ctx2)
 
1800
{
 
1801
        return ctx1->parent_ctx && ctx1->parent_ctx == ctx2->parent_ctx
 
1802
                && ctx1->parent_gen == ctx2->parent_gen
 
1803
                && !ctx1->pin_count && !ctx2->pin_count;
 
1804
}
 
1805
 
 
1806
static void __perf_event_sync_stat(struct perf_event *event,
 
1807
                                     struct perf_event *next_event)
 
1808
{
 
1809
        u64 value;
 
1810
 
 
1811
        if (!event->attr.inherit_stat)
 
1812
                return;
 
1813
 
 
1814
        /*
 
1815
         * Update the event value, we cannot use perf_event_read()
 
1816
         * because we're in the middle of a context switch and have IRQs
 
1817
         * disabled, which upsets smp_call_function_single(), however
 
1818
         * we know the event must be on the current CPU, therefore we
 
1819
         * don't need to use it.
 
1820
         */
 
1821
        switch (event->state) {
 
1822
        case PERF_EVENT_STATE_ACTIVE:
 
1823
                event->pmu->read(event);
 
1824
                /* fall-through */
 
1825
 
 
1826
        case PERF_EVENT_STATE_INACTIVE:
 
1827
                update_event_times(event);
 
1828
                break;
 
1829
 
 
1830
        default:
 
1831
                break;
 
1832
        }
 
1833
 
 
1834
        /*
 
1835
         * In order to keep per-task stats reliable we need to flip the event
 
1836
         * values when we flip the contexts.
 
1837
         */
 
1838
        value = local64_read(&next_event->count);
 
1839
        value = local64_xchg(&event->count, value);
 
1840
        local64_set(&next_event->count, value);
 
1841
 
 
1842
        swap(event->total_time_enabled, next_event->total_time_enabled);
 
1843
        swap(event->total_time_running, next_event->total_time_running);
 
1844
 
 
1845
        /*
 
1846
         * Since we swizzled the values, update the user visible data too.
 
1847
         */
 
1848
        perf_event_update_userpage(event);
 
1849
        perf_event_update_userpage(next_event);
 
1850
}
 
1851
 
 
1852
#define list_next_entry(pos, member) \
 
1853
        list_entry(pos->member.next, typeof(*pos), member)
 
1854
 
 
1855
static void perf_event_sync_stat(struct perf_event_context *ctx,
 
1856
                                   struct perf_event_context *next_ctx)
 
1857
{
 
1858
        struct perf_event *event, *next_event;
 
1859
 
 
1860
        if (!ctx->nr_stat)
 
1861
                return;
 
1862
 
 
1863
        update_context_time(ctx);
 
1864
 
 
1865
        event = list_first_entry(&ctx->event_list,
 
1866
                                   struct perf_event, event_entry);
 
1867
 
 
1868
        next_event = list_first_entry(&next_ctx->event_list,
 
1869
                                        struct perf_event, event_entry);
 
1870
 
 
1871
        while (&event->event_entry != &ctx->event_list &&
 
1872
               &next_event->event_entry != &next_ctx->event_list) {
 
1873
 
 
1874
                __perf_event_sync_stat(event, next_event);
 
1875
 
 
1876
                event = list_next_entry(event, event_entry);
 
1877
                next_event = list_next_entry(next_event, event_entry);
 
1878
        }
 
1879
}
 
1880
 
 
1881
static void perf_event_context_sched_out(struct task_struct *task, int ctxn,
 
1882
                                         struct task_struct *next)
 
1883
{
 
1884
        struct perf_event_context *ctx = task->perf_event_ctxp[ctxn];
 
1885
        struct perf_event_context *next_ctx;
 
1886
        struct perf_event_context *parent;
 
1887
        struct perf_cpu_context *cpuctx;
 
1888
        int do_switch = 1;
 
1889
 
 
1890
        if (likely(!ctx))
 
1891
                return;
 
1892
 
 
1893
        cpuctx = __get_cpu_context(ctx);
 
1894
        if (!cpuctx->task_ctx)
 
1895
                return;
 
1896
 
 
1897
        rcu_read_lock();
 
1898
        parent = rcu_dereference(ctx->parent_ctx);
 
1899
        next_ctx = next->perf_event_ctxp[ctxn];
 
1900
        if (parent && next_ctx &&
 
1901
            rcu_dereference(next_ctx->parent_ctx) == parent) {
 
1902
                /*
 
1903
                 * Looks like the two contexts are clones, so we might be
 
1904
                 * able to optimize the context switch.  We lock both
 
1905
                 * contexts and check that they are clones under the
 
1906
                 * lock (including re-checking that neither has been
 
1907
                 * uncloned in the meantime).  It doesn't matter which
 
1908
                 * order we take the locks because no other cpu could
 
1909
                 * be trying to lock both of these tasks.
 
1910
                 */
 
1911
                raw_spin_lock(&ctx->lock);
 
1912
                raw_spin_lock_nested(&next_ctx->lock, SINGLE_DEPTH_NESTING);
 
1913
                if (context_equiv(ctx, next_ctx)) {
 
1914
                        /*
 
1915
                         * XXX do we need a memory barrier of sorts
 
1916
                         * wrt to rcu_dereference() of perf_event_ctxp
 
1917
                         */
 
1918
                        task->perf_event_ctxp[ctxn] = next_ctx;
 
1919
                        next->perf_event_ctxp[ctxn] = ctx;
 
1920
                        ctx->task = next;
 
1921
                        next_ctx->task = task;
 
1922
                        do_switch = 0;
 
1923
 
 
1924
                        perf_event_sync_stat(ctx, next_ctx);
 
1925
                }
 
1926
                raw_spin_unlock(&next_ctx->lock);
 
1927
                raw_spin_unlock(&ctx->lock);
 
1928
        }
 
1929
        rcu_read_unlock();
 
1930
 
 
1931
        if (do_switch) {
 
1932
                ctx_sched_out(ctx, cpuctx, EVENT_ALL);
 
1933
                cpuctx->task_ctx = NULL;
 
1934
        }
 
1935
}
 
1936
 
 
1937
#define for_each_task_context_nr(ctxn)                                  \
 
1938
        for ((ctxn) = 0; (ctxn) < perf_nr_task_contexts; (ctxn)++)
 
1939
 
 
1940
/*
 
1941
 * Called from scheduler to remove the events of the current task,
 
1942
 * with interrupts disabled.
 
1943
 *
 
1944
 * We stop each event and update the event value in event->count.
 
1945
 *
 
1946
 * This does not protect us against NMI, but disable()
 
1947
 * sets the disabled bit in the control field of event _before_
 
1948
 * accessing the event control register. If a NMI hits, then it will
 
1949
 * not restart the event.
 
1950
 */
 
1951
void __perf_event_task_sched_out(struct task_struct *task,
 
1952
                                 struct task_struct *next)
 
1953
{
 
1954
        int ctxn;
 
1955
 
 
1956
        for_each_task_context_nr(ctxn)
 
1957
                perf_event_context_sched_out(task, ctxn, next);
 
1958
 
 
1959
        /*
 
1960
         * if cgroup events exist on this CPU, then we need
 
1961
         * to check if we have to switch out PMU state.
 
1962
         * cgroup event are system-wide mode only
 
1963
         */
 
1964
        if (atomic_read(&__get_cpu_var(perf_cgroup_events)))
 
1965
                perf_cgroup_sched_out(task);
 
1966
}
 
1967
 
 
1968
static void task_ctx_sched_out(struct perf_event_context *ctx,
 
1969
                               enum event_type_t event_type)
 
1970
{
 
1971
        struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
 
1972
 
 
1973
        if (!cpuctx->task_ctx)
 
1974
                return;
 
1975
 
 
1976
        if (WARN_ON_ONCE(ctx != cpuctx->task_ctx))
 
1977
                return;
 
1978
 
 
1979
        ctx_sched_out(ctx, cpuctx, event_type);
 
1980
        cpuctx->task_ctx = NULL;
 
1981
}
 
1982
 
 
1983
/*
 
1984
 * Called with IRQs disabled
 
1985
 */
 
1986
static void cpu_ctx_sched_out(struct perf_cpu_context *cpuctx,
 
1987
                              enum event_type_t event_type)
 
1988
{
 
1989
        ctx_sched_out(&cpuctx->ctx, cpuctx, event_type);
 
1990
}
 
1991
 
 
1992
static void
 
1993
ctx_pinned_sched_in(struct perf_event_context *ctx,
 
1994
                    struct perf_cpu_context *cpuctx)
 
1995
{
 
1996
        struct perf_event *event;
 
1997
 
 
1998
        list_for_each_entry(event, &ctx->pinned_groups, group_entry) {
 
1999
                if (event->state <= PERF_EVENT_STATE_OFF)
 
2000
                        continue;
 
2001
                if (!event_filter_match(event))
 
2002
                        continue;
 
2003
 
 
2004
                /* may need to reset tstamp_enabled */
 
2005
                if (is_cgroup_event(event))
 
2006
                        perf_cgroup_mark_enabled(event, ctx);
 
2007
 
 
2008
                if (group_can_go_on(event, cpuctx, 1))
 
2009
                        group_sched_in(event, cpuctx, ctx);
 
2010
 
 
2011
                /*
 
2012
                 * If this pinned group hasn't been scheduled,
 
2013
                 * put it in error state.
 
2014
                 */
 
2015
                if (event->state == PERF_EVENT_STATE_INACTIVE) {
 
2016
                        update_group_times(event);
 
2017
                        event->state = PERF_EVENT_STATE_ERROR;
 
2018
                }
 
2019
        }
 
2020
}
 
2021
 
 
2022
static void
 
2023
ctx_flexible_sched_in(struct perf_event_context *ctx,
 
2024
                      struct perf_cpu_context *cpuctx)
 
2025
{
 
2026
        struct perf_event *event;
 
2027
        int can_add_hw = 1;
 
2028
 
 
2029
        list_for_each_entry(event, &ctx->flexible_groups, group_entry) {
 
2030
                /* Ignore events in OFF or ERROR state */
 
2031
                if (event->state <= PERF_EVENT_STATE_OFF)
 
2032
                        continue;
 
2033
                /*
 
2034
                 * Listen to the 'cpu' scheduling filter constraint
 
2035
                 * of events:
 
2036
                 */
 
2037
                if (!event_filter_match(event))
 
2038
                        continue;
 
2039
 
 
2040
                /* may need to reset tstamp_enabled */
 
2041
                if (is_cgroup_event(event))
 
2042
                        perf_cgroup_mark_enabled(event, ctx);
 
2043
 
 
2044
                if (group_can_go_on(event, cpuctx, can_add_hw)) {
 
2045
                        if (group_sched_in(event, cpuctx, ctx))
 
2046
                                can_add_hw = 0;
 
2047
                }
 
2048
        }
 
2049
}
 
2050
 
 
2051
static void
 
2052
ctx_sched_in(struct perf_event_context *ctx,
 
2053
             struct perf_cpu_context *cpuctx,
 
2054
             enum event_type_t event_type,
 
2055
             struct task_struct *task)
 
2056
{
 
2057
        u64 now;
 
2058
 
 
2059
        raw_spin_lock(&ctx->lock);
 
2060
        ctx->is_active = 1;
 
2061
        if (likely(!ctx->nr_events))
 
2062
                goto out;
 
2063
 
 
2064
        now = perf_clock();
 
2065
        ctx->timestamp = now;
 
2066
        perf_cgroup_set_timestamp(task, ctx);
 
2067
        /*
 
2068
         * First go through the list and put on any pinned groups
 
2069
         * in order to give them the best chance of going on.
 
2070
         */
 
2071
        if (event_type & EVENT_PINNED)
 
2072
                ctx_pinned_sched_in(ctx, cpuctx);
 
2073
 
 
2074
        /* Then walk through the lower prio flexible groups */
 
2075
        if (event_type & EVENT_FLEXIBLE)
 
2076
                ctx_flexible_sched_in(ctx, cpuctx);
 
2077
 
 
2078
out:
 
2079
        raw_spin_unlock(&ctx->lock);
 
2080
}
 
2081
 
 
2082
static void cpu_ctx_sched_in(struct perf_cpu_context *cpuctx,
 
2083
                             enum event_type_t event_type,
 
2084
                             struct task_struct *task)
 
2085
{
 
2086
        struct perf_event_context *ctx = &cpuctx->ctx;
 
2087
 
 
2088
        ctx_sched_in(ctx, cpuctx, event_type, task);
 
2089
}
 
2090
 
 
2091
static void task_ctx_sched_in(struct perf_event_context *ctx,
 
2092
                              enum event_type_t event_type)
 
2093
{
 
2094
        struct perf_cpu_context *cpuctx;
 
2095
 
 
2096
        cpuctx = __get_cpu_context(ctx);
 
2097
        if (cpuctx->task_ctx == ctx)
 
2098
                return;
 
2099
 
 
2100
        ctx_sched_in(ctx, cpuctx, event_type, NULL);
 
2101
        cpuctx->task_ctx = ctx;
 
2102
}
 
2103
 
 
2104
static void perf_event_context_sched_in(struct perf_event_context *ctx,
 
2105
                                        struct task_struct *task)
 
2106
{
 
2107
        struct perf_cpu_context *cpuctx;
 
2108
 
 
2109
        cpuctx = __get_cpu_context(ctx);
 
2110
        if (cpuctx->task_ctx == ctx)
 
2111
                return;
 
2112
 
 
2113
        perf_pmu_disable(ctx->pmu);
 
2114
        /*
 
2115
         * We want to keep the following priority order:
 
2116
         * cpu pinned (that don't need to move), task pinned,
 
2117
         * cpu flexible, task flexible.
 
2118
         */
 
2119
        cpu_ctx_sched_out(cpuctx, EVENT_FLEXIBLE);
 
2120
 
 
2121
        ctx_sched_in(ctx, cpuctx, EVENT_PINNED, task);
 
2122
        cpu_ctx_sched_in(cpuctx, EVENT_FLEXIBLE, task);
 
2123
        ctx_sched_in(ctx, cpuctx, EVENT_FLEXIBLE, task);
 
2124
 
 
2125
        cpuctx->task_ctx = ctx;
 
2126
 
 
2127
        /*
 
2128
         * Since these rotations are per-cpu, we need to ensure the
 
2129
         * cpu-context we got scheduled on is actually rotating.
 
2130
         */
 
2131
        perf_pmu_rotate_start(ctx->pmu);
 
2132
        perf_pmu_enable(ctx->pmu);
 
2133
}
 
2134
 
 
2135
/*
 
2136
 * Called from scheduler to add the events of the current task
 
2137
 * with interrupts disabled.
 
2138
 *
 
2139
 * We restore the event value and then enable it.
 
2140
 *
 
2141
 * This does not protect us against NMI, but enable()
 
2142
 * sets the enabled bit in the control field of event _before_
 
2143
 * accessing the event control register. If a NMI hits, then it will
 
2144
 * keep the event running.
 
2145
 */
 
2146
void __perf_event_task_sched_in(struct task_struct *task)
 
2147
{
 
2148
        struct perf_event_context *ctx;
 
2149
        int ctxn;
 
2150
 
 
2151
        for_each_task_context_nr(ctxn) {
 
2152
                ctx = task->perf_event_ctxp[ctxn];
 
2153
                if (likely(!ctx))
 
2154
                        continue;
 
2155
 
 
2156
                perf_event_context_sched_in(ctx, task);
 
2157
        }
 
2158
        /*
 
2159
         * if cgroup events exist on this CPU, then we need
 
2160
         * to check if we have to switch in PMU state.
 
2161
         * cgroup event are system-wide mode only
 
2162
         */
 
2163
        if (atomic_read(&__get_cpu_var(perf_cgroup_events)))
 
2164
                perf_cgroup_sched_in(task);
 
2165
}
 
2166
 
 
2167
static u64 perf_calculate_period(struct perf_event *event, u64 nsec, u64 count)
 
2168
{
 
2169
        u64 frequency = event->attr.sample_freq;
 
2170
        u64 sec = NSEC_PER_SEC;
 
2171
        u64 divisor, dividend;
 
2172
 
 
2173
        int count_fls, nsec_fls, frequency_fls, sec_fls;
 
2174
 
 
2175
        count_fls = fls64(count);
 
2176
        nsec_fls = fls64(nsec);
 
2177
        frequency_fls = fls64(frequency);
 
2178
        sec_fls = 30;
 
2179
 
 
2180
        /*
 
2181
         * We got @count in @nsec, with a target of sample_freq HZ
 
2182
         * the target period becomes:
 
2183
         *
 
2184
         *             @count * 10^9
 
2185
         * period = -------------------
 
2186
         *          @nsec * sample_freq
 
2187
         *
 
2188
         */
 
2189
 
 
2190
        /*
 
2191
         * Reduce accuracy by one bit such that @a and @b converge
 
2192
         * to a similar magnitude.
 
2193
         */
 
2194
#define REDUCE_FLS(a, b)                \
 
2195
do {                                    \
 
2196
        if (a##_fls > b##_fls) {        \
 
2197
                a >>= 1;                \
 
2198
                a##_fls--;              \
 
2199
        } else {                        \
 
2200
                b >>= 1;                \
 
2201
                b##_fls--;              \
 
2202
        }                               \
 
2203
} while (0)
 
2204
 
 
2205
        /*
 
2206
         * Reduce accuracy until either term fits in a u64, then proceed with
 
2207
         * the other, so that finally we can do a u64/u64 division.
 
2208
         */
 
2209
        while (count_fls + sec_fls > 64 && nsec_fls + frequency_fls > 64) {
 
2210
                REDUCE_FLS(nsec, frequency);
 
2211
                REDUCE_FLS(sec, count);
 
2212
        }
 
2213
 
 
2214
        if (count_fls + sec_fls > 64) {
 
2215
                divisor = nsec * frequency;
 
2216
 
 
2217
                while (count_fls + sec_fls > 64) {
 
2218
                        REDUCE_FLS(count, sec);
 
2219
                        divisor >>= 1;
 
2220
                }
 
2221
 
 
2222
                dividend = count * sec;
 
2223
        } else {
 
2224
                dividend = count * sec;
 
2225
 
 
2226
                while (nsec_fls + frequency_fls > 64) {
 
2227
                        REDUCE_FLS(nsec, frequency);
 
2228
                        dividend >>= 1;
 
2229
                }
 
2230
 
 
2231
                divisor = nsec * frequency;
 
2232
        }
 
2233
 
 
2234
        if (!divisor)
 
2235
                return dividend;
 
2236
 
 
2237
        return div64_u64(dividend, divisor);
 
2238
}
 
2239
 
 
2240
static void perf_adjust_period(struct perf_event *event, u64 nsec, u64 count)
 
2241
{
 
2242
        struct hw_perf_event *hwc = &event->hw;
 
2243
        s64 period, sample_period;
 
2244
        s64 delta;
 
2245
 
 
2246
        period = perf_calculate_period(event, nsec, count);
 
2247
 
 
2248
        delta = (s64)(period - hwc->sample_period);
 
2249
        delta = (delta + 7) / 8; /* low pass filter */
 
2250
 
 
2251
        sample_period = hwc->sample_period + delta;
 
2252
 
 
2253
        if (!sample_period)
 
2254
                sample_period = 1;
 
2255
 
 
2256
        hwc->sample_period = sample_period;
 
2257
 
 
2258
        if (local64_read(&hwc->period_left) > 8*sample_period) {
 
2259
                event->pmu->stop(event, PERF_EF_UPDATE);
 
2260
                local64_set(&hwc->period_left, 0);
 
2261
                event->pmu->start(event, PERF_EF_RELOAD);
 
2262
        }
 
2263
}
 
2264
 
 
2265
static void perf_ctx_adjust_freq(struct perf_event_context *ctx, u64 period)
 
2266
{
 
2267
        struct perf_event *event;
 
2268
        struct hw_perf_event *hwc;
 
2269
        u64 interrupts, now;
 
2270
        s64 delta;
 
2271
 
 
2272
        raw_spin_lock(&ctx->lock);
 
2273
        list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
 
2274
                if (event->state != PERF_EVENT_STATE_ACTIVE)
 
2275
                        continue;
 
2276
 
 
2277
                if (!event_filter_match(event))
 
2278
                        continue;
 
2279
 
 
2280
                hwc = &event->hw;
 
2281
 
 
2282
                interrupts = hwc->interrupts;
 
2283
                hwc->interrupts = 0;
 
2284
 
 
2285
                /*
 
2286
                 * unthrottle events on the tick
 
2287
                 */
 
2288
                if (interrupts == MAX_INTERRUPTS) {
 
2289
                        perf_log_throttle(event, 1);
 
2290
                        event->pmu->start(event, 0);
 
2291
                }
 
2292
 
 
2293
                if (!event->attr.freq || !event->attr.sample_freq)
 
2294
                        continue;
 
2295
 
 
2296
                event->pmu->read(event);
 
2297
                now = local64_read(&event->count);
 
2298
                delta = now - hwc->freq_count_stamp;
 
2299
                hwc->freq_count_stamp = now;
 
2300
 
 
2301
                if (delta > 0)
 
2302
                        perf_adjust_period(event, period, delta);
 
2303
        }
 
2304
        raw_spin_unlock(&ctx->lock);
 
2305
}
 
2306
 
 
2307
/*
 
2308
 * Round-robin a context's events:
 
2309
 */
 
2310
static void rotate_ctx(struct perf_event_context *ctx)
 
2311
{
 
2312
        raw_spin_lock(&ctx->lock);
 
2313
 
 
2314
        /*
 
2315
         * Rotate the first entry last of non-pinned groups. Rotation might be
 
2316
         * disabled by the inheritance code.
 
2317
         */
 
2318
        if (!ctx->rotate_disable)
 
2319
                list_rotate_left(&ctx->flexible_groups);
 
2320
 
 
2321
        raw_spin_unlock(&ctx->lock);
 
2322
}
 
2323
 
 
2324
/*
 
2325
 * perf_pmu_rotate_start() and perf_rotate_context() are fully serialized
 
2326
 * because they're strictly cpu affine and rotate_start is called with IRQs
 
2327
 * disabled, while rotate_context is called from IRQ context.
 
2328
 */
 
2329
static void perf_rotate_context(struct perf_cpu_context *cpuctx)
 
2330
{
 
2331
        u64 interval = (u64)cpuctx->jiffies_interval * TICK_NSEC;
 
2332
        struct perf_event_context *ctx = NULL;
 
2333
        int rotate = 0, remove = 1;
 
2334
 
 
2335
        if (cpuctx->ctx.nr_events) {
 
2336
                remove = 0;
 
2337
                if (cpuctx->ctx.nr_events != cpuctx->ctx.nr_active)
 
2338
                        rotate = 1;
 
2339
        }
 
2340
 
 
2341
        ctx = cpuctx->task_ctx;
 
2342
        if (ctx && ctx->nr_events) {
 
2343
                remove = 0;
 
2344
                if (ctx->nr_events != ctx->nr_active)
 
2345
                        rotate = 1;
 
2346
        }
 
2347
 
 
2348
        perf_pmu_disable(cpuctx->ctx.pmu);
 
2349
        perf_ctx_adjust_freq(&cpuctx->ctx, interval);
 
2350
        if (ctx)
 
2351
                perf_ctx_adjust_freq(ctx, interval);
 
2352
 
 
2353
        if (!rotate)
 
2354
                goto done;
 
2355
 
 
2356
        cpu_ctx_sched_out(cpuctx, EVENT_FLEXIBLE);
 
2357
        if (ctx)
 
2358
                task_ctx_sched_out(ctx, EVENT_FLEXIBLE);
 
2359
 
 
2360
        rotate_ctx(&cpuctx->ctx);
 
2361
        if (ctx)
 
2362
                rotate_ctx(ctx);
 
2363
 
 
2364
        cpu_ctx_sched_in(cpuctx, EVENT_FLEXIBLE, current);
 
2365
        if (ctx)
 
2366
                task_ctx_sched_in(ctx, EVENT_FLEXIBLE);
 
2367
 
 
2368
done:
 
2369
        if (remove)
 
2370
                list_del_init(&cpuctx->rotation_list);
 
2371
 
 
2372
        perf_pmu_enable(cpuctx->ctx.pmu);
 
2373
}
 
2374
 
 
2375
void perf_event_task_tick(void)
 
2376
{
 
2377
        struct list_head *head = &__get_cpu_var(rotation_list);
 
2378
        struct perf_cpu_context *cpuctx, *tmp;
 
2379
 
 
2380
        WARN_ON(!irqs_disabled());
 
2381
 
 
2382
        list_for_each_entry_safe(cpuctx, tmp, head, rotation_list) {
 
2383
                if (cpuctx->jiffies_interval == 1 ||
 
2384
                                !(jiffies % cpuctx->jiffies_interval))
 
2385
                        perf_rotate_context(cpuctx);
 
2386
        }
 
2387
}
 
2388
 
 
2389
static int event_enable_on_exec(struct perf_event *event,
 
2390
                                struct perf_event_context *ctx)
 
2391
{
 
2392
        if (!event->attr.enable_on_exec)
 
2393
                return 0;
 
2394
 
 
2395
        event->attr.enable_on_exec = 0;
 
2396
        if (event->state >= PERF_EVENT_STATE_INACTIVE)
 
2397
                return 0;
 
2398
 
 
2399
        __perf_event_mark_enabled(event, ctx);
 
2400
 
 
2401
        return 1;
 
2402
}
 
2403
 
 
2404
/*
 
2405
 * Enable all of a task's events that have been marked enable-on-exec.
 
2406
 * This expects task == current.
 
2407
 */
 
2408
static void perf_event_enable_on_exec(struct perf_event_context *ctx)
 
2409
{
 
2410
        struct perf_event *event;
 
2411
        unsigned long flags;
 
2412
        int enabled = 0;
 
2413
        int ret;
 
2414
 
 
2415
        local_irq_save(flags);
 
2416
        if (!ctx || !ctx->nr_events)
 
2417
                goto out;
 
2418
 
 
2419
        /*
 
2420
         * We must ctxsw out cgroup events to avoid conflict
 
2421
         * when invoking perf_task_event_sched_in() later on
 
2422
         * in this function. Otherwise we end up trying to
 
2423
         * ctxswin cgroup events which are already scheduled
 
2424
         * in.
 
2425
         */
 
2426
        perf_cgroup_sched_out(current);
 
2427
        task_ctx_sched_out(ctx, EVENT_ALL);
 
2428
 
 
2429
        raw_spin_lock(&ctx->lock);
 
2430
 
 
2431
        list_for_each_entry(event, &ctx->pinned_groups, group_entry) {
 
2432
                ret = event_enable_on_exec(event, ctx);
 
2433
                if (ret)
 
2434
                        enabled = 1;
 
2435
        }
 
2436
 
 
2437
        list_for_each_entry(event, &ctx->flexible_groups, group_entry) {
 
2438
                ret = event_enable_on_exec(event, ctx);
 
2439
                if (ret)
 
2440
                        enabled = 1;
 
2441
        }
 
2442
 
 
2443
        /*
 
2444
         * Unclone this context if we enabled any event.
 
2445
         */
 
2446
        if (enabled)
 
2447
                unclone_ctx(ctx);
 
2448
 
 
2449
        raw_spin_unlock(&ctx->lock);
 
2450
 
 
2451
        /*
 
2452
         * Also calls ctxswin for cgroup events, if any:
 
2453
         */
 
2454
        perf_event_context_sched_in(ctx, ctx->task);
 
2455
out:
 
2456
        local_irq_restore(flags);
 
2457
}
 
2458
 
 
2459
/*
 
2460
 * Cross CPU call to read the hardware event
 
2461
 */
 
2462
static void __perf_event_read(void *info)
 
2463
{
 
2464
        struct perf_event *event = info;
 
2465
        struct perf_event_context *ctx = event->ctx;
 
2466
        struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
 
2467
 
 
2468
        /*
 
2469
         * If this is a task context, we need to check whether it is
 
2470
         * the current task context of this cpu.  If not it has been
 
2471
         * scheduled out before the smp call arrived.  In that case
 
2472
         * event->count would have been updated to a recent sample
 
2473
         * when the event was scheduled out.
 
2474
         */
 
2475
        if (ctx->task && cpuctx->task_ctx != ctx)
 
2476
                return;
 
2477
 
 
2478
        raw_spin_lock(&ctx->lock);
 
2479
        if (ctx->is_active) {
 
2480
                update_context_time(ctx);
 
2481
                update_cgrp_time_from_event(event);
 
2482
        }
 
2483
        update_event_times(event);
 
2484
        if (event->state == PERF_EVENT_STATE_ACTIVE)
 
2485
                event->pmu->read(event);
 
2486
        raw_spin_unlock(&ctx->lock);
 
2487
}
 
2488
 
 
2489
static inline u64 perf_event_count(struct perf_event *event)
 
2490
{
 
2491
        return local64_read(&event->count) + atomic64_read(&event->child_count);
 
2492
}
 
2493
 
 
2494
static u64 perf_event_read(struct perf_event *event)
 
2495
{
 
2496
        /*
 
2497
         * If event is enabled and currently active on a CPU, update the
 
2498
         * value in the event structure:
 
2499
         */
 
2500
        if (event->state == PERF_EVENT_STATE_ACTIVE) {
 
2501
                smp_call_function_single(event->oncpu,
 
2502
                                         __perf_event_read, event, 1);
 
2503
        } else if (event->state == PERF_EVENT_STATE_INACTIVE) {
 
2504
                struct perf_event_context *ctx = event->ctx;
 
2505
                unsigned long flags;
 
2506
 
 
2507
                raw_spin_lock_irqsave(&ctx->lock, flags);
 
2508
                /*
 
2509
                 * may read while context is not active
 
2510
                 * (e.g., thread is blocked), in that case
 
2511
                 * we cannot update context time
 
2512
                 */
 
2513
                if (ctx->is_active) {
 
2514
                        update_context_time(ctx);
 
2515
                        update_cgrp_time_from_event(event);
 
2516
                }
 
2517
                update_event_times(event);
 
2518
                raw_spin_unlock_irqrestore(&ctx->lock, flags);
 
2519
        }
 
2520
 
 
2521
        return perf_event_count(event);
 
2522
}
 
2523
 
 
2524
/*
 
2525
 * Callchain support
 
2526
 */
 
2527
 
 
2528
struct callchain_cpus_entries {
 
2529
        struct rcu_head                 rcu_head;
 
2530
        struct perf_callchain_entry     *cpu_entries[0];
 
2531
};
 
2532
 
 
2533
static DEFINE_PER_CPU(int, callchain_recursion[PERF_NR_CONTEXTS]);
 
2534
static atomic_t nr_callchain_events;
 
2535
static DEFINE_MUTEX(callchain_mutex);
 
2536
struct callchain_cpus_entries *callchain_cpus_entries;
 
2537
 
 
2538
 
 
2539
__weak void perf_callchain_kernel(struct perf_callchain_entry *entry,
 
2540
                                  struct pt_regs *regs)
 
2541
{
 
2542
}
 
2543
 
 
2544
__weak void perf_callchain_user(struct perf_callchain_entry *entry,
 
2545
                                struct pt_regs *regs)
 
2546
{
 
2547
}
 
2548
 
 
2549
static void release_callchain_buffers_rcu(struct rcu_head *head)
 
2550
{
 
2551
        struct callchain_cpus_entries *entries;
 
2552
        int cpu;
 
2553
 
 
2554
        entries = container_of(head, struct callchain_cpus_entries, rcu_head);
 
2555
 
 
2556
        for_each_possible_cpu(cpu)
 
2557
                kfree(entries->cpu_entries[cpu]);
 
2558
 
 
2559
        kfree(entries);
 
2560
}
 
2561
 
 
2562
static void release_callchain_buffers(void)
 
2563
{
 
2564
        struct callchain_cpus_entries *entries;
 
2565
 
 
2566
        entries = callchain_cpus_entries;
 
2567
        rcu_assign_pointer(callchain_cpus_entries, NULL);
 
2568
        call_rcu(&entries->rcu_head, release_callchain_buffers_rcu);
 
2569
}
 
2570
 
 
2571
static int alloc_callchain_buffers(void)
 
2572
{
 
2573
        int cpu;
 
2574
        int size;
 
2575
        struct callchain_cpus_entries *entries;
 
2576
 
 
2577
        /*
 
2578
         * We can't use the percpu allocation API for data that can be
 
2579
         * accessed from NMI. Use a temporary manual per cpu allocation
 
2580
         * until that gets sorted out.
 
2581
         */
 
2582
        size = offsetof(struct callchain_cpus_entries, cpu_entries[nr_cpu_ids]);
 
2583
 
 
2584
        entries = kzalloc(size, GFP_KERNEL);
 
2585
        if (!entries)
 
2586
                return -ENOMEM;
 
2587
 
 
2588
        size = sizeof(struct perf_callchain_entry) * PERF_NR_CONTEXTS;
 
2589
 
 
2590
        for_each_possible_cpu(cpu) {
 
2591
                entries->cpu_entries[cpu] = kmalloc_node(size, GFP_KERNEL,
 
2592
                                                         cpu_to_node(cpu));
 
2593
                if (!entries->cpu_entries[cpu])
 
2594
                        goto fail;
 
2595
        }
 
2596
 
 
2597
        rcu_assign_pointer(callchain_cpus_entries, entries);
 
2598
 
 
2599
        return 0;
 
2600
 
 
2601
fail:
 
2602
        for_each_possible_cpu(cpu)
 
2603
                kfree(entries->cpu_entries[cpu]);
 
2604
        kfree(entries);
 
2605
 
 
2606
        return -ENOMEM;
 
2607
}
 
2608
 
 
2609
static int get_callchain_buffers(void)
 
2610
{
 
2611
        int err = 0;
 
2612
        int count;
 
2613
 
 
2614
        mutex_lock(&callchain_mutex);
 
2615
 
 
2616
        count = atomic_inc_return(&nr_callchain_events);
 
2617
        if (WARN_ON_ONCE(count < 1)) {
 
2618
                err = -EINVAL;
 
2619
                goto exit;
 
2620
        }
 
2621
 
 
2622
        if (count > 1) {
 
2623
                /* If the allocation failed, give up */
 
2624
                if (!callchain_cpus_entries)
 
2625
                        err = -ENOMEM;
 
2626
                goto exit;
 
2627
        }
 
2628
 
 
2629
        err = alloc_callchain_buffers();
 
2630
        if (err)
 
2631
                release_callchain_buffers();
 
2632
exit:
 
2633
        mutex_unlock(&callchain_mutex);
 
2634
 
 
2635
        return err;
 
2636
}
 
2637
 
 
2638
static void put_callchain_buffers(void)
 
2639
{
 
2640
        if (atomic_dec_and_mutex_lock(&nr_callchain_events, &callchain_mutex)) {
 
2641
                release_callchain_buffers();
 
2642
                mutex_unlock(&callchain_mutex);
 
2643
        }
 
2644
}
 
2645
 
 
2646
static int get_recursion_context(int *recursion)
 
2647
{
 
2648
        int rctx;
 
2649
 
 
2650
        if (in_nmi())
 
2651
                rctx = 3;
 
2652
        else if (in_irq())
 
2653
                rctx = 2;
 
2654
        else if (in_softirq())
 
2655
                rctx = 1;
 
2656
        else
 
2657
                rctx = 0;
 
2658
 
 
2659
        if (recursion[rctx])
 
2660
                return -1;
 
2661
 
 
2662
        recursion[rctx]++;
 
2663
        barrier();
 
2664
 
 
2665
        return rctx;
 
2666
}
 
2667
 
 
2668
static inline void put_recursion_context(int *recursion, int rctx)
 
2669
{
 
2670
        barrier();
 
2671
        recursion[rctx]--;
 
2672
}
 
2673
 
 
2674
static struct perf_callchain_entry *get_callchain_entry(int *rctx)
 
2675
{
 
2676
        int cpu;
 
2677
        struct callchain_cpus_entries *entries;
 
2678
 
 
2679
        *rctx = get_recursion_context(__get_cpu_var(callchain_recursion));
 
2680
        if (*rctx == -1)
 
2681
                return NULL;
 
2682
 
 
2683
        entries = rcu_dereference(callchain_cpus_entries);
 
2684
        if (!entries)
 
2685
                return NULL;
 
2686
 
 
2687
        cpu = smp_processor_id();
 
2688
 
 
2689
        return &entries->cpu_entries[cpu][*rctx];
 
2690
}
 
2691
 
 
2692
static void
 
2693
put_callchain_entry(int rctx)
 
2694
{
 
2695
        put_recursion_context(__get_cpu_var(callchain_recursion), rctx);
 
2696
}
 
2697
 
 
2698
static struct perf_callchain_entry *perf_callchain(struct pt_regs *regs)
 
2699
{
 
2700
        int rctx;
 
2701
        struct perf_callchain_entry *entry;
 
2702
 
 
2703
 
 
2704
        entry = get_callchain_entry(&rctx);
 
2705
        if (rctx == -1)
 
2706
                return NULL;
 
2707
 
 
2708
        if (!entry)
 
2709
                goto exit_put;
 
2710
 
 
2711
        entry->nr = 0;
 
2712
 
 
2713
        if (!user_mode(regs)) {
 
2714
                perf_callchain_store(entry, PERF_CONTEXT_KERNEL);
 
2715
                perf_callchain_kernel(entry, regs);
 
2716
                if (current->mm)
 
2717
                        regs = task_pt_regs(current);
 
2718
                else
 
2719
                        regs = NULL;
 
2720
        }
 
2721
 
 
2722
        if (regs) {
 
2723
                perf_callchain_store(entry, PERF_CONTEXT_USER);
 
2724
                perf_callchain_user(entry, regs);
 
2725
        }
 
2726
 
 
2727
exit_put:
 
2728
        put_callchain_entry(rctx);
 
2729
 
 
2730
        return entry;
 
2731
}
 
2732
 
 
2733
/*
 
2734
 * Initialize the perf_event context in a task_struct:
 
2735
 */
 
2736
static void __perf_event_init_context(struct perf_event_context *ctx)
 
2737
{
 
2738
        raw_spin_lock_init(&ctx->lock);
 
2739
        mutex_init(&ctx->mutex);
 
2740
        INIT_LIST_HEAD(&ctx->pinned_groups);
 
2741
        INIT_LIST_HEAD(&ctx->flexible_groups);
 
2742
        INIT_LIST_HEAD(&ctx->event_list);
 
2743
        atomic_set(&ctx->refcount, 1);
 
2744
}
 
2745
 
 
2746
static struct perf_event_context *
 
2747
alloc_perf_context(struct pmu *pmu, struct task_struct *task)
 
2748
{
 
2749
        struct perf_event_context *ctx;
 
2750
 
 
2751
        ctx = kzalloc(sizeof(struct perf_event_context), GFP_KERNEL);
 
2752
        if (!ctx)
 
2753
                return NULL;
 
2754
 
 
2755
        __perf_event_init_context(ctx);
 
2756
        if (task) {
 
2757
                ctx->task = task;
 
2758
                get_task_struct(task);
 
2759
        }
 
2760
        ctx->pmu = pmu;
 
2761
 
 
2762
        return ctx;
 
2763
}
 
2764
 
 
2765
static struct task_struct *
 
2766
find_lively_task_by_vpid(pid_t vpid)
 
2767
{
 
2768
        struct task_struct *task;
 
2769
        int err;
 
2770
 
 
2771
        rcu_read_lock();
 
2772
        if (!vpid)
 
2773
                task = current;
 
2774
        else
 
2775
                task = find_task_by_vpid(vpid);
 
2776
        if (task)
 
2777
                get_task_struct(task);
 
2778
        rcu_read_unlock();
 
2779
 
 
2780
        if (!task)
 
2781
                return ERR_PTR(-ESRCH);
 
2782
 
 
2783
        /* Reuse ptrace permission checks for now. */
 
2784
        err = -EACCES;
 
2785
        if (!ptrace_may_access(task, PTRACE_MODE_READ))
 
2786
                goto errout;
 
2787
 
 
2788
        return task;
 
2789
errout:
 
2790
        put_task_struct(task);
 
2791
        return ERR_PTR(err);
 
2792
 
 
2793
}
 
2794
 
 
2795
/*
 
2796
 * Returns a matching context with refcount and pincount.
 
2797
 */
 
2798
static struct perf_event_context *
 
2799
find_get_context(struct pmu *pmu, struct task_struct *task, int cpu)
 
2800
{
 
2801
        struct perf_event_context *ctx;
 
2802
        struct perf_cpu_context *cpuctx;
 
2803
        unsigned long flags;
 
2804
        int ctxn, err;
 
2805
 
 
2806
        if (!task) {
 
2807
                /* Must be root to operate on a CPU event: */
 
2808
                if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN))
 
2809
                        return ERR_PTR(-EACCES);
 
2810
 
 
2811
                /*
 
2812
                 * We could be clever and allow to attach a event to an
 
2813
                 * offline CPU and activate it when the CPU comes up, but
 
2814
                 * that's for later.
 
2815
                 */
 
2816
                if (!cpu_online(cpu))
 
2817
                        return ERR_PTR(-ENODEV);
 
2818
 
 
2819
                cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu);
 
2820
                ctx = &cpuctx->ctx;
 
2821
                get_ctx(ctx);
 
2822
                ++ctx->pin_count;
 
2823
 
 
2824
                return ctx;
 
2825
        }
 
2826
 
 
2827
        err = -EINVAL;
 
2828
        ctxn = pmu->task_ctx_nr;
 
2829
        if (ctxn < 0)
 
2830
                goto errout;
 
2831
 
 
2832
retry:
 
2833
        ctx = perf_lock_task_context(task, ctxn, &flags);
 
2834
        if (ctx) {
 
2835
                unclone_ctx(ctx);
 
2836
                ++ctx->pin_count;
 
2837
                raw_spin_unlock_irqrestore(&ctx->lock, flags);
 
2838
        }
 
2839
 
 
2840
        if (!ctx) {
 
2841
                ctx = alloc_perf_context(pmu, task);
 
2842
                err = -ENOMEM;
 
2843
                if (!ctx)
 
2844
                        goto errout;
 
2845
 
 
2846
                get_ctx(ctx);
 
2847
 
 
2848
                err = 0;
 
2849
                mutex_lock(&task->perf_event_mutex);
 
2850
                /*
 
2851
                 * If it has already passed perf_event_exit_task().
 
2852
                 * we must see PF_EXITING, it takes this mutex too.
 
2853
                 */
 
2854
                if (task->flags & PF_EXITING)
 
2855
                        err = -ESRCH;
 
2856
                else if (task->perf_event_ctxp[ctxn])
 
2857
                        err = -EAGAIN;
 
2858
                else {
 
2859
                        ++ctx->pin_count;
 
2860
                        rcu_assign_pointer(task->perf_event_ctxp[ctxn], ctx);
 
2861
                }
 
2862
                mutex_unlock(&task->perf_event_mutex);
 
2863
 
 
2864
                if (unlikely(err)) {
 
2865
                        put_task_struct(task);
 
2866
                        kfree(ctx);
 
2867
 
 
2868
                        if (err == -EAGAIN)
 
2869
                                goto retry;
 
2870
                        goto errout;
 
2871
                }
 
2872
        }
 
2873
 
 
2874
        return ctx;
 
2875
 
 
2876
errout:
 
2877
        return ERR_PTR(err);
 
2878
}
 
2879
 
 
2880
static void perf_event_free_filter(struct perf_event *event);
 
2881
 
 
2882
static void free_event_rcu(struct rcu_head *head)
 
2883
{
 
2884
        struct perf_event *event;
 
2885
 
 
2886
        event = container_of(head, struct perf_event, rcu_head);
 
2887
        if (event->ns)
 
2888
                put_pid_ns(event->ns);
 
2889
        perf_event_free_filter(event);
 
2890
        kfree(event);
 
2891
}
 
2892
 
 
2893
static void perf_buffer_put(struct perf_buffer *buffer);
 
2894
 
 
2895
static void free_event(struct perf_event *event)
 
2896
{
 
2897
        irq_work_sync(&event->pending);
 
2898
 
 
2899
        if (!event->parent) {
 
2900
                if (event->attach_state & PERF_ATTACH_TASK)
 
2901
                        jump_label_dec(&perf_sched_events);
 
2902
                if (event->attr.mmap || event->attr.mmap_data)
 
2903
                        atomic_dec(&nr_mmap_events);
 
2904
                if (event->attr.comm)
 
2905
                        atomic_dec(&nr_comm_events);
 
2906
                if (event->attr.task)
 
2907
                        atomic_dec(&nr_task_events);
 
2908
                if (event->attr.sample_type & PERF_SAMPLE_CALLCHAIN)
 
2909
                        put_callchain_buffers();
 
2910
                if (is_cgroup_event(event)) {
 
2911
                        atomic_dec(&per_cpu(perf_cgroup_events, event->cpu));
 
2912
                        jump_label_dec(&perf_sched_events);
 
2913
                }
 
2914
        }
 
2915
 
 
2916
        if (event->buffer) {
 
2917
                perf_buffer_put(event->buffer);
 
2918
                event->buffer = NULL;
 
2919
        }
 
2920
 
 
2921
        if (is_cgroup_event(event))
 
2922
                perf_detach_cgroup(event);
 
2923
 
 
2924
        if (event->destroy)
 
2925
                event->destroy(event);
 
2926
 
 
2927
        if (event->ctx)
 
2928
                put_ctx(event->ctx);
 
2929
 
 
2930
        call_rcu(&event->rcu_head, free_event_rcu);
 
2931
}
 
2932
 
 
2933
int perf_event_release_kernel(struct perf_event *event)
 
2934
{
 
2935
        struct perf_event_context *ctx = event->ctx;
 
2936
 
 
2937
        /*
 
2938
         * Remove from the PMU, can't get re-enabled since we got
 
2939
         * here because the last ref went.
 
2940
         */
 
2941
        perf_event_disable(event);
 
2942
 
 
2943
        WARN_ON_ONCE(ctx->parent_ctx);
 
2944
        /*
 
2945
         * There are two ways this annotation is useful:
 
2946
         *
 
2947
         *  1) there is a lock recursion from perf_event_exit_task
 
2948
         *     see the comment there.
 
2949
         *
 
2950
         *  2) there is a lock-inversion with mmap_sem through
 
2951
         *     perf_event_read_group(), which takes faults while
 
2952
         *     holding ctx->mutex, however this is called after
 
2953
         *     the last filedesc died, so there is no possibility
 
2954
         *     to trigger the AB-BA case.
 
2955
         */
 
2956
        mutex_lock_nested(&ctx->mutex, SINGLE_DEPTH_NESTING);
 
2957
        raw_spin_lock_irq(&ctx->lock);
 
2958
        perf_group_detach(event);
 
2959
        list_del_event(event, ctx);
 
2960
        raw_spin_unlock_irq(&ctx->lock);
 
2961
        mutex_unlock(&ctx->mutex);
 
2962
 
 
2963
        free_event(event);
 
2964
 
 
2965
        return 0;
 
2966
}
 
2967
EXPORT_SYMBOL_GPL(perf_event_release_kernel);
 
2968
 
 
2969
/*
 
2970
 * Called when the last reference to the file is gone.
 
2971
 */
 
2972
static int perf_release(struct inode *inode, struct file *file)
 
2973
{
 
2974
        struct perf_event *event = file->private_data;
 
2975
        struct task_struct *owner;
 
2976
 
 
2977
        file->private_data = NULL;
 
2978
 
 
2979
        rcu_read_lock();
 
2980
        owner = ACCESS_ONCE(event->owner);
 
2981
        /*
 
2982
         * Matches the smp_wmb() in perf_event_exit_task(). If we observe
 
2983
         * !owner it means the list deletion is complete and we can indeed
 
2984
         * free this event, otherwise we need to serialize on
 
2985
         * owner->perf_event_mutex.
 
2986
         */
 
2987
        smp_read_barrier_depends();
 
2988
        if (owner) {
 
2989
                /*
 
2990
                 * Since delayed_put_task_struct() also drops the last
 
2991
                 * task reference we can safely take a new reference
 
2992
                 * while holding the rcu_read_lock().
 
2993
                 */
 
2994
                get_task_struct(owner);
 
2995
        }
 
2996
        rcu_read_unlock();
 
2997
 
 
2998
        if (owner) {
 
2999
                mutex_lock(&owner->perf_event_mutex);
 
3000
                /*
 
3001
                 * We have to re-check the event->owner field, if it is cleared
 
3002
                 * we raced with perf_event_exit_task(), acquiring the mutex
 
3003
                 * ensured they're done, and we can proceed with freeing the
 
3004
                 * event.
 
3005
                 */
 
3006
                if (event->owner)
 
3007
                        list_del_init(&event->owner_entry);
 
3008
                mutex_unlock(&owner->perf_event_mutex);
 
3009
                put_task_struct(owner);
 
3010
        }
 
3011
 
 
3012
        return perf_event_release_kernel(event);
 
3013
}
 
3014
 
 
3015
u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
 
3016
{
 
3017
        struct perf_event *child;
 
3018
        u64 total = 0;
 
3019
 
 
3020
        *enabled = 0;
 
3021
        *running = 0;
 
3022
 
 
3023
        mutex_lock(&event->child_mutex);
 
3024
        total += perf_event_read(event);
 
3025
        *enabled += event->total_time_enabled +
 
3026
                        atomic64_read(&event->child_total_time_enabled);
 
3027
        *running += event->total_time_running +
 
3028
                        atomic64_read(&event->child_total_time_running);
 
3029
 
 
3030
        list_for_each_entry(child, &event->child_list, child_list) {
 
3031
                total += perf_event_read(child);
 
3032
                *enabled += child->total_time_enabled;
 
3033
                *running += child->total_time_running;
 
3034
        }
 
3035
        mutex_unlock(&event->child_mutex);
 
3036
 
 
3037
        return total;
 
3038
}
 
3039
EXPORT_SYMBOL_GPL(perf_event_read_value);
 
3040
 
 
3041
static int perf_event_read_group(struct perf_event *event,
 
3042
                                   u64 read_format, char __user *buf)
 
3043
{
 
3044
        struct perf_event *leader = event->group_leader, *sub;
 
3045
        int n = 0, size = 0, ret = -EFAULT;
 
3046
        struct perf_event_context *ctx = leader->ctx;
 
3047
        u64 values[5];
 
3048
        u64 count, enabled, running;
 
3049
 
 
3050
        mutex_lock(&ctx->mutex);
 
3051
        count = perf_event_read_value(leader, &enabled, &running);
 
3052
 
 
3053
        values[n++] = 1 + leader->nr_siblings;
 
3054
        if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
 
3055
                values[n++] = enabled;
 
3056
        if (read_format & PERF_FORMAT_TOTAL_TIME_RUNNING)
 
3057
                values[n++] = running;
 
3058
        values[n++] = count;
 
3059
        if (read_format & PERF_FORMAT_ID)
 
3060
                values[n++] = primary_event_id(leader);
 
3061
 
 
3062
        size = n * sizeof(u64);
 
3063
 
 
3064
        if (copy_to_user(buf, values, size))
 
3065
                goto unlock;
 
3066
 
 
3067
        ret = size;
 
3068
 
 
3069
        list_for_each_entry(sub, &leader->sibling_list, group_entry) {
 
3070
                n = 0;
 
3071
 
 
3072
                values[n++] = perf_event_read_value(sub, &enabled, &running);
 
3073
                if (read_format & PERF_FORMAT_ID)
 
3074
                        values[n++] = primary_event_id(sub);
 
3075
 
 
3076
                size = n * sizeof(u64);
 
3077
 
 
3078
                if (copy_to_user(buf + ret, values, size)) {
 
3079
                        ret = -EFAULT;
 
3080
                        goto unlock;
 
3081
                }
 
3082
 
 
3083
                ret += size;
 
3084
        }
 
3085
unlock:
 
3086
        mutex_unlock(&ctx->mutex);
 
3087
 
 
3088
        return ret;
 
3089
}
 
3090
 
 
3091
static int perf_event_read_one(struct perf_event *event,
 
3092
                                 u64 read_format, char __user *buf)
 
3093
{
 
3094
        u64 enabled, running;
 
3095
        u64 values[4];
 
3096
        int n = 0;
 
3097
 
 
3098
        values[n++] = perf_event_read_value(event, &enabled, &running);
 
3099
        if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
 
3100
                values[n++] = enabled;
 
3101
        if (read_format & PERF_FORMAT_TOTAL_TIME_RUNNING)
 
3102
                values[n++] = running;
 
3103
        if (read_format & PERF_FORMAT_ID)
 
3104
                values[n++] = primary_event_id(event);
 
3105
 
 
3106
        if (copy_to_user(buf, values, n * sizeof(u64)))
 
3107
                return -EFAULT;
 
3108
 
 
3109
        return n * sizeof(u64);
 
3110
}
 
3111
 
 
3112
/*
 
3113
 * Read the performance event - simple non blocking version for now
 
3114
 */
 
3115
static ssize_t
 
3116
perf_read_hw(struct perf_event *event, char __user *buf, size_t count)
 
3117
{
 
3118
        u64 read_format = event->attr.read_format;
 
3119
        int ret;
 
3120
 
 
3121
        /*
 
3122
         * Return end-of-file for a read on a event that is in
 
3123
         * error state (i.e. because it was pinned but it couldn't be
 
3124
         * scheduled on to the CPU at some point).
 
3125
         */
 
3126
        if (event->state == PERF_EVENT_STATE_ERROR)
 
3127
                return 0;
 
3128
 
 
3129
        if (count < event->read_size)
 
3130
                return -ENOSPC;
 
3131
 
 
3132
        WARN_ON_ONCE(event->ctx->parent_ctx);
 
3133
        if (read_format & PERF_FORMAT_GROUP)
 
3134
                ret = perf_event_read_group(event, read_format, buf);
 
3135
        else
 
3136
                ret = perf_event_read_one(event, read_format, buf);
 
3137
 
 
3138
        return ret;
 
3139
}
 
3140
 
 
3141
static ssize_t
 
3142
perf_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
 
3143
{
 
3144
        struct perf_event *event = file->private_data;
 
3145
 
 
3146
        return perf_read_hw(event, buf, count);
 
3147
}
 
3148
 
 
3149
static unsigned int perf_poll(struct file *file, poll_table *wait)
 
3150
{
 
3151
        struct perf_event *event = file->private_data;
 
3152
        struct perf_buffer *buffer;
 
3153
        unsigned int events = POLL_HUP;
 
3154
 
 
3155
        rcu_read_lock();
 
3156
        buffer = rcu_dereference(event->buffer);
 
3157
        if (buffer)
 
3158
                events = atomic_xchg(&buffer->poll, 0);
 
3159
        rcu_read_unlock();
 
3160
 
 
3161
        poll_wait(file, &event->waitq, wait);
 
3162
 
 
3163
        return events;
 
3164
}
 
3165
 
 
3166
static void perf_event_reset(struct perf_event *event)
 
3167
{
 
3168
        (void)perf_event_read(event);
 
3169
        local64_set(&event->count, 0);
 
3170
        perf_event_update_userpage(event);
 
3171
}
 
3172
 
 
3173
/*
 
3174
 * Holding the top-level event's child_mutex means that any
 
3175
 * descendant process that has inherited this event will block
 
3176
 * in sync_child_event if it goes to exit, thus satisfying the
 
3177
 * task existence requirements of perf_event_enable/disable.
 
3178
 */
 
3179
static void perf_event_for_each_child(struct perf_event *event,
 
3180
                                        void (*func)(struct perf_event *))
 
3181
{
 
3182
        struct perf_event *child;
 
3183
 
 
3184
        WARN_ON_ONCE(event->ctx->parent_ctx);
 
3185
        mutex_lock(&event->child_mutex);
 
3186
        func(event);
 
3187
        list_for_each_entry(child, &event->child_list, child_list)
 
3188
                func(child);
 
3189
        mutex_unlock(&event->child_mutex);
 
3190
}
 
3191
 
 
3192
static void perf_event_for_each(struct perf_event *event,
 
3193
                                  void (*func)(struct perf_event *))
 
3194
{
 
3195
        struct perf_event_context *ctx = event->ctx;
 
3196
        struct perf_event *sibling;
 
3197
 
 
3198
        WARN_ON_ONCE(ctx->parent_ctx);
 
3199
        mutex_lock(&ctx->mutex);
 
3200
        event = event->group_leader;
 
3201
 
 
3202
        perf_event_for_each_child(event, func);
 
3203
        func(event);
 
3204
        list_for_each_entry(sibling, &event->sibling_list, group_entry)
 
3205
                perf_event_for_each_child(event, func);
 
3206
        mutex_unlock(&ctx->mutex);
 
3207
}
 
3208
 
 
3209
static int perf_event_period(struct perf_event *event, u64 __user *arg)
 
3210
{
 
3211
        struct perf_event_context *ctx = event->ctx;
 
3212
        int ret = 0;
 
3213
        u64 value;
 
3214
 
 
3215
        if (!is_sampling_event(event))
 
3216
                return -EINVAL;
 
3217
 
 
3218
        if (copy_from_user(&value, arg, sizeof(value)))
 
3219
                return -EFAULT;
 
3220
 
 
3221
        if (!value)
 
3222
                return -EINVAL;
 
3223
 
 
3224
        raw_spin_lock_irq(&ctx->lock);
 
3225
        if (event->attr.freq) {
 
3226
                if (value > sysctl_perf_event_sample_rate) {
 
3227
                        ret = -EINVAL;
 
3228
                        goto unlock;
 
3229
                }
 
3230
 
 
3231
                event->attr.sample_freq = value;
 
3232
        } else {
 
3233
                event->attr.sample_period = value;
 
3234
                event->hw.sample_period = value;
 
3235
        }
 
3236
unlock:
 
3237
        raw_spin_unlock_irq(&ctx->lock);
 
3238
 
 
3239
        return ret;
 
3240
}
 
3241
 
 
3242
static const struct file_operations perf_fops;
 
3243
 
 
3244
static struct perf_event *perf_fget_light(int fd, int *fput_needed)
 
3245
{
 
3246
        struct file *file;
 
3247
 
 
3248
        file = fget_light(fd, fput_needed);
 
3249
        if (!file)
 
3250
                return ERR_PTR(-EBADF);
 
3251
 
 
3252
        if (file->f_op != &perf_fops) {
 
3253
                fput_light(file, *fput_needed);
 
3254
                *fput_needed = 0;
 
3255
                return ERR_PTR(-EBADF);
 
3256
        }
 
3257
 
 
3258
        return file->private_data;
 
3259
}
 
3260
 
 
3261
static int perf_event_set_output(struct perf_event *event,
 
3262
                                 struct perf_event *output_event);
 
3263
static int perf_event_set_filter(struct perf_event *event, void __user *arg);
 
3264
 
 
3265
static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 
3266
{
 
3267
        struct perf_event *event = file->private_data;
 
3268
        void (*func)(struct perf_event *);
 
3269
        u32 flags = arg;
 
3270
 
 
3271
        switch (cmd) {
 
3272
        case PERF_EVENT_IOC_ENABLE:
 
3273
                func = perf_event_enable;
 
3274
                break;
 
3275
        case PERF_EVENT_IOC_DISABLE:
 
3276
                func = perf_event_disable;
 
3277
                break;
 
3278
        case PERF_EVENT_IOC_RESET:
 
3279
                func = perf_event_reset;
 
3280
                break;
 
3281
 
 
3282
        case PERF_EVENT_IOC_REFRESH:
 
3283
                return perf_event_refresh(event, arg);
 
3284
 
 
3285
        case PERF_EVENT_IOC_PERIOD:
 
3286
                return perf_event_period(event, (u64 __user *)arg);
 
3287
 
 
3288
        case PERF_EVENT_IOC_SET_OUTPUT:
 
3289
        {
 
3290
                struct perf_event *output_event = NULL;
 
3291
                int fput_needed = 0;
 
3292
                int ret;
 
3293
 
 
3294
                if (arg != -1) {
 
3295
                        output_event = perf_fget_light(arg, &fput_needed);
 
3296
                        if (IS_ERR(output_event))
 
3297
                                return PTR_ERR(output_event);
 
3298
                }
 
3299
 
 
3300
                ret = perf_event_set_output(event, output_event);
 
3301
                if (output_event)
 
3302
                        fput_light(output_event->filp, fput_needed);
 
3303
 
 
3304
                return ret;
 
3305
        }
 
3306
 
 
3307
        case PERF_EVENT_IOC_SET_FILTER:
 
3308
                return perf_event_set_filter(event, (void __user *)arg);
 
3309
 
 
3310
        default:
 
3311
                return -ENOTTY;
 
3312
        }
 
3313
 
 
3314
        if (flags & PERF_IOC_FLAG_GROUP)
 
3315
                perf_event_for_each(event, func);
 
3316
        else
 
3317
                perf_event_for_each_child(event, func);
 
3318
 
 
3319
        return 0;
 
3320
}
 
3321
 
 
3322
int perf_event_task_enable(void)
 
3323
{
 
3324
        struct perf_event *event;
 
3325
 
 
3326
        mutex_lock(&current->perf_event_mutex);
 
3327
        list_for_each_entry(event, &current->perf_event_list, owner_entry)
 
3328
                perf_event_for_each_child(event, perf_event_enable);
 
3329
        mutex_unlock(&current->perf_event_mutex);
 
3330
 
 
3331
        return 0;
 
3332
}
 
3333
 
 
3334
int perf_event_task_disable(void)
 
3335
{
 
3336
        struct perf_event *event;
 
3337
 
 
3338
        mutex_lock(&current->perf_event_mutex);
 
3339
        list_for_each_entry(event, &current->perf_event_list, owner_entry)
 
3340
                perf_event_for_each_child(event, perf_event_disable);
 
3341
        mutex_unlock(&current->perf_event_mutex);
 
3342
 
 
3343
        return 0;
 
3344
}
 
3345
 
 
3346
#ifndef PERF_EVENT_INDEX_OFFSET
 
3347
# define PERF_EVENT_INDEX_OFFSET 0
 
3348
#endif
 
3349
 
 
3350
static int perf_event_index(struct perf_event *event)
 
3351
{
 
3352
        if (event->hw.state & PERF_HES_STOPPED)
 
3353
                return 0;
 
3354
 
 
3355
        if (event->state != PERF_EVENT_STATE_ACTIVE)
 
3356
                return 0;
 
3357
 
 
3358
        return event->hw.idx + 1 - PERF_EVENT_INDEX_OFFSET;
 
3359
}
 
3360
 
 
3361
/*
 
3362
 * Callers need to ensure there can be no nesting of this function, otherwise
 
3363
 * the seqlock logic goes bad. We can not serialize this because the arch
 
3364
 * code calls this from NMI context.
 
3365
 */
 
3366
void perf_event_update_userpage(struct perf_event *event)
 
3367
{
 
3368
        struct perf_event_mmap_page *userpg;
 
3369
        struct perf_buffer *buffer;
 
3370
 
 
3371
        rcu_read_lock();
 
3372
        buffer = rcu_dereference(event->buffer);
 
3373
        if (!buffer)
 
3374
                goto unlock;
 
3375
 
 
3376
        userpg = buffer->user_page;
 
3377
 
 
3378
        /*
 
3379
         * Disable preemption so as to not let the corresponding user-space
 
3380
         * spin too long if we get preempted.
 
3381
         */
 
3382
        preempt_disable();
 
3383
        ++userpg->lock;
 
3384
        barrier();
 
3385
        userpg->index = perf_event_index(event);
 
3386
        userpg->offset = perf_event_count(event);
 
3387
        if (event->state == PERF_EVENT_STATE_ACTIVE)
 
3388
                userpg->offset -= local64_read(&event->hw.prev_count);
 
3389
 
 
3390
        userpg->time_enabled = event->total_time_enabled +
 
3391
                        atomic64_read(&event->child_total_time_enabled);
 
3392
 
 
3393
        userpg->time_running = event->total_time_running +
 
3394
                        atomic64_read(&event->child_total_time_running);
 
3395
 
 
3396
        barrier();
 
3397
        ++userpg->lock;
 
3398
        preempt_enable();
 
3399
unlock:
 
3400
        rcu_read_unlock();
 
3401
}
 
3402
 
 
3403
static unsigned long perf_data_size(struct perf_buffer *buffer);
 
3404
 
 
3405
static void
 
3406
perf_buffer_init(struct perf_buffer *buffer, long watermark, int flags)
 
3407
{
 
3408
        long max_size = perf_data_size(buffer);
 
3409
 
 
3410
        if (watermark)
 
3411
                buffer->watermark = min(max_size, watermark);
 
3412
 
 
3413
        if (!buffer->watermark)
 
3414
                buffer->watermark = max_size / 2;
 
3415
 
 
3416
        if (flags & PERF_BUFFER_WRITABLE)
 
3417
                buffer->writable = 1;
 
3418
 
 
3419
        atomic_set(&buffer->refcount, 1);
 
3420
}
 
3421
 
 
3422
#ifndef CONFIG_PERF_USE_VMALLOC
 
3423
 
 
3424
/*
 
3425
 * Back perf_mmap() with regular GFP_KERNEL-0 pages.
 
3426
 */
 
3427
 
 
3428
static struct page *
 
3429
perf_mmap_to_page(struct perf_buffer *buffer, unsigned long pgoff)
 
3430
{
 
3431
        if (pgoff > buffer->nr_pages)
 
3432
                return NULL;
 
3433
 
 
3434
        if (pgoff == 0)
 
3435
                return virt_to_page(buffer->user_page);
 
3436
 
 
3437
        return virt_to_page(buffer->data_pages[pgoff - 1]);
 
3438
}
 
3439
 
 
3440
static void *perf_mmap_alloc_page(int cpu)
 
3441
{
 
3442
        struct page *page;
 
3443
        int node;
 
3444
 
 
3445
        node = (cpu == -1) ? cpu : cpu_to_node(cpu);
 
3446
        page = alloc_pages_node(node, GFP_KERNEL | __GFP_ZERO, 0);
 
3447
        if (!page)
 
3448
                return NULL;
 
3449
 
 
3450
        return page_address(page);
 
3451
}
 
3452
 
 
3453
static struct perf_buffer *
 
3454
perf_buffer_alloc(int nr_pages, long watermark, int cpu, int flags)
 
3455
{
 
3456
        struct perf_buffer *buffer;
 
3457
        unsigned long size;
 
3458
        int i;
 
3459
 
 
3460
        size = sizeof(struct perf_buffer);
 
3461
        size += nr_pages * sizeof(void *);
 
3462
 
 
3463
        buffer = kzalloc(size, GFP_KERNEL);
 
3464
        if (!buffer)
 
3465
                goto fail;
 
3466
 
 
3467
        buffer->user_page = perf_mmap_alloc_page(cpu);
 
3468
        if (!buffer->user_page)
 
3469
                goto fail_user_page;
 
3470
 
 
3471
        for (i = 0; i < nr_pages; i++) {
 
3472
                buffer->data_pages[i] = perf_mmap_alloc_page(cpu);
 
3473
                if (!buffer->data_pages[i])
 
3474
                        goto fail_data_pages;
 
3475
        }
 
3476
 
 
3477
        buffer->nr_pages = nr_pages;
 
3478
 
 
3479
        perf_buffer_init(buffer, watermark, flags);
 
3480
 
 
3481
        return buffer;
 
3482
 
 
3483
fail_data_pages:
 
3484
        for (i--; i >= 0; i--)
 
3485
                free_page((unsigned long)buffer->data_pages[i]);
 
3486
 
 
3487
        free_page((unsigned long)buffer->user_page);
 
3488
 
 
3489
fail_user_page:
 
3490
        kfree(buffer);
 
3491
 
 
3492
fail:
 
3493
        return NULL;
 
3494
}
 
3495
 
 
3496
static void perf_mmap_free_page(unsigned long addr)
 
3497
{
 
3498
        struct page *page = virt_to_page((void *)addr);
 
3499
 
 
3500
        page->mapping = NULL;
 
3501
        __free_page(page);
 
3502
}
 
3503
 
 
3504
static void perf_buffer_free(struct perf_buffer *buffer)
 
3505
{
 
3506
        int i;
 
3507
 
 
3508
        perf_mmap_free_page((unsigned long)buffer->user_page);
 
3509
        for (i = 0; i < buffer->nr_pages; i++)
 
3510
                perf_mmap_free_page((unsigned long)buffer->data_pages[i]);
 
3511
        kfree(buffer);
 
3512
}
 
3513
 
 
3514
static inline int page_order(struct perf_buffer *buffer)
 
3515
{
 
3516
        return 0;
 
3517
}
 
3518
 
 
3519
#else
 
3520
 
 
3521
/*
 
3522
 * Back perf_mmap() with vmalloc memory.
 
3523
 *
 
3524
 * Required for architectures that have d-cache aliasing issues.
 
3525
 */
 
3526
 
 
3527
static inline int page_order(struct perf_buffer *buffer)
 
3528
{
 
3529
        return buffer->page_order;
 
3530
}
 
3531
 
 
3532
static struct page *
 
3533
perf_mmap_to_page(struct perf_buffer *buffer, unsigned long pgoff)
 
3534
{
 
3535
        if (pgoff > (1UL << page_order(buffer)))
 
3536
                return NULL;
 
3537
 
 
3538
        return vmalloc_to_page((void *)buffer->user_page + pgoff * PAGE_SIZE);
 
3539
}
 
3540
 
 
3541
static void perf_mmap_unmark_page(void *addr)
 
3542
{
 
3543
        struct page *page = vmalloc_to_page(addr);
 
3544
 
 
3545
        page->mapping = NULL;
 
3546
}
 
3547
 
 
3548
static void perf_buffer_free_work(struct work_struct *work)
 
3549
{
 
3550
        struct perf_buffer *buffer;
 
3551
        void *base;
 
3552
        int i, nr;
 
3553
 
 
3554
        buffer = container_of(work, struct perf_buffer, work);
 
3555
        nr = 1 << page_order(buffer);
 
3556
 
 
3557
        base = buffer->user_page;
 
3558
        for (i = 0; i < nr + 1; i++)
 
3559
                perf_mmap_unmark_page(base + (i * PAGE_SIZE));
 
3560
 
 
3561
        vfree(base);
 
3562
        kfree(buffer);
 
3563
}
 
3564
 
 
3565
static void perf_buffer_free(struct perf_buffer *buffer)
 
3566
{
 
3567
        schedule_work(&buffer->work);
 
3568
}
 
3569
 
 
3570
static struct perf_buffer *
 
3571
perf_buffer_alloc(int nr_pages, long watermark, int cpu, int flags)
 
3572
{
 
3573
        struct perf_buffer *buffer;
 
3574
        unsigned long size;
 
3575
        void *all_buf;
 
3576
 
 
3577
        size = sizeof(struct perf_buffer);
 
3578
        size += sizeof(void *);
 
3579
 
 
3580
        buffer = kzalloc(size, GFP_KERNEL);
 
3581
        if (!buffer)
 
3582
                goto fail;
 
3583
 
 
3584
        INIT_WORK(&buffer->work, perf_buffer_free_work);
 
3585
 
 
3586
        all_buf = vmalloc_user((nr_pages + 1) * PAGE_SIZE);
 
3587
        if (!all_buf)
 
3588
                goto fail_all_buf;
 
3589
 
 
3590
        buffer->user_page = all_buf;
 
3591
        buffer->data_pages[0] = all_buf + PAGE_SIZE;
 
3592
        buffer->page_order = ilog2(nr_pages);
 
3593
        buffer->nr_pages = 1;
 
3594
 
 
3595
        perf_buffer_init(buffer, watermark, flags);
 
3596
 
 
3597
        return buffer;
 
3598
 
 
3599
fail_all_buf:
 
3600
        kfree(buffer);
 
3601
 
 
3602
fail:
 
3603
        return NULL;
 
3604
}
 
3605
 
 
3606
#endif
 
3607
 
 
3608
static unsigned long perf_data_size(struct perf_buffer *buffer)
 
3609
{
 
3610
        return buffer->nr_pages << (PAGE_SHIFT + page_order(buffer));
 
3611
}
 
3612
 
 
3613
static int perf_mmap_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 
3614
{
 
3615
        struct perf_event *event = vma->vm_file->private_data;
 
3616
        struct perf_buffer *buffer;
 
3617
        int ret = VM_FAULT_SIGBUS;
 
3618
 
 
3619
        if (vmf->flags & FAULT_FLAG_MKWRITE) {
 
3620
                if (vmf->pgoff == 0)
 
3621
                        ret = 0;
 
3622
                return ret;
 
3623
        }
 
3624
 
 
3625
        rcu_read_lock();
 
3626
        buffer = rcu_dereference(event->buffer);
 
3627
        if (!buffer)
 
3628
                goto unlock;
 
3629
 
 
3630
        if (vmf->pgoff && (vmf->flags & FAULT_FLAG_WRITE))
 
3631
                goto unlock;
 
3632
 
 
3633
        vmf->page = perf_mmap_to_page(buffer, vmf->pgoff);
 
3634
        if (!vmf->page)
 
3635
                goto unlock;
 
3636
 
 
3637
        get_page(vmf->page);
 
3638
        vmf->page->mapping = vma->vm_file->f_mapping;
 
3639
        vmf->page->index   = vmf->pgoff;
 
3640
 
 
3641
        ret = 0;
 
3642
unlock:
 
3643
        rcu_read_unlock();
 
3644
 
 
3645
        return ret;
 
3646
}
 
3647
 
 
3648
static void perf_buffer_free_rcu(struct rcu_head *rcu_head)
 
3649
{
 
3650
        struct perf_buffer *buffer;
 
3651
 
 
3652
        buffer = container_of(rcu_head, struct perf_buffer, rcu_head);
 
3653
        perf_buffer_free(buffer);
 
3654
}
 
3655
 
 
3656
static struct perf_buffer *perf_buffer_get(struct perf_event *event)
 
3657
{
 
3658
        struct perf_buffer *buffer;
 
3659
 
 
3660
        rcu_read_lock();
 
3661
        buffer = rcu_dereference(event->buffer);
 
3662
        if (buffer) {
 
3663
                if (!atomic_inc_not_zero(&buffer->refcount))
 
3664
                        buffer = NULL;
 
3665
        }
 
3666
        rcu_read_unlock();
 
3667
 
 
3668
        return buffer;
 
3669
}
 
3670
 
 
3671
static void perf_buffer_put(struct perf_buffer *buffer)
 
3672
{
 
3673
        if (!atomic_dec_and_test(&buffer->refcount))
 
3674
                return;
 
3675
 
 
3676
        call_rcu(&buffer->rcu_head, perf_buffer_free_rcu);
 
3677
}
 
3678
 
 
3679
static void perf_mmap_open(struct vm_area_struct *vma)
 
3680
{
 
3681
        struct perf_event *event = vma->vm_file->private_data;
 
3682
 
 
3683
        atomic_inc(&event->mmap_count);
 
3684
}
 
3685
 
 
3686
static void perf_mmap_close(struct vm_area_struct *vma)
 
3687
{
 
3688
        struct perf_event *event = vma->vm_file->private_data;
 
3689
 
 
3690
        if (atomic_dec_and_mutex_lock(&event->mmap_count, &event->mmap_mutex)) {
 
3691
                unsigned long size = perf_data_size(event->buffer);
 
3692
                struct user_struct *user = event->mmap_user;
 
3693
                struct perf_buffer *buffer = event->buffer;
 
3694
 
 
3695
                atomic_long_sub((size >> PAGE_SHIFT) + 1, &user->locked_vm);
 
3696
                vma->vm_mm->locked_vm -= event->mmap_locked;
 
3697
                rcu_assign_pointer(event->buffer, NULL);
 
3698
                mutex_unlock(&event->mmap_mutex);
 
3699
 
 
3700
                perf_buffer_put(buffer);
 
3701
                free_uid(user);
 
3702
        }
 
3703
}
 
3704
 
 
3705
static const struct vm_operations_struct perf_mmap_vmops = {
 
3706
        .open           = perf_mmap_open,
 
3707
        .close          = perf_mmap_close,
 
3708
        .fault          = perf_mmap_fault,
 
3709
        .page_mkwrite   = perf_mmap_fault,
 
3710
};
 
3711
 
 
3712
static int perf_mmap(struct file *file, struct vm_area_struct *vma)
 
3713
{
 
3714
        struct perf_event *event = file->private_data;
 
3715
        unsigned long user_locked, user_lock_limit;
 
3716
        struct user_struct *user = current_user();
 
3717
        unsigned long locked, lock_limit;
 
3718
        struct perf_buffer *buffer;
 
3719
        unsigned long vma_size;
 
3720
        unsigned long nr_pages;
 
3721
        long user_extra, extra;
 
3722
        int ret = 0, flags = 0;
 
3723
 
 
3724
        /*
 
3725
         * Don't allow mmap() of inherited per-task counters. This would
 
3726
         * create a performance issue due to all children writing to the
 
3727
         * same buffer.
 
3728
         */
 
3729
        if (event->cpu == -1 && event->attr.inherit)
 
3730
                return -EINVAL;
 
3731
 
 
3732
        if (!(vma->vm_flags & VM_SHARED))
 
3733
                return -EINVAL;
 
3734
 
 
3735
        vma_size = vma->vm_end - vma->vm_start;
 
3736
        nr_pages = (vma_size / PAGE_SIZE) - 1;
 
3737
 
 
3738
        /*
 
3739
         * If we have buffer pages ensure they're a power-of-two number, so we
 
3740
         * can do bitmasks instead of modulo.
 
3741
         */
 
3742
        if (nr_pages != 0 && !is_power_of_2(nr_pages))
 
3743
                return -EINVAL;
 
3744
 
 
3745
        if (vma_size != PAGE_SIZE * (1 + nr_pages))
 
3746
                return -EINVAL;
 
3747
 
 
3748
        if (vma->vm_pgoff != 0)
 
3749
                return -EINVAL;
 
3750
 
 
3751
        WARN_ON_ONCE(event->ctx->parent_ctx);
 
3752
        mutex_lock(&event->mmap_mutex);
 
3753
        if (event->buffer) {
 
3754
                if (event->buffer->nr_pages == nr_pages)
 
3755
                        atomic_inc(&event->buffer->refcount);
 
3756
                else
 
3757
                        ret = -EINVAL;
 
3758
                goto unlock;
 
3759
        }
 
3760
 
 
3761
        user_extra = nr_pages + 1;
 
3762
        user_lock_limit = sysctl_perf_event_mlock >> (PAGE_SHIFT - 10);
 
3763
 
 
3764
        /*
 
3765
         * Increase the limit linearly with more CPUs:
 
3766
         */
 
3767
        user_lock_limit *= num_online_cpus();
 
3768
 
 
3769
        user_locked = atomic_long_read(&user->locked_vm) + user_extra;
 
3770
 
 
3771
        extra = 0;
 
3772
        if (user_locked > user_lock_limit)
 
3773
                extra = user_locked - user_lock_limit;
 
3774
 
 
3775
        lock_limit = rlimit(RLIMIT_MEMLOCK);
 
3776
        lock_limit >>= PAGE_SHIFT;
 
3777
        locked = vma->vm_mm->locked_vm + extra;
 
3778
 
 
3779
        if ((locked > lock_limit) && perf_paranoid_tracepoint_raw() &&
 
3780
                !capable(CAP_IPC_LOCK)) {
 
3781
                ret = -EPERM;
 
3782
                goto unlock;
 
3783
        }
 
3784
 
 
3785
        WARN_ON(event->buffer);
 
3786
 
 
3787
        if (vma->vm_flags & VM_WRITE)
 
3788
                flags |= PERF_BUFFER_WRITABLE;
 
3789
 
 
3790
        buffer = perf_buffer_alloc(nr_pages, event->attr.wakeup_watermark,
 
3791
                                   event->cpu, flags);
 
3792
        if (!buffer) {
 
3793
                ret = -ENOMEM;
 
3794
                goto unlock;
 
3795
        }
 
3796
        rcu_assign_pointer(event->buffer, buffer);
 
3797
 
 
3798
        atomic_long_add(user_extra, &user->locked_vm);
 
3799
        event->mmap_locked = extra;
 
3800
        event->mmap_user = get_current_user();
 
3801
        vma->vm_mm->locked_vm += event->mmap_locked;
 
3802
 
 
3803
unlock:
 
3804
        if (!ret)
 
3805
                atomic_inc(&event->mmap_count);
 
3806
        mutex_unlock(&event->mmap_mutex);
 
3807
 
 
3808
        vma->vm_flags |= VM_RESERVED;
 
3809
        vma->vm_ops = &perf_mmap_vmops;
 
3810
 
 
3811
        return ret;
 
3812
}
 
3813
 
 
3814
static int perf_fasync(int fd, struct file *filp, int on)
 
3815
{
 
3816
        struct inode *inode = filp->f_path.dentry->d_inode;
 
3817
        struct perf_event *event = filp->private_data;
 
3818
        int retval;
 
3819
 
 
3820
        mutex_lock(&inode->i_mutex);
 
3821
        retval = fasync_helper(fd, filp, on, &event->fasync);
 
3822
        mutex_unlock(&inode->i_mutex);
 
3823
 
 
3824
        if (retval < 0)
 
3825
                return retval;
 
3826
 
 
3827
        return 0;
 
3828
}
 
3829
 
 
3830
static const struct file_operations perf_fops = {
 
3831
        .llseek                 = no_llseek,
 
3832
        .release                = perf_release,
 
3833
        .read                   = perf_read,
 
3834
        .poll                   = perf_poll,
 
3835
        .unlocked_ioctl         = perf_ioctl,
 
3836
        .compat_ioctl           = perf_ioctl,
 
3837
        .mmap                   = perf_mmap,
 
3838
        .fasync                 = perf_fasync,
 
3839
};
 
3840
 
 
3841
/*
 
3842
 * Perf event wakeup
 
3843
 *
 
3844
 * If there's data, ensure we set the poll() state and publish everything
 
3845
 * to user-space before waking everybody up.
 
3846
 */
 
3847
 
 
3848
void perf_event_wakeup(struct perf_event *event)
 
3849
{
 
3850
        wake_up_all(&event->waitq);
 
3851
 
 
3852
        if (event->pending_kill) {
 
3853
                kill_fasync(&event->fasync, SIGIO, event->pending_kill);
 
3854
                event->pending_kill = 0;
 
3855
        }
 
3856
}
 
3857
 
 
3858
static void perf_pending_event(struct irq_work *entry)
 
3859
{
 
3860
        struct perf_event *event = container_of(entry,
 
3861
                        struct perf_event, pending);
 
3862
 
 
3863
        if (event->pending_disable) {
 
3864
                event->pending_disable = 0;
 
3865
                __perf_event_disable(event);
 
3866
        }
 
3867
 
 
3868
        if (event->pending_wakeup) {
 
3869
                event->pending_wakeup = 0;
 
3870
                perf_event_wakeup(event);
 
3871
        }
 
3872
}
 
3873
 
 
3874
/*
 
3875
 * We assume there is only KVM supporting the callbacks.
 
3876
 * Later on, we might change it to a list if there is
 
3877
 * another virtualization implementation supporting the callbacks.
 
3878
 */
 
3879
struct perf_guest_info_callbacks *perf_guest_cbs;
 
3880
 
 
3881
int perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *cbs)
 
3882
{
 
3883
        perf_guest_cbs = cbs;
 
3884
        return 0;
 
3885
}
 
3886
EXPORT_SYMBOL_GPL(perf_register_guest_info_callbacks);
 
3887
 
 
3888
int perf_unregister_guest_info_callbacks(struct perf_guest_info_callbacks *cbs)
 
3889
{
 
3890
        perf_guest_cbs = NULL;
 
3891
        return 0;
 
3892
}
 
3893
EXPORT_SYMBOL_GPL(perf_unregister_guest_info_callbacks);
 
3894
 
 
3895
/*
 
3896
 * Output
 
3897
 */
 
3898
static bool perf_output_space(struct perf_buffer *buffer, unsigned long tail,
 
3899
                              unsigned long offset, unsigned long head)
 
3900
{
 
3901
        unsigned long mask;
 
3902
 
 
3903
        if (!buffer->writable)
 
3904
                return true;
 
3905
 
 
3906
        mask = perf_data_size(buffer) - 1;
 
3907
 
 
3908
        offset = (offset - tail) & mask;
 
3909
        head   = (head   - tail) & mask;
 
3910
 
 
3911
        if ((int)(head - offset) < 0)
 
3912
                return false;
 
3913
 
 
3914
        return true;
 
3915
}
 
3916
 
 
3917
static void perf_output_wakeup(struct perf_output_handle *handle)
 
3918
{
 
3919
        atomic_set(&handle->buffer->poll, POLL_IN);
 
3920
 
 
3921
        if (handle->nmi) {
 
3922
                handle->event->pending_wakeup = 1;
 
3923
                irq_work_queue(&handle->event->pending);
 
3924
        } else
 
3925
                perf_event_wakeup(handle->event);
 
3926
}
 
3927
 
 
3928
/*
 
3929
 * We need to ensure a later event_id doesn't publish a head when a former
 
3930
 * event isn't done writing. However since we need to deal with NMIs we
 
3931
 * cannot fully serialize things.
 
3932
 *
 
3933
 * We only publish the head (and generate a wakeup) when the outer-most
 
3934
 * event completes.
 
3935
 */
 
3936
static void perf_output_get_handle(struct perf_output_handle *handle)
 
3937
{
 
3938
        struct perf_buffer *buffer = handle->buffer;
 
3939
 
 
3940
        preempt_disable();
 
3941
        local_inc(&buffer->nest);
 
3942
        handle->wakeup = local_read(&buffer->wakeup);
 
3943
}
 
3944
 
 
3945
static void perf_output_put_handle(struct perf_output_handle *handle)
 
3946
{
 
3947
        struct perf_buffer *buffer = handle->buffer;
 
3948
        unsigned long head;
 
3949
 
 
3950
again:
 
3951
        head = local_read(&buffer->head);
 
3952
 
 
3953
        /*
 
3954
         * IRQ/NMI can happen here, which means we can miss a head update.
 
3955
         */
 
3956
 
 
3957
        if (!local_dec_and_test(&buffer->nest))
 
3958
                goto out;
 
3959
 
 
3960
        /*
 
3961
         * Publish the known good head. Rely on the full barrier implied
 
3962
         * by atomic_dec_and_test() order the buffer->head read and this
 
3963
         * write.
 
3964
         */
 
3965
        buffer->user_page->data_head = head;
 
3966
 
 
3967
        /*
 
3968
         * Now check if we missed an update, rely on the (compiler)
 
3969
         * barrier in atomic_dec_and_test() to re-read buffer->head.
 
3970
         */
 
3971
        if (unlikely(head != local_read(&buffer->head))) {
 
3972
                local_inc(&buffer->nest);
 
3973
                goto again;
 
3974
        }
 
3975
 
 
3976
        if (handle->wakeup != local_read(&buffer->wakeup))
 
3977
                perf_output_wakeup(handle);
 
3978
 
 
3979
out:
 
3980
        preempt_enable();
 
3981
}
 
3982
 
 
3983
__always_inline void perf_output_copy(struct perf_output_handle *handle,
 
3984
                      const void *buf, unsigned int len)
 
3985
{
 
3986
        do {
 
3987
                unsigned long size = min_t(unsigned long, handle->size, len);
 
3988
 
 
3989
                memcpy(handle->addr, buf, size);
 
3990
 
 
3991
                len -= size;
 
3992
                handle->addr += size;
 
3993
                buf += size;
 
3994
                handle->size -= size;
 
3995
                if (!handle->size) {
 
3996
                        struct perf_buffer *buffer = handle->buffer;
 
3997
 
 
3998
                        handle->page++;
 
3999
                        handle->page &= buffer->nr_pages - 1;
 
4000
                        handle->addr = buffer->data_pages[handle->page];
 
4001
                        handle->size = PAGE_SIZE << page_order(buffer);
 
4002
                }
 
4003
        } while (len);
 
4004
}
 
4005
 
 
4006
static void __perf_event_header__init_id(struct perf_event_header *header,
 
4007
                                         struct perf_sample_data *data,
 
4008
                                         struct perf_event *event)
 
4009
{
 
4010
        u64 sample_type = event->attr.sample_type;
 
4011
 
 
4012
        data->type = sample_type;
 
4013
        header->size += event->id_header_size;
 
4014
 
 
4015
        if (sample_type & PERF_SAMPLE_TID) {
 
4016
                /* namespace issues */
 
4017
                data->tid_entry.pid = perf_event_pid(event, current);
 
4018
                data->tid_entry.tid = perf_event_tid(event, current);
 
4019
        }
 
4020
 
 
4021
        if (sample_type & PERF_SAMPLE_TIME)
 
4022
                data->time = perf_clock();
 
4023
 
 
4024
        if (sample_type & PERF_SAMPLE_ID)
 
4025
                data->id = primary_event_id(event);
 
4026
 
 
4027
        if (sample_type & PERF_SAMPLE_STREAM_ID)
 
4028
                data->stream_id = event->id;
 
4029
 
 
4030
        if (sample_type & PERF_SAMPLE_CPU) {
 
4031
                data->cpu_entry.cpu      = raw_smp_processor_id();
 
4032
                data->cpu_entry.reserved = 0;
 
4033
        }
 
4034
}
 
4035
 
 
4036
static void perf_event_header__init_id(struct perf_event_header *header,
 
4037
                                       struct perf_sample_data *data,
 
4038
                                       struct perf_event *event)
 
4039
{
 
4040
        if (event->attr.sample_id_all)
 
4041
                __perf_event_header__init_id(header, data, event);
 
4042
}
 
4043
 
 
4044
static void __perf_event__output_id_sample(struct perf_output_handle *handle,
 
4045
                                           struct perf_sample_data *data)
 
4046
{
 
4047
        u64 sample_type = data->type;
 
4048
 
 
4049
        if (sample_type & PERF_SAMPLE_TID)
 
4050
                perf_output_put(handle, data->tid_entry);
 
4051
 
 
4052
        if (sample_type & PERF_SAMPLE_TIME)
 
4053
                perf_output_put(handle, data->time);
 
4054
 
 
4055
        if (sample_type & PERF_SAMPLE_ID)
 
4056
                perf_output_put(handle, data->id);
 
4057
 
 
4058
        if (sample_type & PERF_SAMPLE_STREAM_ID)
 
4059
                perf_output_put(handle, data->stream_id);
 
4060
 
 
4061
        if (sample_type & PERF_SAMPLE_CPU)
 
4062
                perf_output_put(handle, data->cpu_entry);
 
4063
}
 
4064
 
 
4065
static void perf_event__output_id_sample(struct perf_event *event,
 
4066
                                         struct perf_output_handle *handle,
 
4067
                                         struct perf_sample_data *sample)
 
4068
{
 
4069
        if (event->attr.sample_id_all)
 
4070
                __perf_event__output_id_sample(handle, sample);
 
4071
}
 
4072
 
 
4073
int perf_output_begin(struct perf_output_handle *handle,
 
4074
                      struct perf_event *event, unsigned int size,
 
4075
                      int nmi, int sample)
 
4076
{
 
4077
        struct perf_buffer *buffer;
 
4078
        unsigned long tail, offset, head;
 
4079
        int have_lost;
 
4080
        struct perf_sample_data sample_data;
 
4081
        struct {
 
4082
                struct perf_event_header header;
 
4083
                u64                      id;
 
4084
                u64                      lost;
 
4085
        } lost_event;
 
4086
 
 
4087
        rcu_read_lock();
 
4088
        /*
 
4089
         * For inherited events we send all the output towards the parent.
 
4090
         */
 
4091
        if (event->parent)
 
4092
                event = event->parent;
 
4093
 
 
4094
        buffer = rcu_dereference(event->buffer);
 
4095
        if (!buffer)
 
4096
                goto out;
 
4097
 
 
4098
        handle->buffer  = buffer;
 
4099
        handle->event   = event;
 
4100
        handle->nmi     = nmi;
 
4101
        handle->sample  = sample;
 
4102
 
 
4103
        if (!buffer->nr_pages)
 
4104
                goto out;
 
4105
 
 
4106
        have_lost = local_read(&buffer->lost);
 
4107
        if (have_lost) {
 
4108
                lost_event.header.size = sizeof(lost_event);
 
4109
                perf_event_header__init_id(&lost_event.header, &sample_data,
 
4110
                                           event);
 
4111
                size += lost_event.header.size;
 
4112
        }
 
4113
 
 
4114
        perf_output_get_handle(handle);
 
4115
 
 
4116
        do {
 
4117
                /*
 
4118
                 * Userspace could choose to issue a mb() before updating the
 
4119
                 * tail pointer. So that all reads will be completed before the
 
4120
                 * write is issued.
 
4121
                 */
 
4122
                tail = ACCESS_ONCE(buffer->user_page->data_tail);
 
4123
                smp_rmb();
 
4124
                offset = head = local_read(&buffer->head);
 
4125
                head += size;
 
4126
                if (unlikely(!perf_output_space(buffer, tail, offset, head)))
 
4127
                        goto fail;
 
4128
        } while (local_cmpxchg(&buffer->head, offset, head) != offset);
 
4129
 
 
4130
        if (head - local_read(&buffer->wakeup) > buffer->watermark)
 
4131
                local_add(buffer->watermark, &buffer->wakeup);
 
4132
 
 
4133
        handle->page = offset >> (PAGE_SHIFT + page_order(buffer));
 
4134
        handle->page &= buffer->nr_pages - 1;
 
4135
        handle->size = offset & ((PAGE_SIZE << page_order(buffer)) - 1);
 
4136
        handle->addr = buffer->data_pages[handle->page];
 
4137
        handle->addr += handle->size;
 
4138
        handle->size = (PAGE_SIZE << page_order(buffer)) - handle->size;
 
4139
 
 
4140
        if (have_lost) {
 
4141
                lost_event.header.type = PERF_RECORD_LOST;
 
4142
                lost_event.header.misc = 0;
 
4143
                lost_event.id          = event->id;
 
4144
                lost_event.lost        = local_xchg(&buffer->lost, 0);
 
4145
 
 
4146
                perf_output_put(handle, lost_event);
 
4147
                perf_event__output_id_sample(event, handle, &sample_data);
 
4148
        }
 
4149
 
 
4150
        return 0;
 
4151
 
 
4152
fail:
 
4153
        local_inc(&buffer->lost);
 
4154
        perf_output_put_handle(handle);
 
4155
out:
 
4156
        rcu_read_unlock();
 
4157
 
 
4158
        return -ENOSPC;
 
4159
}
 
4160
 
 
4161
void perf_output_end(struct perf_output_handle *handle)
 
4162
{
 
4163
        struct perf_event *event = handle->event;
 
4164
        struct perf_buffer *buffer = handle->buffer;
 
4165
 
 
4166
        int wakeup_events = event->attr.wakeup_events;
 
4167
 
 
4168
        if (handle->sample && wakeup_events) {
 
4169
                int events = local_inc_return(&buffer->events);
 
4170
                if (events >= wakeup_events) {
 
4171
                        local_sub(wakeup_events, &buffer->events);
 
4172
                        local_inc(&buffer->wakeup);
 
4173
                }
 
4174
        }
 
4175
 
 
4176
        perf_output_put_handle(handle);
 
4177
        rcu_read_unlock();
 
4178
}
 
4179
 
 
4180
static void perf_output_read_one(struct perf_output_handle *handle,
 
4181
                                 struct perf_event *event,
 
4182
                                 u64 enabled, u64 running)
 
4183
{
 
4184
        u64 read_format = event->attr.read_format;
 
4185
        u64 values[4];
 
4186
        int n = 0;
 
4187
 
 
4188
        values[n++] = perf_event_count(event);
 
4189
        if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED) {
 
4190
                values[n++] = enabled +
 
4191
                        atomic64_read(&event->child_total_time_enabled);
 
4192
        }
 
4193
        if (read_format & PERF_FORMAT_TOTAL_TIME_RUNNING) {
 
4194
                values[n++] = running +
 
4195
                        atomic64_read(&event->child_total_time_running);
 
4196
        }
 
4197
        if (read_format & PERF_FORMAT_ID)
 
4198
                values[n++] = primary_event_id(event);
 
4199
 
 
4200
        perf_output_copy(handle, values, n * sizeof(u64));
 
4201
}
 
4202
 
 
4203
/*
 
4204
 * XXX PERF_FORMAT_GROUP vs inherited events seems difficult.
 
4205
 */
 
4206
static void perf_output_read_group(struct perf_output_handle *handle,
 
4207
                            struct perf_event *event,
 
4208
                            u64 enabled, u64 running)
 
4209
{
 
4210
        struct perf_event *leader = event->group_leader, *sub;
 
4211
        u64 read_format = event->attr.read_format;
 
4212
        u64 values[5];
 
4213
        int n = 0;
 
4214
 
 
4215
        values[n++] = 1 + leader->nr_siblings;
 
4216
 
 
4217
        if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
 
4218
                values[n++] = enabled;
 
4219
 
 
4220
        if (read_format & PERF_FORMAT_TOTAL_TIME_RUNNING)
 
4221
                values[n++] = running;
 
4222
 
 
4223
        if (leader != event)
 
4224
                leader->pmu->read(leader);
 
4225
 
 
4226
        values[n++] = perf_event_count(leader);
 
4227
        if (read_format & PERF_FORMAT_ID)
 
4228
                values[n++] = primary_event_id(leader);
 
4229
 
 
4230
        perf_output_copy(handle, values, n * sizeof(u64));
 
4231
 
 
4232
        list_for_each_entry(sub, &leader->sibling_list, group_entry) {
 
4233
                n = 0;
 
4234
 
 
4235
                if (sub != event)
 
4236
                        sub->pmu->read(sub);
 
4237
 
 
4238
                values[n++] = perf_event_count(sub);
 
4239
                if (read_format & PERF_FORMAT_ID)
 
4240
                        values[n++] = primary_event_id(sub);
 
4241
 
 
4242
                perf_output_copy(handle, values, n * sizeof(u64));
 
4243
        }
 
4244
}
 
4245
 
 
4246
#define PERF_FORMAT_TOTAL_TIMES (PERF_FORMAT_TOTAL_TIME_ENABLED|\
 
4247
                                 PERF_FORMAT_TOTAL_TIME_RUNNING)
 
4248
 
 
4249
static void perf_output_read(struct perf_output_handle *handle,
 
4250
                             struct perf_event *event)
 
4251
{
 
4252
        u64 enabled = 0, running = 0, now, ctx_time;
 
4253
        u64 read_format = event->attr.read_format;
 
4254
 
 
4255
        /*
 
4256
         * compute total_time_enabled, total_time_running
 
4257
         * based on snapshot values taken when the event
 
4258
         * was last scheduled in.
 
4259
         *
 
4260
         * we cannot simply called update_context_time()
 
4261
         * because of locking issue as we are called in
 
4262
         * NMI context
 
4263
         */
 
4264
        if (read_format & PERF_FORMAT_TOTAL_TIMES) {
 
4265
                now = perf_clock();
 
4266
                ctx_time = event->shadow_ctx_time + now;
 
4267
                enabled = ctx_time - event->tstamp_enabled;
 
4268
                running = ctx_time - event->tstamp_running;
 
4269
        }
 
4270
 
 
4271
        if (event->attr.read_format & PERF_FORMAT_GROUP)
 
4272
                perf_output_read_group(handle, event, enabled, running);
 
4273
        else
 
4274
                perf_output_read_one(handle, event, enabled, running);
 
4275
}
 
4276
 
 
4277
void perf_output_sample(struct perf_output_handle *handle,
 
4278
                        struct perf_event_header *header,
 
4279
                        struct perf_sample_data *data,
 
4280
                        struct perf_event *event)
 
4281
{
 
4282
        u64 sample_type = data->type;
 
4283
 
 
4284
        perf_output_put(handle, *header);
 
4285
 
 
4286
        if (sample_type & PERF_SAMPLE_IP)
 
4287
                perf_output_put(handle, data->ip);
 
4288
 
 
4289
        if (sample_type & PERF_SAMPLE_TID)
 
4290
                perf_output_put(handle, data->tid_entry);
 
4291
 
 
4292
        if (sample_type & PERF_SAMPLE_TIME)
 
4293
                perf_output_put(handle, data->time);
 
4294
 
 
4295
        if (sample_type & PERF_SAMPLE_ADDR)
 
4296
                perf_output_put(handle, data->addr);
 
4297
 
 
4298
        if (sample_type & PERF_SAMPLE_ID)
 
4299
                perf_output_put(handle, data->id);
 
4300
 
 
4301
        if (sample_type & PERF_SAMPLE_STREAM_ID)
 
4302
                perf_output_put(handle, data->stream_id);
 
4303
 
 
4304
        if (sample_type & PERF_SAMPLE_CPU)
 
4305
                perf_output_put(handle, data->cpu_entry);
 
4306
 
 
4307
        if (sample_type & PERF_SAMPLE_PERIOD)
 
4308
                perf_output_put(handle, data->period);
 
4309
 
 
4310
        if (sample_type & PERF_SAMPLE_READ)
 
4311
                perf_output_read(handle, event);
 
4312
 
 
4313
        if (sample_type & PERF_SAMPLE_CALLCHAIN) {
 
4314
                if (data->callchain) {
 
4315
                        int size = 1;
 
4316
 
 
4317
                        if (data->callchain)
 
4318
                                size += data->callchain->nr;
 
4319
 
 
4320
                        size *= sizeof(u64);
 
4321
 
 
4322
                        perf_output_copy(handle, data->callchain, size);
 
4323
                } else {
 
4324
                        u64 nr = 0;
 
4325
                        perf_output_put(handle, nr);
 
4326
                }
 
4327
        }
 
4328
 
 
4329
        if (sample_type & PERF_SAMPLE_RAW) {
 
4330
                if (data->raw) {
 
4331
                        perf_output_put(handle, data->raw->size);
 
4332
                        perf_output_copy(handle, data->raw->data,
 
4333
                                         data->raw->size);
 
4334
                } else {
 
4335
                        struct {
 
4336
                                u32     size;
 
4337
                                u32     data;
 
4338
                        } raw = {
 
4339
                                .size = sizeof(u32),
 
4340
                                .data = 0,
 
4341
                        };
 
4342
                        perf_output_put(handle, raw);
 
4343
                }
 
4344
        }
 
4345
}
 
4346
 
 
4347
void perf_prepare_sample(struct perf_event_header *header,
 
4348
                         struct perf_sample_data *data,
 
4349
                         struct perf_event *event,
 
4350
                         struct pt_regs *regs)
 
4351
{
 
4352
        u64 sample_type = event->attr.sample_type;
 
4353
 
 
4354
        header->type = PERF_RECORD_SAMPLE;
 
4355
        header->size = sizeof(*header) + event->header_size;
 
4356
 
 
4357
        header->misc = 0;
 
4358
        header->misc |= perf_misc_flags(regs);
 
4359
 
 
4360
        __perf_event_header__init_id(header, data, event);
 
4361
 
 
4362
        if (sample_type & PERF_SAMPLE_IP)
 
4363
                data->ip = perf_instruction_pointer(regs);
 
4364
 
 
4365
        if (sample_type & PERF_SAMPLE_CALLCHAIN) {
 
4366
                int size = 1;
 
4367
 
 
4368
                data->callchain = perf_callchain(regs);
 
4369
 
 
4370
                if (data->callchain)
 
4371
                        size += data->callchain->nr;
 
4372
 
 
4373
                header->size += size * sizeof(u64);
 
4374
        }
 
4375
 
 
4376
        if (sample_type & PERF_SAMPLE_RAW) {
 
4377
                int size = sizeof(u32);
 
4378
 
 
4379
                if (data->raw)
 
4380
                        size += data->raw->size;
 
4381
                else
 
4382
                        size += sizeof(u32);
 
4383
 
 
4384
                WARN_ON_ONCE(size & (sizeof(u64)-1));
 
4385
                header->size += size;
 
4386
        }
 
4387
}
 
4388
 
 
4389
static void perf_event_output(struct perf_event *event, int nmi,
 
4390
                                struct perf_sample_data *data,
 
4391
                                struct pt_regs *regs)
 
4392
{
 
4393
        struct perf_output_handle handle;
 
4394
        struct perf_event_header header;
 
4395
 
 
4396
        /* protect the callchain buffers */
 
4397
        rcu_read_lock();
 
4398
 
 
4399
        perf_prepare_sample(&header, data, event, regs);
 
4400
 
 
4401
        if (perf_output_begin(&handle, event, header.size, nmi, 1))
 
4402
                goto exit;
 
4403
 
 
4404
        perf_output_sample(&handle, &header, data, event);
 
4405
 
 
4406
        perf_output_end(&handle);
 
4407
 
 
4408
exit:
 
4409
        rcu_read_unlock();
 
4410
}
 
4411
 
 
4412
/*
 
4413
 * read event_id
 
4414
 */
 
4415
 
 
4416
struct perf_read_event {
 
4417
        struct perf_event_header        header;
 
4418
 
 
4419
        u32                             pid;
 
4420
        u32                             tid;
 
4421
};
 
4422
 
 
4423
static void
 
4424
perf_event_read_event(struct perf_event *event,
 
4425
                        struct task_struct *task)
 
4426
{
 
4427
        struct perf_output_handle handle;
 
4428
        struct perf_sample_data sample;
 
4429
        struct perf_read_event read_event = {
 
4430
                .header = {
 
4431
                        .type = PERF_RECORD_READ,
 
4432
                        .misc = 0,
 
4433
                        .size = sizeof(read_event) + event->read_size,
 
4434
                },
 
4435
                .pid = perf_event_pid(event, task),
 
4436
                .tid = perf_event_tid(event, task),
 
4437
        };
 
4438
        int ret;
 
4439
 
 
4440
        perf_event_header__init_id(&read_event.header, &sample, event);
 
4441
        ret = perf_output_begin(&handle, event, read_event.header.size, 0, 0);
 
4442
        if (ret)
 
4443
                return;
 
4444
 
 
4445
        perf_output_put(&handle, read_event);
 
4446
        perf_output_read(&handle, event);
 
4447
        perf_event__output_id_sample(event, &handle, &sample);
 
4448
 
 
4449
        perf_output_end(&handle);
 
4450
}
 
4451
 
 
4452
/*
 
4453
 * task tracking -- fork/exit
 
4454
 *
 
4455
 * enabled by: attr.comm | attr.mmap | attr.mmap_data | attr.task
 
4456
 */
 
4457
 
 
4458
struct perf_task_event {
 
4459
        struct task_struct              *task;
 
4460
        struct perf_event_context       *task_ctx;
 
4461
 
 
4462
        struct {
 
4463
                struct perf_event_header        header;
 
4464
 
 
4465
                u32                             pid;
 
4466
                u32                             ppid;
 
4467
                u32                             tid;
 
4468
                u32                             ptid;
 
4469
                u64                             time;
 
4470
        } event_id;
 
4471
};
 
4472
 
 
4473
static void perf_event_task_output(struct perf_event *event,
 
4474
                                     struct perf_task_event *task_event)
 
4475
{
 
4476
        struct perf_output_handle handle;
 
4477
        struct perf_sample_data sample;
 
4478
        struct task_struct *task = task_event->task;
 
4479
        int ret, size = task_event->event_id.header.size;
 
4480
 
 
4481
        perf_event_header__init_id(&task_event->event_id.header, &sample, event);
 
4482
 
 
4483
        ret = perf_output_begin(&handle, event,
 
4484
                                task_event->event_id.header.size, 0, 0);
 
4485
        if (ret)
 
4486
                goto out;
 
4487
 
 
4488
        task_event->event_id.pid = perf_event_pid(event, task);
 
4489
        task_event->event_id.ppid = perf_event_pid(event, current);
 
4490
 
 
4491
        task_event->event_id.tid = perf_event_tid(event, task);
 
4492
        task_event->event_id.ptid = perf_event_tid(event, current);
 
4493
 
 
4494
        perf_output_put(&handle, task_event->event_id);
 
4495
 
 
4496
        perf_event__output_id_sample(event, &handle, &sample);
 
4497
 
 
4498
        perf_output_end(&handle);
 
4499
out:
 
4500
        task_event->event_id.header.size = size;
 
4501
}
 
4502
 
 
4503
static int perf_event_task_match(struct perf_event *event)
 
4504
{
 
4505
        if (event->state < PERF_EVENT_STATE_INACTIVE)
 
4506
                return 0;
 
4507
 
 
4508
        if (!event_filter_match(event))
 
4509
                return 0;
 
4510
 
 
4511
        if (event->attr.comm || event->attr.mmap ||
 
4512
            event->attr.mmap_data || event->attr.task)
 
4513
                return 1;
 
4514
 
 
4515
        return 0;
 
4516
}
 
4517
 
 
4518
static void perf_event_task_ctx(struct perf_event_context *ctx,
 
4519
                                  struct perf_task_event *task_event)
 
4520
{
 
4521
        struct perf_event *event;
 
4522
 
 
4523
        list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
 
4524
                if (perf_event_task_match(event))
 
4525
                        perf_event_task_output(event, task_event);
 
4526
        }
 
4527
}
 
4528
 
 
4529
static void perf_event_task_event(struct perf_task_event *task_event)
 
4530
{
 
4531
        struct perf_cpu_context *cpuctx;
 
4532
        struct perf_event_context *ctx;
 
4533
        struct pmu *pmu;
 
4534
        int ctxn;
 
4535
 
 
4536
        rcu_read_lock();
 
4537
        list_for_each_entry_rcu(pmu, &pmus, entry) {
 
4538
                cpuctx = get_cpu_ptr(pmu->pmu_cpu_context);
 
4539
                if (cpuctx->active_pmu != pmu)
 
4540
                        goto next;
 
4541
                perf_event_task_ctx(&cpuctx->ctx, task_event);
 
4542
 
 
4543
                ctx = task_event->task_ctx;
 
4544
                if (!ctx) {
 
4545
                        ctxn = pmu->task_ctx_nr;
 
4546
                        if (ctxn < 0)
 
4547
                                goto next;
 
4548
                        ctx = rcu_dereference(current->perf_event_ctxp[ctxn]);
 
4549
                }
 
4550
                if (ctx)
 
4551
                        perf_event_task_ctx(ctx, task_event);
 
4552
next:
 
4553
                put_cpu_ptr(pmu->pmu_cpu_context);
 
4554
        }
 
4555
        rcu_read_unlock();
 
4556
}
 
4557
 
 
4558
static void perf_event_task(struct task_struct *task,
 
4559
                              struct perf_event_context *task_ctx,
 
4560
                              int new)
 
4561
{
 
4562
        struct perf_task_event task_event;
 
4563
 
 
4564
        if (!atomic_read(&nr_comm_events) &&
 
4565
            !atomic_read(&nr_mmap_events) &&
 
4566
            !atomic_read(&nr_task_events))
 
4567
                return;
 
4568
 
 
4569
        task_event = (struct perf_task_event){
 
4570
                .task     = task,
 
4571
                .task_ctx = task_ctx,
 
4572
                .event_id    = {
 
4573
                        .header = {
 
4574
                                .type = new ? PERF_RECORD_FORK : PERF_RECORD_EXIT,
 
4575
                                .misc = 0,
 
4576
                                .size = sizeof(task_event.event_id),
 
4577
                        },
 
4578
                        /* .pid  */
 
4579
                        /* .ppid */
 
4580
                        /* .tid  */
 
4581
                        /* .ptid */
 
4582
                        .time = perf_clock(),
 
4583
                },
 
4584
        };
 
4585
 
 
4586
        perf_event_task_event(&task_event);
 
4587
}
 
4588
 
 
4589
void perf_event_fork(struct task_struct *task)
 
4590
{
 
4591
        perf_event_task(task, NULL, 1);
 
4592
}
 
4593
 
 
4594
/*
 
4595
 * comm tracking
 
4596
 */
 
4597
 
 
4598
struct perf_comm_event {
 
4599
        struct task_struct      *task;
 
4600
        char                    *comm;
 
4601
        int                     comm_size;
 
4602
 
 
4603
        struct {
 
4604
                struct perf_event_header        header;
 
4605
 
 
4606
                u32                             pid;
 
4607
                u32                             tid;
 
4608
        } event_id;
 
4609
};
 
4610
 
 
4611
static void perf_event_comm_output(struct perf_event *event,
 
4612
                                     struct perf_comm_event *comm_event)
 
4613
{
 
4614
        struct perf_output_handle handle;
 
4615
        struct perf_sample_data sample;
 
4616
        int size = comm_event->event_id.header.size;
 
4617
        int ret;
 
4618
 
 
4619
        perf_event_header__init_id(&comm_event->event_id.header, &sample, event);
 
4620
        ret = perf_output_begin(&handle, event,
 
4621
                                comm_event->event_id.header.size, 0, 0);
 
4622
 
 
4623
        if (ret)
 
4624
                goto out;
 
4625
 
 
4626
        comm_event->event_id.pid = perf_event_pid(event, comm_event->task);
 
4627
        comm_event->event_id.tid = perf_event_tid(event, comm_event->task);
 
4628
 
 
4629
        perf_output_put(&handle, comm_event->event_id);
 
4630
        perf_output_copy(&handle, comm_event->comm,
 
4631
                                   comm_event->comm_size);
 
4632
 
 
4633
        perf_event__output_id_sample(event, &handle, &sample);
 
4634
 
 
4635
        perf_output_end(&handle);
 
4636
out:
 
4637
        comm_event->event_id.header.size = size;
 
4638
}
 
4639
 
 
4640
static int perf_event_comm_match(struct perf_event *event)
 
4641
{
 
4642
        if (event->state < PERF_EVENT_STATE_INACTIVE)
 
4643
                return 0;
 
4644
 
 
4645
        if (!event_filter_match(event))
 
4646
                return 0;
 
4647
 
 
4648
        if (event->attr.comm)
 
4649
                return 1;
 
4650
 
 
4651
        return 0;
 
4652
}
 
4653
 
 
4654
static void perf_event_comm_ctx(struct perf_event_context *ctx,
 
4655
                                  struct perf_comm_event *comm_event)
 
4656
{
 
4657
        struct perf_event *event;
 
4658
 
 
4659
        list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
 
4660
                if (perf_event_comm_match(event))
 
4661
                        perf_event_comm_output(event, comm_event);
 
4662
        }
 
4663
}
 
4664
 
 
4665
static void perf_event_comm_event(struct perf_comm_event *comm_event)
 
4666
{
 
4667
        struct perf_cpu_context *cpuctx;
 
4668
        struct perf_event_context *ctx;
 
4669
        char comm[TASK_COMM_LEN];
 
4670
        unsigned int size;
 
4671
        struct pmu *pmu;
 
4672
        int ctxn;
 
4673
 
 
4674
        memset(comm, 0, sizeof(comm));
 
4675
        strlcpy(comm, comm_event->task->comm, sizeof(comm));
 
4676
        size = ALIGN(strlen(comm)+1, sizeof(u64));
 
4677
 
 
4678
        comm_event->comm = comm;
 
4679
        comm_event->comm_size = size;
 
4680
 
 
4681
        comm_event->event_id.header.size = sizeof(comm_event->event_id) + size;
 
4682
        rcu_read_lock();
 
4683
        list_for_each_entry_rcu(pmu, &pmus, entry) {
 
4684
                cpuctx = get_cpu_ptr(pmu->pmu_cpu_context);
 
4685
                if (cpuctx->active_pmu != pmu)
 
4686
                        goto next;
 
4687
                perf_event_comm_ctx(&cpuctx->ctx, comm_event);
 
4688
 
 
4689
                ctxn = pmu->task_ctx_nr;
 
4690
                if (ctxn < 0)
 
4691
                        goto next;
 
4692
 
 
4693
                ctx = rcu_dereference(current->perf_event_ctxp[ctxn]);
 
4694
                if (ctx)
 
4695
                        perf_event_comm_ctx(ctx, comm_event);
 
4696
next:
 
4697
                put_cpu_ptr(pmu->pmu_cpu_context);
 
4698
        }
 
4699
        rcu_read_unlock();
 
4700
}
 
4701
 
 
4702
void perf_event_comm(struct task_struct *task)
 
4703
{
 
4704
        struct perf_comm_event comm_event;
 
4705
        struct perf_event_context *ctx;
 
4706
        int ctxn;
 
4707
 
 
4708
        for_each_task_context_nr(ctxn) {
 
4709
                ctx = task->perf_event_ctxp[ctxn];
 
4710
                if (!ctx)
 
4711
                        continue;
 
4712
 
 
4713
                perf_event_enable_on_exec(ctx);
 
4714
        }
 
4715
 
 
4716
        if (!atomic_read(&nr_comm_events))
 
4717
                return;
 
4718
 
 
4719
        comm_event = (struct perf_comm_event){
 
4720
                .task   = task,
 
4721
                /* .comm      */
 
4722
                /* .comm_size */
 
4723
                .event_id  = {
 
4724
                        .header = {
 
4725
                                .type = PERF_RECORD_COMM,
 
4726
                                .misc = 0,
 
4727
                                /* .size */
 
4728
                        },
 
4729
                        /* .pid */
 
4730
                        /* .tid */
 
4731
                },
 
4732
        };
 
4733
 
 
4734
        perf_event_comm_event(&comm_event);
 
4735
}
 
4736
 
 
4737
/*
 
4738
 * mmap tracking
 
4739
 */
 
4740
 
 
4741
struct perf_mmap_event {
 
4742
        struct vm_area_struct   *vma;
 
4743
 
 
4744
        const char              *file_name;
 
4745
        int                     file_size;
 
4746
 
 
4747
        struct {
 
4748
                struct perf_event_header        header;
 
4749
 
 
4750
                u32                             pid;
 
4751
                u32                             tid;
 
4752
                u64                             start;
 
4753
                u64                             len;
 
4754
                u64                             pgoff;
 
4755
        } event_id;
 
4756
};
 
4757
 
 
4758
static void perf_event_mmap_output(struct perf_event *event,
 
4759
                                     struct perf_mmap_event *mmap_event)
 
4760
{
 
4761
        struct perf_output_handle handle;
 
4762
        struct perf_sample_data sample;
 
4763
        int size = mmap_event->event_id.header.size;
 
4764
        int ret;
 
4765
 
 
4766
        perf_event_header__init_id(&mmap_event->event_id.header, &sample, event);
 
4767
        ret = perf_output_begin(&handle, event,
 
4768
                                mmap_event->event_id.header.size, 0, 0);
 
4769
        if (ret)
 
4770
                goto out;
 
4771
 
 
4772
        mmap_event->event_id.pid = perf_event_pid(event, current);
 
4773
        mmap_event->event_id.tid = perf_event_tid(event, current);
 
4774
 
 
4775
        perf_output_put(&handle, mmap_event->event_id);
 
4776
        perf_output_copy(&handle, mmap_event->file_name,
 
4777
                                   mmap_event->file_size);
 
4778
 
 
4779
        perf_event__output_id_sample(event, &handle, &sample);
 
4780
 
 
4781
        perf_output_end(&handle);
 
4782
out:
 
4783
        mmap_event->event_id.header.size = size;
 
4784
}
 
4785
 
 
4786
static int perf_event_mmap_match(struct perf_event *event,
 
4787
                                   struct perf_mmap_event *mmap_event,
 
4788
                                   int executable)
 
4789
{
 
4790
        if (event->state < PERF_EVENT_STATE_INACTIVE)
 
4791
                return 0;
 
4792
 
 
4793
        if (!event_filter_match(event))
 
4794
                return 0;
 
4795
 
 
4796
        if ((!executable && event->attr.mmap_data) ||
 
4797
            (executable && event->attr.mmap))
 
4798
                return 1;
 
4799
 
 
4800
        return 0;
 
4801
}
 
4802
 
 
4803
static void perf_event_mmap_ctx(struct perf_event_context *ctx,
 
4804
                                  struct perf_mmap_event *mmap_event,
 
4805
                                  int executable)
 
4806
{
 
4807
        struct perf_event *event;
 
4808
 
 
4809
        list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
 
4810
                if (perf_event_mmap_match(event, mmap_event, executable))
 
4811
                        perf_event_mmap_output(event, mmap_event);
 
4812
        }
 
4813
}
 
4814
 
 
4815
static void perf_event_mmap_event(struct perf_mmap_event *mmap_event)
 
4816
{
 
4817
        struct perf_cpu_context *cpuctx;
 
4818
        struct perf_event_context *ctx;
 
4819
        struct vm_area_struct *vma = mmap_event->vma;
 
4820
        struct file *file = vma->vm_file;
 
4821
        unsigned int size;
 
4822
        char tmp[16];
 
4823
        char *buf = NULL;
 
4824
        const char *name;
 
4825
        struct pmu *pmu;
 
4826
        int ctxn;
 
4827
 
 
4828
        memset(tmp, 0, sizeof(tmp));
 
4829
 
 
4830
        if (file) {
 
4831
                /*
 
4832
                 * d_path works from the end of the buffer backwards, so we
 
4833
                 * need to add enough zero bytes after the string to handle
 
4834
                 * the 64bit alignment we do later.
 
4835
                 */
 
4836
                buf = kzalloc(PATH_MAX + sizeof(u64), GFP_KERNEL);
 
4837
                if (!buf) {
 
4838
                        name = strncpy(tmp, "//enomem", sizeof(tmp));
 
4839
                        goto got_name;
 
4840
                }
 
4841
                name = d_path(&file->f_path, buf, PATH_MAX);
 
4842
                if (IS_ERR(name)) {
 
4843
                        name = strncpy(tmp, "//toolong", sizeof(tmp));
 
4844
                        goto got_name;
 
4845
                }
 
4846
        } else {
 
4847
                if (arch_vma_name(mmap_event->vma)) {
 
4848
                        name = strncpy(tmp, arch_vma_name(mmap_event->vma),
 
4849
                                       sizeof(tmp));
 
4850
                        goto got_name;
 
4851
                }
 
4852
 
 
4853
                if (!vma->vm_mm) {
 
4854
                        name = strncpy(tmp, "[vdso]", sizeof(tmp));
 
4855
                        goto got_name;
 
4856
                } else if (vma->vm_start <= vma->vm_mm->start_brk &&
 
4857
                                vma->vm_end >= vma->vm_mm->brk) {
 
4858
                        name = strncpy(tmp, "[heap]", sizeof(tmp));
 
4859
                        goto got_name;
 
4860
                } else if (vma->vm_start <= vma->vm_mm->start_stack &&
 
4861
                                vma->vm_end >= vma->vm_mm->start_stack) {
 
4862
                        name = strncpy(tmp, "[stack]", sizeof(tmp));
 
4863
                        goto got_name;
 
4864
                }
 
4865
 
 
4866
                name = strncpy(tmp, "//anon", sizeof(tmp));
 
4867
                goto got_name;
 
4868
        }
 
4869
 
 
4870
got_name:
 
4871
        size = ALIGN(strlen(name)+1, sizeof(u64));
 
4872
 
 
4873
        mmap_event->file_name = name;
 
4874
        mmap_event->file_size = size;
 
4875
 
 
4876
        mmap_event->event_id.header.size = sizeof(mmap_event->event_id) + size;
 
4877
 
 
4878
        rcu_read_lock();
 
4879
        list_for_each_entry_rcu(pmu, &pmus, entry) {
 
4880
                cpuctx = get_cpu_ptr(pmu->pmu_cpu_context);
 
4881
                if (cpuctx->active_pmu != pmu)
 
4882
                        goto next;
 
4883
                perf_event_mmap_ctx(&cpuctx->ctx, mmap_event,
 
4884
                                        vma->vm_flags & VM_EXEC);
 
4885
 
 
4886
                ctxn = pmu->task_ctx_nr;
 
4887
                if (ctxn < 0)
 
4888
                        goto next;
 
4889
 
 
4890
                ctx = rcu_dereference(current->perf_event_ctxp[ctxn]);
 
4891
                if (ctx) {
 
4892
                        perf_event_mmap_ctx(ctx, mmap_event,
 
4893
                                        vma->vm_flags & VM_EXEC);
 
4894
                }
 
4895
next:
 
4896
                put_cpu_ptr(pmu->pmu_cpu_context);
 
4897
        }
 
4898
        rcu_read_unlock();
 
4899
 
 
4900
        kfree(buf);
 
4901
}
 
4902
 
 
4903
void perf_event_mmap(struct vm_area_struct *vma)
 
4904
{
 
4905
        struct perf_mmap_event mmap_event;
 
4906
 
 
4907
        if (!atomic_read(&nr_mmap_events))
 
4908
                return;
 
4909
 
 
4910
        mmap_event = (struct perf_mmap_event){
 
4911
                .vma    = vma,
 
4912
                /* .file_name */
 
4913
                /* .file_size */
 
4914
                .event_id  = {
 
4915
                        .header = {
 
4916
                                .type = PERF_RECORD_MMAP,
 
4917
                                .misc = PERF_RECORD_MISC_USER,
 
4918
                                /* .size */
 
4919
                        },
 
4920
                        /* .pid */
 
4921
                        /* .tid */
 
4922
                        .start  = vma->vm_start,
 
4923
                        .len    = vma->vm_end - vma->vm_start,
 
4924
                        .pgoff  = (u64)vma->vm_pgoff << PAGE_SHIFT,
 
4925
                },
 
4926
        };
 
4927
 
 
4928
        perf_event_mmap_event(&mmap_event);
 
4929
}
 
4930
 
 
4931
/*
 
4932
 * IRQ throttle logging
 
4933
 */
 
4934
 
 
4935
static void perf_log_throttle(struct perf_event *event, int enable)
 
4936
{
 
4937
        struct perf_output_handle handle;
 
4938
        struct perf_sample_data sample;
 
4939
        int ret;
 
4940
 
 
4941
        struct {
 
4942
                struct perf_event_header        header;
 
4943
                u64                             time;
 
4944
                u64                             id;
 
4945
                u64                             stream_id;
 
4946
        } throttle_event = {
 
4947
                .header = {
 
4948
                        .type = PERF_RECORD_THROTTLE,
 
4949
                        .misc = 0,
 
4950
                        .size = sizeof(throttle_event),
 
4951
                },
 
4952
                .time           = perf_clock(),
 
4953
                .id             = primary_event_id(event),
 
4954
                .stream_id      = event->id,
 
4955
        };
 
4956
 
 
4957
        if (enable)
 
4958
                throttle_event.header.type = PERF_RECORD_UNTHROTTLE;
 
4959
 
 
4960
        perf_event_header__init_id(&throttle_event.header, &sample, event);
 
4961
 
 
4962
        ret = perf_output_begin(&handle, event,
 
4963
                                throttle_event.header.size, 1, 0);
 
4964
        if (ret)
 
4965
                return;
 
4966
 
 
4967
        perf_output_put(&handle, throttle_event);
 
4968
        perf_event__output_id_sample(event, &handle, &sample);
 
4969
        perf_output_end(&handle);
 
4970
}
 
4971
 
 
4972
/*
 
4973
 * Generic event overflow handling, sampling.
 
4974
 */
 
4975
 
 
4976
static int __perf_event_overflow(struct perf_event *event, int nmi,
 
4977
                                   int throttle, struct perf_sample_data *data,
 
4978
                                   struct pt_regs *regs)
 
4979
{
 
4980
        int events = atomic_read(&event->event_limit);
 
4981
        struct hw_perf_event *hwc = &event->hw;
 
4982
        int ret = 0;
 
4983
 
 
4984
        /*
 
4985
         * Non-sampling counters might still use the PMI to fold short
 
4986
         * hardware counters, ignore those.
 
4987
         */
 
4988
        if (unlikely(!is_sampling_event(event)))
 
4989
                return 0;
 
4990
 
 
4991
        if (unlikely(hwc->interrupts >= max_samples_per_tick)) {
 
4992
                if (throttle) {
 
4993
                        hwc->interrupts = MAX_INTERRUPTS;
 
4994
                        perf_log_throttle(event, 0);
 
4995
                        ret = 1;
 
4996
                }
 
4997
        } else
 
4998
                hwc->interrupts++;
 
4999
 
 
5000
        if (event->attr.freq) {
 
5001
                u64 now = perf_clock();
 
5002
                s64 delta = now - hwc->freq_time_stamp;
 
5003
 
 
5004
                hwc->freq_time_stamp = now;
 
5005
 
 
5006
                if (delta > 0 && delta < 2*TICK_NSEC)
 
5007
                        perf_adjust_period(event, delta, hwc->last_period);
 
5008
        }
 
5009
 
 
5010
        /*
 
5011
         * XXX event_limit might not quite work as expected on inherited
 
5012
         * events
 
5013
         */
 
5014
 
 
5015
        event->pending_kill = POLL_IN;
 
5016
        if (events && atomic_dec_and_test(&event->event_limit)) {
 
5017
                ret = 1;
 
5018
                event->pending_kill = POLL_HUP;
 
5019
                if (nmi) {
 
5020
                        event->pending_disable = 1;
 
5021
                        irq_work_queue(&event->pending);
 
5022
                } else
 
5023
                        perf_event_disable(event);
 
5024
        }
 
5025
 
 
5026
        if (event->overflow_handler)
 
5027
                event->overflow_handler(event, nmi, data, regs);
 
5028
        else
 
5029
                perf_event_output(event, nmi, data, regs);
 
5030
 
 
5031
        if (event->fasync && event->pending_kill) {
 
5032
                if (nmi) {
 
5033
                        event->pending_wakeup = 1;
 
5034
                        irq_work_queue(&event->pending);
 
5035
                } else
 
5036
                        perf_event_wakeup(event);
 
5037
        }
 
5038
 
 
5039
        return ret;
 
5040
}
 
5041
 
 
5042
int perf_event_overflow(struct perf_event *event, int nmi,
 
5043
                          struct perf_sample_data *data,
 
5044
                          struct pt_regs *regs)
 
5045
{
 
5046
        return __perf_event_overflow(event, nmi, 1, data, regs);
 
5047
}
 
5048
 
 
5049
/*
 
5050
 * Generic software event infrastructure
 
5051
 */
 
5052
 
 
5053
struct swevent_htable {
 
5054
        struct swevent_hlist            *swevent_hlist;
 
5055
        struct mutex                    hlist_mutex;
 
5056
        int                             hlist_refcount;
 
5057
 
 
5058
        /* Recursion avoidance in each contexts */
 
5059
        int                             recursion[PERF_NR_CONTEXTS];
 
5060
};
 
5061
 
 
5062
static DEFINE_PER_CPU(struct swevent_htable, swevent_htable);
 
5063
 
 
5064
/*
 
5065
 * We directly increment event->count and keep a second value in
 
5066
 * event->hw.period_left to count intervals. This period event
 
5067
 * is kept in the range [-sample_period, 0] so that we can use the
 
5068
 * sign as trigger.
 
5069
 */
 
5070
 
 
5071
static u64 perf_swevent_set_period(struct perf_event *event)
 
5072
{
 
5073
        struct hw_perf_event *hwc = &event->hw;
 
5074
        u64 period = hwc->last_period;
 
5075
        u64 nr, offset;
 
5076
        s64 old, val;
 
5077
 
 
5078
        hwc->last_period = hwc->sample_period;
 
5079
 
 
5080
again:
 
5081
        old = val = local64_read(&hwc->period_left);
 
5082
        if (val < 0)
 
5083
                return 0;
 
5084
 
 
5085
        nr = div64_u64(period + val, period);
 
5086
        offset = nr * period;
 
5087
        val -= offset;
 
5088
        if (local64_cmpxchg(&hwc->period_left, old, val) != old)
 
5089
                goto again;
 
5090
 
 
5091
        return nr;
 
5092
}
 
5093
 
 
5094
static void perf_swevent_overflow(struct perf_event *event, u64 overflow,
 
5095
                                    int nmi, struct perf_sample_data *data,
 
5096
                                    struct pt_regs *regs)
 
5097
{
 
5098
        struct hw_perf_event *hwc = &event->hw;
 
5099
        int throttle = 0;
 
5100
 
 
5101
        data->period = event->hw.last_period;
 
5102
        if (!overflow)
 
5103
                overflow = perf_swevent_set_period(event);
 
5104
 
 
5105
        if (hwc->interrupts == MAX_INTERRUPTS)
 
5106
                return;
 
5107
 
 
5108
        for (; overflow; overflow--) {
 
5109
                if (__perf_event_overflow(event, nmi, throttle,
 
5110
                                            data, regs)) {
 
5111
                        /*
 
5112
                         * We inhibit the overflow from happening when
 
5113
                         * hwc->interrupts == MAX_INTERRUPTS.
 
5114
                         */
 
5115
                        break;
 
5116
                }
 
5117
                throttle = 1;
 
5118
        }
 
5119
}
 
5120
 
 
5121
static void perf_swevent_event(struct perf_event *event, u64 nr,
 
5122
                               int nmi, struct perf_sample_data *data,
 
5123
                               struct pt_regs *regs)
 
5124
{
 
5125
        struct hw_perf_event *hwc = &event->hw;
 
5126
 
 
5127
        local64_add(nr, &event->count);
 
5128
 
 
5129
        if (!regs)
 
5130
                return;
 
5131
 
 
5132
        if (!is_sampling_event(event))
 
5133
                return;
 
5134
 
 
5135
        if (nr == 1 && hwc->sample_period == 1 && !event->attr.freq)
 
5136
                return perf_swevent_overflow(event, 1, nmi, data, regs);
 
5137
 
 
5138
        if (local64_add_negative(nr, &hwc->period_left))
 
5139
                return;
 
5140
 
 
5141
        perf_swevent_overflow(event, 0, nmi, data, regs);
 
5142
}
 
5143
 
 
5144
static int perf_exclude_event(struct perf_event *event,
 
5145
                              struct pt_regs *regs)
 
5146
{
 
5147
        if (event->hw.state & PERF_HES_STOPPED)
 
5148
                return 1;
 
5149
 
 
5150
        if (regs) {
 
5151
                if (event->attr.exclude_user && user_mode(regs))
 
5152
                        return 1;
 
5153
 
 
5154
                if (event->attr.exclude_kernel && !user_mode(regs))
 
5155
                        return 1;
 
5156
        }
 
5157
 
 
5158
        return 0;
 
5159
}
 
5160
 
 
5161
static int perf_swevent_match(struct perf_event *event,
 
5162
                                enum perf_type_id type,
 
5163
                                u32 event_id,
 
5164
                                struct perf_sample_data *data,
 
5165
                                struct pt_regs *regs)
 
5166
{
 
5167
        if (event->attr.type != type)
 
5168
                return 0;
 
5169
 
 
5170
        if (event->attr.config != event_id)
 
5171
                return 0;
 
5172
 
 
5173
        if (perf_exclude_event(event, regs))
 
5174
                return 0;
 
5175
 
 
5176
        return 1;
 
5177
}
 
5178
 
 
5179
static inline u64 swevent_hash(u64 type, u32 event_id)
 
5180
{
 
5181
        u64 val = event_id | (type << 32);
 
5182
 
 
5183
        return hash_64(val, SWEVENT_HLIST_BITS);
 
5184
}
 
5185
 
 
5186
static inline struct hlist_head *
 
5187
__find_swevent_head(struct swevent_hlist *hlist, u64 type, u32 event_id)
 
5188
{
 
5189
        u64 hash = swevent_hash(type, event_id);
 
5190
 
 
5191
        return &hlist->heads[hash];
 
5192
}
 
5193
 
 
5194
/* For the read side: events when they trigger */
 
5195
static inline struct hlist_head *
 
5196
find_swevent_head_rcu(struct swevent_htable *swhash, u64 type, u32 event_id)
 
5197
{
 
5198
        struct swevent_hlist *hlist;
 
5199
 
 
5200
        hlist = rcu_dereference(swhash->swevent_hlist);
 
5201
        if (!hlist)
 
5202
                return NULL;
 
5203
 
 
5204
        return __find_swevent_head(hlist, type, event_id);
 
5205
}
 
5206
 
 
5207
/* For the event head insertion and removal in the hlist */
 
5208
static inline struct hlist_head *
 
5209
find_swevent_head(struct swevent_htable *swhash, struct perf_event *event)
 
5210
{
 
5211
        struct swevent_hlist *hlist;
 
5212
        u32 event_id = event->attr.config;
 
5213
        u64 type = event->attr.type;
 
5214
 
 
5215
        /*
 
5216
         * Event scheduling is always serialized against hlist allocation
 
5217
         * and release. Which makes the protected version suitable here.
 
5218
         * The context lock guarantees that.
 
5219
         */
 
5220
        hlist = rcu_dereference_protected(swhash->swevent_hlist,
 
5221
                                          lockdep_is_held(&event->ctx->lock));
 
5222
        if (!hlist)
 
5223
                return NULL;
 
5224
 
 
5225
        return __find_swevent_head(hlist, type, event_id);
 
5226
}
 
5227
 
 
5228
static void do_perf_sw_event(enum perf_type_id type, u32 event_id,
 
5229
                                    u64 nr, int nmi,
 
5230
                                    struct perf_sample_data *data,
 
5231
                                    struct pt_regs *regs)
 
5232
{
 
5233
        struct swevent_htable *swhash = &__get_cpu_var(swevent_htable);
 
5234
        struct perf_event *event;
 
5235
        struct hlist_node *node;
 
5236
        struct hlist_head *head;
 
5237
 
 
5238
        rcu_read_lock();
 
5239
        head = find_swevent_head_rcu(swhash, type, event_id);
 
5240
        if (!head)
 
5241
                goto end;
 
5242
 
 
5243
        hlist_for_each_entry_rcu(event, node, head, hlist_entry) {
 
5244
                if (perf_swevent_match(event, type, event_id, data, regs))
 
5245
                        perf_swevent_event(event, nr, nmi, data, regs);
 
5246
        }
 
5247
end:
 
5248
        rcu_read_unlock();
 
5249
}
 
5250
 
 
5251
int perf_swevent_get_recursion_context(void)
 
5252
{
 
5253
        struct swevent_htable *swhash = &__get_cpu_var(swevent_htable);
 
5254
 
 
5255
        return get_recursion_context(swhash->recursion);
 
5256
}
 
5257
EXPORT_SYMBOL_GPL(perf_swevent_get_recursion_context);
 
5258
 
 
5259
inline void perf_swevent_put_recursion_context(int rctx)
 
5260
{
 
5261
        struct swevent_htable *swhash = &__get_cpu_var(swevent_htable);
 
5262
 
 
5263
        put_recursion_context(swhash->recursion, rctx);
 
5264
}
 
5265
 
 
5266
void __perf_sw_event(u32 event_id, u64 nr, int nmi,
 
5267
                            struct pt_regs *regs, u64 addr)
 
5268
{
 
5269
        struct perf_sample_data data;
 
5270
        int rctx;
 
5271
 
 
5272
        preempt_disable_notrace();
 
5273
        rctx = perf_swevent_get_recursion_context();
 
5274
        if (rctx < 0)
 
5275
                return;
 
5276
 
 
5277
        perf_sample_data_init(&data, addr);
 
5278
 
 
5279
        do_perf_sw_event(PERF_TYPE_SOFTWARE, event_id, nr, nmi, &data, regs);
 
5280
 
 
5281
        perf_swevent_put_recursion_context(rctx);
 
5282
        preempt_enable_notrace();
 
5283
}
 
5284
 
 
5285
static void perf_swevent_read(struct perf_event *event)
 
5286
{
 
5287
}
 
5288
 
 
5289
static int perf_swevent_add(struct perf_event *event, int flags)
 
5290
{
 
5291
        struct swevent_htable *swhash = &__get_cpu_var(swevent_htable);
 
5292
        struct hw_perf_event *hwc = &event->hw;
 
5293
        struct hlist_head *head;
 
5294
 
 
5295
        if (is_sampling_event(event)) {
 
5296
                hwc->last_period = hwc->sample_period;
 
5297
                perf_swevent_set_period(event);
 
5298
        }
 
5299
 
 
5300
        hwc->state = !(flags & PERF_EF_START);
 
5301
 
 
5302
        head = find_swevent_head(swhash, event);
 
5303
        if (WARN_ON_ONCE(!head))
 
5304
                return -EINVAL;
 
5305
 
 
5306
        hlist_add_head_rcu(&event->hlist_entry, head);
 
5307
 
 
5308
        return 0;
 
5309
}
 
5310
 
 
5311
static void perf_swevent_del(struct perf_event *event, int flags)
 
5312
{
 
5313
        hlist_del_rcu(&event->hlist_entry);
 
5314
}
 
5315
 
 
5316
static void perf_swevent_start(struct perf_event *event, int flags)
 
5317
{
 
5318
        event->hw.state = 0;
 
5319
}
 
5320
 
 
5321
static void perf_swevent_stop(struct perf_event *event, int flags)
 
5322
{
 
5323
        event->hw.state = PERF_HES_STOPPED;
 
5324
}
 
5325
 
 
5326
/* Deref the hlist from the update side */
 
5327
static inline struct swevent_hlist *
 
5328
swevent_hlist_deref(struct swevent_htable *swhash)
 
5329
{
 
5330
        return rcu_dereference_protected(swhash->swevent_hlist,
 
5331
                                         lockdep_is_held(&swhash->hlist_mutex));
 
5332
}
 
5333
 
 
5334
static void swevent_hlist_release(struct swevent_htable *swhash)
 
5335
{
 
5336
        struct swevent_hlist *hlist = swevent_hlist_deref(swhash);
 
5337
 
 
5338
        if (!hlist)
 
5339
                return;
 
5340
 
 
5341
        rcu_assign_pointer(swhash->swevent_hlist, NULL);
 
5342
        kfree_rcu(hlist, rcu_head);
 
5343
}
 
5344
 
 
5345
static void swevent_hlist_put_cpu(struct perf_event *event, int cpu)
 
5346
{
 
5347
        struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);
 
5348
 
 
5349
        mutex_lock(&swhash->hlist_mutex);
 
5350
 
 
5351
        if (!--swhash->hlist_refcount)
 
5352
                swevent_hlist_release(swhash);
 
5353
 
 
5354
        mutex_unlock(&swhash->hlist_mutex);
 
5355
}
 
5356
 
 
5357
static void swevent_hlist_put(struct perf_event *event)
 
5358
{
 
5359
        int cpu;
 
5360
 
 
5361
        if (event->cpu != -1) {
 
5362
                swevent_hlist_put_cpu(event, event->cpu);
 
5363
                return;
 
5364
        }
 
5365
 
 
5366
        for_each_possible_cpu(cpu)
 
5367
                swevent_hlist_put_cpu(event, cpu);
 
5368
}
 
5369
 
 
5370
static int swevent_hlist_get_cpu(struct perf_event *event, int cpu)
 
5371
{
 
5372
        struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);
 
5373
        int err = 0;
 
5374
 
 
5375
        mutex_lock(&swhash->hlist_mutex);
 
5376
 
 
5377
        if (!swevent_hlist_deref(swhash) && cpu_online(cpu)) {
 
5378
                struct swevent_hlist *hlist;
 
5379
 
 
5380
                hlist = kzalloc(sizeof(*hlist), GFP_KERNEL);
 
5381
                if (!hlist) {
 
5382
                        err = -ENOMEM;
 
5383
                        goto exit;
 
5384
                }
 
5385
                rcu_assign_pointer(swhash->swevent_hlist, hlist);
 
5386
        }
 
5387
        swhash->hlist_refcount++;
 
5388
exit:
 
5389
        mutex_unlock(&swhash->hlist_mutex);
 
5390
 
 
5391
        return err;
 
5392
}
 
5393
 
 
5394
static int swevent_hlist_get(struct perf_event *event)
 
5395
{
 
5396
        int err;
 
5397
        int cpu, failed_cpu;
 
5398
 
 
5399
        if (event->cpu != -1)
 
5400
                return swevent_hlist_get_cpu(event, event->cpu);
 
5401
 
 
5402
        get_online_cpus();
 
5403
        for_each_possible_cpu(cpu) {
 
5404
                err = swevent_hlist_get_cpu(event, cpu);
 
5405
                if (err) {
 
5406
                        failed_cpu = cpu;
 
5407
                        goto fail;
 
5408
                }
 
5409
        }
 
5410
        put_online_cpus();
 
5411
 
 
5412
        return 0;
 
5413
fail:
 
5414
        for_each_possible_cpu(cpu) {
 
5415
                if (cpu == failed_cpu)
 
5416
                        break;
 
5417
                swevent_hlist_put_cpu(event, cpu);
 
5418
        }
 
5419
 
 
5420
        put_online_cpus();
 
5421
        return err;
 
5422
}
 
5423
 
 
5424
struct jump_label_key perf_swevent_enabled[PERF_COUNT_SW_MAX];
 
5425
 
 
5426
static void sw_perf_event_destroy(struct perf_event *event)
 
5427
{
 
5428
        u64 event_id = event->attr.config;
 
5429
 
 
5430
        WARN_ON(event->parent);
 
5431
 
 
5432
        jump_label_dec(&perf_swevent_enabled[event_id]);
 
5433
        swevent_hlist_put(event);
 
5434
}
 
5435
 
 
5436
static int perf_swevent_init(struct perf_event *event)
 
5437
{
 
5438
        int event_id = event->attr.config;
 
5439
 
 
5440
        if (event->attr.type != PERF_TYPE_SOFTWARE)
 
5441
                return -ENOENT;
 
5442
 
 
5443
        switch (event_id) {
 
5444
        case PERF_COUNT_SW_CPU_CLOCK:
 
5445
        case PERF_COUNT_SW_TASK_CLOCK:
 
5446
                return -ENOENT;
 
5447
 
 
5448
        default:
 
5449
                break;
 
5450
        }
 
5451
 
 
5452
        if (event_id >= PERF_COUNT_SW_MAX)
 
5453
                return -ENOENT;
 
5454
 
 
5455
        if (!event->parent) {
 
5456
                int err;
 
5457
 
 
5458
                err = swevent_hlist_get(event);
 
5459
                if (err)
 
5460
                        return err;
 
5461
 
 
5462
                jump_label_inc(&perf_swevent_enabled[event_id]);
 
5463
                event->destroy = sw_perf_event_destroy;
 
5464
        }
 
5465
 
 
5466
        return 0;
 
5467
}
 
5468
 
 
5469
static struct pmu perf_swevent = {
 
5470
        .task_ctx_nr    = perf_sw_context,
 
5471
 
 
5472
        .event_init     = perf_swevent_init,
 
5473
        .add            = perf_swevent_add,
 
5474
        .del            = perf_swevent_del,
 
5475
        .start          = perf_swevent_start,
 
5476
        .stop           = perf_swevent_stop,
 
5477
        .read           = perf_swevent_read,
 
5478
};
 
5479
 
 
5480
#ifdef CONFIG_EVENT_TRACING
 
5481
 
 
5482
static int perf_tp_filter_match(struct perf_event *event,
 
5483
                                struct perf_sample_data *data)
 
5484
{
 
5485
        void *record = data->raw->data;
 
5486
 
 
5487
        if (likely(!event->filter) || filter_match_preds(event->filter, record))
 
5488
                return 1;
 
5489
        return 0;
 
5490
}
 
5491
 
 
5492
static int perf_tp_event_match(struct perf_event *event,
 
5493
                                struct perf_sample_data *data,
 
5494
                                struct pt_regs *regs)
 
5495
{
 
5496
        if (event->hw.state & PERF_HES_STOPPED)
 
5497
                return 0;
 
5498
        /*
 
5499
         * All tracepoints are from kernel-space.
 
5500
         */
 
5501
        if (event->attr.exclude_kernel)
 
5502
                return 0;
 
5503
 
 
5504
        if (!perf_tp_filter_match(event, data))
 
5505
                return 0;
 
5506
 
 
5507
        return 1;
 
5508
}
 
5509
 
 
5510
void perf_tp_event(u64 addr, u64 count, void *record, int entry_size,
 
5511
                   struct pt_regs *regs, struct hlist_head *head, int rctx)
 
5512
{
 
5513
        struct perf_sample_data data;
 
5514
        struct perf_event *event;
 
5515
        struct hlist_node *node;
 
5516
 
 
5517
        struct perf_raw_record raw = {
 
5518
                .size = entry_size,
 
5519
                .data = record,
 
5520
        };
 
5521
 
 
5522
        perf_sample_data_init(&data, addr);
 
5523
        data.raw = &raw;
 
5524
 
 
5525
        hlist_for_each_entry_rcu(event, node, head, hlist_entry) {
 
5526
                if (perf_tp_event_match(event, &data, regs))
 
5527
                        perf_swevent_event(event, count, 1, &data, regs);
 
5528
        }
 
5529
 
 
5530
        perf_swevent_put_recursion_context(rctx);
 
5531
}
 
5532
EXPORT_SYMBOL_GPL(perf_tp_event);
 
5533
 
 
5534
static void tp_perf_event_destroy(struct perf_event *event)
 
5535
{
 
5536
        perf_trace_destroy(event);
 
5537
}
 
5538
 
 
5539
static int perf_tp_event_init(struct perf_event *event)
 
5540
{
 
5541
        int err;
 
5542
 
 
5543
        if (event->attr.type != PERF_TYPE_TRACEPOINT)
 
5544
                return -ENOENT;
 
5545
 
 
5546
        err = perf_trace_init(event);
 
5547
        if (err)
 
5548
                return err;
 
5549
 
 
5550
        event->destroy = tp_perf_event_destroy;
 
5551
 
 
5552
        return 0;
 
5553
}
 
5554
 
 
5555
static struct pmu perf_tracepoint = {
 
5556
        .task_ctx_nr    = perf_sw_context,
 
5557
 
 
5558
        .event_init     = perf_tp_event_init,
 
5559
        .add            = perf_trace_add,
 
5560
        .del            = perf_trace_del,
 
5561
        .start          = perf_swevent_start,
 
5562
        .stop           = perf_swevent_stop,
 
5563
        .read           = perf_swevent_read,
 
5564
};
 
5565
 
 
5566
static inline void perf_tp_register(void)
 
5567
{
 
5568
        perf_pmu_register(&perf_tracepoint, "tracepoint", PERF_TYPE_TRACEPOINT);
 
5569
}
 
5570
 
 
5571
static int perf_event_set_filter(struct perf_event *event, void __user *arg)
 
5572
{
 
5573
        char *filter_str;
 
5574
        int ret;
 
5575
 
 
5576
        if (event->attr.type != PERF_TYPE_TRACEPOINT)
 
5577
                return -EINVAL;
 
5578
 
 
5579
        filter_str = strndup_user(arg, PAGE_SIZE);
 
5580
        if (IS_ERR(filter_str))
 
5581
                return PTR_ERR(filter_str);
 
5582
 
 
5583
        ret = ftrace_profile_set_filter(event, event->attr.config, filter_str);
 
5584
 
 
5585
        kfree(filter_str);
 
5586
        return ret;
 
5587
}
 
5588
 
 
5589
static void perf_event_free_filter(struct perf_event *event)
 
5590
{
 
5591
        ftrace_profile_free_filter(event);
 
5592
}
 
5593
 
 
5594
#else
 
5595
 
 
5596
static inline void perf_tp_register(void)
 
5597
{
 
5598
}
 
5599
 
 
5600
static int perf_event_set_filter(struct perf_event *event, void __user *arg)
 
5601
{
 
5602
        return -ENOENT;
 
5603
}
 
5604
 
 
5605
static void perf_event_free_filter(struct perf_event *event)
 
5606
{
 
5607
}
 
5608
 
 
5609
#endif /* CONFIG_EVENT_TRACING */
 
5610
 
 
5611
#ifdef CONFIG_HAVE_HW_BREAKPOINT
 
5612
void perf_bp_event(struct perf_event *bp, void *data)
 
5613
{
 
5614
        struct perf_sample_data sample;
 
5615
        struct pt_regs *regs = data;
 
5616
 
 
5617
        perf_sample_data_init(&sample, bp->attr.bp_addr);
 
5618
 
 
5619
        if (!bp->hw.state && !perf_exclude_event(bp, regs))
 
5620
                perf_swevent_event(bp, 1, 1, &sample, regs);
 
5621
}
 
5622
#endif
 
5623
 
 
5624
/*
 
5625
 * hrtimer based swevent callback
 
5626
 */
 
5627
 
 
5628
static enum hrtimer_restart perf_swevent_hrtimer(struct hrtimer *hrtimer)
 
5629
{
 
5630
        enum hrtimer_restart ret = HRTIMER_RESTART;
 
5631
        struct perf_sample_data data;
 
5632
        struct pt_regs *regs;
 
5633
        struct perf_event *event;
 
5634
        u64 period;
 
5635
 
 
5636
        event = container_of(hrtimer, struct perf_event, hw.hrtimer);
 
5637
 
 
5638
        if (event->state != PERF_EVENT_STATE_ACTIVE)
 
5639
                return HRTIMER_NORESTART;
 
5640
 
 
5641
        event->pmu->read(event);
 
5642
 
 
5643
        perf_sample_data_init(&data, 0);
 
5644
        data.period = event->hw.last_period;
 
5645
        regs = get_irq_regs();
 
5646
 
 
5647
        if (regs && !perf_exclude_event(event, regs)) {
 
5648
                if (!(event->attr.exclude_idle && current->pid == 0))
 
5649
                        if (perf_event_overflow(event, 0, &data, regs))
 
5650
                                ret = HRTIMER_NORESTART;
 
5651
        }
 
5652
 
 
5653
        period = max_t(u64, 10000, event->hw.sample_period);
 
5654
        hrtimer_forward_now(hrtimer, ns_to_ktime(period));
 
5655
 
 
5656
        return ret;
 
5657
}
 
5658
 
 
5659
static void perf_swevent_start_hrtimer(struct perf_event *event)
 
5660
{
 
5661
        struct hw_perf_event *hwc = &event->hw;
 
5662
        s64 period;
 
5663
 
 
5664
        if (!is_sampling_event(event))
 
5665
                return;
 
5666
 
 
5667
        period = local64_read(&hwc->period_left);
 
5668
        if (period) {
 
5669
                if (period < 0)
 
5670
                        period = 10000;
 
5671
 
 
5672
                local64_set(&hwc->period_left, 0);
 
5673
        } else {
 
5674
                period = max_t(u64, 10000, hwc->sample_period);
 
5675
        }
 
5676
        __hrtimer_start_range_ns(&hwc->hrtimer,
 
5677
                                ns_to_ktime(period), 0,
 
5678
                                HRTIMER_MODE_REL_PINNED, 0);
 
5679
}
 
5680
 
 
5681
static void perf_swevent_cancel_hrtimer(struct perf_event *event)
 
5682
{
 
5683
        struct hw_perf_event *hwc = &event->hw;
 
5684
 
 
5685
        if (is_sampling_event(event)) {
 
5686
                ktime_t remaining = hrtimer_get_remaining(&hwc->hrtimer);
 
5687
                local64_set(&hwc->period_left, ktime_to_ns(remaining));
 
5688
 
 
5689
                hrtimer_cancel(&hwc->hrtimer);
 
5690
        }
 
5691
}
 
5692
 
 
5693
static void perf_swevent_init_hrtimer(struct perf_event *event)
 
5694
{
 
5695
        struct hw_perf_event *hwc = &event->hw;
 
5696
 
 
5697
        if (!is_sampling_event(event))
 
5698
                return;
 
5699
 
 
5700
        hrtimer_init(&hwc->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
 
5701
        hwc->hrtimer.function = perf_swevent_hrtimer;
 
5702
 
 
5703
        /*
 
5704
         * Since hrtimers have a fixed rate, we can do a static freq->period
 
5705
         * mapping and avoid the whole period adjust feedback stuff.
 
5706
         */
 
5707
        if (event->attr.freq) {
 
5708
                long freq = event->attr.sample_freq;
 
5709
 
 
5710
                event->attr.sample_period = NSEC_PER_SEC / freq;
 
5711
                hwc->sample_period = event->attr.sample_period;
 
5712
                local64_set(&hwc->period_left, hwc->sample_period);
 
5713
                event->attr.freq = 0;
 
5714
        }
 
5715
}
 
5716
 
 
5717
/*
 
5718
 * Software event: cpu wall time clock
 
5719
 */
 
5720
 
 
5721
static void cpu_clock_event_update(struct perf_event *event)
 
5722
{
 
5723
        s64 prev;
 
5724
        u64 now;
 
5725
 
 
5726
        now = local_clock();
 
5727
        prev = local64_xchg(&event->hw.prev_count, now);
 
5728
        local64_add(now - prev, &event->count);
 
5729
}
 
5730
 
 
5731
static void cpu_clock_event_start(struct perf_event *event, int flags)
 
5732
{
 
5733
        local64_set(&event->hw.prev_count, local_clock());
 
5734
        perf_swevent_start_hrtimer(event);
 
5735
}
 
5736
 
 
5737
static void cpu_clock_event_stop(struct perf_event *event, int flags)
 
5738
{
 
5739
        perf_swevent_cancel_hrtimer(event);
 
5740
        cpu_clock_event_update(event);
 
5741
}
 
5742
 
 
5743
static int cpu_clock_event_add(struct perf_event *event, int flags)
 
5744
{
 
5745
        if (flags & PERF_EF_START)
 
5746
                cpu_clock_event_start(event, flags);
 
5747
 
 
5748
        return 0;
 
5749
}
 
5750
 
 
5751
static void cpu_clock_event_del(struct perf_event *event, int flags)
 
5752
{
 
5753
        cpu_clock_event_stop(event, flags);
 
5754
}
 
5755
 
 
5756
static void cpu_clock_event_read(struct perf_event *event)
 
5757
{
 
5758
        cpu_clock_event_update(event);
 
5759
}
 
5760
 
 
5761
static int cpu_clock_event_init(struct perf_event *event)
 
5762
{
 
5763
        if (event->attr.type != PERF_TYPE_SOFTWARE)
 
5764
                return -ENOENT;
 
5765
 
 
5766
        if (event->attr.config != PERF_COUNT_SW_CPU_CLOCK)
 
5767
                return -ENOENT;
 
5768
 
 
5769
        perf_swevent_init_hrtimer(event);
 
5770
 
 
5771
        return 0;
 
5772
}
 
5773
 
 
5774
static struct pmu perf_cpu_clock = {
 
5775
        .task_ctx_nr    = perf_sw_context,
 
5776
 
 
5777
        .event_init     = cpu_clock_event_init,
 
5778
        .add            = cpu_clock_event_add,
 
5779
        .del            = cpu_clock_event_del,
 
5780
        .start          = cpu_clock_event_start,
 
5781
        .stop           = cpu_clock_event_stop,
 
5782
        .read           = cpu_clock_event_read,
 
5783
};
 
5784
 
 
5785
/*
 
5786
 * Software event: task time clock
 
5787
 */
 
5788
 
 
5789
static void task_clock_event_update(struct perf_event *event, u64 now)
 
5790
{
 
5791
        u64 prev;
 
5792
        s64 delta;
 
5793
 
 
5794
        prev = local64_xchg(&event->hw.prev_count, now);
 
5795
        delta = now - prev;
 
5796
        local64_add(delta, &event->count);
 
5797
}
 
5798
 
 
5799
static void task_clock_event_start(struct perf_event *event, int flags)
 
5800
{
 
5801
        local64_set(&event->hw.prev_count, event->ctx->time);
 
5802
        perf_swevent_start_hrtimer(event);
 
5803
}
 
5804
 
 
5805
static void task_clock_event_stop(struct perf_event *event, int flags)
 
5806
{
 
5807
        perf_swevent_cancel_hrtimer(event);
 
5808
        task_clock_event_update(event, event->ctx->time);
 
5809
}
 
5810
 
 
5811
static int task_clock_event_add(struct perf_event *event, int flags)
 
5812
{
 
5813
        if (flags & PERF_EF_START)
 
5814
                task_clock_event_start(event, flags);
 
5815
 
 
5816
        return 0;
 
5817
}
 
5818
 
 
5819
static void task_clock_event_del(struct perf_event *event, int flags)
 
5820
{
 
5821
        task_clock_event_stop(event, PERF_EF_UPDATE);
 
5822
}
 
5823
 
 
5824
static void task_clock_event_read(struct perf_event *event)
 
5825
{
 
5826
        u64 now = perf_clock();
 
5827
        u64 delta = now - event->ctx->timestamp;
 
5828
        u64 time = event->ctx->time + delta;
 
5829
 
 
5830
        task_clock_event_update(event, time);
 
5831
}
 
5832
 
 
5833
static int task_clock_event_init(struct perf_event *event)
 
5834
{
 
5835
        if (event->attr.type != PERF_TYPE_SOFTWARE)
 
5836
                return -ENOENT;
 
5837
 
 
5838
        if (event->attr.config != PERF_COUNT_SW_TASK_CLOCK)
 
5839
                return -ENOENT;
 
5840
 
 
5841
        perf_swevent_init_hrtimer(event);
 
5842
 
 
5843
        return 0;
 
5844
}
 
5845
 
 
5846
static struct pmu perf_task_clock = {
 
5847
        .task_ctx_nr    = perf_sw_context,
 
5848
 
 
5849
        .event_init     = task_clock_event_init,
 
5850
        .add            = task_clock_event_add,
 
5851
        .del            = task_clock_event_del,
 
5852
        .start          = task_clock_event_start,
 
5853
        .stop           = task_clock_event_stop,
 
5854
        .read           = task_clock_event_read,
 
5855
};
 
5856
 
 
5857
static void perf_pmu_nop_void(struct pmu *pmu)
 
5858
{
 
5859
}
 
5860
 
 
5861
static int perf_pmu_nop_int(struct pmu *pmu)
 
5862
{
 
5863
        return 0;
 
5864
}
 
5865
 
 
5866
static void perf_pmu_start_txn(struct pmu *pmu)
 
5867
{
 
5868
        perf_pmu_disable(pmu);
 
5869
}
 
5870
 
 
5871
static int perf_pmu_commit_txn(struct pmu *pmu)
 
5872
{
 
5873
        perf_pmu_enable(pmu);
 
5874
        return 0;
 
5875
}
 
5876
 
 
5877
static void perf_pmu_cancel_txn(struct pmu *pmu)
 
5878
{
 
5879
        perf_pmu_enable(pmu);
 
5880
}
 
5881
 
 
5882
/*
 
5883
 * Ensures all contexts with the same task_ctx_nr have the same
 
5884
 * pmu_cpu_context too.
 
5885
 */
 
5886
static void *find_pmu_context(int ctxn)
 
5887
{
 
5888
        struct pmu *pmu;
 
5889
 
 
5890
        if (ctxn < 0)
 
5891
                return NULL;
 
5892
 
 
5893
        list_for_each_entry(pmu, &pmus, entry) {
 
5894
                if (pmu->task_ctx_nr == ctxn)
 
5895
                        return pmu->pmu_cpu_context;
 
5896
        }
 
5897
 
 
5898
        return NULL;
 
5899
}
 
5900
 
 
5901
static void update_pmu_context(struct pmu *pmu, struct pmu *old_pmu)
 
5902
{
 
5903
        int cpu;
 
5904
 
 
5905
        for_each_possible_cpu(cpu) {
 
5906
                struct perf_cpu_context *cpuctx;
 
5907
 
 
5908
                cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu);
 
5909
 
 
5910
                if (cpuctx->active_pmu == old_pmu)
 
5911
                        cpuctx->active_pmu = pmu;
 
5912
        }
 
5913
}
 
5914
 
 
5915
static void free_pmu_context(struct pmu *pmu)
 
5916
{
 
5917
        struct pmu *i;
 
5918
 
 
5919
        mutex_lock(&pmus_lock);
 
5920
        /*
 
5921
         * Like a real lame refcount.
 
5922
         */
 
5923
        list_for_each_entry(i, &pmus, entry) {
 
5924
                if (i->pmu_cpu_context == pmu->pmu_cpu_context) {
 
5925
                        update_pmu_context(i, pmu);
 
5926
                        goto out;
 
5927
                }
 
5928
        }
 
5929
 
 
5930
        free_percpu(pmu->pmu_cpu_context);
 
5931
out:
 
5932
        mutex_unlock(&pmus_lock);
 
5933
}
 
5934
static struct idr pmu_idr;
 
5935
 
 
5936
static ssize_t
 
5937
type_show(struct device *dev, struct device_attribute *attr, char *page)
 
5938
{
 
5939
        struct pmu *pmu = dev_get_drvdata(dev);
 
5940
 
 
5941
        return snprintf(page, PAGE_SIZE-1, "%d\n", pmu->type);
 
5942
}
 
5943
 
 
5944
static struct device_attribute pmu_dev_attrs[] = {
 
5945
       __ATTR_RO(type),
 
5946
       __ATTR_NULL,
 
5947
};
 
5948
 
 
5949
static int pmu_bus_running;
 
5950
static struct bus_type pmu_bus = {
 
5951
        .name           = "event_source",
 
5952
        .dev_attrs      = pmu_dev_attrs,
 
5953
};
 
5954
 
 
5955
static void pmu_dev_release(struct device *dev)
 
5956
{
 
5957
        kfree(dev);
 
5958
}
 
5959
 
 
5960
static int pmu_dev_alloc(struct pmu *pmu)
 
5961
{
 
5962
        int ret = -ENOMEM;
 
5963
 
 
5964
        pmu->dev = kzalloc(sizeof(struct device), GFP_KERNEL);
 
5965
        if (!pmu->dev)
 
5966
                goto out;
 
5967
 
 
5968
        device_initialize(pmu->dev);
 
5969
        ret = dev_set_name(pmu->dev, "%s", pmu->name);
 
5970
        if (ret)
 
5971
                goto free_dev;
 
5972
 
 
5973
        dev_set_drvdata(pmu->dev, pmu);
 
5974
        pmu->dev->bus = &pmu_bus;
 
5975
        pmu->dev->release = pmu_dev_release;
 
5976
        ret = device_add(pmu->dev);
 
5977
        if (ret)
 
5978
                goto free_dev;
 
5979
 
 
5980
out:
 
5981
        return ret;
 
5982
 
 
5983
free_dev:
 
5984
        put_device(pmu->dev);
 
5985
        goto out;
 
5986
}
 
5987
 
 
5988
static struct lock_class_key cpuctx_mutex;
 
5989
 
 
5990
int perf_pmu_register(struct pmu *pmu, char *name, int type)
 
5991
{
 
5992
        int cpu, ret;
 
5993
 
 
5994
        mutex_lock(&pmus_lock);
 
5995
        ret = -ENOMEM;
 
5996
        pmu->pmu_disable_count = alloc_percpu(int);
 
5997
        if (!pmu->pmu_disable_count)
 
5998
                goto unlock;
 
5999
 
 
6000
        pmu->type = -1;
 
6001
        if (!name)
 
6002
                goto skip_type;
 
6003
        pmu->name = name;
 
6004
 
 
6005
        if (type < 0) {
 
6006
                int err = idr_pre_get(&pmu_idr, GFP_KERNEL);
 
6007
                if (!err)
 
6008
                        goto free_pdc;
 
6009
 
 
6010
                err = idr_get_new_above(&pmu_idr, pmu, PERF_TYPE_MAX, &type);
 
6011
                if (err) {
 
6012
                        ret = err;
 
6013
                        goto free_pdc;
 
6014
                }
 
6015
        }
 
6016
        pmu->type = type;
 
6017
 
 
6018
        if (pmu_bus_running) {
 
6019
                ret = pmu_dev_alloc(pmu);
 
6020
                if (ret)
 
6021
                        goto free_idr;
 
6022
        }
 
6023
 
 
6024
skip_type:
 
6025
        pmu->pmu_cpu_context = find_pmu_context(pmu->task_ctx_nr);
 
6026
        if (pmu->pmu_cpu_context)
 
6027
                goto got_cpu_context;
 
6028
 
 
6029
        pmu->pmu_cpu_context = alloc_percpu(struct perf_cpu_context);
 
6030
        if (!pmu->pmu_cpu_context)
 
6031
                goto free_dev;
 
6032
 
 
6033
        for_each_possible_cpu(cpu) {
 
6034
                struct perf_cpu_context *cpuctx;
 
6035
 
 
6036
                cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu);
 
6037
                __perf_event_init_context(&cpuctx->ctx);
 
6038
                lockdep_set_class(&cpuctx->ctx.mutex, &cpuctx_mutex);
 
6039
                cpuctx->ctx.type = cpu_context;
 
6040
                cpuctx->ctx.pmu = pmu;
 
6041
                cpuctx->jiffies_interval = 1;
 
6042
                INIT_LIST_HEAD(&cpuctx->rotation_list);
 
6043
                cpuctx->active_pmu = pmu;
 
6044
        }
 
6045
 
 
6046
got_cpu_context:
 
6047
        if (!pmu->start_txn) {
 
6048
                if (pmu->pmu_enable) {
 
6049
                        /*
 
6050
                         * If we have pmu_enable/pmu_disable calls, install
 
6051
                         * transaction stubs that use that to try and batch
 
6052
                         * hardware accesses.
 
6053
                         */
 
6054
                        pmu->start_txn  = perf_pmu_start_txn;
 
6055
                        pmu->commit_txn = perf_pmu_commit_txn;
 
6056
                        pmu->cancel_txn = perf_pmu_cancel_txn;
 
6057
                } else {
 
6058
                        pmu->start_txn  = perf_pmu_nop_void;
 
6059
                        pmu->commit_txn = perf_pmu_nop_int;
 
6060
                        pmu->cancel_txn = perf_pmu_nop_void;
 
6061
                }
 
6062
        }
 
6063
 
 
6064
        if (!pmu->pmu_enable) {
 
6065
                pmu->pmu_enable  = perf_pmu_nop_void;
 
6066
                pmu->pmu_disable = perf_pmu_nop_void;
 
6067
        }
 
6068
 
 
6069
        list_add_rcu(&pmu->entry, &pmus);
 
6070
        ret = 0;
 
6071
unlock:
 
6072
        mutex_unlock(&pmus_lock);
 
6073
 
 
6074
        return ret;
 
6075
 
 
6076
free_dev:
 
6077
        device_del(pmu->dev);
 
6078
        put_device(pmu->dev);
 
6079
 
 
6080
free_idr:
 
6081
        if (pmu->type >= PERF_TYPE_MAX)
 
6082
                idr_remove(&pmu_idr, pmu->type);
 
6083
 
 
6084
free_pdc:
 
6085
        free_percpu(pmu->pmu_disable_count);
 
6086
        goto unlock;
 
6087
}
 
6088
 
 
6089
void perf_pmu_unregister(struct pmu *pmu)
 
6090
{
 
6091
        mutex_lock(&pmus_lock);
 
6092
        list_del_rcu(&pmu->entry);
 
6093
        mutex_unlock(&pmus_lock);
 
6094
 
 
6095
        /*
 
6096
         * We dereference the pmu list under both SRCU and regular RCU, so
 
6097
         * synchronize against both of those.
 
6098
         */
 
6099
        synchronize_srcu(&pmus_srcu);
 
6100
        synchronize_rcu();
 
6101
 
 
6102
        free_percpu(pmu->pmu_disable_count);
 
6103
        if (pmu->type >= PERF_TYPE_MAX)
 
6104
                idr_remove(&pmu_idr, pmu->type);
 
6105
        device_del(pmu->dev);
 
6106
        put_device(pmu->dev);
 
6107
        free_pmu_context(pmu);
 
6108
}
 
6109
 
 
6110
struct pmu *perf_init_event(struct perf_event *event)
 
6111
{
 
6112
        struct pmu *pmu = NULL;
 
6113
        int idx;
 
6114
        int ret;
 
6115
 
 
6116
        idx = srcu_read_lock(&pmus_srcu);
 
6117
 
 
6118
        rcu_read_lock();
 
6119
        pmu = idr_find(&pmu_idr, event->attr.type);
 
6120
        rcu_read_unlock();
 
6121
        if (pmu) {
 
6122
                ret = pmu->event_init(event);
 
6123
                if (ret)
 
6124
                        pmu = ERR_PTR(ret);
 
6125
                goto unlock;
 
6126
        }
 
6127
 
 
6128
        list_for_each_entry_rcu(pmu, &pmus, entry) {
 
6129
                ret = pmu->event_init(event);
 
6130
                if (!ret)
 
6131
                        goto unlock;
 
6132
 
 
6133
                if (ret != -ENOENT) {
 
6134
                        pmu = ERR_PTR(ret);
 
6135
                        goto unlock;
 
6136
                }
 
6137
        }
 
6138
        pmu = ERR_PTR(-ENOENT);
 
6139
unlock:
 
6140
        srcu_read_unlock(&pmus_srcu, idx);
 
6141
 
 
6142
        return pmu;
 
6143
}
 
6144
 
 
6145
/*
 
6146
 * Allocate and initialize a event structure
 
6147
 */
 
6148
static struct perf_event *
 
6149
perf_event_alloc(struct perf_event_attr *attr, int cpu,
 
6150
                 struct task_struct *task,
 
6151
                 struct perf_event *group_leader,
 
6152
                 struct perf_event *parent_event,
 
6153
                 perf_overflow_handler_t overflow_handler)
 
6154
{
 
6155
        struct pmu *pmu;
 
6156
        struct perf_event *event;
 
6157
        struct hw_perf_event *hwc;
 
6158
        long err;
 
6159
 
 
6160
        if ((unsigned)cpu >= nr_cpu_ids) {
 
6161
                if (!task || cpu != -1)
 
6162
                        return ERR_PTR(-EINVAL);
 
6163
        }
 
6164
 
 
6165
        event = kzalloc(sizeof(*event), GFP_KERNEL);
 
6166
        if (!event)
 
6167
                return ERR_PTR(-ENOMEM);
 
6168
 
 
6169
        /*
 
6170
         * Single events are their own group leaders, with an
 
6171
         * empty sibling list:
 
6172
         */
 
6173
        if (!group_leader)
 
6174
                group_leader = event;
 
6175
 
 
6176
        mutex_init(&event->child_mutex);
 
6177
        INIT_LIST_HEAD(&event->child_list);
 
6178
 
 
6179
        INIT_LIST_HEAD(&event->group_entry);
 
6180
        INIT_LIST_HEAD(&event->event_entry);
 
6181
        INIT_LIST_HEAD(&event->sibling_list);
 
6182
        init_waitqueue_head(&event->waitq);
 
6183
        init_irq_work(&event->pending, perf_pending_event);
 
6184
 
 
6185
        mutex_init(&event->mmap_mutex);
 
6186
 
 
6187
        event->cpu              = cpu;
 
6188
        event->attr             = *attr;
 
6189
        event->group_leader     = group_leader;
 
6190
        event->pmu              = NULL;
 
6191
        event->oncpu            = -1;
 
6192
 
 
6193
        event->parent           = parent_event;
 
6194
 
 
6195
        event->ns               = get_pid_ns(current->nsproxy->pid_ns);
 
6196
        event->id               = atomic64_inc_return(&perf_event_id);
 
6197
 
 
6198
        event->state            = PERF_EVENT_STATE_INACTIVE;
 
6199
 
 
6200
        if (task) {
 
6201
                event->attach_state = PERF_ATTACH_TASK;
 
6202
#ifdef CONFIG_HAVE_HW_BREAKPOINT
 
6203
                /*
 
6204
                 * hw_breakpoint is a bit difficult here..
 
6205
                 */
 
6206
                if (attr->type == PERF_TYPE_BREAKPOINT)
 
6207
                        event->hw.bp_target = task;
 
6208
#endif
 
6209
        }
 
6210
 
 
6211
        if (!overflow_handler && parent_event)
 
6212
                overflow_handler = parent_event->overflow_handler;
 
6213
 
 
6214
        event->overflow_handler = overflow_handler;
 
6215
 
 
6216
        if (attr->disabled)
 
6217
                event->state = PERF_EVENT_STATE_OFF;
 
6218
 
 
6219
        pmu = NULL;
 
6220
 
 
6221
        hwc = &event->hw;
 
6222
        hwc->sample_period = attr->sample_period;
 
6223
        if (attr->freq && attr->sample_freq)
 
6224
                hwc->sample_period = 1;
 
6225
        hwc->last_period = hwc->sample_period;
 
6226
 
 
6227
        local64_set(&hwc->period_left, hwc->sample_period);
 
6228
 
 
6229
        /*
 
6230
         * we currently do not support PERF_FORMAT_GROUP on inherited events
 
6231
         */
 
6232
        if (attr->inherit && (attr->read_format & PERF_FORMAT_GROUP))
 
6233
                goto done;
 
6234
 
 
6235
        pmu = perf_init_event(event);
 
6236
 
 
6237
done:
 
6238
        err = 0;
 
6239
        if (!pmu)
 
6240
                err = -EINVAL;
 
6241
        else if (IS_ERR(pmu))
 
6242
                err = PTR_ERR(pmu);
 
6243
 
 
6244
        if (err) {
 
6245
                if (event->ns)
 
6246
                        put_pid_ns(event->ns);
 
6247
                kfree(event);
 
6248
                return ERR_PTR(err);
 
6249
        }
 
6250
 
 
6251
        event->pmu = pmu;
 
6252
 
 
6253
        if (!event->parent) {
 
6254
                if (event->attach_state & PERF_ATTACH_TASK)
 
6255
                        jump_label_inc(&perf_sched_events);
 
6256
                if (event->attr.mmap || event->attr.mmap_data)
 
6257
                        atomic_inc(&nr_mmap_events);
 
6258
                if (event->attr.comm)
 
6259
                        atomic_inc(&nr_comm_events);
 
6260
                if (event->attr.task)
 
6261
                        atomic_inc(&nr_task_events);
 
6262
                if (event->attr.sample_type & PERF_SAMPLE_CALLCHAIN) {
 
6263
                        err = get_callchain_buffers();
 
6264
                        if (err) {
 
6265
                                free_event(event);
 
6266
                                return ERR_PTR(err);
 
6267
                        }
 
6268
                }
 
6269
        }
 
6270
 
 
6271
        return event;
 
6272
}
 
6273
 
 
6274
static int perf_copy_attr(struct perf_event_attr __user *uattr,
 
6275
                          struct perf_event_attr *attr)
 
6276
{
 
6277
        u32 size;
 
6278
        int ret;
 
6279
 
 
6280
        if (!access_ok(VERIFY_WRITE, uattr, PERF_ATTR_SIZE_VER0))
 
6281
                return -EFAULT;
 
6282
 
 
6283
        /*
 
6284
         * zero the full structure, so that a short copy will be nice.
 
6285
         */
 
6286
        memset(attr, 0, sizeof(*attr));
 
6287
 
 
6288
        ret = get_user(size, &uattr->size);
 
6289
        if (ret)
 
6290
                return ret;
 
6291
 
 
6292
        if (size > PAGE_SIZE)   /* silly large */
 
6293
                goto err_size;
 
6294
 
 
6295
        if (!size)              /* abi compat */
 
6296
                size = PERF_ATTR_SIZE_VER0;
 
6297
 
 
6298
        if (size < PERF_ATTR_SIZE_VER0)
 
6299
                goto err_size;
 
6300
 
 
6301
        /*
 
6302
         * If we're handed a bigger struct than we know of,
 
6303
         * ensure all the unknown bits are 0 - i.e. new
 
6304
         * user-space does not rely on any kernel feature
 
6305
         * extensions we dont know about yet.
 
6306
         */
 
6307
        if (size > sizeof(*attr)) {
 
6308
                unsigned char __user *addr;
 
6309
                unsigned char __user *end;
 
6310
                unsigned char val;
 
6311
 
 
6312
                addr = (void __user *)uattr + sizeof(*attr);
 
6313
                end  = (void __user *)uattr + size;
 
6314
 
 
6315
                for (; addr < end; addr++) {
 
6316
                        ret = get_user(val, addr);
 
6317
                        if (ret)
 
6318
                                return ret;
 
6319
                        if (val)
 
6320
                                goto err_size;
 
6321
                }
 
6322
                size = sizeof(*attr);
 
6323
        }
 
6324
 
 
6325
        ret = copy_from_user(attr, uattr, size);
 
6326
        if (ret)
 
6327
                return -EFAULT;
 
6328
 
 
6329
        /*
 
6330
         * If the type exists, the corresponding creation will verify
 
6331
         * the attr->config.
 
6332
         */
 
6333
        if (attr->type >= PERF_TYPE_MAX)
 
6334
                return -EINVAL;
 
6335
 
 
6336
        if (attr->__reserved_1)
 
6337
                return -EINVAL;
 
6338
 
 
6339
        if (attr->sample_type & ~(PERF_SAMPLE_MAX-1))
 
6340
                return -EINVAL;
 
6341
 
 
6342
        if (attr->read_format & ~(PERF_FORMAT_MAX-1))
 
6343
                return -EINVAL;
 
6344
 
 
6345
out:
 
6346
        return ret;
 
6347
 
 
6348
err_size:
 
6349
        put_user(sizeof(*attr), &uattr->size);
 
6350
        ret = -E2BIG;
 
6351
        goto out;
 
6352
}
 
6353
 
 
6354
static int
 
6355
perf_event_set_output(struct perf_event *event, struct perf_event *output_event)
 
6356
{
 
6357
        struct perf_buffer *buffer = NULL, *old_buffer = NULL;
 
6358
        int ret = -EINVAL;
 
6359
 
 
6360
        if (!output_event)
 
6361
                goto set;
 
6362
 
 
6363
        /* don't allow circular references */
 
6364
        if (event == output_event)
 
6365
                goto out;
 
6366
 
 
6367
        /*
 
6368
         * Don't allow cross-cpu buffers
 
6369
         */
 
6370
        if (output_event->cpu != event->cpu)
 
6371
                goto out;
 
6372
 
 
6373
        /*
 
6374
         * If its not a per-cpu buffer, it must be the same task.
 
6375
         */
 
6376
        if (output_event->cpu == -1 && output_event->ctx != event->ctx)
 
6377
                goto out;
 
6378
 
 
6379
set:
 
6380
        mutex_lock(&event->mmap_mutex);
 
6381
        /* Can't redirect output if we've got an active mmap() */
 
6382
        if (atomic_read(&event->mmap_count))
 
6383
                goto unlock;
 
6384
 
 
6385
        if (output_event) {
 
6386
                /* get the buffer we want to redirect to */
 
6387
                buffer = perf_buffer_get(output_event);
 
6388
                if (!buffer)
 
6389
                        goto unlock;
 
6390
        }
 
6391
 
 
6392
        old_buffer = event->buffer;
 
6393
        rcu_assign_pointer(event->buffer, buffer);
 
6394
        ret = 0;
 
6395
unlock:
 
6396
        mutex_unlock(&event->mmap_mutex);
 
6397
 
 
6398
        if (old_buffer)
 
6399
                perf_buffer_put(old_buffer);
 
6400
out:
 
6401
        return ret;
 
6402
}
 
6403
 
 
6404
/**
 
6405
 * sys_perf_event_open - open a performance event, associate it to a task/cpu
 
6406
 *
 
6407
 * @attr_uptr:  event_id type attributes for monitoring/sampling
 
6408
 * @pid:                target pid
 
6409
 * @cpu:                target cpu
 
6410
 * @group_fd:           group leader event fd
 
6411
 */
 
6412
SYSCALL_DEFINE5(perf_event_open,
 
6413
                struct perf_event_attr __user *, attr_uptr,
 
6414
                pid_t, pid, int, cpu, int, group_fd, unsigned long, flags)
 
6415
{
 
6416
        struct perf_event *group_leader = NULL, *output_event = NULL;
 
6417
        struct perf_event *event, *sibling;
 
6418
        struct perf_event_attr attr;
 
6419
        struct perf_event_context *ctx;
 
6420
        struct file *event_file = NULL;
 
6421
        struct file *group_file = NULL;
 
6422
        struct task_struct *task = NULL;
 
6423
        struct pmu *pmu;
 
6424
        int event_fd;
 
6425
        int move_group = 0;
 
6426
        int fput_needed = 0;
 
6427
        int err;
 
6428
 
 
6429
        /* for future expandability... */
 
6430
        if (flags & ~PERF_FLAG_ALL)
 
6431
                return -EINVAL;
 
6432
 
 
6433
        err = perf_copy_attr(attr_uptr, &attr);
 
6434
        if (err)
 
6435
                return err;
 
6436
 
 
6437
        if (!attr.exclude_kernel) {
 
6438
                if (perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN))
 
6439
                        return -EACCES;
 
6440
        }
 
6441
 
 
6442
        if (attr.freq) {
 
6443
                if (attr.sample_freq > sysctl_perf_event_sample_rate)
 
6444
                        return -EINVAL;
 
6445
        }
 
6446
 
 
6447
        /*
 
6448
         * In cgroup mode, the pid argument is used to pass the fd
 
6449
         * opened to the cgroup directory in cgroupfs. The cpu argument
 
6450
         * designates the cpu on which to monitor threads from that
 
6451
         * cgroup.
 
6452
         */
 
6453
        if ((flags & PERF_FLAG_PID_CGROUP) && (pid == -1 || cpu == -1))
 
6454
                return -EINVAL;
 
6455
 
 
6456
        event_fd = get_unused_fd_flags(O_RDWR);
 
6457
        if (event_fd < 0)
 
6458
                return event_fd;
 
6459
 
 
6460
        if (group_fd != -1) {
 
6461
                group_leader = perf_fget_light(group_fd, &fput_needed);
 
6462
                if (IS_ERR(group_leader)) {
 
6463
                        err = PTR_ERR(group_leader);
 
6464
                        goto err_fd;
 
6465
                }
 
6466
                group_file = group_leader->filp;
 
6467
                if (flags & PERF_FLAG_FD_OUTPUT)
 
6468
                        output_event = group_leader;
 
6469
                if (flags & PERF_FLAG_FD_NO_GROUP)
 
6470
                        group_leader = NULL;
 
6471
        }
 
6472
 
 
6473
        if (pid != -1 && !(flags & PERF_FLAG_PID_CGROUP)) {
 
6474
                task = find_lively_task_by_vpid(pid);
 
6475
                if (IS_ERR(task)) {
 
6476
                        err = PTR_ERR(task);
 
6477
                        goto err_group_fd;
 
6478
                }
 
6479
        }
 
6480
 
 
6481
        event = perf_event_alloc(&attr, cpu, task, group_leader, NULL, NULL);
 
6482
        if (IS_ERR(event)) {
 
6483
                err = PTR_ERR(event);
 
6484
                goto err_task;
 
6485
        }
 
6486
 
 
6487
        if (flags & PERF_FLAG_PID_CGROUP) {
 
6488
                err = perf_cgroup_connect(pid, event, &attr, group_leader);
 
6489
                if (err)
 
6490
                        goto err_alloc;
 
6491
                /*
 
6492
                 * one more event:
 
6493
                 * - that has cgroup constraint on event->cpu
 
6494
                 * - that may need work on context switch
 
6495
                 */
 
6496
                atomic_inc(&per_cpu(perf_cgroup_events, event->cpu));
 
6497
                jump_label_inc(&perf_sched_events);
 
6498
        }
 
6499
 
 
6500
        /*
 
6501
         * Special case software events and allow them to be part of
 
6502
         * any hardware group.
 
6503
         */
 
6504
        pmu = event->pmu;
 
6505
 
 
6506
        if (group_leader &&
 
6507
            (is_software_event(event) != is_software_event(group_leader))) {
 
6508
                if (is_software_event(event)) {
 
6509
                        /*
 
6510
                         * If event and group_leader are not both a software
 
6511
                         * event, and event is, then group leader is not.
 
6512
                         *
 
6513
                         * Allow the addition of software events to !software
 
6514
                         * groups, this is safe because software events never
 
6515
                         * fail to schedule.
 
6516
                         */
 
6517
                        pmu = group_leader->pmu;
 
6518
                } else if (is_software_event(group_leader) &&
 
6519
                           (group_leader->group_flags & PERF_GROUP_SOFTWARE)) {
 
6520
                        /*
 
6521
                         * In case the group is a pure software group, and we
 
6522
                         * try to add a hardware event, move the whole group to
 
6523
                         * the hardware context.
 
6524
                         */
 
6525
                        move_group = 1;
 
6526
                }
 
6527
        }
 
6528
 
 
6529
        /*
 
6530
         * Get the target context (task or percpu):
 
6531
         */
 
6532
        ctx = find_get_context(pmu, task, cpu);
 
6533
        if (IS_ERR(ctx)) {
 
6534
                err = PTR_ERR(ctx);
 
6535
                goto err_alloc;
 
6536
        }
 
6537
 
 
6538
        if (task) {
 
6539
                put_task_struct(task);
 
6540
                task = NULL;
 
6541
        }
 
6542
 
 
6543
        /*
 
6544
         * Look up the group leader (we will attach this event to it):
 
6545
         */
 
6546
        if (group_leader) {
 
6547
                err = -EINVAL;
 
6548
 
 
6549
                /*
 
6550
                 * Do not allow a recursive hierarchy (this new sibling
 
6551
                 * becoming part of another group-sibling):
 
6552
                 */
 
6553
                if (group_leader->group_leader != group_leader)
 
6554
                        goto err_context;
 
6555
                /*
 
6556
                 * Do not allow to attach to a group in a different
 
6557
                 * task or CPU context:
 
6558
                 */
 
6559
                if (move_group) {
 
6560
                        if (group_leader->ctx->type != ctx->type)
 
6561
                                goto err_context;
 
6562
                } else {
 
6563
                        if (group_leader->ctx != ctx)
 
6564
                                goto err_context;
 
6565
                }
 
6566
 
 
6567
                /*
 
6568
                 * Only a group leader can be exclusive or pinned
 
6569
                 */
 
6570
                if (attr.exclusive || attr.pinned)
 
6571
                        goto err_context;
 
6572
        }
 
6573
 
 
6574
        if (output_event) {
 
6575
                err = perf_event_set_output(event, output_event);
 
6576
                if (err)
 
6577
                        goto err_context;
 
6578
        }
 
6579
 
 
6580
        event_file = anon_inode_getfile("[perf_event]", &perf_fops, event, O_RDWR);
 
6581
        if (IS_ERR(event_file)) {
 
6582
                err = PTR_ERR(event_file);
 
6583
                goto err_context;
 
6584
        }
 
6585
 
 
6586
        if (move_group) {
 
6587
                struct perf_event_context *gctx = group_leader->ctx;
 
6588
 
 
6589
                mutex_lock(&gctx->mutex);
 
6590
                perf_remove_from_context(group_leader);
 
6591
                list_for_each_entry(sibling, &group_leader->sibling_list,
 
6592
                                    group_entry) {
 
6593
                        perf_remove_from_context(sibling);
 
6594
                        put_ctx(gctx);
 
6595
                }
 
6596
                mutex_unlock(&gctx->mutex);
 
6597
                put_ctx(gctx);
 
6598
        }
 
6599
 
 
6600
        event->filp = event_file;
 
6601
        WARN_ON_ONCE(ctx->parent_ctx);
 
6602
        mutex_lock(&ctx->mutex);
 
6603
 
 
6604
        if (move_group) {
 
6605
                perf_install_in_context(ctx, group_leader, cpu);
 
6606
                get_ctx(ctx);
 
6607
                list_for_each_entry(sibling, &group_leader->sibling_list,
 
6608
                                    group_entry) {
 
6609
                        perf_install_in_context(ctx, sibling, cpu);
 
6610
                        get_ctx(ctx);
 
6611
                }
 
6612
        }
 
6613
 
 
6614
        perf_install_in_context(ctx, event, cpu);
 
6615
        ++ctx->generation;
 
6616
        perf_unpin_context(ctx);
 
6617
        mutex_unlock(&ctx->mutex);
 
6618
 
 
6619
        event->owner = current;
 
6620
 
 
6621
        mutex_lock(&current->perf_event_mutex);
 
6622
        list_add_tail(&event->owner_entry, &current->perf_event_list);
 
6623
        mutex_unlock(&current->perf_event_mutex);
 
6624
 
 
6625
        /*
 
6626
         * Precalculate sample_data sizes
 
6627
         */
 
6628
        perf_event__header_size(event);
 
6629
        perf_event__id_header_size(event);
 
6630
 
 
6631
        /*
 
6632
         * Drop the reference on the group_event after placing the
 
6633
         * new event on the sibling_list. This ensures destruction
 
6634
         * of the group leader will find the pointer to itself in
 
6635
         * perf_group_detach().
 
6636
         */
 
6637
        fput_light(group_file, fput_needed);
 
6638
        fd_install(event_fd, event_file);
 
6639
        return event_fd;
 
6640
 
 
6641
err_context:
 
6642
        perf_unpin_context(ctx);
 
6643
        put_ctx(ctx);
 
6644
err_alloc:
 
6645
        free_event(event);
 
6646
err_task:
 
6647
        if (task)
 
6648
                put_task_struct(task);
 
6649
err_group_fd:
 
6650
        fput_light(group_file, fput_needed);
 
6651
err_fd:
 
6652
        put_unused_fd(event_fd);
 
6653
        return err;
 
6654
}
 
6655
 
 
6656
/**
 
6657
 * perf_event_create_kernel_counter
 
6658
 *
 
6659
 * @attr: attributes of the counter to create
 
6660
 * @cpu: cpu in which the counter is bound
 
6661
 * @task: task to profile (NULL for percpu)
 
6662
 */
 
6663
struct perf_event *
 
6664
perf_event_create_kernel_counter(struct perf_event_attr *attr, int cpu,
 
6665
                                 struct task_struct *task,
 
6666
                                 perf_overflow_handler_t overflow_handler)
 
6667
{
 
6668
        struct perf_event_context *ctx;
 
6669
        struct perf_event *event;
 
6670
        int err;
 
6671
 
 
6672
        /*
 
6673
         * Get the target context (task or percpu):
 
6674
         */
 
6675
 
 
6676
        event = perf_event_alloc(attr, cpu, task, NULL, NULL, overflow_handler);
 
6677
        if (IS_ERR(event)) {
 
6678
                err = PTR_ERR(event);
 
6679
                goto err;
 
6680
        }
 
6681
 
 
6682
        ctx = find_get_context(event->pmu, task, cpu);
 
6683
        if (IS_ERR(ctx)) {
 
6684
                err = PTR_ERR(ctx);
 
6685
                goto err_free;
 
6686
        }
 
6687
 
 
6688
        event->filp = NULL;
 
6689
        WARN_ON_ONCE(ctx->parent_ctx);
 
6690
        mutex_lock(&ctx->mutex);
 
6691
        perf_install_in_context(ctx, event, cpu);
 
6692
        ++ctx->generation;
 
6693
        perf_unpin_context(ctx);
 
6694
        mutex_unlock(&ctx->mutex);
 
6695
 
 
6696
        return event;
 
6697
 
 
6698
err_free:
 
6699
        free_event(event);
 
6700
err:
 
6701
        return ERR_PTR(err);
 
6702
}
 
6703
EXPORT_SYMBOL_GPL(perf_event_create_kernel_counter);
 
6704
 
 
6705
static void sync_child_event(struct perf_event *child_event,
 
6706
                               struct task_struct *child)
 
6707
{
 
6708
        struct perf_event *parent_event = child_event->parent;
 
6709
        u64 child_val;
 
6710
 
 
6711
        if (child_event->attr.inherit_stat)
 
6712
                perf_event_read_event(child_event, child);
 
6713
 
 
6714
        child_val = perf_event_count(child_event);
 
6715
 
 
6716
        /*
 
6717
         * Add back the child's count to the parent's count:
 
6718
         */
 
6719
        atomic64_add(child_val, &parent_event->child_count);
 
6720
        atomic64_add(child_event->total_time_enabled,
 
6721
                     &parent_event->child_total_time_enabled);
 
6722
        atomic64_add(child_event->total_time_running,
 
6723
                     &parent_event->child_total_time_running);
 
6724
 
 
6725
        /*
 
6726
         * Remove this event from the parent's list
 
6727
         */
 
6728
        WARN_ON_ONCE(parent_event->ctx->parent_ctx);
 
6729
        mutex_lock(&parent_event->child_mutex);
 
6730
        list_del_init(&child_event->child_list);
 
6731
        mutex_unlock(&parent_event->child_mutex);
 
6732
 
 
6733
        /*
 
6734
         * Release the parent event, if this was the last
 
6735
         * reference to it.
 
6736
         */
 
6737
        fput(parent_event->filp);
 
6738
}
 
6739
 
 
6740
static void
 
6741
__perf_event_exit_task(struct perf_event *child_event,
 
6742
                         struct perf_event_context *child_ctx,
 
6743
                         struct task_struct *child)
 
6744
{
 
6745
        if (child_event->parent) {
 
6746
                raw_spin_lock_irq(&child_ctx->lock);
 
6747
                perf_group_detach(child_event);
 
6748
                raw_spin_unlock_irq(&child_ctx->lock);
 
6749
        }
 
6750
 
 
6751
        perf_remove_from_context(child_event);
 
6752
 
 
6753
        /*
 
6754
         * It can happen that the parent exits first, and has events
 
6755
         * that are still around due to the child reference. These
 
6756
         * events need to be zapped.
 
6757
         */
 
6758
        if (child_event->parent) {
 
6759
                sync_child_event(child_event, child);
 
6760
                free_event(child_event);
 
6761
        }
 
6762
}
 
6763
 
 
6764
static void perf_event_exit_task_context(struct task_struct *child, int ctxn)
 
6765
{
 
6766
        struct perf_event *child_event, *tmp;
 
6767
        struct perf_event_context *child_ctx;
 
6768
        unsigned long flags;
 
6769
 
 
6770
        if (likely(!child->perf_event_ctxp[ctxn])) {
 
6771
                perf_event_task(child, NULL, 0);
 
6772
                return;
 
6773
        }
 
6774
 
 
6775
        local_irq_save(flags);
 
6776
        /*
 
6777
         * We can't reschedule here because interrupts are disabled,
 
6778
         * and either child is current or it is a task that can't be
 
6779
         * scheduled, so we are now safe from rescheduling changing
 
6780
         * our context.
 
6781
         */
 
6782
        child_ctx = rcu_dereference_raw(child->perf_event_ctxp[ctxn]);
 
6783
        task_ctx_sched_out(child_ctx, EVENT_ALL);
 
6784
 
 
6785
        /*
 
6786
         * Take the context lock here so that if find_get_context is
 
6787
         * reading child->perf_event_ctxp, we wait until it has
 
6788
         * incremented the context's refcount before we do put_ctx below.
 
6789
         */
 
6790
        raw_spin_lock(&child_ctx->lock);
 
6791
        child->perf_event_ctxp[ctxn] = NULL;
 
6792
        /*
 
6793
         * If this context is a clone; unclone it so it can't get
 
6794
         * swapped to another process while we're removing all
 
6795
         * the events from it.
 
6796
         */
 
6797
        unclone_ctx(child_ctx);
 
6798
        update_context_time(child_ctx);
 
6799
        raw_spin_unlock_irqrestore(&child_ctx->lock, flags);
 
6800
 
 
6801
        /*
 
6802
         * Report the task dead after unscheduling the events so that we
 
6803
         * won't get any samples after PERF_RECORD_EXIT. We can however still
 
6804
         * get a few PERF_RECORD_READ events.
 
6805
         */
 
6806
        perf_event_task(child, child_ctx, 0);
 
6807
 
 
6808
        /*
 
6809
         * We can recurse on the same lock type through:
 
6810
         *
 
6811
         *   __perf_event_exit_task()
 
6812
         *     sync_child_event()
 
6813
         *       fput(parent_event->filp)
 
6814
         *         perf_release()
 
6815
         *           mutex_lock(&ctx->mutex)
 
6816
         *
 
6817
         * But since its the parent context it won't be the same instance.
 
6818
         */
 
6819
        mutex_lock(&child_ctx->mutex);
 
6820
 
 
6821
again:
 
6822
        list_for_each_entry_safe(child_event, tmp, &child_ctx->pinned_groups,
 
6823
                                 group_entry)
 
6824
                __perf_event_exit_task(child_event, child_ctx, child);
 
6825
 
 
6826
        list_for_each_entry_safe(child_event, tmp, &child_ctx->flexible_groups,
 
6827
                                 group_entry)
 
6828
                __perf_event_exit_task(child_event, child_ctx, child);
 
6829
 
 
6830
        /*
 
6831
         * If the last event was a group event, it will have appended all
 
6832
         * its siblings to the list, but we obtained 'tmp' before that which
 
6833
         * will still point to the list head terminating the iteration.
 
6834
         */
 
6835
        if (!list_empty(&child_ctx->pinned_groups) ||
 
6836
            !list_empty(&child_ctx->flexible_groups))
 
6837
                goto again;
 
6838
 
 
6839
        mutex_unlock(&child_ctx->mutex);
 
6840
 
 
6841
        put_ctx(child_ctx);
 
6842
}
 
6843
 
 
6844
/*
 
6845
 * When a child task exits, feed back event values to parent events.
 
6846
 */
 
6847
void perf_event_exit_task(struct task_struct *child)
 
6848
{
 
6849
        struct perf_event *event, *tmp;
 
6850
        int ctxn;
 
6851
 
 
6852
        mutex_lock(&child->perf_event_mutex);
 
6853
        list_for_each_entry_safe(event, tmp, &child->perf_event_list,
 
6854
                                 owner_entry) {
 
6855
                list_del_init(&event->owner_entry);
 
6856
 
 
6857
                /*
 
6858
                 * Ensure the list deletion is visible before we clear
 
6859
                 * the owner, closes a race against perf_release() where
 
6860
                 * we need to serialize on the owner->perf_event_mutex.
 
6861
                 */
 
6862
                smp_wmb();
 
6863
                event->owner = NULL;
 
6864
        }
 
6865
        mutex_unlock(&child->perf_event_mutex);
 
6866
 
 
6867
        for_each_task_context_nr(ctxn)
 
6868
                perf_event_exit_task_context(child, ctxn);
 
6869
}
 
6870
 
 
6871
static void perf_free_event(struct perf_event *event,
 
6872
                            struct perf_event_context *ctx)
 
6873
{
 
6874
        struct perf_event *parent = event->parent;
 
6875
 
 
6876
        if (WARN_ON_ONCE(!parent))
 
6877
                return;
 
6878
 
 
6879
        mutex_lock(&parent->child_mutex);
 
6880
        list_del_init(&event->child_list);
 
6881
        mutex_unlock(&parent->child_mutex);
 
6882
 
 
6883
        fput(parent->filp);
 
6884
 
 
6885
        perf_group_detach(event);
 
6886
        list_del_event(event, ctx);
 
6887
        free_event(event);
 
6888
}
 
6889
 
 
6890
/*
 
6891
 * free an unexposed, unused context as created by inheritance by
 
6892
 * perf_event_init_task below, used by fork() in case of fail.
 
6893
 */
 
6894
void perf_event_free_task(struct task_struct *task)
 
6895
{
 
6896
        struct perf_event_context *ctx;
 
6897
        struct perf_event *event, *tmp;
 
6898
        int ctxn;
 
6899
 
 
6900
        for_each_task_context_nr(ctxn) {
 
6901
                ctx = task->perf_event_ctxp[ctxn];
 
6902
                if (!ctx)
 
6903
                        continue;
 
6904
 
 
6905
                mutex_lock(&ctx->mutex);
 
6906
again:
 
6907
                list_for_each_entry_safe(event, tmp, &ctx->pinned_groups,
 
6908
                                group_entry)
 
6909
                        perf_free_event(event, ctx);
 
6910
 
 
6911
                list_for_each_entry_safe(event, tmp, &ctx->flexible_groups,
 
6912
                                group_entry)
 
6913
                        perf_free_event(event, ctx);
 
6914
 
 
6915
                if (!list_empty(&ctx->pinned_groups) ||
 
6916
                                !list_empty(&ctx->flexible_groups))
 
6917
                        goto again;
 
6918
 
 
6919
                mutex_unlock(&ctx->mutex);
 
6920
 
 
6921
                put_ctx(ctx);
 
6922
        }
 
6923
}
 
6924
 
 
6925
void perf_event_delayed_put(struct task_struct *task)
 
6926
{
 
6927
        int ctxn;
 
6928
 
 
6929
        for_each_task_context_nr(ctxn)
 
6930
                WARN_ON_ONCE(task->perf_event_ctxp[ctxn]);
 
6931
}
 
6932
 
 
6933
/*
 
6934
 * inherit a event from parent task to child task:
 
6935
 */
 
6936
static struct perf_event *
 
6937
inherit_event(struct perf_event *parent_event,
 
6938
              struct task_struct *parent,
 
6939
              struct perf_event_context *parent_ctx,
 
6940
              struct task_struct *child,
 
6941
              struct perf_event *group_leader,
 
6942
              struct perf_event_context *child_ctx)
 
6943
{
 
6944
        struct perf_event *child_event;
 
6945
        unsigned long flags;
 
6946
 
 
6947
        /*
 
6948
         * Instead of creating recursive hierarchies of events,
 
6949
         * we link inherited events back to the original parent,
 
6950
         * which has a filp for sure, which we use as the reference
 
6951
         * count:
 
6952
         */
 
6953
        if (parent_event->parent)
 
6954
                parent_event = parent_event->parent;
 
6955
 
 
6956
        child_event = perf_event_alloc(&parent_event->attr,
 
6957
                                           parent_event->cpu,
 
6958
                                           child,
 
6959
                                           group_leader, parent_event,
 
6960
                                           NULL);
 
6961
        if (IS_ERR(child_event))
 
6962
                return child_event;
 
6963
        get_ctx(child_ctx);
 
6964
 
 
6965
        /*
 
6966
         * Make the child state follow the state of the parent event,
 
6967
         * not its attr.disabled bit.  We hold the parent's mutex,
 
6968
         * so we won't race with perf_event_{en, dis}able_family.
 
6969
         */
 
6970
        if (parent_event->state >= PERF_EVENT_STATE_INACTIVE)
 
6971
                child_event->state = PERF_EVENT_STATE_INACTIVE;
 
6972
        else
 
6973
                child_event->state = PERF_EVENT_STATE_OFF;
 
6974
 
 
6975
        if (parent_event->attr.freq) {
 
6976
                u64 sample_period = parent_event->hw.sample_period;
 
6977
                struct hw_perf_event *hwc = &child_event->hw;
 
6978
 
 
6979
                hwc->sample_period = sample_period;
 
6980
                hwc->last_period   = sample_period;
 
6981
 
 
6982
                local64_set(&hwc->period_left, sample_period);
 
6983
        }
 
6984
 
 
6985
        child_event->ctx = child_ctx;
 
6986
        child_event->overflow_handler = parent_event->overflow_handler;
 
6987
 
 
6988
        /*
 
6989
         * Precalculate sample_data sizes
 
6990
         */
 
6991
        perf_event__header_size(child_event);
 
6992
        perf_event__id_header_size(child_event);
 
6993
 
 
6994
        /*
 
6995
         * Link it up in the child's context:
 
6996
         */
 
6997
        raw_spin_lock_irqsave(&child_ctx->lock, flags);
 
6998
        add_event_to_ctx(child_event, child_ctx);
 
6999
        raw_spin_unlock_irqrestore(&child_ctx->lock, flags);
 
7000
 
 
7001
        /*
 
7002
         * Get a reference to the parent filp - we will fput it
 
7003
         * when the child event exits. This is safe to do because
 
7004
         * we are in the parent and we know that the filp still
 
7005
         * exists and has a nonzero count:
 
7006
         */
 
7007
        atomic_long_inc(&parent_event->filp->f_count);
 
7008
 
 
7009
        /*
 
7010
         * Link this into the parent event's child list
 
7011
         */
 
7012
        WARN_ON_ONCE(parent_event->ctx->parent_ctx);
 
7013
        mutex_lock(&parent_event->child_mutex);
 
7014
        list_add_tail(&child_event->child_list, &parent_event->child_list);
 
7015
        mutex_unlock(&parent_event->child_mutex);
 
7016
 
 
7017
        return child_event;
 
7018
}
 
7019
 
 
7020
static int inherit_group(struct perf_event *parent_event,
 
7021
              struct task_struct *parent,
 
7022
              struct perf_event_context *parent_ctx,
 
7023
              struct task_struct *child,
 
7024
              struct perf_event_context *child_ctx)
 
7025
{
 
7026
        struct perf_event *leader;
 
7027
        struct perf_event *sub;
 
7028
        struct perf_event *child_ctr;
 
7029
 
 
7030
        leader = inherit_event(parent_event, parent, parent_ctx,
 
7031
                                 child, NULL, child_ctx);
 
7032
        if (IS_ERR(leader))
 
7033
                return PTR_ERR(leader);
 
7034
        list_for_each_entry(sub, &parent_event->sibling_list, group_entry) {
 
7035
                child_ctr = inherit_event(sub, parent, parent_ctx,
 
7036
                                            child, leader, child_ctx);
 
7037
                if (IS_ERR(child_ctr))
 
7038
                        return PTR_ERR(child_ctr);
 
7039
        }
 
7040
        return 0;
 
7041
}
 
7042
 
 
7043
static int
 
7044
inherit_task_group(struct perf_event *event, struct task_struct *parent,
 
7045
                   struct perf_event_context *parent_ctx,
 
7046
                   struct task_struct *child, int ctxn,
 
7047
                   int *inherited_all)
 
7048
{
 
7049
        int ret;
 
7050
        struct perf_event_context *child_ctx;
 
7051
 
 
7052
        if (!event->attr.inherit) {
 
7053
                *inherited_all = 0;
 
7054
                return 0;
 
7055
        }
 
7056
 
 
7057
        child_ctx = child->perf_event_ctxp[ctxn];
 
7058
        if (!child_ctx) {
 
7059
                /*
 
7060
                 * This is executed from the parent task context, so
 
7061
                 * inherit events that have been marked for cloning.
 
7062
                 * First allocate and initialize a context for the
 
7063
                 * child.
 
7064
                 */
 
7065
 
 
7066
                child_ctx = alloc_perf_context(event->pmu, child);
 
7067
                if (!child_ctx)
 
7068
                        return -ENOMEM;
 
7069
 
 
7070
                child->perf_event_ctxp[ctxn] = child_ctx;
 
7071
        }
 
7072
 
 
7073
        ret = inherit_group(event, parent, parent_ctx,
 
7074
                            child, child_ctx);
 
7075
 
 
7076
        if (ret)
 
7077
                *inherited_all = 0;
 
7078
 
 
7079
        return ret;
 
7080
}
 
7081
 
 
7082
/*
 
7083
 * Initialize the perf_event context in task_struct
 
7084
 */
 
7085
int perf_event_init_context(struct task_struct *child, int ctxn)
 
7086
{
 
7087
        struct perf_event_context *child_ctx, *parent_ctx;
 
7088
        struct perf_event_context *cloned_ctx;
 
7089
        struct perf_event *event;
 
7090
        struct task_struct *parent = current;
 
7091
        int inherited_all = 1;
 
7092
        unsigned long flags;
 
7093
        int ret = 0;
 
7094
 
 
7095
        if (likely(!parent->perf_event_ctxp[ctxn]))
 
7096
                return 0;
 
7097
 
 
7098
        /*
 
7099
         * If the parent's context is a clone, pin it so it won't get
 
7100
         * swapped under us.
 
7101
         */
 
7102
        parent_ctx = perf_pin_task_context(parent, ctxn);
 
7103
 
 
7104
        /*
 
7105
         * No need to check if parent_ctx != NULL here; since we saw
 
7106
         * it non-NULL earlier, the only reason for it to become NULL
 
7107
         * is if we exit, and since we're currently in the middle of
 
7108
         * a fork we can't be exiting at the same time.
 
7109
         */
 
7110
 
 
7111
        /*
 
7112
         * Lock the parent list. No need to lock the child - not PID
 
7113
         * hashed yet and not running, so nobody can access it.
 
7114
         */
 
7115
        mutex_lock(&parent_ctx->mutex);
 
7116
 
 
7117
        /*
 
7118
         * We dont have to disable NMIs - we are only looking at
 
7119
         * the list, not manipulating it:
 
7120
         */
 
7121
        list_for_each_entry(event, &parent_ctx->pinned_groups, group_entry) {
 
7122
                ret = inherit_task_group(event, parent, parent_ctx,
 
7123
                                         child, ctxn, &inherited_all);
 
7124
                if (ret)
 
7125
                        break;
 
7126
        }
 
7127
 
 
7128
        /*
 
7129
         * We can't hold ctx->lock when iterating the ->flexible_group list due
 
7130
         * to allocations, but we need to prevent rotation because
 
7131
         * rotate_ctx() will change the list from interrupt context.
 
7132
         */
 
7133
        raw_spin_lock_irqsave(&parent_ctx->lock, flags);
 
7134
        parent_ctx->rotate_disable = 1;
 
7135
        raw_spin_unlock_irqrestore(&parent_ctx->lock, flags);
 
7136
 
 
7137
        list_for_each_entry(event, &parent_ctx->flexible_groups, group_entry) {
 
7138
                ret = inherit_task_group(event, parent, parent_ctx,
 
7139
                                         child, ctxn, &inherited_all);
 
7140
                if (ret)
 
7141
                        break;
 
7142
        }
 
7143
 
 
7144
        raw_spin_lock_irqsave(&parent_ctx->lock, flags);
 
7145
        parent_ctx->rotate_disable = 0;
 
7146
 
 
7147
        child_ctx = child->perf_event_ctxp[ctxn];
 
7148
 
 
7149
        if (child_ctx && inherited_all) {
 
7150
                /*
 
7151
                 * Mark the child context as a clone of the parent
 
7152
                 * context, or of whatever the parent is a clone of.
 
7153
                 *
 
7154
                 * Note that if the parent is a clone, the holding of
 
7155
                 * parent_ctx->lock avoids it from being uncloned.
 
7156
                 */
 
7157
                cloned_ctx = parent_ctx->parent_ctx;
 
7158
                if (cloned_ctx) {
 
7159
                        child_ctx->parent_ctx = cloned_ctx;
 
7160
                        child_ctx->parent_gen = parent_ctx->parent_gen;
 
7161
                } else {
 
7162
                        child_ctx->parent_ctx = parent_ctx;
 
7163
                        child_ctx->parent_gen = parent_ctx->generation;
 
7164
                }
 
7165
                get_ctx(child_ctx->parent_ctx);
 
7166
        }
 
7167
 
 
7168
        raw_spin_unlock_irqrestore(&parent_ctx->lock, flags);
 
7169
        mutex_unlock(&parent_ctx->mutex);
 
7170
 
 
7171
        perf_unpin_context(parent_ctx);
 
7172
        put_ctx(parent_ctx);
 
7173
 
 
7174
        return ret;
 
7175
}
 
7176
 
 
7177
/*
 
7178
 * Initialize the perf_event context in task_struct
 
7179
 */
 
7180
int perf_event_init_task(struct task_struct *child)
 
7181
{
 
7182
        int ctxn, ret;
 
7183
 
 
7184
        memset(child->perf_event_ctxp, 0, sizeof(child->perf_event_ctxp));
 
7185
        mutex_init(&child->perf_event_mutex);
 
7186
        INIT_LIST_HEAD(&child->perf_event_list);
 
7187
 
 
7188
        for_each_task_context_nr(ctxn) {
 
7189
                ret = perf_event_init_context(child, ctxn);
 
7190
                if (ret)
 
7191
                        return ret;
 
7192
        }
 
7193
 
 
7194
        return 0;
 
7195
}
 
7196
 
 
7197
static void __init perf_event_init_all_cpus(void)
 
7198
{
 
7199
        struct swevent_htable *swhash;
 
7200
        int cpu;
 
7201
 
 
7202
        for_each_possible_cpu(cpu) {
 
7203
                swhash = &per_cpu(swevent_htable, cpu);
 
7204
                mutex_init(&swhash->hlist_mutex);
 
7205
                INIT_LIST_HEAD(&per_cpu(rotation_list, cpu));
 
7206
        }
 
7207
}
 
7208
 
 
7209
static void __cpuinit perf_event_init_cpu(int cpu)
 
7210
{
 
7211
        struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);
 
7212
 
 
7213
        mutex_lock(&swhash->hlist_mutex);
 
7214
        if (swhash->hlist_refcount > 0) {
 
7215
                struct swevent_hlist *hlist;
 
7216
 
 
7217
                hlist = kzalloc_node(sizeof(*hlist), GFP_KERNEL, cpu_to_node(cpu));
 
7218
                WARN_ON(!hlist);
 
7219
                rcu_assign_pointer(swhash->swevent_hlist, hlist);
 
7220
        }
 
7221
        mutex_unlock(&swhash->hlist_mutex);
 
7222
}
 
7223
 
 
7224
#if defined CONFIG_HOTPLUG_CPU || defined CONFIG_KEXEC
 
7225
static void perf_pmu_rotate_stop(struct pmu *pmu)
 
7226
{
 
7227
        struct perf_cpu_context *cpuctx = this_cpu_ptr(pmu->pmu_cpu_context);
 
7228
 
 
7229
        WARN_ON(!irqs_disabled());
 
7230
 
 
7231
        list_del_init(&cpuctx->rotation_list);
 
7232
}
 
7233
 
 
7234
static void __perf_event_exit_context(void *__info)
 
7235
{
 
7236
        struct perf_event_context *ctx = __info;
 
7237
        struct perf_event *event, *tmp;
 
7238
 
 
7239
        perf_pmu_rotate_stop(ctx->pmu);
 
7240
 
 
7241
        list_for_each_entry_safe(event, tmp, &ctx->pinned_groups, group_entry)
 
7242
                __perf_remove_from_context(event);
 
7243
        list_for_each_entry_safe(event, tmp, &ctx->flexible_groups, group_entry)
 
7244
                __perf_remove_from_context(event);
 
7245
}
 
7246
 
 
7247
static void perf_event_exit_cpu_context(int cpu)
 
7248
{
 
7249
        struct perf_event_context *ctx;
 
7250
        struct pmu *pmu;
 
7251
        int idx;
 
7252
 
 
7253
        idx = srcu_read_lock(&pmus_srcu);
 
7254
        list_for_each_entry_rcu(pmu, &pmus, entry) {
 
7255
                ctx = &per_cpu_ptr(pmu->pmu_cpu_context, cpu)->ctx;
 
7256
 
 
7257
                mutex_lock(&ctx->mutex);
 
7258
                smp_call_function_single(cpu, __perf_event_exit_context, ctx, 1);
 
7259
                mutex_unlock(&ctx->mutex);
 
7260
        }
 
7261
        srcu_read_unlock(&pmus_srcu, idx);
 
7262
}
 
7263
 
 
7264
static void perf_event_exit_cpu(int cpu)
 
7265
{
 
7266
        struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);
 
7267
 
 
7268
        mutex_lock(&swhash->hlist_mutex);
 
7269
        swevent_hlist_release(swhash);
 
7270
        mutex_unlock(&swhash->hlist_mutex);
 
7271
 
 
7272
        perf_event_exit_cpu_context(cpu);
 
7273
}
 
7274
#else
 
7275
static inline void perf_event_exit_cpu(int cpu) { }
 
7276
#endif
 
7277
 
 
7278
static int
 
7279
perf_reboot(struct notifier_block *notifier, unsigned long val, void *v)
 
7280
{
 
7281
        int cpu;
 
7282
 
 
7283
        for_each_online_cpu(cpu)
 
7284
                perf_event_exit_cpu(cpu);
 
7285
 
 
7286
        return NOTIFY_OK;
 
7287
}
 
7288
 
 
7289
/*
 
7290
 * Run the perf reboot notifier at the very last possible moment so that
 
7291
 * the generic watchdog code runs as long as possible.
 
7292
 */
 
7293
static struct notifier_block perf_reboot_notifier = {
 
7294
        .notifier_call = perf_reboot,
 
7295
        .priority = INT_MIN,
 
7296
};
 
7297
 
 
7298
static int __cpuinit
 
7299
perf_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu)
 
7300
{
 
7301
        unsigned int cpu = (long)hcpu;
 
7302
 
 
7303
        switch (action & ~CPU_TASKS_FROZEN) {
 
7304
 
 
7305
        case CPU_UP_PREPARE:
 
7306
        case CPU_DOWN_FAILED:
 
7307
                perf_event_init_cpu(cpu);
 
7308
                break;
 
7309
 
 
7310
        case CPU_UP_CANCELED:
 
7311
        case CPU_DOWN_PREPARE:
 
7312
                perf_event_exit_cpu(cpu);
 
7313
                break;
 
7314
 
 
7315
        default:
 
7316
                break;
 
7317
        }
 
7318
 
 
7319
        return NOTIFY_OK;
 
7320
}
 
7321
 
 
7322
void __init perf_event_init(void)
 
7323
{
 
7324
        int ret;
 
7325
 
 
7326
        idr_init(&pmu_idr);
 
7327
 
 
7328
        perf_event_init_all_cpus();
 
7329
        init_srcu_struct(&pmus_srcu);
 
7330
        perf_pmu_register(&perf_swevent, "software", PERF_TYPE_SOFTWARE);
 
7331
        perf_pmu_register(&perf_cpu_clock, NULL, -1);
 
7332
        perf_pmu_register(&perf_task_clock, NULL, -1);
 
7333
        perf_tp_register();
 
7334
        perf_cpu_notifier(perf_cpu_notify);
 
7335
        register_reboot_notifier(&perf_reboot_notifier);
 
7336
 
 
7337
        ret = init_hw_breakpoint();
 
7338
        WARN(ret, "hw_breakpoint initialization failed with: %d", ret);
 
7339
}
 
7340
 
 
7341
static int __init perf_event_sysfs_init(void)
 
7342
{
 
7343
        struct pmu *pmu;
 
7344
        int ret;
 
7345
 
 
7346
        mutex_lock(&pmus_lock);
 
7347
 
 
7348
        ret = bus_register(&pmu_bus);
 
7349
        if (ret)
 
7350
                goto unlock;
 
7351
 
 
7352
        list_for_each_entry(pmu, &pmus, entry) {
 
7353
                if (!pmu->name || pmu->type < 0)
 
7354
                        continue;
 
7355
 
 
7356
                ret = pmu_dev_alloc(pmu);
 
7357
                WARN(ret, "Failed to register pmu: %s, reason %d\n", pmu->name, ret);
 
7358
        }
 
7359
        pmu_bus_running = 1;
 
7360
        ret = 0;
 
7361
 
 
7362
unlock:
 
7363
        mutex_unlock(&pmus_lock);
 
7364
 
 
7365
        return ret;
 
7366
}
 
7367
device_initcall(perf_event_sysfs_init);
 
7368
 
 
7369
#ifdef CONFIG_CGROUP_PERF
 
7370
static struct cgroup_subsys_state *perf_cgroup_create(
 
7371
        struct cgroup_subsys *ss, struct cgroup *cont)
 
7372
{
 
7373
        struct perf_cgroup *jc;
 
7374
 
 
7375
        jc = kzalloc(sizeof(*jc), GFP_KERNEL);
 
7376
        if (!jc)
 
7377
                return ERR_PTR(-ENOMEM);
 
7378
 
 
7379
        jc->info = alloc_percpu(struct perf_cgroup_info);
 
7380
        if (!jc->info) {
 
7381
                kfree(jc);
 
7382
                return ERR_PTR(-ENOMEM);
 
7383
        }
 
7384
 
 
7385
        return &jc->css;
 
7386
}
 
7387
 
 
7388
static void perf_cgroup_destroy(struct cgroup_subsys *ss,
 
7389
                                struct cgroup *cont)
 
7390
{
 
7391
        struct perf_cgroup *jc;
 
7392
        jc = container_of(cgroup_subsys_state(cont, perf_subsys_id),
 
7393
                          struct perf_cgroup, css);
 
7394
        free_percpu(jc->info);
 
7395
        kfree(jc);
 
7396
}
 
7397
 
 
7398
static int __perf_cgroup_move(void *info)
 
7399
{
 
7400
        struct task_struct *task = info;
 
7401
        perf_cgroup_switch(task, PERF_CGROUP_SWOUT | PERF_CGROUP_SWIN);
 
7402
        return 0;
 
7403
}
 
7404
 
 
7405
static void
 
7406
perf_cgroup_attach_task(struct cgroup *cgrp, struct task_struct *task)
 
7407
{
 
7408
        task_function_call(task, __perf_cgroup_move, task);
 
7409
}
 
7410
 
 
7411
static void perf_cgroup_exit(struct cgroup_subsys *ss, struct cgroup *cgrp,
 
7412
                struct cgroup *old_cgrp, struct task_struct *task)
 
7413
{
 
7414
        /*
 
7415
         * cgroup_exit() is called in the copy_process() failure path.
 
7416
         * Ignore this case since the task hasn't ran yet, this avoids
 
7417
         * trying to poke a half freed task state from generic code.
 
7418
         */
 
7419
        if (!(task->flags & PF_EXITING))
 
7420
                return;
 
7421
 
 
7422
        perf_cgroup_attach_task(cgrp, task);
 
7423
}
 
7424
 
 
7425
struct cgroup_subsys perf_subsys = {
 
7426
        .name           = "perf_event",
 
7427
        .subsys_id      = perf_subsys_id,
 
7428
        .create         = perf_cgroup_create,
 
7429
        .destroy        = perf_cgroup_destroy,
 
7430
        .exit           = perf_cgroup_exit,
 
7431
        .attach_task    = perf_cgroup_attach_task,
 
7432
};
 
7433
#endif /* CONFIG_CGROUP_PERF */