• Paul Mackerras's avatar
    perf_counter tools: Rework event string parsing/syntax · 61c45981
    Paul Mackerras authored
    This reworks the parser for event descriptors to make it more
    consistent in what it accepts.  It is now structured as a
    recursive descent parser for the following grammar:
    
    events		::= event ( ("," | space) space* event )*
    event		::= ( raw_event | numeric_event | symbolic_event |
    		      generic_hw_event ) [ event_modifier ]
    raw_event	::= "r" hex_number
    numeric_event	::= number ":" number
    number		::= decimal_number | "0x" hex_number | "0" octal_number
    symbolic_event	::= string_from_event_symbols_array
    generic_hw_event::= cache_type ( "-" ( cache_op | cache_result ) )*
    event_modifier	::= ":" ( "u" | "k" | "h" )+
    
    with the extra restriction that you can have at most one
    cache_op and at most one cache_result.
    
    We pass the current string pointer by reference (i.e. as a
    const char **) to the various parsing functions so that they
    can advance the pointer to indicate how much they consumed.
    They return 0 if they didn't recognize the thing at the pointer
    or 1 if they did (and advance the pointer past it).
    
    This also fixes parse_aliases to take the longest matching
    alias from the table, not the first one.  Otherwise "l1-data"
    would match the "l1-d" alias and the "ata" would not be
    consumed.
    
    This allows event modifiers indicating what processor modes to
    count in to be applied to any event, not just numeric events,
    and adds a ":h" modifier to indicate counting in hypervisor
    mode.  Specifying ":u" now sets both exclude_kernel and
    exclude_hv, and so on.  Multiple modes can be specified, e.g.
    ":uk" will count in user or hypervisor mode (i.e. only
    exclude_kernel will be set).
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    LKML-Reference: <19018.53826.843815.189847@cargo.ozlabs.ibm.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    61c45981
parse-events.c 10 KB