• Thomas Richter's avatar
    s390/pai: Fix multiple concurrent event installation · 21e87644
    Thomas Richter authored
    Two different events such as pai_crypto/KM_AES_128/ and
    pai_crypto/KM_AES_192/ can be installed multiple times on the same CPU
    and the events are executed concurrently:
    
      # perf stat -e pai_crypto/KM_AES_128/  -C0 -a -- sleep 5 &
      # sleep 2
      # perf stat -e pai_crypto/KM_AES_192/ -C0 -a -- true
    
    This results in the first event being installed two times with two seconds
    delay. The kernel does install the second event after the first
    event has been deleted and re-added, as can be seen in the traces:
    
     13:48:47.600350  paicrypt_start event 0x1007 (event KM_AES_128)
     13:48:49.599359  paicrypt_stop event 0x1007  (event KM_AES_128)
     13:48:49.599198  paicrypt_start event 0x1007
     13:48:49.599199  paicrypt_start event 0x1008
     13:48:49.599921  paicrypt_event_destroy event 0x1008
     13:48:52.601507  paicrypt_event_destroy event 0x1007
    
    This is caused by functions event_sched_in() and event_sched_out() which
    call the PMU's add() and start() functions on schedule_in and the PMU's
    stop() and del() functions on schedule_out. This is correct for events
    attached to processes.  The pai_crypto events are system-wide events
    and not attached to processes.
    
    Since the kernel common code can not be changed easily, fix this issue
    and do not reset the event count value to zero each time the event is
    added and started. Instead use a flag and zero the event count value
    only when called immediately after the event has been initialized.
    Therefore only the first invocation of the the event's add() function
    initializes the event count value to zero. The following invocations
    of the event's add() function leave the current event count value
    untouched.
    
    Fixes: 39d62336 ("s390/pai: add support for cryptography counters")
    Reported-by: default avatarSumanth Korikkar <sumanthk@linux.ibm.com>
    Signed-off-by: default avatarThomas Richter <tmricht@linux.ibm.com>
    Acked-by: default avatarSumanth Korikkar <sumanthk@linux.ibm.com>
    Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
    21e87644
perf_pai_crypto.c 19.7 KB