1  /*
2   * Performance events:
3   *
4   *    Copyright (C) 2008-2009, 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
7   *
8   * Data type definitions, declarations, prototypes.
9   *
10   *    Started by: Thomas Gleixner and Ingo Molnar
11   *
12   * For licencing details see kernel-base/COPYING
13   */
14  #ifndef _LINUX_PERF_EVENT_H
15  #define _LINUX_PERF_EVENT_H
16  
17  #include <uapi/linux/perf_event.h>
18  #include <uapi/linux/bpf_perf_event.h>
19  
20  /*
21   * Kernel-internal data types and definitions:
22   */
23  
24  #ifdef CONFIG_PERF_EVENTS
25  # include <asm/perf_event.h>
26  # include <asm/local64.h>
27  #endif
28  
29  #define PERF_GUEST_ACTIVE	0x01
30  #define PERF_GUEST_USER	0x02
31  
32  struct perf_guest_info_callbacks {
33  	unsigned int			(*state)(void);
34  	unsigned long			(*get_ip)(void);
35  	unsigned int			(*handle_intel_pt_intr)(void);
36  };
37  
38  #ifdef CONFIG_HAVE_HW_BREAKPOINT
39  #include <linux/rhashtable-types.h>
40  #include <asm/hw_breakpoint.h>
41  #endif
42  
43  #include <linux/list.h>
44  #include <linux/mutex.h>
45  #include <linux/rculist.h>
46  #include <linux/rcupdate.h>
47  #include <linux/spinlock.h>
48  #include <linux/hrtimer.h>
49  #include <linux/fs.h>
50  #include <linux/pid_namespace.h>
51  #include <linux/workqueue.h>
52  #include <linux/ftrace.h>
53  #include <linux/cpu.h>
54  #include <linux/irq_work.h>
55  #include <linux/static_key.h>
56  #include <linux/jump_label_ratelimit.h>
57  #include <linux/atomic.h>
58  #include <linux/sysfs.h>
59  #include <linux/perf_regs.h>
60  #include <linux/cgroup.h>
61  #include <linux/refcount.h>
62  #include <linux/security.h>
63  #include <linux/static_call.h>
64  #include <linux/lockdep.h>
65  #include <asm/local.h>
66  
67  struct perf_callchain_entry {
68  	__u64				nr;
69  	__u64				ip[]; /* /proc/sys/kernel/perf_event_max_stack */
70  };
71  
72  struct perf_callchain_entry_ctx {
73  	struct perf_callchain_entry *entry;
74  	u32			    max_stack;
75  	u32			    nr;
76  	short			    contexts;
77  	bool			    contexts_maxed;
78  };
79  
80  typedef unsigned long (*perf_copy_f)(void *dst, const void *src,
81  				     unsigned long off, unsigned long len);
82  
83  struct perf_raw_frag {
84  	union {
85  		struct perf_raw_frag	*next;
86  		unsigned long		pad;
87  	};
88  	perf_copy_f			copy;
89  	void				*data;
90  	u32				size;
91  } __packed;
92  
93  struct perf_raw_record {
94  	struct perf_raw_frag		frag;
95  	u32				size;
96  };
97  
perf_raw_frag_last(const struct perf_raw_frag * frag)98  static __always_inline bool perf_raw_frag_last(const struct perf_raw_frag *frag)
99  {
100  	return frag->pad < sizeof(u64);
101  }
102  
103  /*
104   * branch stack layout:
105   *  nr: number of taken branches stored in entries[]
106   *  hw_idx: The low level index of raw branch records
107   *          for the most recent branch.
108   *          -1ULL means invalid/unknown.
109   *
110   * Note that nr can vary from sample to sample
111   * branches (to, from) are stored from most recent
112   * to least recent, i.e., entries[0] contains the most
113   * recent branch.
114   * The entries[] is an abstraction of raw branch records,
115   * which may not be stored in age order in HW, e.g. Intel LBR.
116   * The hw_idx is to expose the low level index of raw
117   * branch record for the most recent branch aka entries[0].
118   * The hw_idx index is between -1 (unknown) and max depth,
119   * which can be retrieved in /sys/devices/cpu/caps/branches.
120   * For the architectures whose raw branch records are
121   * already stored in age order, the hw_idx should be 0.
122   */
123  struct perf_branch_stack {
124  	__u64				nr;
125  	__u64				hw_idx;
126  	struct perf_branch_entry	entries[];
127  };
128  
129  struct task_struct;
130  
131  /*
132   * extra PMU register associated with an event
133   */
134  struct hw_perf_event_extra {
135  	u64		config;	/* register value */
136  	unsigned int	reg;	/* register address or index */
137  	int		alloc;	/* extra register already allocated */
138  	int		idx;	/* index in shared_regs->regs[] */
139  };
140  
141  /**
142   * hw_perf_event::flag values
143   *
144   * PERF_EVENT_FLAG_ARCH bits are reserved for architecture-specific
145   * usage.
146   */
147  #define PERF_EVENT_FLAG_ARCH			0x000fffff
148  #define PERF_EVENT_FLAG_USER_READ_CNT		0x80000000
149  
150  static_assert((PERF_EVENT_FLAG_USER_READ_CNT & PERF_EVENT_FLAG_ARCH) == 0);
151  
152  /**
153   * struct hw_perf_event - performance event hardware details:
154   */
155  struct hw_perf_event {
156  #ifdef CONFIG_PERF_EVENTS
157  	union {
158  		struct { /* hardware */
159  			u64		config;
160  			u64		last_tag;
161  			unsigned long	config_base;
162  			unsigned long	event_base;
163  			int		event_base_rdpmc;
164  			int		idx;
165  			int		last_cpu;
166  			int		flags;
167  
168  			struct hw_perf_event_extra extra_reg;
169  			struct hw_perf_event_extra branch_reg;
170  		};
171  		struct { /* aux / Intel-PT */
172  			u64		aux_config;
173  		};
174  		struct { /* software */
175  			struct hrtimer	hrtimer;
176  		};
177  		struct { /* tracepoint */
178  			/* for tp_event->class */
179  			struct list_head	tp_list;
180  		};
181  		struct { /* amd_power */
182  			u64	pwr_acc;
183  			u64	ptsc;
184  		};
185  #ifdef CONFIG_HAVE_HW_BREAKPOINT
186  		struct { /* breakpoint */
187  			/*
188  			 * Crufty hack to avoid the chicken and egg
189  			 * problem hw_breakpoint has with context
190  			 * creation and event initalization.
191  			 */
192  			struct arch_hw_breakpoint	info;
193  			struct rhlist_head		bp_list;
194  		};
195  #endif
196  		struct { /* amd_iommu */
197  			u8	iommu_bank;
198  			u8	iommu_cntr;
199  			u16	padding;
200  			u64	conf;
201  			u64	conf1;
202  		};
203  	};
204  	/*
205  	 * If the event is a per task event, this will point to the task in
206  	 * question. See the comment in perf_event_alloc().
207  	 */
208  	struct task_struct		*target;
209  
210  	/*
211  	 * PMU would store hardware filter configuration
212  	 * here.
213  	 */
214  	void				*addr_filters;
215  
216  	/* Last sync'ed generation of filters */
217  	unsigned long			addr_filters_gen;
218  
219  /*
220   * hw_perf_event::state flags; used to track the PERF_EF_* state.
221   */
222  #define PERF_HES_STOPPED	0x01 /* the counter is stopped */
223  #define PERF_HES_UPTODATE	0x02 /* event->count up-to-date */
224  #define PERF_HES_ARCH		0x04
225  
226  	int				state;
227  
228  	/*
229  	 * The last observed hardware counter value, updated with a
230  	 * local64_cmpxchg() such that pmu::read() can be called nested.
231  	 */
232  	local64_t			prev_count;
233  
234  	/*
235  	 * The period to start the next sample with.
236  	 */
237  	u64				sample_period;
238  
239  	union {
240  		struct { /* Sampling */
241  			/*
242  			 * The period we started this sample with.
243  			 */
244  			u64				last_period;
245  
246  			/*
247  			 * However much is left of the current period;
248  			 * note that this is a full 64bit value and
249  			 * allows for generation of periods longer
250  			 * than hardware might allow.
251  			 */
252  			local64_t			period_left;
253  		};
254  		struct { /* Topdown events counting for context switch */
255  			u64				saved_metric;
256  			u64				saved_slots;
257  		};
258  	};
259  
260  	/*
261  	 * State for throttling the event, see __perf_event_overflow() and
262  	 * perf_adjust_freq_unthr_context().
263  	 */
264  	u64                             interrupts_seq;
265  	u64				interrupts;
266  
267  	/*
268  	 * State for freq target events, see __perf_event_overflow() and
269  	 * perf_adjust_freq_unthr_context().
270  	 */
271  	u64				freq_time_stamp;
272  	u64				freq_count_stamp;
273  #endif
274  };
275  
276  struct perf_event;
277  struct perf_event_pmu_context;
278  
279  /*
280   * Common implementation detail of pmu::{start,commit,cancel}_txn
281   */
282  #define PERF_PMU_TXN_ADD  0x1		/* txn to add/schedule event on PMU */
283  #define PERF_PMU_TXN_READ 0x2		/* txn to read event group from PMU */
284  
285  /**
286   * pmu::capabilities flags
287   */
288  #define PERF_PMU_CAP_NO_INTERRUPT		0x0001
289  #define PERF_PMU_CAP_NO_NMI			0x0002
290  #define PERF_PMU_CAP_AUX_NO_SG			0x0004
291  #define PERF_PMU_CAP_EXTENDED_REGS		0x0008
292  #define PERF_PMU_CAP_EXCLUSIVE			0x0010
293  #define PERF_PMU_CAP_ITRACE			0x0020
294  #define PERF_PMU_CAP_NO_EXCLUDE			0x0040
295  #define PERF_PMU_CAP_AUX_OUTPUT			0x0080
296  #define PERF_PMU_CAP_EXTENDED_HW_TYPE		0x0100
297  
298  /**
299   * pmu::scope
300   */
301  enum perf_pmu_scope {
302  	PERF_PMU_SCOPE_NONE	= 0,
303  	PERF_PMU_SCOPE_CORE,
304  	PERF_PMU_SCOPE_DIE,
305  	PERF_PMU_SCOPE_CLUSTER,
306  	PERF_PMU_SCOPE_PKG,
307  	PERF_PMU_SCOPE_SYS_WIDE,
308  	PERF_PMU_MAX_SCOPE,
309  };
310  
311  struct perf_output_handle;
312  
313  #define PMU_NULL_DEV	((void *)(~0UL))
314  
315  /**
316   * struct pmu - generic performance monitoring unit
317   */
318  struct pmu {
319  	struct list_head		entry;
320  
321  	struct module			*module;
322  	struct device			*dev;
323  	struct device			*parent;
324  	const struct attribute_group	**attr_groups;
325  	const struct attribute_group	**attr_update;
326  	const char			*name;
327  	int				type;
328  
329  	/*
330  	 * various common per-pmu feature flags
331  	 */
332  	int				capabilities;
333  
334  	/*
335  	 * PMU scope
336  	 */
337  	unsigned int			scope;
338  
339  	int __percpu			*pmu_disable_count;
340  	struct perf_cpu_pmu_context __percpu *cpu_pmu_context;
341  	atomic_t			exclusive_cnt; /* < 0: cpu; > 0: tsk */
342  	int				task_ctx_nr;
343  	int				hrtimer_interval_ms;
344  
345  	/* number of address filters this PMU can do */
346  	unsigned int			nr_addr_filters;
347  
348  	/*
349  	 * Fully disable/enable this PMU, can be used to protect from the PMI
350  	 * as well as for lazy/batch writing of the MSRs.
351  	 */
352  	void (*pmu_enable)		(struct pmu *pmu); /* optional */
353  	void (*pmu_disable)		(struct pmu *pmu); /* optional */
354  
355  	/*
356  	 * Try and initialize the event for this PMU.
357  	 *
358  	 * Returns:
359  	 *  -ENOENT	-- @event is not for this PMU
360  	 *
361  	 *  -ENODEV	-- @event is for this PMU but PMU not present
362  	 *  -EBUSY	-- @event is for this PMU but PMU temporarily unavailable
363  	 *  -EINVAL	-- @event is for this PMU but @event is not valid
364  	 *  -EOPNOTSUPP -- @event is for this PMU, @event is valid, but not supported
365  	 *  -EACCES	-- @event is for this PMU, @event is valid, but no privileges
366  	 *
367  	 *  0		-- @event is for this PMU and valid
368  	 *
369  	 * Other error return values are allowed.
370  	 */
371  	int (*event_init)		(struct perf_event *event);
372  
373  	/*
374  	 * Notification that the event was mapped or unmapped.  Called
375  	 * in the context of the mapping task.
376  	 */
377  	void (*event_mapped)		(struct perf_event *event, struct mm_struct *mm); /* optional */
378  	void (*event_unmapped)		(struct perf_event *event, struct mm_struct *mm); /* optional */
379  
380  	/*
381  	 * Flags for ->add()/->del()/ ->start()/->stop(). There are
382  	 * matching hw_perf_event::state flags.
383  	 */
384  #define PERF_EF_START	0x01		/* start the counter when adding    */
385  #define PERF_EF_RELOAD	0x02		/* reload the counter when starting */
386  #define PERF_EF_UPDATE	0x04		/* update the counter when stopping */
387  
388  	/*
389  	 * Adds/Removes a counter to/from the PMU, can be done inside a
390  	 * transaction, see the ->*_txn() methods.
391  	 *
392  	 * The add/del callbacks will reserve all hardware resources required
393  	 * to service the event, this includes any counter constraint
394  	 * scheduling etc.
395  	 *
396  	 * Called with IRQs disabled and the PMU disabled on the CPU the event
397  	 * is on.
398  	 *
399  	 * ->add() called without PERF_EF_START should result in the same state
400  	 *  as ->add() followed by ->stop().
401  	 *
402  	 * ->del() must always PERF_EF_UPDATE stop an event. If it calls
403  	 *  ->stop() that must deal with already being stopped without
404  	 *  PERF_EF_UPDATE.
405  	 */
406  	int  (*add)			(struct perf_event *event, int flags);
407  	void (*del)			(struct perf_event *event, int flags);
408  
409  	/*
410  	 * Starts/Stops a counter present on the PMU.
411  	 *
412  	 * The PMI handler should stop the counter when perf_event_overflow()
413  	 * returns !0. ->start() will be used to continue.
414  	 *
415  	 * Also used to change the sample period.
416  	 *
417  	 * Called with IRQs disabled and the PMU disabled on the CPU the event
418  	 * is on -- will be called from NMI context with the PMU generates
419  	 * NMIs.
420  	 *
421  	 * ->stop() with PERF_EF_UPDATE will read the counter and update
422  	 *  period/count values like ->read() would.
423  	 *
424  	 * ->start() with PERF_EF_RELOAD will reprogram the counter
425  	 *  value, must be preceded by a ->stop() with PERF_EF_UPDATE.
426  	 */
427  	void (*start)			(struct perf_event *event, int flags);
428  	void (*stop)			(struct perf_event *event, int flags);
429  
430  	/*
431  	 * Updates the counter value of the event.
432  	 *
433  	 * For sampling capable PMUs this will also update the software period
434  	 * hw_perf_event::period_left field.
435  	 */
436  	void (*read)			(struct perf_event *event);
437  
438  	/*
439  	 * Group events scheduling is treated as a transaction, add
440  	 * group events as a whole and perform one schedulability test.
441  	 * If the test fails, roll back the whole group
442  	 *
443  	 * Start the transaction, after this ->add() doesn't need to
444  	 * do schedulability tests.
445  	 *
446  	 * Optional.
447  	 */
448  	void (*start_txn)		(struct pmu *pmu, unsigned int txn_flags);
449  	/*
450  	 * If ->start_txn() disabled the ->add() schedulability test
451  	 * then ->commit_txn() is required to perform one. On success
452  	 * the transaction is closed. On error the transaction is kept
453  	 * open until ->cancel_txn() is called.
454  	 *
455  	 * Optional.
456  	 */
457  	int  (*commit_txn)		(struct pmu *pmu);
458  	/*
459  	 * Will cancel the transaction, assumes ->del() is called
460  	 * for each successful ->add() during the transaction.
461  	 *
462  	 * Optional.
463  	 */
464  	void (*cancel_txn)		(struct pmu *pmu);
465  
466  	/*
467  	 * Will return the value for perf_event_mmap_page::index for this event,
468  	 * if no implementation is provided it will default to 0 (see
469  	 * perf_event_idx_default).
470  	 */
471  	int (*event_idx)		(struct perf_event *event); /*optional */
472  
473  	/*
474  	 * context-switches callback
475  	 */
476  	void (*sched_task)		(struct perf_event_pmu_context *pmu_ctx,
477  					bool sched_in);
478  
479  	/*
480  	 * Kmem cache of PMU specific data
481  	 */
482  	struct kmem_cache		*task_ctx_cache;
483  
484  	/*
485  	 * PMU specific parts of task perf event context (i.e. ctx->task_ctx_data)
486  	 * can be synchronized using this function. See Intel LBR callstack support
487  	 * implementation and Perf core context switch handling callbacks for usage
488  	 * examples.
489  	 */
490  	void (*swap_task_ctx)		(struct perf_event_pmu_context *prev_epc,
491  					 struct perf_event_pmu_context *next_epc);
492  					/* optional */
493  
494  	/*
495  	 * Set up pmu-private data structures for an AUX area
496  	 */
497  	void *(*setup_aux)		(struct perf_event *event, void **pages,
498  					 int nr_pages, bool overwrite);
499  					/* optional */
500  
501  	/*
502  	 * Free pmu-private AUX data structures
503  	 */
504  	void (*free_aux)		(void *aux); /* optional */
505  
506  	/*
507  	 * Take a snapshot of the AUX buffer without touching the event
508  	 * state, so that preempting ->start()/->stop() callbacks does
509  	 * not interfere with their logic. Called in PMI context.
510  	 *
511  	 * Returns the size of AUX data copied to the output handle.
512  	 *
513  	 * Optional.
514  	 */
515  	long (*snapshot_aux)		(struct perf_event *event,
516  					 struct perf_output_handle *handle,
517  					 unsigned long size);
518  
519  	/*
520  	 * Validate address range filters: make sure the HW supports the
521  	 * requested configuration and number of filters; return 0 if the
522  	 * supplied filters are valid, -errno otherwise.
523  	 *
524  	 * Runs in the context of the ioctl()ing process and is not serialized
525  	 * with the rest of the PMU callbacks.
526  	 */
527  	int (*addr_filters_validate)	(struct list_head *filters);
528  					/* optional */
529  
530  	/*
531  	 * Synchronize address range filter configuration:
532  	 * translate hw-agnostic filters into hardware configuration in
533  	 * event::hw::addr_filters.
534  	 *
535  	 * Runs as a part of filter sync sequence that is done in ->start()
536  	 * callback by calling perf_event_addr_filters_sync().
537  	 *
538  	 * May (and should) traverse event::addr_filters::list, for which its
539  	 * caller provides necessary serialization.
540  	 */
541  	void (*addr_filters_sync)	(struct perf_event *event);
542  					/* optional */
543  
544  	/*
545  	 * Check if event can be used for aux_output purposes for
546  	 * events of this PMU.
547  	 *
548  	 * Runs from perf_event_open(). Should return 0 for "no match"
549  	 * or non-zero for "match".
550  	 */
551  	int (*aux_output_match)		(struct perf_event *event);
552  					/* optional */
553  
554  	/*
555  	 * Skip programming this PMU on the given CPU. Typically needed for
556  	 * big.LITTLE things.
557  	 */
558  	bool (*filter)			(struct pmu *pmu, int cpu); /* optional */
559  
560  	/*
561  	 * Check period value for PERF_EVENT_IOC_PERIOD ioctl.
562  	 */
563  	int (*check_period)		(struct perf_event *event, u64 value); /* optional */
564  };
565  
566  enum perf_addr_filter_action_t {
567  	PERF_ADDR_FILTER_ACTION_STOP = 0,
568  	PERF_ADDR_FILTER_ACTION_START,
569  	PERF_ADDR_FILTER_ACTION_FILTER,
570  };
571  
572  /**
573   * struct perf_addr_filter - address range filter definition
574   * @entry:	event's filter list linkage
575   * @path:	object file's path for file-based filters
576   * @offset:	filter range offset
577   * @size:	filter range size (size==0 means single address trigger)
578   * @action:	filter/start/stop
579   *
580   * This is a hardware-agnostic filter configuration as specified by the user.
581   */
582  struct perf_addr_filter {
583  	struct list_head	entry;
584  	struct path		path;
585  	unsigned long		offset;
586  	unsigned long		size;
587  	enum perf_addr_filter_action_t	action;
588  };
589  
590  /**
591   * struct perf_addr_filters_head - container for address range filters
592   * @list:	list of filters for this event
593   * @lock:	spinlock that serializes accesses to the @list and event's
594   *		(and its children's) filter generations.
595   * @nr_file_filters:	number of file-based filters
596   *
597   * A child event will use parent's @list (and therefore @lock), so they are
598   * bundled together; see perf_event_addr_filters().
599   */
600  struct perf_addr_filters_head {
601  	struct list_head	list;
602  	raw_spinlock_t		lock;
603  	unsigned int		nr_file_filters;
604  };
605  
606  struct perf_addr_filter_range {
607  	unsigned long		start;
608  	unsigned long		size;
609  };
610  
611  /**
612   * enum perf_event_state - the states of an event:
613   */
614  enum perf_event_state {
615  	PERF_EVENT_STATE_DEAD		= -4,
616  	PERF_EVENT_STATE_EXIT		= -3,
617  	PERF_EVENT_STATE_ERROR		= -2,
618  	PERF_EVENT_STATE_OFF		= -1,
619  	PERF_EVENT_STATE_INACTIVE	=  0,
620  	PERF_EVENT_STATE_ACTIVE		=  1,
621  };
622  
623  struct file;
624  struct perf_sample_data;
625  
626  typedef void (*perf_overflow_handler_t)(struct perf_event *,
627  					struct perf_sample_data *,
628  					struct pt_regs *regs);
629  
630  /*
631   * Event capabilities. For event_caps and groups caps.
632   *
633   * PERF_EV_CAP_SOFTWARE: Is a software event.
634   * PERF_EV_CAP_READ_ACTIVE_PKG: A CPU event (or cgroup event) that can be read
635   * from any CPU in the package where it is active.
636   * PERF_EV_CAP_SIBLING: An event with this flag must be a group sibling and
637   * cannot be a group leader. If an event with this flag is detached from the
638   * group it is scheduled out and moved into an unrecoverable ERROR state.
639   * PERF_EV_CAP_READ_SCOPE: A CPU event that can be read from any CPU of the
640   * PMU scope where it is active.
641   */
642  #define PERF_EV_CAP_SOFTWARE		BIT(0)
643  #define PERF_EV_CAP_READ_ACTIVE_PKG	BIT(1)
644  #define PERF_EV_CAP_SIBLING		BIT(2)
645  #define PERF_EV_CAP_READ_SCOPE		BIT(3)
646  
647  #define SWEVENT_HLIST_BITS		8
648  #define SWEVENT_HLIST_SIZE		(1 << SWEVENT_HLIST_BITS)
649  
650  struct swevent_hlist {
651  	struct hlist_head		heads[SWEVENT_HLIST_SIZE];
652  	struct rcu_head			rcu_head;
653  };
654  
655  #define PERF_ATTACH_CONTEXT	0x01
656  #define PERF_ATTACH_GROUP	0x02
657  #define PERF_ATTACH_TASK	0x04
658  #define PERF_ATTACH_TASK_DATA	0x08
659  #define PERF_ATTACH_ITRACE	0x10
660  #define PERF_ATTACH_SCHED_CB	0x20
661  #define PERF_ATTACH_CHILD	0x40
662  
663  struct bpf_prog;
664  struct perf_cgroup;
665  struct perf_buffer;
666  
667  struct pmu_event_list {
668  	raw_spinlock_t		lock;
669  	struct list_head	list;
670  };
671  
672  /*
673   * event->sibling_list is modified whole holding both ctx->lock and ctx->mutex
674   * as such iteration must hold either lock. However, since ctx->lock is an IRQ
675   * safe lock, and is only held by the CPU doing the modification, having IRQs
676   * disabled is sufficient since it will hold-off the IPIs.
677   */
678  #ifdef CONFIG_PROVE_LOCKING
679  #define lockdep_assert_event_ctx(event)				\
680  	WARN_ON_ONCE(__lockdep_enabled &&			\
681  		     (this_cpu_read(hardirqs_enabled) &&	\
682  		      lockdep_is_held(&(event)->ctx->mutex) != LOCK_STATE_HELD))
683  #else
684  #define lockdep_assert_event_ctx(event)
685  #endif
686  
687  #define for_each_sibling_event(sibling, event)			\
688  	lockdep_assert_event_ctx(event);			\
689  	if ((event)->group_leader == (event))			\
690  		list_for_each_entry((sibling), &(event)->sibling_list, sibling_list)
691  
692  /**
693   * struct perf_event - performance event kernel representation:
694   */
695  struct perf_event {
696  #ifdef CONFIG_PERF_EVENTS
697  	/*
698  	 * entry onto perf_event_context::event_list;
699  	 *   modifications require ctx->lock
700  	 *   RCU safe iterations.
701  	 */
702  	struct list_head		event_entry;
703  
704  	/*
705  	 * Locked for modification by both ctx->mutex and ctx->lock; holding
706  	 * either sufficies for read.
707  	 */
708  	struct list_head		sibling_list;
709  	struct list_head		active_list;
710  	/*
711  	 * Node on the pinned or flexible tree located at the event context;
712  	 */
713  	struct rb_node			group_node;
714  	u64				group_index;
715  	/*
716  	 * We need storage to track the entries in perf_pmu_migrate_context; we
717  	 * cannot use the event_entry because of RCU and we want to keep the
718  	 * group in tact which avoids us using the other two entries.
719  	 */
720  	struct list_head		migrate_entry;
721  
722  	struct hlist_node		hlist_entry;
723  	struct list_head		active_entry;
724  	int				nr_siblings;
725  
726  	/* Not serialized. Only written during event initialization. */
727  	int				event_caps;
728  	/* The cumulative AND of all event_caps for events in this group. */
729  	int				group_caps;
730  
731  	unsigned int			group_generation;
732  	struct perf_event		*group_leader;
733  	/*
734  	 * event->pmu will always point to pmu in which this event belongs.
735  	 * Whereas event->pmu_ctx->pmu may point to other pmu when group of
736  	 * different pmu events is created.
737  	 */
738  	struct pmu			*pmu;
739  	void				*pmu_private;
740  
741  	enum perf_event_state		state;
742  	unsigned int			attach_state;
743  	local64_t			count;
744  	atomic64_t			child_count;
745  
746  	/*
747  	 * These are the total time in nanoseconds that the event
748  	 * has been enabled (i.e. eligible to run, and the task has
749  	 * been scheduled in, if this is a per-task event)
750  	 * and running (scheduled onto the CPU), respectively.
751  	 */
752  	u64				total_time_enabled;
753  	u64				total_time_running;
754  	u64				tstamp;
755  
756  	struct perf_event_attr		attr;
757  	u16				header_size;
758  	u16				id_header_size;
759  	u16				read_size;
760  	struct hw_perf_event		hw;
761  
762  	struct perf_event_context	*ctx;
763  	/*
764  	 * event->pmu_ctx points to perf_event_pmu_context in which the event
765  	 * is added. This pmu_ctx can be of other pmu for sw event when that
766  	 * sw event is part of a group which also contains non-sw events.
767  	 */
768  	struct perf_event_pmu_context	*pmu_ctx;
769  	atomic_long_t			refcount;
770  
771  	/*
772  	 * These accumulate total time (in nanoseconds) that children
773  	 * events have been enabled and running, respectively.
774  	 */
775  	atomic64_t			child_total_time_enabled;
776  	atomic64_t			child_total_time_running;
777  
778  	/*
779  	 * Protect attach/detach and child_list:
780  	 */
781  	struct mutex			child_mutex;
782  	struct list_head		child_list;
783  	struct perf_event		*parent;
784  
785  	int				oncpu;
786  	int				cpu;
787  
788  	struct list_head		owner_entry;
789  	struct task_struct		*owner;
790  
791  	/* mmap bits */
792  	struct mutex			mmap_mutex;
793  	atomic_t			mmap_count;
794  
795  	struct perf_buffer		*rb;
796  	struct list_head		rb_entry;
797  	unsigned long			rcu_batches;
798  	int				rcu_pending;
799  
800  	/* poll related */
801  	wait_queue_head_t		waitq;
802  	struct fasync_struct		*fasync;
803  
804  	/* delayed work for NMIs and such */
805  	unsigned int			pending_wakeup;
806  	unsigned int			pending_kill;
807  	unsigned int			pending_disable;
808  	unsigned long			pending_addr;	/* SIGTRAP */
809  	struct irq_work			pending_irq;
810  	struct irq_work			pending_disable_irq;
811  	struct callback_head		pending_task;
812  	unsigned int			pending_work;
813  	struct rcuwait			pending_work_wait;
814  
815  	atomic_t			event_limit;
816  
817  	/* address range filters */
818  	struct perf_addr_filters_head	addr_filters;
819  	/* vma address array for file-based filders */
820  	struct perf_addr_filter_range	*addr_filter_ranges;
821  	unsigned long			addr_filters_gen;
822  
823  	/* for aux_output events */
824  	struct perf_event		*aux_event;
825  
826  	void (*destroy)(struct perf_event *);
827  	struct rcu_head			rcu_head;
828  
829  	struct pid_namespace		*ns;
830  	u64				id;
831  
832  	atomic64_t			lost_samples;
833  
834  	u64				(*clock)(void);
835  	perf_overflow_handler_t		overflow_handler;
836  	void				*overflow_handler_context;
837  	struct bpf_prog			*prog;
838  	u64				bpf_cookie;
839  
840  #ifdef CONFIG_EVENT_TRACING
841  	struct trace_event_call		*tp_event;
842  	struct event_filter		*filter;
843  #ifdef CONFIG_FUNCTION_TRACER
844  	struct ftrace_ops               ftrace_ops;
845  #endif
846  #endif
847  
848  #ifdef CONFIG_CGROUP_PERF
849  	struct perf_cgroup		*cgrp; /* cgroup event is attach to */
850  #endif
851  
852  #ifdef CONFIG_SECURITY
853  	void *security;
854  #endif
855  	struct list_head		sb_list;
856  
857  	/*
858  	 * Certain events gets forwarded to another pmu internally by over-
859  	 * writing kernel copy of event->attr.type without user being aware
860  	 * of it. event->orig_type contains original 'type' requested by
861  	 * user.
862  	 */
863  	__u32				orig_type;
864  #endif /* CONFIG_PERF_EVENTS */
865  };
866  
867  /*
868   *           ,-----------------------[1:n]------------------------.
869   *           V                                                    V
870   * perf_event_context <-[1:n]-> perf_event_pmu_context <-[1:n]- perf_event
871   *                                        |                       |
872   *                                        `--[n:1]-> pmu <-[1:n]--'
873   *
874   *
875   * struct perf_event_pmu_context  lifetime is refcount based and RCU freed
876   * (similar to perf_event_context). Locking is as if it were a member of
877   * perf_event_context; specifically:
878   *
879   *   modification, both: ctx->mutex && ctx->lock
880   *   reading, either:    ctx->mutex || ctx->lock
881   *
882   * There is one exception to this; namely put_pmu_ctx() isn't always called
883   * with ctx->mutex held; this means that as long as we can guarantee the epc
884   * has events the above rules hold.
885   *
886   * Specificially, sys_perf_event_open()'s group_leader case depends on
887   * ctx->mutex pinning the configuration. Since we hold a reference on
888   * group_leader (through the filedesc) it can't go away, therefore it's
889   * associated pmu_ctx must exist and cannot change due to ctx->mutex.
890   *
891   * perf_event holds a refcount on perf_event_context
892   * perf_event holds a refcount on perf_event_pmu_context
893   */
894  struct perf_event_pmu_context {
895  	struct pmu			*pmu;
896  	struct perf_event_context       *ctx;
897  
898  	struct list_head		pmu_ctx_entry;
899  
900  	struct list_head		pinned_active;
901  	struct list_head		flexible_active;
902  
903  	/* Used to avoid freeing per-cpu perf_event_pmu_context */
904  	unsigned int			embedded : 1;
905  
906  	unsigned int			nr_events;
907  	unsigned int			nr_cgroups;
908  	unsigned int			nr_freq;
909  
910  	atomic_t			refcount; /* event <-> epc */
911  	struct rcu_head			rcu_head;
912  
913  	void				*task_ctx_data; /* pmu specific data */
914  	/*
915  	 * Set when one or more (plausibly active) event can't be scheduled
916  	 * due to pmu overcommit or pmu constraints, except tolerant to
917  	 * events not necessary to be active due to scheduling constraints,
918  	 * such as cgroups.
919  	 */
920  	int				rotate_necessary;
921  };
922  
perf_pmu_ctx_is_active(struct perf_event_pmu_context * epc)923  static inline bool perf_pmu_ctx_is_active(struct perf_event_pmu_context *epc)
924  {
925  	return !list_empty(&epc->flexible_active) || !list_empty(&epc->pinned_active);
926  }
927  
928  struct perf_event_groups {
929  	struct rb_root	tree;
930  	u64		index;
931  };
932  
933  
934  /**
935   * struct perf_event_context - event context structure
936   *
937   * Used as a container for task events and CPU events as well:
938   */
939  struct perf_event_context {
940  	/*
941  	 * Protect the states of the events in the list,
942  	 * nr_active, and the list:
943  	 */
944  	raw_spinlock_t			lock;
945  	/*
946  	 * Protect the list of events.  Locking either mutex or lock
947  	 * is sufficient to ensure the list doesn't change; to change
948  	 * the list you need to lock both the mutex and the spinlock.
949  	 */
950  	struct mutex			mutex;
951  
952  	struct list_head		pmu_ctx_list;
953  	struct perf_event_groups	pinned_groups;
954  	struct perf_event_groups	flexible_groups;
955  	struct list_head		event_list;
956  
957  	int				nr_events;
958  	int				nr_user;
959  	int				is_active;
960  
961  	int				nr_task_data;
962  	int				nr_stat;
963  	int				nr_freq;
964  	int				rotate_disable;
965  
966  	refcount_t			refcount; /* event <-> ctx */
967  	struct task_struct		*task;
968  
969  	/*
970  	 * Context clock, runs when context enabled.
971  	 */
972  	u64				time;
973  	u64				timestamp;
974  	u64				timeoffset;
975  
976  	/*
977  	 * These fields let us detect when two contexts have both
978  	 * been cloned (inherited) from a common ancestor.
979  	 */
980  	struct perf_event_context	*parent_ctx;
981  	u64				parent_gen;
982  	u64				generation;
983  	int				pin_count;
984  #ifdef CONFIG_CGROUP_PERF
985  	int				nr_cgroups;	 /* cgroup evts */
986  #endif
987  	struct rcu_head			rcu_head;
988  
989  	/*
990  	 * The count of events for which using the switch-out fast path
991  	 * should be avoided.
992  	 *
993  	 * Sum (event->pending_work + events with
994  	 *    (attr->inherit && (attr->sample_type & PERF_SAMPLE_READ)))
995  	 *
996  	 * The SIGTRAP is targeted at ctx->task, as such it won't do changing
997  	 * that until the signal is delivered.
998  	 */
999  	local_t				nr_no_switch_fast;
1000  };
1001  
1002  struct perf_cpu_pmu_context {
1003  	struct perf_event_pmu_context	epc;
1004  	struct perf_event_pmu_context	*task_epc;
1005  
1006  	struct list_head		sched_cb_entry;
1007  	int				sched_cb_usage;
1008  
1009  	int				active_oncpu;
1010  	int				exclusive;
1011  
1012  	raw_spinlock_t			hrtimer_lock;
1013  	struct hrtimer			hrtimer;
1014  	ktime_t				hrtimer_interval;
1015  	unsigned int			hrtimer_active;
1016  };
1017  
1018  /**
1019   * struct perf_event_cpu_context - per cpu event context structure
1020   */
1021  struct perf_cpu_context {
1022  	struct perf_event_context	ctx;
1023  	struct perf_event_context	*task_ctx;
1024  	int				online;
1025  
1026  #ifdef CONFIG_CGROUP_PERF
1027  	struct perf_cgroup		*cgrp;
1028  #endif
1029  
1030  	/*
1031  	 * Per-CPU storage for iterators used in visit_groups_merge. The default
1032  	 * storage is of size 2 to hold the CPU and any CPU event iterators.
1033  	 */
1034  	int				heap_size;
1035  	struct perf_event		**heap;
1036  	struct perf_event		*heap_default[2];
1037  };
1038  
1039  struct perf_output_handle {
1040  	struct perf_event		*event;
1041  	struct perf_buffer		*rb;
1042  	unsigned long			wakeup;
1043  	unsigned long			size;
1044  	u64				aux_flags;
1045  	union {
1046  		void			*addr;
1047  		unsigned long		head;
1048  	};
1049  	int				page;
1050  };
1051  
1052  struct bpf_perf_event_data_kern {
1053  	bpf_user_pt_regs_t *regs;
1054  	struct perf_sample_data *data;
1055  	struct perf_event *event;
1056  };
1057  
1058  #ifdef CONFIG_CGROUP_PERF
1059  
1060  /*
1061   * perf_cgroup_info keeps track of time_enabled for a cgroup.
1062   * This is a per-cpu dynamically allocated data structure.
1063   */
1064  struct perf_cgroup_info {
1065  	u64				time;
1066  	u64				timestamp;
1067  	u64				timeoffset;
1068  	int				active;
1069  };
1070  
1071  struct perf_cgroup {
1072  	struct cgroup_subsys_state	css;
1073  	struct perf_cgroup_info	__percpu *info;
1074  };
1075  
1076  /*
1077   * Must ensure cgroup is pinned (css_get) before calling
1078   * this function. In other words, we cannot call this function
1079   * if there is no cgroup event for the current CPU context.
1080   */
1081  static inline struct perf_cgroup *
perf_cgroup_from_task(struct task_struct * task,struct perf_event_context * ctx)1082  perf_cgroup_from_task(struct task_struct *task, struct perf_event_context *ctx)
1083  {
1084  	return container_of(task_css_check(task, perf_event_cgrp_id,
1085  					   ctx ? lockdep_is_held(&ctx->lock)
1086  					       : true),
1087  			    struct perf_cgroup, css);
1088  }
1089  #endif /* CONFIG_CGROUP_PERF */
1090  
1091  #ifdef CONFIG_PERF_EVENTS
1092  
1093  extern struct perf_event_context *perf_cpu_task_ctx(void);
1094  
1095  extern void *perf_aux_output_begin(struct perf_output_handle *handle,
1096  				   struct perf_event *event);
1097  extern void perf_aux_output_end(struct perf_output_handle *handle,
1098  				unsigned long size);
1099  extern int perf_aux_output_skip(struct perf_output_handle *handle,
1100  				unsigned long size);
1101  extern void *perf_get_aux(struct perf_output_handle *handle);
1102  extern void perf_aux_output_flag(struct perf_output_handle *handle, u64 flags);
1103  extern void perf_event_itrace_started(struct perf_event *event);
1104  
1105  extern int perf_pmu_register(struct pmu *pmu, const char *name, int type);
1106  extern void perf_pmu_unregister(struct pmu *pmu);
1107  
1108  extern void __perf_event_task_sched_in(struct task_struct *prev,
1109  				       struct task_struct *task);
1110  extern void __perf_event_task_sched_out(struct task_struct *prev,
1111  					struct task_struct *next);
1112  extern int perf_event_init_task(struct task_struct *child, u64 clone_flags);
1113  extern void perf_event_exit_task(struct task_struct *child);
1114  extern void perf_event_free_task(struct task_struct *task);
1115  extern void perf_event_delayed_put(struct task_struct *task);
1116  extern struct file *perf_event_get(unsigned int fd);
1117  extern const struct perf_event *perf_get_event(struct file *file);
1118  extern const struct perf_event_attr *perf_event_attrs(struct perf_event *event);
1119  extern void perf_event_print_debug(void);
1120  extern void perf_pmu_disable(struct pmu *pmu);
1121  extern void perf_pmu_enable(struct pmu *pmu);
1122  extern void perf_sched_cb_dec(struct pmu *pmu);
1123  extern void perf_sched_cb_inc(struct pmu *pmu);
1124  extern int perf_event_task_disable(void);
1125  extern int perf_event_task_enable(void);
1126  
1127  extern void perf_pmu_resched(struct pmu *pmu);
1128  
1129  extern int perf_event_refresh(struct perf_event *event, int refresh);
1130  extern void perf_event_update_userpage(struct perf_event *event);
1131  extern int perf_event_release_kernel(struct perf_event *event);
1132  extern struct perf_event *
1133  perf_event_create_kernel_counter(struct perf_event_attr *attr,
1134  				int cpu,
1135  				struct task_struct *task,
1136  				perf_overflow_handler_t callback,
1137  				void *context);
1138  extern void perf_pmu_migrate_context(struct pmu *pmu,
1139  				int src_cpu, int dst_cpu);
1140  int perf_event_read_local(struct perf_event *event, u64 *value,
1141  			  u64 *enabled, u64 *running);
1142  extern u64 perf_event_read_value(struct perf_event *event,
1143  				 u64 *enabled, u64 *running);
1144  
1145  extern struct perf_callchain_entry *perf_callchain(struct perf_event *event, struct pt_regs *regs);
1146  
branch_sample_no_flags(const struct perf_event * event)1147  static inline bool branch_sample_no_flags(const struct perf_event *event)
1148  {
1149  	return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_NO_FLAGS;
1150  }
1151  
branch_sample_no_cycles(const struct perf_event * event)1152  static inline bool branch_sample_no_cycles(const struct perf_event *event)
1153  {
1154  	return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_NO_CYCLES;
1155  }
1156  
branch_sample_type(const struct perf_event * event)1157  static inline bool branch_sample_type(const struct perf_event *event)
1158  {
1159  	return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_TYPE_SAVE;
1160  }
1161  
branch_sample_hw_index(const struct perf_event * event)1162  static inline bool branch_sample_hw_index(const struct perf_event *event)
1163  {
1164  	return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_HW_INDEX;
1165  }
1166  
branch_sample_priv(const struct perf_event * event)1167  static inline bool branch_sample_priv(const struct perf_event *event)
1168  {
1169  	return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_PRIV_SAVE;
1170  }
1171  
branch_sample_counters(const struct perf_event * event)1172  static inline bool branch_sample_counters(const struct perf_event *event)
1173  {
1174  	return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_COUNTERS;
1175  }
1176  
branch_sample_call_stack(const struct perf_event * event)1177  static inline bool branch_sample_call_stack(const struct perf_event *event)
1178  {
1179  	return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_CALL_STACK;
1180  }
1181  
1182  struct perf_sample_data {
1183  	/*
1184  	 * Fields set by perf_sample_data_init() unconditionally,
1185  	 * group so as to minimize the cachelines touched.
1186  	 */
1187  	u64				sample_flags;
1188  	u64				period;
1189  	u64				dyn_size;
1190  
1191  	/*
1192  	 * Fields commonly set by __perf_event_header__init_id(),
1193  	 * group so as to minimize the cachelines touched.
1194  	 */
1195  	u64				type;
1196  	struct {
1197  		u32	pid;
1198  		u32	tid;
1199  	}				tid_entry;
1200  	u64				time;
1201  	u64				id;
1202  	struct {
1203  		u32	cpu;
1204  		u32	reserved;
1205  	}				cpu_entry;
1206  
1207  	/*
1208  	 * The other fields, optionally {set,used} by
1209  	 * perf_{prepare,output}_sample().
1210  	 */
1211  	u64				ip;
1212  	struct perf_callchain_entry	*callchain;
1213  	struct perf_raw_record		*raw;
1214  	struct perf_branch_stack	*br_stack;
1215  	u64				*br_stack_cntr;
1216  	union perf_sample_weight	weight;
1217  	union  perf_mem_data_src	data_src;
1218  	u64				txn;
1219  
1220  	struct perf_regs		regs_user;
1221  	struct perf_regs		regs_intr;
1222  	u64				stack_user_size;
1223  
1224  	u64				stream_id;
1225  	u64				cgroup;
1226  	u64				addr;
1227  	u64				phys_addr;
1228  	u64				data_page_size;
1229  	u64				code_page_size;
1230  	u64				aux_size;
1231  } ____cacheline_aligned;
1232  
1233  /* default value for data source */
1234  #define PERF_MEM_NA (PERF_MEM_S(OP, NA)   |\
1235  		    PERF_MEM_S(LVL, NA)   |\
1236  		    PERF_MEM_S(SNOOP, NA) |\
1237  		    PERF_MEM_S(LOCK, NA)  |\
1238  		    PERF_MEM_S(TLB, NA)   |\
1239  		    PERF_MEM_S(LVLNUM, NA))
1240  
perf_sample_data_init(struct perf_sample_data * data,u64 addr,u64 period)1241  static inline void perf_sample_data_init(struct perf_sample_data *data,
1242  					 u64 addr, u64 period)
1243  {
1244  	/* remaining struct members initialized in perf_prepare_sample() */
1245  	data->sample_flags = PERF_SAMPLE_PERIOD;
1246  	data->period = period;
1247  	data->dyn_size = 0;
1248  
1249  	if (addr) {
1250  		data->addr = addr;
1251  		data->sample_flags |= PERF_SAMPLE_ADDR;
1252  	}
1253  }
1254  
perf_sample_save_callchain(struct perf_sample_data * data,struct perf_event * event,struct pt_regs * regs)1255  static inline void perf_sample_save_callchain(struct perf_sample_data *data,
1256  					      struct perf_event *event,
1257  					      struct pt_regs *regs)
1258  {
1259  	int size = 1;
1260  
1261  	data->callchain = perf_callchain(event, regs);
1262  	size += data->callchain->nr;
1263  
1264  	data->dyn_size += size * sizeof(u64);
1265  	data->sample_flags |= PERF_SAMPLE_CALLCHAIN;
1266  }
1267  
perf_sample_save_raw_data(struct perf_sample_data * data,struct perf_raw_record * raw)1268  static inline void perf_sample_save_raw_data(struct perf_sample_data *data,
1269  					     struct perf_raw_record *raw)
1270  {
1271  	struct perf_raw_frag *frag = &raw->frag;
1272  	u32 sum = 0;
1273  	int size;
1274  
1275  	do {
1276  		sum += frag->size;
1277  		if (perf_raw_frag_last(frag))
1278  			break;
1279  		frag = frag->next;
1280  	} while (1);
1281  
1282  	size = round_up(sum + sizeof(u32), sizeof(u64));
1283  	raw->size = size - sizeof(u32);
1284  	frag->pad = raw->size - sum;
1285  
1286  	data->raw = raw;
1287  	data->dyn_size += size;
1288  	data->sample_flags |= PERF_SAMPLE_RAW;
1289  }
1290  
perf_sample_save_brstack(struct perf_sample_data * data,struct perf_event * event,struct perf_branch_stack * brs,u64 * brs_cntr)1291  static inline void perf_sample_save_brstack(struct perf_sample_data *data,
1292  					    struct perf_event *event,
1293  					    struct perf_branch_stack *brs,
1294  					    u64 *brs_cntr)
1295  {
1296  	int size = sizeof(u64); /* nr */
1297  
1298  	if (branch_sample_hw_index(event))
1299  		size += sizeof(u64);
1300  	size += brs->nr * sizeof(struct perf_branch_entry);
1301  
1302  	/*
1303  	 * The extension space for counters is appended after the
1304  	 * struct perf_branch_stack. It is used to store the occurrences
1305  	 * of events of each branch.
1306  	 */
1307  	if (brs_cntr)
1308  		size += brs->nr * sizeof(u64);
1309  
1310  	data->br_stack = brs;
1311  	data->br_stack_cntr = brs_cntr;
1312  	data->dyn_size += size;
1313  	data->sample_flags |= PERF_SAMPLE_BRANCH_STACK;
1314  }
1315  
perf_sample_data_size(struct perf_sample_data * data,struct perf_event * event)1316  static inline u32 perf_sample_data_size(struct perf_sample_data *data,
1317  					struct perf_event *event)
1318  {
1319  	u32 size = sizeof(struct perf_event_header);
1320  
1321  	size += event->header_size + event->id_header_size;
1322  	size += data->dyn_size;
1323  
1324  	return size;
1325  }
1326  
1327  /*
1328   * Clear all bitfields in the perf_branch_entry.
1329   * The to and from fields are not cleared because they are
1330   * systematically modified by caller.
1331   */
perf_clear_branch_entry_bitfields(struct perf_branch_entry * br)1332  static inline void perf_clear_branch_entry_bitfields(struct perf_branch_entry *br)
1333  {
1334  	br->mispred = 0;
1335  	br->predicted = 0;
1336  	br->in_tx = 0;
1337  	br->abort = 0;
1338  	br->cycles = 0;
1339  	br->type = 0;
1340  	br->spec = PERF_BR_SPEC_NA;
1341  	br->reserved = 0;
1342  }
1343  
1344  extern void perf_output_sample(struct perf_output_handle *handle,
1345  			       struct perf_event_header *header,
1346  			       struct perf_sample_data *data,
1347  			       struct perf_event *event);
1348  extern void perf_prepare_sample(struct perf_sample_data *data,
1349  				struct perf_event *event,
1350  				struct pt_regs *regs);
1351  extern void perf_prepare_header(struct perf_event_header *header,
1352  				struct perf_sample_data *data,
1353  				struct perf_event *event,
1354  				struct pt_regs *regs);
1355  
1356  extern int perf_event_overflow(struct perf_event *event,
1357  				 struct perf_sample_data *data,
1358  				 struct pt_regs *regs);
1359  
1360  extern void perf_event_output_forward(struct perf_event *event,
1361  				     struct perf_sample_data *data,
1362  				     struct pt_regs *regs);
1363  extern void perf_event_output_backward(struct perf_event *event,
1364  				       struct perf_sample_data *data,
1365  				       struct pt_regs *regs);
1366  extern int perf_event_output(struct perf_event *event,
1367  			     struct perf_sample_data *data,
1368  			     struct pt_regs *regs);
1369  
1370  static inline bool
is_default_overflow_handler(struct perf_event * event)1371  is_default_overflow_handler(struct perf_event *event)
1372  {
1373  	perf_overflow_handler_t overflow_handler = event->overflow_handler;
1374  
1375  	if (likely(overflow_handler == perf_event_output_forward))
1376  		return true;
1377  	if (unlikely(overflow_handler == perf_event_output_backward))
1378  		return true;
1379  	return false;
1380  }
1381  
1382  extern void
1383  perf_event_header__init_id(struct perf_event_header *header,
1384  			   struct perf_sample_data *data,
1385  			   struct perf_event *event);
1386  extern void
1387  perf_event__output_id_sample(struct perf_event *event,
1388  			     struct perf_output_handle *handle,
1389  			     struct perf_sample_data *sample);
1390  
1391  extern void
1392  perf_log_lost_samples(struct perf_event *event, u64 lost);
1393  
event_has_any_exclude_flag(struct perf_event * event)1394  static inline bool event_has_any_exclude_flag(struct perf_event *event)
1395  {
1396  	struct perf_event_attr *attr = &event->attr;
1397  
1398  	return attr->exclude_idle || attr->exclude_user ||
1399  	       attr->exclude_kernel || attr->exclude_hv ||
1400  	       attr->exclude_guest || attr->exclude_host;
1401  }
1402  
is_sampling_event(struct perf_event * event)1403  static inline bool is_sampling_event(struct perf_event *event)
1404  {
1405  	return event->attr.sample_period != 0;
1406  }
1407  
1408  /*
1409   * Return 1 for a software event, 0 for a hardware event
1410   */
is_software_event(struct perf_event * event)1411  static inline int is_software_event(struct perf_event *event)
1412  {
1413  	return event->event_caps & PERF_EV_CAP_SOFTWARE;
1414  }
1415  
1416  /*
1417   * Return 1 for event in sw context, 0 for event in hw context
1418   */
in_software_context(struct perf_event * event)1419  static inline int in_software_context(struct perf_event *event)
1420  {
1421  	return event->pmu_ctx->pmu->task_ctx_nr == perf_sw_context;
1422  }
1423  
is_exclusive_pmu(struct pmu * pmu)1424  static inline int is_exclusive_pmu(struct pmu *pmu)
1425  {
1426  	return pmu->capabilities & PERF_PMU_CAP_EXCLUSIVE;
1427  }
1428  
1429  extern struct static_key perf_swevent_enabled[PERF_COUNT_SW_MAX];
1430  
1431  extern void ___perf_sw_event(u32, u64, struct pt_regs *, u64);
1432  extern void __perf_sw_event(u32, u64, struct pt_regs *, u64);
1433  
1434  #ifndef perf_arch_fetch_caller_regs
perf_arch_fetch_caller_regs(struct pt_regs * regs,unsigned long ip)1435  static inline void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip) { }
1436  #endif
1437  
1438  /*
1439   * When generating a perf sample in-line, instead of from an interrupt /
1440   * exception, we lack a pt_regs. This is typically used from software events
1441   * like: SW_CONTEXT_SWITCHES, SW_MIGRATIONS and the tie-in with tracepoints.
1442   *
1443   * We typically don't need a full set, but (for x86) do require:
1444   * - ip for PERF_SAMPLE_IP
1445   * - cs for user_mode() tests
1446   * - sp for PERF_SAMPLE_CALLCHAIN
1447   * - eflags for MISC bits and CALLCHAIN (see: perf_hw_regs())
1448   *
1449   * NOTE: assumes @regs is otherwise already 0 filled; this is important for
1450   * things like PERF_SAMPLE_REGS_INTR.
1451   */
perf_fetch_caller_regs(struct pt_regs * regs)1452  static inline void perf_fetch_caller_regs(struct pt_regs *regs)
1453  {
1454  	perf_arch_fetch_caller_regs(regs, CALLER_ADDR0);
1455  }
1456  
1457  static __always_inline void
perf_sw_event(u32 event_id,u64 nr,struct pt_regs * regs,u64 addr)1458  perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr)
1459  {
1460  	if (static_key_false(&perf_swevent_enabled[event_id]))
1461  		__perf_sw_event(event_id, nr, regs, addr);
1462  }
1463  
1464  DECLARE_PER_CPU(struct pt_regs, __perf_regs[4]);
1465  
1466  /*
1467   * 'Special' version for the scheduler, it hard assumes no recursion,
1468   * which is guaranteed by us not actually scheduling inside other swevents
1469   * because those disable preemption.
1470   */
__perf_sw_event_sched(u32 event_id,u64 nr,u64 addr)1471  static __always_inline void __perf_sw_event_sched(u32 event_id, u64 nr, u64 addr)
1472  {
1473  	struct pt_regs *regs = this_cpu_ptr(&__perf_regs[0]);
1474  
1475  	perf_fetch_caller_regs(regs);
1476  	___perf_sw_event(event_id, nr, regs, addr);
1477  }
1478  
1479  extern struct static_key_false perf_sched_events;
1480  
__perf_sw_enabled(int swevt)1481  static __always_inline bool __perf_sw_enabled(int swevt)
1482  {
1483  	return static_key_false(&perf_swevent_enabled[swevt]);
1484  }
1485  
perf_event_task_migrate(struct task_struct * task)1486  static inline void perf_event_task_migrate(struct task_struct *task)
1487  {
1488  	if (__perf_sw_enabled(PERF_COUNT_SW_CPU_MIGRATIONS))
1489  		task->sched_migrated = 1;
1490  }
1491  
perf_event_task_sched_in(struct task_struct * prev,struct task_struct * task)1492  static inline void perf_event_task_sched_in(struct task_struct *prev,
1493  					    struct task_struct *task)
1494  {
1495  	if (static_branch_unlikely(&perf_sched_events))
1496  		__perf_event_task_sched_in(prev, task);
1497  
1498  	if (__perf_sw_enabled(PERF_COUNT_SW_CPU_MIGRATIONS) &&
1499  	    task->sched_migrated) {
1500  		__perf_sw_event_sched(PERF_COUNT_SW_CPU_MIGRATIONS, 1, 0);
1501  		task->sched_migrated = 0;
1502  	}
1503  }
1504  
perf_event_task_sched_out(struct task_struct * prev,struct task_struct * next)1505  static inline void perf_event_task_sched_out(struct task_struct *prev,
1506  					     struct task_struct *next)
1507  {
1508  	if (__perf_sw_enabled(PERF_COUNT_SW_CONTEXT_SWITCHES))
1509  		__perf_sw_event_sched(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 0);
1510  
1511  #ifdef CONFIG_CGROUP_PERF
1512  	if (__perf_sw_enabled(PERF_COUNT_SW_CGROUP_SWITCHES) &&
1513  	    perf_cgroup_from_task(prev, NULL) !=
1514  	    perf_cgroup_from_task(next, NULL))
1515  		__perf_sw_event_sched(PERF_COUNT_SW_CGROUP_SWITCHES, 1, 0);
1516  #endif
1517  
1518  	if (static_branch_unlikely(&perf_sched_events))
1519  		__perf_event_task_sched_out(prev, next);
1520  }
1521  
1522  extern void perf_event_mmap(struct vm_area_struct *vma);
1523  
1524  extern void perf_event_ksymbol(u16 ksym_type, u64 addr, u32 len,
1525  			       bool unregister, const char *sym);
1526  extern void perf_event_bpf_event(struct bpf_prog *prog,
1527  				 enum perf_bpf_event_type type,
1528  				 u16 flags);
1529  
1530  #ifdef CONFIG_GUEST_PERF_EVENTS
1531  extern struct perf_guest_info_callbacks __rcu *perf_guest_cbs;
1532  
1533  DECLARE_STATIC_CALL(__perf_guest_state, *perf_guest_cbs->state);
1534  DECLARE_STATIC_CALL(__perf_guest_get_ip, *perf_guest_cbs->get_ip);
1535  DECLARE_STATIC_CALL(__perf_guest_handle_intel_pt_intr, *perf_guest_cbs->handle_intel_pt_intr);
1536  
perf_guest_state(void)1537  static inline unsigned int perf_guest_state(void)
1538  {
1539  	return static_call(__perf_guest_state)();
1540  }
perf_guest_get_ip(void)1541  static inline unsigned long perf_guest_get_ip(void)
1542  {
1543  	return static_call(__perf_guest_get_ip)();
1544  }
perf_guest_handle_intel_pt_intr(void)1545  static inline unsigned int perf_guest_handle_intel_pt_intr(void)
1546  {
1547  	return static_call(__perf_guest_handle_intel_pt_intr)();
1548  }
1549  extern void perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *cbs);
1550  extern void perf_unregister_guest_info_callbacks(struct perf_guest_info_callbacks *cbs);
1551  #else
perf_guest_state(void)1552  static inline unsigned int perf_guest_state(void)		 { return 0; }
perf_guest_get_ip(void)1553  static inline unsigned long perf_guest_get_ip(void)		 { return 0; }
perf_guest_handle_intel_pt_intr(void)1554  static inline unsigned int perf_guest_handle_intel_pt_intr(void) { return 0; }
1555  #endif /* CONFIG_GUEST_PERF_EVENTS */
1556  
1557  extern void perf_event_exec(void);
1558  extern void perf_event_comm(struct task_struct *tsk, bool exec);
1559  extern void perf_event_namespaces(struct task_struct *tsk);
1560  extern void perf_event_fork(struct task_struct *tsk);
1561  extern void perf_event_text_poke(const void *addr,
1562  				 const void *old_bytes, size_t old_len,
1563  				 const void *new_bytes, size_t new_len);
1564  
1565  /* Callchains */
1566  DECLARE_PER_CPU(struct perf_callchain_entry, perf_callchain_entry);
1567  
1568  extern void perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs);
1569  extern void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs);
1570  extern struct perf_callchain_entry *
1571  get_perf_callchain(struct pt_regs *regs, u32 init_nr, bool kernel, bool user,
1572  		   u32 max_stack, bool crosstask, bool add_mark);
1573  extern int get_callchain_buffers(int max_stack);
1574  extern void put_callchain_buffers(void);
1575  extern struct perf_callchain_entry *get_callchain_entry(int *rctx);
1576  extern void put_callchain_entry(int rctx);
1577  
1578  extern int sysctl_perf_event_max_stack;
1579  extern int sysctl_perf_event_max_contexts_per_stack;
1580  
perf_callchain_store_context(struct perf_callchain_entry_ctx * ctx,u64 ip)1581  static inline int perf_callchain_store_context(struct perf_callchain_entry_ctx *ctx, u64 ip)
1582  {
1583  	if (ctx->contexts < sysctl_perf_event_max_contexts_per_stack) {
1584  		struct perf_callchain_entry *entry = ctx->entry;
1585  		entry->ip[entry->nr++] = ip;
1586  		++ctx->contexts;
1587  		return 0;
1588  	} else {
1589  		ctx->contexts_maxed = true;
1590  		return -1; /* no more room, stop walking the stack */
1591  	}
1592  }
1593  
perf_callchain_store(struct perf_callchain_entry_ctx * ctx,u64 ip)1594  static inline int perf_callchain_store(struct perf_callchain_entry_ctx *ctx, u64 ip)
1595  {
1596  	if (ctx->nr < ctx->max_stack && !ctx->contexts_maxed) {
1597  		struct perf_callchain_entry *entry = ctx->entry;
1598  		entry->ip[entry->nr++] = ip;
1599  		++ctx->nr;
1600  		return 0;
1601  	} else {
1602  		return -1; /* no more room, stop walking the stack */
1603  	}
1604  }
1605  
1606  extern int sysctl_perf_event_paranoid;
1607  extern int sysctl_perf_event_mlock;
1608  extern int sysctl_perf_event_sample_rate;
1609  extern int sysctl_perf_cpu_time_max_percent;
1610  
1611  extern void perf_sample_event_took(u64 sample_len_ns);
1612  
1613  int perf_event_max_sample_rate_handler(const struct ctl_table *table, int write,
1614  		void *buffer, size_t *lenp, loff_t *ppos);
1615  int perf_cpu_time_max_percent_handler(const struct ctl_table *table, int write,
1616  		void *buffer, size_t *lenp, loff_t *ppos);
1617  int perf_event_max_stack_handler(const struct ctl_table *table, int write,
1618  		void *buffer, size_t *lenp, loff_t *ppos);
1619  
1620  /* Access to perf_event_open(2) syscall. */
1621  #define PERF_SECURITY_OPEN		0
1622  
1623  /* Finer grained perf_event_open(2) access control. */
1624  #define PERF_SECURITY_CPU		1
1625  #define PERF_SECURITY_KERNEL		2
1626  #define PERF_SECURITY_TRACEPOINT	3
1627  
perf_is_paranoid(void)1628  static inline int perf_is_paranoid(void)
1629  {
1630  	return sysctl_perf_event_paranoid > -1;
1631  }
1632  
1633  int perf_allow_kernel(struct perf_event_attr *attr);
1634  
perf_allow_cpu(struct perf_event_attr * attr)1635  static inline int perf_allow_cpu(struct perf_event_attr *attr)
1636  {
1637  	if (sysctl_perf_event_paranoid > 0 && !perfmon_capable())
1638  		return -EACCES;
1639  
1640  	return security_perf_event_open(attr, PERF_SECURITY_CPU);
1641  }
1642  
perf_allow_tracepoint(struct perf_event_attr * attr)1643  static inline int perf_allow_tracepoint(struct perf_event_attr *attr)
1644  {
1645  	if (sysctl_perf_event_paranoid > -1 && !perfmon_capable())
1646  		return -EPERM;
1647  
1648  	return security_perf_event_open(attr, PERF_SECURITY_TRACEPOINT);
1649  }
1650  
1651  extern void perf_event_init(void);
1652  extern void perf_tp_event(u16 event_type, u64 count, void *record,
1653  			  int entry_size, struct pt_regs *regs,
1654  			  struct hlist_head *head, int rctx,
1655  			  struct task_struct *task);
1656  extern void perf_bp_event(struct perf_event *event, void *data);
1657  
1658  #ifndef perf_misc_flags
1659  # define perf_misc_flags(regs) \
1660  		(user_mode(regs) ? PERF_RECORD_MISC_USER : PERF_RECORD_MISC_KERNEL)
1661  # define perf_instruction_pointer(regs)	instruction_pointer(regs)
1662  #endif
1663  #ifndef perf_arch_bpf_user_pt_regs
1664  # define perf_arch_bpf_user_pt_regs(regs) regs
1665  #endif
1666  
has_branch_stack(struct perf_event * event)1667  static inline bool has_branch_stack(struct perf_event *event)
1668  {
1669  	return event->attr.sample_type & PERF_SAMPLE_BRANCH_STACK;
1670  }
1671  
needs_branch_stack(struct perf_event * event)1672  static inline bool needs_branch_stack(struct perf_event *event)
1673  {
1674  	return event->attr.branch_sample_type != 0;
1675  }
1676  
has_aux(struct perf_event * event)1677  static inline bool has_aux(struct perf_event *event)
1678  {
1679  	return event->pmu->setup_aux;
1680  }
1681  
is_write_backward(struct perf_event * event)1682  static inline bool is_write_backward(struct perf_event *event)
1683  {
1684  	return !!event->attr.write_backward;
1685  }
1686  
has_addr_filter(struct perf_event * event)1687  static inline bool has_addr_filter(struct perf_event *event)
1688  {
1689  	return event->pmu->nr_addr_filters;
1690  }
1691  
1692  /*
1693   * An inherited event uses parent's filters
1694   */
1695  static inline struct perf_addr_filters_head *
perf_event_addr_filters(struct perf_event * event)1696  perf_event_addr_filters(struct perf_event *event)
1697  {
1698  	struct perf_addr_filters_head *ifh = &event->addr_filters;
1699  
1700  	if (event->parent)
1701  		ifh = &event->parent->addr_filters;
1702  
1703  	return ifh;
1704  }
1705  
perf_event_fasync(struct perf_event * event)1706  static inline struct fasync_struct **perf_event_fasync(struct perf_event *event)
1707  {
1708  	/* Only the parent has fasync state */
1709  	if (event->parent)
1710  		event = event->parent;
1711  	return &event->fasync;
1712  }
1713  
1714  extern void perf_event_addr_filters_sync(struct perf_event *event);
1715  extern void perf_report_aux_output_id(struct perf_event *event, u64 hw_id);
1716  
1717  extern int perf_output_begin(struct perf_output_handle *handle,
1718  			     struct perf_sample_data *data,
1719  			     struct perf_event *event, unsigned int size);
1720  extern int perf_output_begin_forward(struct perf_output_handle *handle,
1721  				     struct perf_sample_data *data,
1722  				     struct perf_event *event,
1723  				     unsigned int size);
1724  extern int perf_output_begin_backward(struct perf_output_handle *handle,
1725  				      struct perf_sample_data *data,
1726  				      struct perf_event *event,
1727  				      unsigned int size);
1728  
1729  extern void perf_output_end(struct perf_output_handle *handle);
1730  extern unsigned int perf_output_copy(struct perf_output_handle *handle,
1731  			     const void *buf, unsigned int len);
1732  extern unsigned int perf_output_skip(struct perf_output_handle *handle,
1733  				     unsigned int len);
1734  extern long perf_output_copy_aux(struct perf_output_handle *aux_handle,
1735  				 struct perf_output_handle *handle,
1736  				 unsigned long from, unsigned long to);
1737  extern int perf_swevent_get_recursion_context(void);
1738  extern void perf_swevent_put_recursion_context(int rctx);
1739  extern u64 perf_swevent_set_period(struct perf_event *event);
1740  extern void perf_event_enable(struct perf_event *event);
1741  extern void perf_event_disable(struct perf_event *event);
1742  extern void perf_event_disable_local(struct perf_event *event);
1743  extern void perf_event_disable_inatomic(struct perf_event *event);
1744  extern void perf_event_task_tick(void);
1745  extern int perf_event_account_interrupt(struct perf_event *event);
1746  extern int perf_event_period(struct perf_event *event, u64 value);
1747  extern u64 perf_event_pause(struct perf_event *event, bool reset);
1748  #else /* !CONFIG_PERF_EVENTS: */
1749  static inline void *
perf_aux_output_begin(struct perf_output_handle * handle,struct perf_event * event)1750  perf_aux_output_begin(struct perf_output_handle *handle,
1751  		      struct perf_event *event)				{ return NULL; }
1752  static inline void
perf_aux_output_end(struct perf_output_handle * handle,unsigned long size)1753  perf_aux_output_end(struct perf_output_handle *handle, unsigned long size)
1754  									{ }
1755  static inline int
perf_aux_output_skip(struct perf_output_handle * handle,unsigned long size)1756  perf_aux_output_skip(struct perf_output_handle *handle,
1757  		     unsigned long size)				{ return -EINVAL; }
1758  static inline void *
perf_get_aux(struct perf_output_handle * handle)1759  perf_get_aux(struct perf_output_handle *handle)				{ return NULL; }
1760  static inline void
perf_event_task_migrate(struct task_struct * task)1761  perf_event_task_migrate(struct task_struct *task)			{ }
1762  static inline void
perf_event_task_sched_in(struct task_struct * prev,struct task_struct * task)1763  perf_event_task_sched_in(struct task_struct *prev,
1764  			 struct task_struct *task)			{ }
1765  static inline void
perf_event_task_sched_out(struct task_struct * prev,struct task_struct * next)1766  perf_event_task_sched_out(struct task_struct *prev,
1767  			  struct task_struct *next)			{ }
perf_event_init_task(struct task_struct * child,u64 clone_flags)1768  static inline int perf_event_init_task(struct task_struct *child,
1769  				       u64 clone_flags)			{ return 0; }
perf_event_exit_task(struct task_struct * child)1770  static inline void perf_event_exit_task(struct task_struct *child)	{ }
perf_event_free_task(struct task_struct * task)1771  static inline void perf_event_free_task(struct task_struct *task)	{ }
perf_event_delayed_put(struct task_struct * task)1772  static inline void perf_event_delayed_put(struct task_struct *task)	{ }
perf_event_get(unsigned int fd)1773  static inline struct file *perf_event_get(unsigned int fd)	{ return ERR_PTR(-EINVAL); }
perf_get_event(struct file * file)1774  static inline const struct perf_event *perf_get_event(struct file *file)
1775  {
1776  	return ERR_PTR(-EINVAL);
1777  }
perf_event_attrs(struct perf_event * event)1778  static inline const struct perf_event_attr *perf_event_attrs(struct perf_event *event)
1779  {
1780  	return ERR_PTR(-EINVAL);
1781  }
perf_event_read_local(struct perf_event * event,u64 * value,u64 * enabled,u64 * running)1782  static inline int perf_event_read_local(struct perf_event *event, u64 *value,
1783  					u64 *enabled, u64 *running)
1784  {
1785  	return -EINVAL;
1786  }
perf_event_print_debug(void)1787  static inline void perf_event_print_debug(void)				{ }
perf_event_task_disable(void)1788  static inline int perf_event_task_disable(void)				{ return -EINVAL; }
perf_event_task_enable(void)1789  static inline int perf_event_task_enable(void)				{ return -EINVAL; }
perf_event_refresh(struct perf_event * event,int refresh)1790  static inline int perf_event_refresh(struct perf_event *event, int refresh)
1791  {
1792  	return -EINVAL;
1793  }
1794  
1795  static inline void
perf_sw_event(u32 event_id,u64 nr,struct pt_regs * regs,u64 addr)1796  perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr)	{ }
1797  static inline void
perf_bp_event(struct perf_event * event,void * data)1798  perf_bp_event(struct perf_event *event, void *data)			{ }
1799  
perf_event_mmap(struct vm_area_struct * vma)1800  static inline void perf_event_mmap(struct vm_area_struct *vma)		{ }
1801  
1802  typedef int (perf_ksymbol_get_name_f)(char *name, int name_len, void *data);
perf_event_ksymbol(u16 ksym_type,u64 addr,u32 len,bool unregister,const char * sym)1803  static inline void perf_event_ksymbol(u16 ksym_type, u64 addr, u32 len,
1804  				      bool unregister, const char *sym)	{ }
perf_event_bpf_event(struct bpf_prog * prog,enum perf_bpf_event_type type,u16 flags)1805  static inline void perf_event_bpf_event(struct bpf_prog *prog,
1806  					enum perf_bpf_event_type type,
1807  					u16 flags)			{ }
perf_event_exec(void)1808  static inline void perf_event_exec(void)				{ }
perf_event_comm(struct task_struct * tsk,bool exec)1809  static inline void perf_event_comm(struct task_struct *tsk, bool exec)	{ }
perf_event_namespaces(struct task_struct * tsk)1810  static inline void perf_event_namespaces(struct task_struct *tsk)	{ }
perf_event_fork(struct task_struct * tsk)1811  static inline void perf_event_fork(struct task_struct *tsk)		{ }
perf_event_text_poke(const void * addr,const void * old_bytes,size_t old_len,const void * new_bytes,size_t new_len)1812  static inline void perf_event_text_poke(const void *addr,
1813  					const void *old_bytes,
1814  					size_t old_len,
1815  					const void *new_bytes,
1816  					size_t new_len)			{ }
perf_event_init(void)1817  static inline void perf_event_init(void)				{ }
perf_swevent_get_recursion_context(void)1818  static inline int  perf_swevent_get_recursion_context(void)		{ return -1; }
perf_swevent_put_recursion_context(int rctx)1819  static inline void perf_swevent_put_recursion_context(int rctx)		{ }
perf_swevent_set_period(struct perf_event * event)1820  static inline u64 perf_swevent_set_period(struct perf_event *event)	{ return 0; }
perf_event_enable(struct perf_event * event)1821  static inline void perf_event_enable(struct perf_event *event)		{ }
perf_event_disable(struct perf_event * event)1822  static inline void perf_event_disable(struct perf_event *event)		{ }
__perf_event_disable(void * info)1823  static inline int __perf_event_disable(void *info)			{ return -1; }
perf_event_task_tick(void)1824  static inline void perf_event_task_tick(void)				{ }
perf_event_release_kernel(struct perf_event * event)1825  static inline int perf_event_release_kernel(struct perf_event *event)	{ return 0; }
perf_event_period(struct perf_event * event,u64 value)1826  static inline int perf_event_period(struct perf_event *event, u64 value)
1827  {
1828  	return -EINVAL;
1829  }
perf_event_pause(struct perf_event * event,bool reset)1830  static inline u64 perf_event_pause(struct perf_event *event, bool reset)
1831  {
1832  	return 0;
1833  }
1834  #endif
1835  
1836  #if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_INTEL)
1837  extern void perf_restore_debug_store(void);
1838  #else
perf_restore_debug_store(void)1839  static inline void perf_restore_debug_store(void)			{ }
1840  #endif
1841  
1842  #define perf_output_put(handle, x) perf_output_copy((handle), &(x), sizeof(x))
1843  
1844  struct perf_pmu_events_attr {
1845  	struct device_attribute attr;
1846  	u64 id;
1847  	const char *event_str;
1848  };
1849  
1850  struct perf_pmu_events_ht_attr {
1851  	struct device_attribute			attr;
1852  	u64					id;
1853  	const char				*event_str_ht;
1854  	const char				*event_str_noht;
1855  };
1856  
1857  struct perf_pmu_events_hybrid_attr {
1858  	struct device_attribute			attr;
1859  	u64					id;
1860  	const char				*event_str;
1861  	u64					pmu_type;
1862  };
1863  
1864  struct perf_pmu_format_hybrid_attr {
1865  	struct device_attribute			attr;
1866  	u64					pmu_type;
1867  };
1868  
1869  ssize_t perf_event_sysfs_show(struct device *dev, struct device_attribute *attr,
1870  			      char *page);
1871  
1872  #define PMU_EVENT_ATTR(_name, _var, _id, _show)				\
1873  static struct perf_pmu_events_attr _var = {				\
1874  	.attr = __ATTR(_name, 0444, _show, NULL),			\
1875  	.id   =  _id,							\
1876  };
1877  
1878  #define PMU_EVENT_ATTR_STRING(_name, _var, _str)			    \
1879  static struct perf_pmu_events_attr _var = {				    \
1880  	.attr		= __ATTR(_name, 0444, perf_event_sysfs_show, NULL), \
1881  	.id		= 0,						    \
1882  	.event_str	= _str,						    \
1883  };
1884  
1885  #define PMU_EVENT_ATTR_ID(_name, _show, _id)				\
1886  	(&((struct perf_pmu_events_attr[]) {				\
1887  		{ .attr = __ATTR(_name, 0444, _show, NULL),		\
1888  		  .id = _id, }						\
1889  	})[0].attr.attr)
1890  
1891  #define PMU_FORMAT_ATTR_SHOW(_name, _format)				\
1892  static ssize_t								\
1893  _name##_show(struct device *dev,					\
1894  			       struct device_attribute *attr,		\
1895  			       char *page)				\
1896  {									\
1897  	BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE);			\
1898  	return sprintf(page, _format "\n");				\
1899  }									\
1900  
1901  #define PMU_FORMAT_ATTR(_name, _format)					\
1902  	PMU_FORMAT_ATTR_SHOW(_name, _format)				\
1903  									\
1904  static struct device_attribute format_attr_##_name = __ATTR_RO(_name)
1905  
1906  /* Performance counter hotplug functions */
1907  #ifdef CONFIG_PERF_EVENTS
1908  int perf_event_init_cpu(unsigned int cpu);
1909  int perf_event_exit_cpu(unsigned int cpu);
1910  #else
1911  #define perf_event_init_cpu	NULL
1912  #define perf_event_exit_cpu	NULL
1913  #endif
1914  
1915  extern void arch_perf_update_userpage(struct perf_event *event,
1916  				      struct perf_event_mmap_page *userpg,
1917  				      u64 now);
1918  
1919  /*
1920   * Snapshot branch stack on software events.
1921   *
1922   * Branch stack can be very useful in understanding software events. For
1923   * example, when a long function, e.g. sys_perf_event_open, returns an
1924   * errno, it is not obvious why the function failed. Branch stack could
1925   * provide very helpful information in this type of scenarios.
1926   *
1927   * On software event, it is necessary to stop the hardware branch recorder
1928   * fast. Otherwise, the hardware register/buffer will be flushed with
1929   * entries of the triggering event. Therefore, static call is used to
1930   * stop the hardware recorder.
1931   */
1932  
1933  /*
1934   * cnt is the number of entries allocated for entries.
1935   * Return number of entries copied to .
1936   */
1937  typedef int (perf_snapshot_branch_stack_t)(struct perf_branch_entry *entries,
1938  					   unsigned int cnt);
1939  DECLARE_STATIC_CALL(perf_snapshot_branch_stack, perf_snapshot_branch_stack_t);
1940  
1941  #ifndef PERF_NEEDS_LOPWR_CB
perf_lopwr_cb(bool mode)1942  static inline void perf_lopwr_cb(bool mode)
1943  {
1944  }
1945  #endif
1946  
1947  #endif /* _LINUX_PERF_EVENT_H */
1948