From: Ingo Molnar <mingo@elte.hu>
Date: Tue, 31 Mar 2009 15:46:40 +0000 (+0200)
Subject: Merge branches 'tracing/docs', 'tracing/filters', 'tracing/ftrace', 'tracing/kprobes... 
X-Git-Tag: firefly_0821_release~14577^2~13
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=8b54e45b0005875f59cb8b1c44d429a161d5f245;p=firefly-linux-kernel-4.4.55.git

Merge branches 'tracing/docs', 'tracing/filters', 'tracing/ftrace', 'tracing/kprobes', 'tracing/blktrace-v2' and 'tracing/textedit' into tracing/core-v2
---

8b54e45b0005875f59cb8b1c44d429a161d5f245
diff --cc kernel/trace/trace.h
index 7cfb741be200,90a848debcba,d7410bbb9a80,7cfb741be200,38276d1638e3,7cfb741be200..cb0ce3fc36d3
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@@@@@@ -775,24 -777,80 -776,24 -775,24 -777,18 -775,24 +778,80 @@@@@@@ enum 
      	TRACE_EVENT_TYPE_RAW		= 2,
      };
      
+ ++++struct ftrace_event_field {
+ ++++	struct list_head	link;
+ ++++	char			*name;
+ ++++	char			*type;
+ ++++	int			offset;
+ ++++	int			size;
+ ++++};
+ ++++
      struct ftrace_event_call {
- ----	char		*name;
- ----	char		*system;
- ----	struct dentry	*dir;
- ----	int		enabled;
- ----	int		(*regfunc)(void);
- ----	void		(*unregfunc)(void);
- ----	int		id;
- ----	int		(*raw_init)(void);
- ----	int		(*show_format)(struct trace_seq *s);
+ ++++	char			*name;
+ ++++	char			*system;
+ ++++	struct dentry		*dir;
+ ++++	int			enabled;
+ ++++	int			(*regfunc)(void);
+ ++++	void			(*unregfunc)(void);
+ ++++	int			id;
+ ++++	int			(*raw_init)(void);
+ ++++	int			(*show_format)(struct trace_seq *s);
+ ++++	int			(*define_fields)(void);
+ ++++	struct list_head	fields;
+ ++++	struct filter_pred	**preds;
    + 
    + #ifdef CONFIG_EVENT_PROFILE
    + 	atomic_t	profile_count;
    + 	int		(*profile_enable)(struct ftrace_event_call *);
    + 	void		(*profile_disable)(struct ftrace_event_call *);
    + #endif
      };
      
+ ++++struct event_subsystem {
+ ++++	struct list_head	list;
+ ++++	const char		*name;
+ ++++	struct dentry		*entry;
+ ++++	struct filter_pred	**preds;
+ ++++};
+ ++++
+ ++++#define events_for_each(event)						\
+ ++++	for (event = __start_ftrace_events;				\
+ ++++	     (unsigned long)event < (unsigned long)__stop_ftrace_events; \
+ ++++	     event++)
+ ++++
+ ++++#define MAX_FILTER_PRED 8
+ ++++
+ ++++struct filter_pred;
+ ++++
+ ++++typedef int (*filter_pred_fn_t) (struct filter_pred *pred, void *event);
+ ++++
+ ++++struct filter_pred {
+ ++++	filter_pred_fn_t fn;
+ ++++	u64 val;
+ ++++	char *str_val;
+ ++++	int str_len;
+ ++++	char *field_name;
+ ++++	int offset;
+ ++++	int not;
+ ++++	int or;
+ ++++	int compound;
+ ++++	int clear;
+ ++++};
+ ++++
+ ++++int trace_define_field(struct ftrace_event_call *call, char *type,
+ ++++		       char *name, int offset, int size);
+ ++++extern void filter_free_pred(struct filter_pred *pred);
+ ++++extern void filter_print_preds(struct filter_pred **preds,
+ ++++			       struct trace_seq *s);
+ ++++extern int filter_parse(char **pbuf, struct filter_pred *pred);
+ ++++extern int filter_add_pred(struct ftrace_event_call *call,
+ ++++			   struct filter_pred *pred);
+ ++++extern void filter_free_preds(struct ftrace_event_call *call);
+ ++++extern int filter_match_preds(struct ftrace_event_call *call, void *rec);
+ ++++extern void filter_free_subsystem_preds(struct event_subsystem *system);
+ ++++extern int filter_add_subsystem_pred(struct event_subsystem *system,
+ ++++				     struct filter_pred *pred);
+ ++++
      void event_trace_printk(unsigned long ip, const char *fmt, ...);
      extern struct ftrace_event_call __start_ftrace_events[];
      extern struct ftrace_event_call __stop_ftrace_events[];