Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.17.
  1%option prefix="perf_bpf_filter_"
  2%option noyywrap
  3
  4%{
  5#include <stdio.h>
  6#include <stdlib.h>
  7#include <linux/perf_event.h>
  8
  9#include "bpf-filter.h"
 10#include "bpf-filter-bison.h"
 11
 12extern int perf_bpf_filter_needs_path;
 13
 14static int sample(enum perf_bpf_filter_term term)
 15{
 16	perf_bpf_filter_needs_path = 0;
 17	perf_bpf_filter_lval.sample.term = term;
 18	perf_bpf_filter_lval.sample.part = 0;
 19	return BFT_SAMPLE;
 20}
 21
 22static int sample_part(enum perf_bpf_filter_term term, int part)
 23{
 24	perf_bpf_filter_needs_path = 0;
 25	perf_bpf_filter_lval.sample.term = term;
 26	perf_bpf_filter_lval.sample.part = part;
 27	return BFT_SAMPLE;
 28}
 29
 30static int sample_path(enum perf_bpf_filter_term term)
 31{
 32	perf_bpf_filter_needs_path = 1;
 33	perf_bpf_filter_lval.sample.term = term;
 34	perf_bpf_filter_lval.sample.part = 0;
 35	return BFT_SAMPLE_PATH;
 36}
 37
 38static int operator(enum perf_bpf_filter_op op)
 39{
 40	perf_bpf_filter_lval.op = op;
 41	return BFT_OP;
 42}
 43
 44static int value(int base)
 45{
 46	long num;
 47
 48	errno = 0;
 49	num = strtoul(perf_bpf_filter_text, NULL, base);
 50	if (errno)
 51		return BFT_ERROR;
 52
 53	perf_bpf_filter_lval.num = num;
 54	return BFT_NUM;
 55}
 56
 57static int constant(int val)
 58{
 59	perf_bpf_filter_lval.num = val;
 60	return BFT_NUM;
 61}
 62
 63static int path_or_error(void)
 64{
 65	if (!perf_bpf_filter_needs_path) {
 66		printf("perf_bpf_filter: Error: Unexpected item: %s\n",
 67			perf_bpf_filter_text);
 68		return BFT_ERROR;
 69	}
 70	perf_bpf_filter_lval.path = perf_bpf_filter_text;
 71	return BFT_PATH;
 72}
 73
 74%}
 75
 76num_dec		[0-9]+
 77num_hex		0[Xx][0-9a-fA-F]+
 78space		[ \t]+
 79path		[^ \t\n]+
 80ident		[_a-zA-Z][_a-zA-Z0-9]+
 81
 82%%
 83
 84{num_dec}	{ return value(10); }
 85{num_hex}	{ return value(16); }
 86{space}		{ }
 87
 88ip		{ return sample(PBF_TERM_IP); }
 89id		{ return sample(PBF_TERM_ID); }
 90tid		{ return sample(PBF_TERM_TID); }
 91pid		{ return sample_part(PBF_TERM_TID, 1); }
 92cpu		{ return sample(PBF_TERM_CPU); }
 93time		{ return sample(PBF_TERM_TIME); }
 94addr		{ return sample(PBF_TERM_ADDR); }
 95period		{ return sample(PBF_TERM_PERIOD); }
 96txn		{ return sample(PBF_TERM_TRANSACTION); }
 97weight		{ return sample(PBF_TERM_WEIGHT); }
 98weight1		{ return sample_part(PBF_TERM_WEIGHT_STRUCT, 1); }
 99weight2		{ return sample_part(PBF_TERM_WEIGHT_STRUCT, 2); }
100weight3		{ return sample_part(PBF_TERM_WEIGHT_STRUCT, 3); }
101ins_lat		{ return sample_part(PBF_TERM_WEIGHT_STRUCT, 2); } /* alias for weight2 */
102p_stage_cyc	{ return sample_part(PBF_TERM_WEIGHT_STRUCT, 3); } /* alias for weight3 */
103retire_lat	{ return sample_part(PBF_TERM_WEIGHT_STRUCT, 3); } /* alias for weight3 */
104phys_addr	{ return sample(PBF_TERM_PHYS_ADDR); }
105code_pgsz	{ return sample(PBF_TERM_CODE_PAGE_SIZE); }
106data_pgsz	{ return sample(PBF_TERM_DATA_PAGE_SIZE); }
107mem_op		{ return sample_part(PBF_TERM_DATA_SRC, 1); }
108mem_lvlnum	{ return sample_part(PBF_TERM_DATA_SRC, 2); }
109mem_lvl		{ return sample_part(PBF_TERM_DATA_SRC, 2); } /* alias for mem_lvlnum */
110mem_snoop	{ return sample_part(PBF_TERM_DATA_SRC, 3); } /* include snoopx */
111mem_remote	{ return sample_part(PBF_TERM_DATA_SRC, 4); }
112mem_lock	{ return sample_part(PBF_TERM_DATA_SRC, 5); }
113mem_dtlb	{ return sample_part(PBF_TERM_DATA_SRC, 6); }
114mem_blk		{ return sample_part(PBF_TERM_DATA_SRC, 7); }
115mem_hops	{ return sample_part(PBF_TERM_DATA_SRC, 8); }
116uid		{ return sample(PBF_TERM_UID); }
117gid		{ return sample(PBF_TERM_GID); }
118cgroup		{ return sample_path(PBF_TERM_CGROUP); }
119
120"=="		{ return operator(PBF_OP_EQ); }
121"!="		{ return operator(PBF_OP_NEQ); }
122">"		{ return operator(PBF_OP_GT); }
123"<"		{ return operator(PBF_OP_LT); }
124">="		{ return operator(PBF_OP_GE); }
125"<="		{ return operator(PBF_OP_LE); }
126"&"		{ return operator(PBF_OP_AND); }
127
128na		{ return constant(PERF_MEM_OP_NA); }
129load		{ return constant(PERF_MEM_OP_LOAD); }
130store		{ return constant(PERF_MEM_OP_STORE); }
131pfetch		{ return constant(PERF_MEM_OP_PFETCH); }
132exec		{ return constant(PERF_MEM_OP_EXEC); }
133
134l1		{ return constant(PERF_MEM_LVLNUM_L1); }
135l2		{ return constant(PERF_MEM_LVLNUM_L2); }
136l3		{ return constant(PERF_MEM_LVLNUM_L3); }
137l4		{ return constant(PERF_MEM_LVLNUM_L4); }
138cxl		{ return constant(PERF_MEM_LVLNUM_CXL); }
139io		{ return constant(PERF_MEM_LVLNUM_IO); }
140any_cache	{ return constant(PERF_MEM_LVLNUM_ANY_CACHE); }
141lfb		{ return constant(PERF_MEM_LVLNUM_LFB); }
142ram		{ return constant(PERF_MEM_LVLNUM_RAM); }
143pmem		{ return constant(PERF_MEM_LVLNUM_PMEM); }
144
145none		{ return constant(PERF_MEM_SNOOP_NONE); }
146hit		{ return constant(PERF_MEM_SNOOP_HIT); }
147miss		{ return constant(PERF_MEM_SNOOP_MISS); }
148hitm		{ return constant(PERF_MEM_SNOOP_HITM); }
149fwd		{ return constant(PERF_MEM_SNOOPX_FWD); }
150peer		{ return constant(PERF_MEM_SNOOPX_PEER); }
151
152remote		{ return constant(PERF_MEM_REMOTE_REMOTE); }
153
154locked		{ return constant(PERF_MEM_LOCK_LOCKED); }
155
156l1_hit		{ return constant(PERF_MEM_TLB_L1 | PERF_MEM_TLB_HIT); }
157l1_miss		{ return constant(PERF_MEM_TLB_L1 | PERF_MEM_TLB_MISS); }
158l2_hit		{ return constant(PERF_MEM_TLB_L2 | PERF_MEM_TLB_HIT); }
159l2_miss		{ return constant(PERF_MEM_TLB_L2 | PERF_MEM_TLB_MISS); }
160any_hit		{ return constant(PERF_MEM_TLB_HIT); }
161any_miss	{ return constant(PERF_MEM_TLB_MISS); }
162walk		{ return constant(PERF_MEM_TLB_WK); }
163os		{ return constant(PERF_MEM_TLB_OS); }
164fault		{ return constant(PERF_MEM_TLB_OS); } /* alias for os */
165
166by_data		{ return constant(PERF_MEM_BLK_DATA); }
167by_addr		{ return constant(PERF_MEM_BLK_ADDR); }
168
169hops0		{ return constant(PERF_MEM_HOPS_0); }
170hops1		{ return constant(PERF_MEM_HOPS_1); }
171hops2		{ return constant(PERF_MEM_HOPS_2); }
172hops3		{ return constant(PERF_MEM_HOPS_3); }
173
174","		{ return ','; }
175"||"		{ return BFT_LOGICAL_OR; }
176
177{path}		{ return path_or_error(); }
178
179%%