Merge branch 'next/drivers' into HEAD
[deliverable/linux.git] / tools / perf / util / parse-events.l
index 2c0d006d43db1e5766d48bfc431e076a52ec32b3..c87efc12579defb039c1782452f45ba556d23208 100644 (file)
@@ -70,6 +70,12 @@ static int term(yyscan_t scanner, int type)
 %}
 
 %x mem
+%s config
+%x event
+
+group          [^,{}/]*[{][^}]*[}][^,{}/]*
+event_pmu      [^,{}/]+[/][^/]*[/][^,{}/]*
+event          [^,{}/]+
 
 num_dec                [0-9]+
 num_hex                0x[a-fA-F0-9]+
@@ -84,7 +90,13 @@ modifier_bp  [rwx]{1,3}
        {
                int start_token;
 
-               start_token = (int) parse_events_get_extra(yyscanner);
+               start_token = parse_events_get_extra(yyscanner);
+
+               if (start_token == PE_START_TERMS)
+                       BEGIN(config);
+               else if (start_token == PE_START_EVENTS)
+                       BEGIN(event);
+
                if (start_token) {
                        parse_events_set_extra(NULL, yyscanner);
                        return start_token;
@@ -92,6 +104,26 @@ modifier_bp [rwx]{1,3}
          }
 %}
 
+<event>{
+
+{group}                {
+                       BEGIN(INITIAL); yyless(0);
+               }
+
+{event_pmu}    |
+{event}                {
+                       str(yyscanner, PE_EVENT_NAME);
+                       BEGIN(INITIAL); yyless(0);
+                       return PE_EVENT_NAME;
+               }
+
+.              |
+<<EOF>>                {
+                       BEGIN(INITIAL); yyless(0);
+               }
+
+}
+
 cpu-cycles|cycles                              { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES); }
 stalled-cycles-frontend|idle-cycles-frontend   { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND); }
 stalled-cycles-backend|idle-cycles-backend     { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_BACKEND); }
@@ -127,18 +159,16 @@ speculative-read|speculative-load |
 refs|Reference|ops|access              |
 misses|miss                            { return str(yyscanner, PE_NAME_CACHE_OP_RESULT); }
 
-       /*
-        * These are event config hardcoded term names to be specified
-        * within xxx/.../ syntax. So far we dont clash with other names,
-        * so we can put them here directly. In case the we have a conflict
-        * in future, this needs to go into '//' condition block.
-        */
+<config>{
 config                 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG); }
 config1                        { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG1); }
 config2                        { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG2); }
 name                   { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NAME); }
 period                 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); }
 branch_type            { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); }
+,                      { return ','; }
+"/"                    { BEGIN(INITIAL); return '/'; }
+}
 
 mem:                   { BEGIN(mem); return PE_PREFIX_MEM; }
 r{num_raw_hex}         { return raw(yyscanner); }
@@ -147,11 +177,11 @@ r{num_raw_hex}            { return raw(yyscanner); }
 
 {modifier_event}       { return str(yyscanner, PE_MODIFIER_EVENT); }
 {name}                 { return str(yyscanner, PE_NAME); }
-"/"                    { return '/'; }
+"/"                    { BEGIN(config); return '/'; }
 -                      { return '-'; }
-,                      { return ','; }
+,                      { BEGIN(event); return ','; }
 :                      { return ':'; }
-"{"                    { return '{'; }
+"{"                    { BEGIN(event); return '{'; }
 "}"                    { return '}'; }
 =                      { return '='; }
 \n                     { }
@@ -177,7 +207,7 @@ r{num_raw_hex}              { return raw(yyscanner); }
 
 %%
 
-int parse_events_wrap(void *scanner __used)
+int parse_events_wrap(void *scanner __maybe_unused)
 {
        return 1;
 }
This page took 0.04995 seconds and 5 git commands to generate.