• Leo Yan's avatar
    perf lock: Don't free "lock_seq_stat" if read_count isn't zero · b0e5a05c
    Leo Yan authored
    When execute command "perf lock report", it hits failure and outputs log
    as follows:
    
      perf: builtin-lock.c:623: report_lock_release_event: Assertion `!(seq->read_count < 0)' failed.
      Aborted
    
    This is an imbalance issue.  The locking sequence structure
    "lock_seq_stat" contains the reader counter and it is used to check if
    the locking sequence is balance or not between acquiring and releasing.
    
    If the tool wrongly frees "lock_seq_stat" when "read_count" isn't zero,
    the "read_count" will be reset to zero when allocate a new structure at
    the next time; thus it causes the wrong counting for reader and finally
    results in imbalance issue.
    
    To fix this issue, if detects "read_count" is not zero (means still have
    read user in the locking sequence), goto the "end" tag to skip freeing
    structure "lock_seq_stat".
    
    Fixes: e4cef1f6 ("perf lock: Fix state machine to recognize lock sequence")
    Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
    Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
    Link: https://lore.kernel.org/r/20201104094229.17509-2-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    b0e5a05c
builtin-lock.c 23.1 KB