• Kalesh Singh's avatar
    tracing: Fix operator precedence for hist triggers expression · 9710b2f3
    Kalesh Singh authored
    The current histogram expression evaluation logic evaluates the
    expression from right to left. This can lead to incorrect results
    if the operations are not associative (as is the case for subtraction
    and, the now added, division operators).
    	e.g. 16-8-4-2 should be 2 not 10 --> 16-8-4-2 = ((16-8)-4)-2
    	     64/8/4/2 should be 1 not 16 --> 64/8/4/2 = ((64/8)/4)/2
    
    Division and multiplication are currently limited to single operation
    expression due to operator precedence support not yet implemented.
    
    Rework the expression parsing to support the correct evaluation of
    expressions containing operators of different precedences; and fix
    the associativity error by evaluating expressions with operators of
    the same precedence from left to right.
    
    Examples:
            (1) echo 'hist:keys=common_pid:a=8,b=4,c=2,d=1,w=$a-$b-$c-$d' \
                      >> event/trigger
            (2) echo 'hist:keys=common_pid:x=$a/$b/3/2' >> event/trigger
            (3) echo 'hist:keys=common_pid:y=$a+10/$c*1024' >> event/trigger
            (4) echo 'hist:keys=common_pid:z=$a/$b+$c*$d' >> event/trigger
    
    Link: https://lkml.kernel.org/r/20211025200852.3002369-4-kaleshsingh@google.comSigned-off-by: default avatarKalesh Singh <kaleshsingh@google.com>
    Reviewed-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    9710b2f3
trace_events_hist.c 152 KB