perf script: Display new D (Intr Disabled) and t (Intr Toggle) flags
Amend the display to include D and t flags in the same way as the x flag. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Jiri Olsa <jolsa@redhat.com> Link: https://lore.kernel.org/r/20220124084201.2699795-21-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
a48b96ca5a
commit
2673859865
@ -195,16 +195,19 @@ OPTIONS
|
||||
At this point usage is displayed, and perf-script exits.
|
||||
|
||||
The flags field is synthesized and may have a value when Instruction
|
||||
Trace decoding. The flags are "bcrosyiABExgh" which stand for branch,
|
||||
Trace decoding. The flags are "bcrosyiABExghDt" which stand for branch,
|
||||
call, return, conditional, system, asynchronous, interrupt,
|
||||
transaction abort, trace begin, trace end, in transaction, VM-Entry, and VM-Exit
|
||||
respectively. Known combinations of flags are printed more nicely e.g.
|
||||
transaction abort, trace begin, trace end, in transaction, VM-Entry,
|
||||
VM-Exit, interrupt disabled and interrupt disable toggle respectively.
|
||||
Known combinations of flags are printed more nicely e.g.
|
||||
"call" for "bc", "return" for "br", "jcc" for "bo", "jmp" for "b",
|
||||
"int" for "bci", "iret" for "bri", "syscall" for "bcs", "sysret" for "brs",
|
||||
"async" for "by", "hw int" for "bcyi", "tx abrt" for "bA", "tr strt" for "bB",
|
||||
"tr end" for "bE", "vmentry" for "bcg", "vmexit" for "bch".
|
||||
However the "x" flag will be displayed separately in those
|
||||
cases e.g. "jcc (x)" for a condition branch within a transaction.
|
||||
However the "x", "D" and "t" flags will be displayed separately in those
|
||||
cases e.g. "jcc (xD)" for a condition branch within a transaction
|
||||
with interrupts disabled. Note, interrupts becoming disabled is "t",
|
||||
whereas interrupts becoming enabled is "Dt".
|
||||
|
||||
The callindent field is synthesized and may have a value when
|
||||
Instruction Trace decoding. For calls and returns, it will display the
|
||||
|
@ -1579,26 +1579,34 @@ static const char *sample_flags_to_name(u32 flags)
|
||||
|
||||
int perf_sample__sprintf_flags(u32 flags, char *str, size_t sz)
|
||||
{
|
||||
u32 xf = PERF_IP_FLAG_IN_TX | PERF_IP_FLAG_INTR_DISABLE |
|
||||
PERF_IP_FLAG_INTR_TOGGLE;
|
||||
const char *chars = PERF_IP_FLAG_CHARS;
|
||||
const size_t n = strlen(PERF_IP_FLAG_CHARS);
|
||||
bool in_tx = flags & PERF_IP_FLAG_IN_TX;
|
||||
const char *name = NULL;
|
||||
size_t i, pos = 0;
|
||||
char xs[16] = {0};
|
||||
|
||||
name = sample_flags_to_name(flags & ~PERF_IP_FLAG_IN_TX);
|
||||
if (flags & xf)
|
||||
snprintf(xs, sizeof(xs), "(%s%s%s)",
|
||||
flags & PERF_IP_FLAG_IN_TX ? "x" : "",
|
||||
flags & PERF_IP_FLAG_INTR_DISABLE ? "D" : "",
|
||||
flags & PERF_IP_FLAG_INTR_TOGGLE ? "t" : "");
|
||||
|
||||
name = sample_flags_to_name(flags & ~xf);
|
||||
if (name)
|
||||
return snprintf(str, sz, "%-15s%4s", name, in_tx ? "(x)" : "");
|
||||
return snprintf(str, sz, "%-15s%6s", name, xs);
|
||||
|
||||
if (flags & PERF_IP_FLAG_TRACE_BEGIN) {
|
||||
name = sample_flags_to_name(flags & ~(PERF_IP_FLAG_IN_TX | PERF_IP_FLAG_TRACE_BEGIN));
|
||||
name = sample_flags_to_name(flags & ~(xf | PERF_IP_FLAG_TRACE_BEGIN));
|
||||
if (name)
|
||||
return snprintf(str, sz, "tr strt %-7s%4s", name, in_tx ? "(x)" : "");
|
||||
return snprintf(str, sz, "tr strt %-7s%6s", name, xs);
|
||||
}
|
||||
|
||||
if (flags & PERF_IP_FLAG_TRACE_END) {
|
||||
name = sample_flags_to_name(flags & ~(PERF_IP_FLAG_IN_TX | PERF_IP_FLAG_TRACE_END));
|
||||
name = sample_flags_to_name(flags & ~(xf | PERF_IP_FLAG_TRACE_END));
|
||||
if (name)
|
||||
return snprintf(str, sz, "tr end %-7s%4s", name, in_tx ? "(x)" : "");
|
||||
return snprintf(str, sz, "tr end %-7s%6s", name, xs);
|
||||
}
|
||||
|
||||
for (i = 0; i < n; i++, flags >>= 1) {
|
||||
@ -1620,7 +1628,7 @@ static int perf_sample__fprintf_flags(u32 flags, FILE *fp)
|
||||
char str[SAMPLE_FLAGS_BUF_SIZE];
|
||||
|
||||
perf_sample__sprintf_flags(flags, str, sizeof(str));
|
||||
return fprintf(fp, " %-19s ", str);
|
||||
return fprintf(fp, " %-21s ", str);
|
||||
}
|
||||
|
||||
struct printer_data {
|
||||
|
Loading…
Reference in New Issue
Block a user