Re: [PATCH v2 0/6] perf arm_spe: Dump IMPDEF events
From: Arnaldo Carvalho de Melo
Date: Fri Apr 10 2026 - 18:05:33 EST
On Fri, Apr 10, 2026 at 09:50:16AM -0700, Namhyung Kim wrote:
> Hi James,
>
> On Tue, Apr 07, 2026 at 03:05:14PM +0100, James Clark wrote:
> > In the Arm SPE raw data dump, IMPDEF events aren't printed. Add the
> > ability to add names for some known events or print the raw event number
> > for unknown events.
> >
> > For example:
> >
> > $ perf report -D
> >
> > ... ARM SPE data: size 0xd000 bytes
> > 00000000: b0 18 c6 32 80 00 80 ff a0 PC 0xff80008032c618 el1 ns=1
> > 00000009: 64 e7 42 00 00 CONTEXT 0x42e7 el1
> > 0000000e: 00 00 00 00 00 PAD
> > 00000013: 49 00 LD GP-REG
> > 00000015: 52 16 10 EV RETIRED L1D-ACCESS TLB-ACCESS
> >
> > On N1 the event line becomes:
> >
> > 00000015: 52 16 10 EV RETIRED L1D-ACCESS TLB-ACCESS LATE-PREFETCH
> >
> > Or on other cores it becomes:
> >
> > 00000015: 52 16 10 EV RETIRED L1D-ACCESS TLB-ACCESS IMPDEF:12
> >
> > Signed-off-by: James Clark <james.clark@xxxxxxxxxx>
> > ---
> > Changes in v2:
> > - Put MIDR in arm_spe_pkt (Leo)
> > - Use for_each_set_bit() (Leo)
> > - Use BIT_ULL() to fix 32bit builds (Ian)
> > - Don't call strtol() with NULL (Ian)
> > - Link to v1: https://lore.kernel.org/r/20260401-james-spe-impdef-decode-v1-0-ad0d372c220c@xxxxxxxxxx
>
> I'm getting this on 32-bit build.
>
> In file included from /linux/tools/include/linux/bitmap.h:8,
> from util/arm-spe-decoder/arm-spe-pkt-decoder.c:11:
> util/arm-spe-decoder/arm-spe-pkt-decoder.c: In function 'arm_spe_pkt_desc_event':
> util/arm-spe-decoder/arm-spe-pkt-decoder.c:377:37: error: passing argument 1 of 'find_first_bit' from incompatible pointer type [-Werror=incompatible-pointer-types]
> 377 | for_each_set_bit(i, &payload, 64) {
> /linux/tools/include/linux/bitops.h:55:38: note: in definition of macro 'for_each_set_bit'
> 55 | for ((bit) = find_first_bit((addr), (size)); \
> | ^~~~
> In file included from /linux/tools/include/linux/bitmap.h:9:
> /linux/tools/include/linux/find.h:118:51: note: expected 'const long unsigned int *' but argument is of type 'u64 *' {aka 'long long unsigned int *'}
> 118 | unsigned long find_first_bit(const unsigned long *addr, unsigned long size)
> | ~~~~~~~~~~~~~~~~~~~~~^~~~
I saw this as well.
- Arnaldo