* [PATCH 1/2] perf lock: Correct field name "flags"
@ 2020-10-21 0:26 Leo Yan
2020-10-21 0:26 ` [PATCH 2/2] perf lock: Don't free "lock_seq_stat" if read_count isn't zero Leo Yan
0 siblings, 1 reply; 3+ messages in thread
From: Leo Yan @ 2020-10-21 0:26 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Peter Zijlstra, Ingo Molnar,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
linux-kernel
Cc: Leo Yan
The tracepoint "lock:lock_acquire" contains field "flags" but not
"flag". Current code wrongly retrieves value from field "flag" and it
always gets zero for the value, thus "perf lock" doesn't report the
correct result.
This patch replaces the field name "flag" with "flags", so can read out
the correct flags for locking.
Fixes: 746f16ec6ae3 ("perf lock: Use perf_evsel__intval and perf_session__set_tracepoints_handlers")
Signed-off-by: Leo Yan <leo.yan@linaro.org>
---
tools/perf/builtin-lock.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c
index f0a1dbacb46c..5cecc1ad78e1 100644
--- a/tools/perf/builtin-lock.c
+++ b/tools/perf/builtin-lock.c
@@ -406,7 +406,7 @@ static int report_lock_acquire_event(struct evsel *evsel,
struct lock_seq_stat *seq;
const char *name = evsel__strval(evsel, sample, "name");
u64 tmp = evsel__intval(evsel, sample, "lockdep_addr");
- int flag = evsel__intval(evsel, sample, "flag");
+ int flag = evsel__intval(evsel, sample, "flags");
memcpy(&addr, &tmp, sizeof(void *));
--
2.17.1
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH 2/2] perf lock: Don't free "lock_seq_stat" if read_count isn't zero
2020-10-21 0:26 [PATCH 1/2] perf lock: Correct field name "flags" Leo Yan
@ 2020-10-21 0:26 ` Leo Yan
2020-10-21 0:42 ` Leo Yan
0 siblings, 1 reply; 3+ messages in thread
From: Leo Yan @ 2020-10-21 0:26 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Peter Zijlstra, Ingo Molnar,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
linux-kernel
Cc: Leo Yan
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".
Signed-off-by: Leo Yan <leo.yan@linaro.org>
---
tools/perf/builtin-lock.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c
index 5cecc1ad78e1..a2f1e53f37a7 100644
--- a/tools/perf/builtin-lock.c
+++ b/tools/perf/builtin-lock.c
@@ -621,7 +621,7 @@ static int report_lock_release_event(struct evsel *evsel,
case SEQ_STATE_READ_ACQUIRED:
seq->read_count--;
BUG_ON(seq->read_count < 0);
- if (!seq->read_count) {
+ if (seq->read_count) {
ls->nr_release++;
goto end;
}
--
2.17.1
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH 2/2] perf lock: Don't free "lock_seq_stat" if read_count isn't zero
2020-10-21 0:26 ` [PATCH 2/2] perf lock: Don't free "lock_seq_stat" if read_count isn't zero Leo Yan
@ 2020-10-21 0:42 ` Leo Yan
0 siblings, 0 replies; 3+ messages in thread
From: Leo Yan @ 2020-10-21 0:42 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Peter Zijlstra, Ingo Molnar,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
linux-kernel
Hi all,
On Wed, Oct 21, 2020 at 08:26:19AM +0800, Leo Yan wrote:
> 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".
Please ignore this patch set and directly to review patch set v2; I
forgot adding "fixes" tag in this patch, so updated in patch set v2.
Sorry for spamming.
Leo
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-10-21 0:42 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-21 0:26 [PATCH 1/2] perf lock: Correct field name "flags" Leo Yan
2020-10-21 0:26 ` [PATCH 2/2] perf lock: Don't free "lock_seq_stat" if read_count isn't zero Leo Yan
2020-10-21 0:42 ` Leo Yan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®