All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] perf record: Skip affinity for per-thread mmap buffers
@ 2026-10-30  6:59 Paul
  2026-10-30  7:06 ` sashiko-bot
  2026-11-06  7:18 ` Namhyung Kim
  0 siblings, 2 replies; 6+ messages in thread
From: Paul @ 2026-10-30  6:59 UTC (permalink / raw)
  To: acme, namhyung
  Cc: peterz, mingo, mark.rutland, alexander.shishkin, jolsa, irogers,
	adrian.hunter, james.clark, alexey.budankov, linux-perf-users,
	linux-kernel, Paul Moses

From: Paul Moses <p@1g4.org>

Per-thread mmap buffers use CPU -1 to mean any CPU. Combining --per-thread
with --affinity=cpu passes this value to __set_bit() when constructing the
reader affinity mask, causing an out-of-bounds bitmap access and SIGSEGV.

Program received signal SIGSEGV, Segmentation fault.
0x0000555555f3488e in mmap.mmap ()
#0  0x0000555555f3488e in mmap.mmap ()
#1  0x0000555555e2f7bf in mmap_per_evsel (evlist=evlist@entry=0x7fffedcc1150, ops=ops@entry=0x7fffffffaf50, idx=idx@entry=0, mp=mp@entry=0x7fffffffaf70, cpu_idx=cpu_idx@entry=0, thread=thread@entry=0, _output=0x7fffffffaf08, _output_overwrite=0x7fffffffaf04, nr_mmaps=0x7fffffffaf0c) at evlist.c:598
#2  0x0000555555e2ef96 in mmap_per_thread (evlist=0x7fffedcc1150, ops=0x7fffffffaf50, mp=0x7fffffffaf70) at evlist.c:650
#3  perf_evlist__mmap_ops (evlist=0x7fffedcc1150, ops=0x7fffffffaf50, mp=0x7fffffffaf70) at evlist.c:748
#4  0x0000555555f2150d in evlist.mmap_ex ()
#5  0x0000555555db0b0a in record.open ()
#6  0x0000555555dadea7 in __cmd_record ()
#7  0x0000555555daca89 in cmd_record ()
#8  0x0000555555e27d53 in run_builtin ()
#9  0x0000555555e277cf in main ()
rip            0x555555f3488e      0x555555f3488e <mmap.mmap+382>
rax            0x7fffef9e9bd0      140737213537232
rbx            0x7fffedd249a0      140737183369632
rcx            0x3ffffffffffffff   288230376151711743
rdx            0x8000000000000000  -9223372036854775808
rsi            0x0                 0
rdi            0x7fffef9e9bd0      140737213537232
   0x555555f34876 <mmap__mmap+358>:	movswq 0x10(%rbx),%rcx
   0x555555f3487b <mmap__mmap+363>:	mov    0xb8(%rbx),%rax
   0x555555f34882 <mmap__mmap+370>:	mov    $0x1,%edx
   0x555555f34887 <mmap__mmap+375>:	shl    %cl,%rdx
   0x555555f3488a <mmap__mmap+378>:	shr    $0x6,%rcx
=> 0x555555f3488e <mmap__mmap+382>:	or     %rdx,(%rax,%rcx,8)
   0x555555f34892 <mmap__mmap+386>:	lea    0x17711b(%rip),%r14        # 0x5555560ab9b4 <verbose>
   0x555555f34899 <mmap__mmap+393>:	cmpl   $0x2,(%r14)
   0x555555f3489d <mmap__mmap+397>:	jne    0x555555f348f7 <mmap__mmap+487>
   0x555555f3489f <mmap__mmap+399>:	mov    0xb8(%rbx),%rdi
   0x555555f348a6 <mmap__mmap+406>:	mov    0xc0(%rbx),%esi
   0x555555f348ac <mmap__mmap+412>:	lea    -0x430(%rbp),%r12

Only construct and apply reader affinity masks for buffers with a
nonnegative CPU. Skip the reader-side bitmap operations as well, since
per-thread buffers no longer allocate an affinity mask.

Fixes: 8384a2600c7d ("perf record: Adapt affinity to machines with #CPUs > 1K")
Signed-off-by: Paul Moses <p@1g4.org>
---
 tools/perf/builtin-record.c | 2 +-
 tools/perf/util/mmap.c      | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index a57987851cf0..d7c8f490cb62 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -1565,7 +1565,7 @@ static struct perf_event_header finished_init_event = {
 
 static void record__adjust_affinity(struct record *rec, struct mmap *map)
 {
-	if (rec->opts.affinity != PERF_AFFINITY_SYS &&
+	if (map->core.cpu.cpu >= 0 && rec->opts.affinity != PERF_AFFINITY_SYS &&
 	    !bitmap_equal(thread->mask->affinity.bits, map->affinity_mask.bits,
 			  thread->mask->affinity.nbits)) {
 		bitmap_zero(thread->mask->affinity.bits, thread->mask->affinity.nbits);
diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
index 358e70c4f3ed..be3dffdaede8 100644
--- a/tools/perf/util/mmap.c
+++ b/tools/perf/util/mmap.c
@@ -292,8 +292,8 @@ int mmap__mmap(struct mmap *map, struct mmap_params *mp, int fd, struct perf_cpu
 		return -1;
 	}
 
-	if (mp->affinity != PERF_AFFINITY_SYS &&
-		perf_mmap__setup_affinity_mask(map, mp)) {
+	if (cpu.cpu >= 0 && mp->affinity != PERF_AFFINITY_SYS &&
+	    perf_mmap__setup_affinity_mask(map, mp)) {
 		pr_debug2("failed to alloc mmap affinity mask, error %d\n",
 			  errno);
 		return -1;
-- 
2.56.GIT



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] perf record: Skip affinity for per-thread mmap buffers
  2026-10-30  6:59 [PATCH] perf record: Skip affinity for per-thread mmap buffers Paul
@ 2026-10-30  7:06 ` sashiko-bot
  2026-11-06  7:18 ` Namhyung Kim
  1 sibling, 0 replies; 6+ messages in thread
From: sashiko-bot @ 2026-10-30  7:06 UTC (permalink / raw)
  To: Paul; +Cc: linux-perf-users

> From: Paul Moses <p@1g4.org>
> 
> Per-thread mmap buffers use CPU -1 to mean any CPU. Combining --per-thread
> with --affinity=cpu passes this value to __set_bit() when constructing the
> reader affinity mask, causing an out-of-bounds bitmap access and SIGSEGV.
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0x0000555555f3488e in mmap.mmap ()
> #0  0x0000555555f3488e in mmap.mmap ()
> #1  0x0000555555e2f7bf in mmap_per_evsel (evlist=evlist@entry=0x7fffedcc1150, ops=ops@entry=0x7fffffffaf50, idx=idx@entry=0, mp=mp@entry=0x7fffffffaf70, cpu_idx=cpu_idx@entry=0, thread=thread@entry=0, _output=0x7fffffffaf08, _output_overwrite=0x7fffffffaf04, nr_mmaps=0x7fffffffaf0c) at evlist.c:598
> #2  0x0000555555e2ef96 in mmap_per_thread (evlist=0x7fffedcc1150, ops=0x7fffffffaf50, mp=0x7fffffffaf70) at evlist.c:650
> #3  perf_evlist__mmap_ops (evlist=0x7fffedcc1150, ops=0x7fffffffaf50, mp=0x7fffffffaf70) at evlist.c:748
> #4  0x0000555555f2150d in evlist.mmap_ex ()
> #5  0x0000555555db0b0a in record.open ()
> #6  0x0000555555dadea7 in __cmd_record ()
> [ ... ]
> nonnegative CPU. Skip the reader-side bitmap operations as well, since
> per-thread buffers no longer allocate an affinity mask.
> 
> Fixes: 8384a2600c7d ("perf record: Adapt affinity to machines with #CPUs > 1K")
> Signed-off-by: Paul Moses <p@1g4.org>

Sashiko has reviewed this patch and found no issues.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261030065857.2157899-1-p@1g4.org?part=1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] perf record: Skip affinity for per-thread mmap buffers
  2026-10-30  6:59 [PATCH] perf record: Skip affinity for per-thread mmap buffers Paul
  2026-10-30  7:06 ` sashiko-bot
@ 2026-11-06  7:18 ` Namhyung Kim
  2026-11-06  7:32   ` Paul Moses
  1 sibling, 1 reply; 6+ messages in thread
From: Namhyung Kim @ 2026-11-06  7:18 UTC (permalink / raw)
  To: Paul
  Cc: acme, peterz, mingo, mark.rutland, alexander.shishkin, jolsa,
	irogers, adrian.hunter, james.clark, alexey.budankov,
	linux-perf-users, linux-kernel

Hello,

On Fri, Oct 30, 2026 at 06:59:28AM +0000, Paul wrote:
> From: Paul Moses <p@1g4.org>
> 
> Per-thread mmap buffers use CPU -1 to mean any CPU. Combining --per-thread
> with --affinity=cpu passes this value to __set_bit() when constructing the
> reader affinity mask, causing an out-of-bounds bitmap access and SIGSEGV.
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0x0000555555f3488e in mmap.mmap ()
> #0  0x0000555555f3488e in mmap.mmap ()
> #1  0x0000555555e2f7bf in mmap_per_evsel (evlist=evlist@entry=0x7fffedcc1150, ops=ops@entry=0x7fffffffaf50, idx=idx@entry=0, mp=mp@entry=0x7fffffffaf70, cpu_idx=cpu_idx@entry=0, thread=thread@entry=0, _output=0x7fffffffaf08, _output_overwrite=0x7fffffffaf04, nr_mmaps=0x7fffffffaf0c) at evlist.c:598
> #2  0x0000555555e2ef96 in mmap_per_thread (evlist=0x7fffedcc1150, ops=0x7fffffffaf50, mp=0x7fffffffaf70) at evlist.c:650
> #3  perf_evlist__mmap_ops (evlist=0x7fffedcc1150, ops=0x7fffffffaf50, mp=0x7fffffffaf70) at evlist.c:748
> #4  0x0000555555f2150d in evlist.mmap_ex ()
> #5  0x0000555555db0b0a in record.open ()
> #6  0x0000555555dadea7 in __cmd_record ()
> #7  0x0000555555daca89 in cmd_record ()
> #8  0x0000555555e27d53 in run_builtin ()
> #9  0x0000555555e277cf in main ()

Please indent terminal outpus otherwise git will eat up lines start with
the hash (#).

> rip            0x555555f3488e      0x555555f3488e <mmap.mmap+382>
> rax            0x7fffef9e9bd0      140737213537232
> rbx            0x7fffedd249a0      140737183369632
> rcx            0x3ffffffffffffff   288230376151711743
> rdx            0x8000000000000000  -9223372036854775808
> rsi            0x0                 0
> rdi            0x7fffef9e9bd0      140737213537232
>    0x555555f34876 <mmap__mmap+358>:	movswq 0x10(%rbx),%rcx
>    0x555555f3487b <mmap__mmap+363>:	mov    0xb8(%rbx),%rax
>    0x555555f34882 <mmap__mmap+370>:	mov    $0x1,%edx
>    0x555555f34887 <mmap__mmap+375>:	shl    %cl,%rdx
>    0x555555f3488a <mmap__mmap+378>:	shr    $0x6,%rcx
> => 0x555555f3488e <mmap__mmap+382>:	or     %rdx,(%rax,%rcx,8)
>    0x555555f34892 <mmap__mmap+386>:	lea    0x17711b(%rip),%r14        # 0x5555560ab9b4 <verbose>
>    0x555555f34899 <mmap__mmap+393>:	cmpl   $0x2,(%r14)
>    0x555555f3489d <mmap__mmap+397>:	jne    0x555555f348f7 <mmap__mmap+487>
>    0x555555f3489f <mmap__mmap+399>:	mov    0xb8(%rbx),%rdi
>    0x555555f348a6 <mmap__mmap+406>:	mov    0xc0(%rbx),%esi
>    0x555555f348ac <mmap__mmap+412>:	lea    -0x430(%rbp),%r12
> 
> Only construct and apply reader affinity masks for buffers with a
> nonnegative CPU. Skip the reader-side bitmap operations as well, since
> per-thread buffers no longer allocate an affinity mask.

Maybe we can just reject those options when they are used together.

Thanks,
Namhyung

> 
> Fixes: 8384a2600c7d ("perf record: Adapt affinity to machines with #CPUs > 1K")
> Signed-off-by: Paul Moses <p@1g4.org>
> ---
>  tools/perf/builtin-record.c | 2 +-
>  tools/perf/util/mmap.c      | 4 ++--
>  2 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index a57987851cf0..d7c8f490cb62 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -1565,7 +1565,7 @@ static struct perf_event_header finished_init_event = {
>  
>  static void record__adjust_affinity(struct record *rec, struct mmap *map)
>  {
> -	if (rec->opts.affinity != PERF_AFFINITY_SYS &&
> +	if (map->core.cpu.cpu >= 0 && rec->opts.affinity != PERF_AFFINITY_SYS &&
>  	    !bitmap_equal(thread->mask->affinity.bits, map->affinity_mask.bits,
>  			  thread->mask->affinity.nbits)) {
>  		bitmap_zero(thread->mask->affinity.bits, thread->mask->affinity.nbits);
> diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
> index 358e70c4f3ed..be3dffdaede8 100644
> --- a/tools/perf/util/mmap.c
> +++ b/tools/perf/util/mmap.c
> @@ -292,8 +292,8 @@ int mmap__mmap(struct mmap *map, struct mmap_params *mp, int fd, struct perf_cpu
>  		return -1;
>  	}
>  
> -	if (mp->affinity != PERF_AFFINITY_SYS &&
> -		perf_mmap__setup_affinity_mask(map, mp)) {
> +	if (cpu.cpu >= 0 && mp->affinity != PERF_AFFINITY_SYS &&
> +	    perf_mmap__setup_affinity_mask(map, mp)) {
>  		pr_debug2("failed to alloc mmap affinity mask, error %d\n",
>  			  errno);
>  		return -1;
> -- 
> 2.56.GIT
> 
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] perf record: Skip affinity for per-thread mmap buffers
  2026-11-06  7:18 ` Namhyung Kim
@ 2026-11-06  7:32   ` Paul Moses
  2026-11-06 21:44     ` Namhyung Kim
  0 siblings, 1 reply; 6+ messages in thread
From: Paul Moses @ 2026-11-06  7:32 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: acme, peterz, mingo, mark.rutland, alexander.shishkin, jolsa,
	irogers, adrian.hunter, james.clark, alexey.budankov,
	linux-perf-users, linux-kernel





On Friday, November 6th, 2026 at 1:18 AM, Namhyung Kim <namhyung@kernel.org> wrote:

> Hello,
> 
> On Fri, Oct 30, 2026 at 06:59:28AM +0000, Paul wrote:
> > From: Paul Moses <p@1g4.org>
> >
> > Per-thread mmap buffers use CPU -1 to mean any CPU. Combining --per-thread
> > with --affinity=cpu passes this value to __set_bit() when constructing the
> > reader affinity mask, causing an out-of-bounds bitmap access and SIGSEGV.
> >
> > Program received signal SIGSEGV, Segmentation fault.
> > 0x0000555555f3488e in mmap.mmap ()
> > #0  0x0000555555f3488e in mmap.mmap ()
> > #1  0x0000555555e2f7bf in mmap_per_evsel (evlist=evlist@entry=0x7fffedcc1150, ops=ops@entry=0x7fffffffaf50, idx=idx@entry=0, mp=mp@entry=0x7fffffffaf70, cpu_idx=cpu_idx@entry=0, thread=thread@entry=0, _output=0x7fffffffaf08, _output_overwrite=0x7fffffffaf04, nr_mmaps=0x7fffffffaf0c) at evlist.c:598
> > #2  0x0000555555e2ef96 in mmap_per_thread (evlist=0x7fffedcc1150, ops=0x7fffffffaf50, mp=0x7fffffffaf70) at evlist.c:650
> > #3  perf_evlist__mmap_ops (evlist=0x7fffedcc1150, ops=0x7fffffffaf50, mp=0x7fffffffaf70) at evlist.c:748
> > #4  0x0000555555f2150d in evlist.mmap_ex ()
> > #5  0x0000555555db0b0a in record.open ()
> > #6  0x0000555555dadea7 in __cmd_record ()
> > #7  0x0000555555daca89 in cmd_record ()
> > #8  0x0000555555e27d53 in run_builtin ()
> > #9  0x0000555555e277cf in main ()
> 
> Please indent terminal outpus otherwise git will eat up lines start with
> the hash (#).
> 
> > rip            0x555555f3488e      0x555555f3488e <mmap.mmap+382>
> > rax            0x7fffef9e9bd0      140737213537232
> > rbx            0x7fffedd249a0      140737183369632
> > rcx            0x3ffffffffffffff   288230376151711743
> > rdx            0x8000000000000000  -9223372036854775808
> > rsi            0x0                 0
> > rdi            0x7fffef9e9bd0      140737213537232
> >    0x555555f34876 <mmap__mmap+358>:	movswq 0x10(%rbx),%rcx
> >    0x555555f3487b <mmap__mmap+363>:	mov    0xb8(%rbx),%rax
> >    0x555555f34882 <mmap__mmap+370>:	mov    $0x1,%edx
> >    0x555555f34887 <mmap__mmap+375>:	shl    %cl,%rdx
> >    0x555555f3488a <mmap__mmap+378>:	shr    $0x6,%rcx
> > => 0x555555f3488e <mmap__mmap+382>:	or     %rdx,(%rax,%rcx,8)
> >    0x555555f34892 <mmap__mmap+386>:	lea    0x17711b(%rip),%r14        # 0x5555560ab9b4 <verbose>
> >    0x555555f34899 <mmap__mmap+393>:	cmpl   $0x2,(%r14)
> >    0x555555f3489d <mmap__mmap+397>:	jne    0x555555f348f7 <mmap__mmap+487>
> >    0x555555f3489f <mmap__mmap+399>:	mov    0xb8(%rbx),%rdi
> >    0x555555f348a6 <mmap__mmap+406>:	mov    0xc0(%rbx),%esi
> >    0x555555f348ac <mmap__mmap+412>:	lea    -0x430(%rbp),%r12
> >
> > Only construct and apply reader affinity masks for buffers with a
> > nonnegative CPU. Skip the reader-side bitmap operations as well, since
> > per-thread buffers no longer allocate an affinity mask.
> 
> Maybe we can just reject those options when they are used together.
> 
> Thanks,
> Namhyung
> 
> >
> > Fixes: 8384a2600c7d ("perf record: Adapt affinity to machines with #CPUs > 1K")
> > Signed-off-by: Paul Moses <p@1g4.org>
> > ---
> >  tools/perf/builtin-record.c | 2 +-
> >  tools/perf/util/mmap.c      | 4 ++--
> >  2 files changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> > index a57987851cf0..d7c8f490cb62 100644
> > --- a/tools/perf/builtin-record.c
> > +++ b/tools/perf/builtin-record.c
> > @@ -1565,7 +1565,7 @@ static struct perf_event_header finished_init_event = {
> >
> >  static void record__adjust_affinity(struct record *rec, struct mmap *map)
> >  {
> > -	if (rec->opts.affinity != PERF_AFFINITY_SYS &&
> > +	if (map->core.cpu.cpu >= 0 && rec->opts.affinity != PERF_AFFINITY_SYS &&
> >  	    !bitmap_equal(thread->mask->affinity.bits, map->affinity_mask.bits,
> >  			  thread->mask->affinity.nbits)) {
> >  		bitmap_zero(thread->mask->affinity.bits, thread->mask->affinity.nbits);
> > diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
> > index 358e70c4f3ed..be3dffdaede8 100644
> > --- a/tools/perf/util/mmap.c
> > +++ b/tools/perf/util/mmap.c
> > @@ -292,8 +292,8 @@ int mmap__mmap(struct mmap *map, struct mmap_params *mp, int fd, struct perf_cpu
> >  		return -1;
> >  	}
> >
> > -	if (mp->affinity != PERF_AFFINITY_SYS &&
> > -		perf_mmap__setup_affinity_mask(map, mp)) {
> > +	if (cpu.cpu >= 0 && mp->affinity != PERF_AFFINITY_SYS &&
> > +	    perf_mmap__setup_affinity_mask(map, mp)) {
> >  		pr_debug2("failed to alloc mmap affinity mask, error %d\n",
> >  			  errno);
> >  		return -1;
> > --
> > 2.56.GIT
> >
> >
> 


Hi Namhyung,

Can we please get this one settled first. There have been issues
with important patches being overlooked for months.

https://lore.kernel.org/linux-perf-users/20261020171946.3593127-1-p@1g4.org/

Thanks
Paul

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] perf record: Skip affinity for per-thread mmap buffers
  2026-11-06  7:32   ` Paul Moses
@ 2026-11-06 21:44     ` Namhyung Kim
  2026-11-09 17:34       ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 6+ messages in thread
From: Namhyung Kim @ 2026-11-06 21:44 UTC (permalink / raw)
  To: Paul Moses, acme
  Cc: peterz, mingo, mark.rutland, alexander.shishkin, jolsa, irogers,
	adrian.hunter, james.clark, alexey.budankov, linux-perf-users,
	linux-kernel

On Fri, Nov 06, 2026 at 07:32:29AM +0000, Paul Moses wrote:
> 
> 
> 
> 
> On Friday, November 6th, 2026 at 1:18 AM, Namhyung Kim <namhyung@kernel.org> wrote:
> 
> > Hello,
> > 
> > On Fri, Oct 30, 2026 at 06:59:28AM +0000, Paul wrote:
> > > From: Paul Moses <p@1g4.org>
> > >
> > > Per-thread mmap buffers use CPU -1 to mean any CPU. Combining --per-thread
> > > with --affinity=cpu passes this value to __set_bit() when constructing the
> > > reader affinity mask, causing an out-of-bounds bitmap access and SIGSEGV.
> > >
> > > Program received signal SIGSEGV, Segmentation fault.
> > > 0x0000555555f3488e in mmap.mmap ()
> > > #0  0x0000555555f3488e in mmap.mmap ()
> > > #1  0x0000555555e2f7bf in mmap_per_evsel (evlist=evlist@entry=0x7fffedcc1150, ops=ops@entry=0x7fffffffaf50, idx=idx@entry=0, mp=mp@entry=0x7fffffffaf70, cpu_idx=cpu_idx@entry=0, thread=thread@entry=0, _output=0x7fffffffaf08, _output_overwrite=0x7fffffffaf04, nr_mmaps=0x7fffffffaf0c) at evlist.c:598
> > > #2  0x0000555555e2ef96 in mmap_per_thread (evlist=0x7fffedcc1150, ops=0x7fffffffaf50, mp=0x7fffffffaf70) at evlist.c:650
> > > #3  perf_evlist__mmap_ops (evlist=0x7fffedcc1150, ops=0x7fffffffaf50, mp=0x7fffffffaf70) at evlist.c:748
> > > #4  0x0000555555f2150d in evlist.mmap_ex ()
> > > #5  0x0000555555db0b0a in record.open ()
> > > #6  0x0000555555dadea7 in __cmd_record ()
> > > #7  0x0000555555daca89 in cmd_record ()
> > > #8  0x0000555555e27d53 in run_builtin ()
> > > #9  0x0000555555e277cf in main ()
> > 
> > Please indent terminal outpus otherwise git will eat up lines start with
> > the hash (#).
> > 
> > > rip            0x555555f3488e      0x555555f3488e <mmap.mmap+382>
> > > rax            0x7fffef9e9bd0      140737213537232
> > > rbx            0x7fffedd249a0      140737183369632
> > > rcx            0x3ffffffffffffff   288230376151711743
> > > rdx            0x8000000000000000  -9223372036854775808
> > > rsi            0x0                 0
> > > rdi            0x7fffef9e9bd0      140737213537232
> > >    0x555555f34876 <mmap__mmap+358>:	movswq 0x10(%rbx),%rcx
> > >    0x555555f3487b <mmap__mmap+363>:	mov    0xb8(%rbx),%rax
> > >    0x555555f34882 <mmap__mmap+370>:	mov    $0x1,%edx
> > >    0x555555f34887 <mmap__mmap+375>:	shl    %cl,%rdx
> > >    0x555555f3488a <mmap__mmap+378>:	shr    $0x6,%rcx
> > > => 0x555555f3488e <mmap__mmap+382>:	or     %rdx,(%rax,%rcx,8)
> > >    0x555555f34892 <mmap__mmap+386>:	lea    0x17711b(%rip),%r14        # 0x5555560ab9b4 <verbose>
> > >    0x555555f34899 <mmap__mmap+393>:	cmpl   $0x2,(%r14)
> > >    0x555555f3489d <mmap__mmap+397>:	jne    0x555555f348f7 <mmap__mmap+487>
> > >    0x555555f3489f <mmap__mmap+399>:	mov    0xb8(%rbx),%rdi
> > >    0x555555f348a6 <mmap__mmap+406>:	mov    0xc0(%rbx),%esi
> > >    0x555555f348ac <mmap__mmap+412>:	lea    -0x430(%rbp),%r12
> > >
> > > Only construct and apply reader affinity masks for buffers with a
> > > nonnegative CPU. Skip the reader-side bitmap operations as well, since
> > > per-thread buffers no longer allocate an affinity mask.
> > 
> > Maybe we can just reject those options when they are used together.
> > 
> > Thanks,
> > Namhyung
> > 
> > >
> > > Fixes: 8384a2600c7d ("perf record: Adapt affinity to machines with #CPUs > 1K")
> > > Signed-off-by: Paul Moses <p@1g4.org>
> > > ---
> > >  tools/perf/builtin-record.c | 2 +-
> > >  tools/perf/util/mmap.c      | 4 ++--
> > >  2 files changed, 3 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> > > index a57987851cf0..d7c8f490cb62 100644
> > > --- a/tools/perf/builtin-record.c
> > > +++ b/tools/perf/builtin-record.c
> > > @@ -1565,7 +1565,7 @@ static struct perf_event_header finished_init_event = {
> > >
> > >  static void record__adjust_affinity(struct record *rec, struct mmap *map)
> > >  {
> > > -	if (rec->opts.affinity != PERF_AFFINITY_SYS &&
> > > +	if (map->core.cpu.cpu >= 0 && rec->opts.affinity != PERF_AFFINITY_SYS &&
> > >  	    !bitmap_equal(thread->mask->affinity.bits, map->affinity_mask.bits,
> > >  			  thread->mask->affinity.nbits)) {
> > >  		bitmap_zero(thread->mask->affinity.bits, thread->mask->affinity.nbits);
> > > diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
> > > index 358e70c4f3ed..be3dffdaede8 100644
> > > --- a/tools/perf/util/mmap.c
> > > +++ b/tools/perf/util/mmap.c
> > > @@ -292,8 +292,8 @@ int mmap__mmap(struct mmap *map, struct mmap_params *mp, int fd, struct perf_cpu
> > >  		return -1;
> > >  	}
> > >
> > > -	if (mp->affinity != PERF_AFFINITY_SYS &&
> > > -		perf_mmap__setup_affinity_mask(map, mp)) {
> > > +	if (cpu.cpu >= 0 && mp->affinity != PERF_AFFINITY_SYS &&
> > > +	    perf_mmap__setup_affinity_mask(map, mp)) {
> > >  		pr_debug2("failed to alloc mmap affinity mask, error %d\n",
> > >  			  errno);
> > >  		return -1;
> > > --
> > > 2.56.GIT
> > >
> > >
> > 
> 
> 
> Hi Namhyung,
> 
> Can we please get this one settled first. There have been issues
> with important patches being overlooked for months.
> 
> https://lore.kernel.org/linux-perf-users/20261020171946.3593127-1-p@1g4.org/

Sorry about the delay.  But please understand that there can be some
delays during a merge window.  I'll take a look at the link but you
can ping me if it takes too long.

Arnaldo, I think it's simple enough to go to v7.4.

Thanks,
Namhyung


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] perf record: Skip affinity for per-thread mmap buffers
  2026-11-06 21:44     ` Namhyung Kim
@ 2026-11-09 17:34       ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 6+ messages in thread
From: Arnaldo Carvalho de Melo @ 2026-11-09 17:34 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Paul Moses, peterz, mingo, mark.rutland, alexander.shishkin,
	jolsa, irogers, adrian.hunter, james.clark, alexey.budankov,
	linux-perf-users, linux-kernel

On Fri, Nov 06, 2026 at 01:44:54PM -0800, Namhyung Kim wrote:
> On Fri, Nov 06, 2026 at 07:32:29AM +0000, Paul Moses wrote:
> > On Friday, November 6th, 2026 at 1:18 AM, Namhyung Kim <namhyung@kernel.org> wrote:
> > > 
> > > On Fri, Oct 30, 2026 at 06:59:28AM +0000, Paul wrote:
> > > > From: Paul Moses <p@1g4.org>
> > > >
> > > > Per-thread mmap buffers use CPU -1 to mean any CPU. Combining --per-thread
> > > > with --affinity=cpu passes this value to __set_bit() when constructing the
> > > > reader affinity mask, causing an out-of-bounds bitmap access and SIGSEGV.
> > > >
> > > > Program received signal SIGSEGV, Segmentation fault.
> > > > 0x0000555555f3488e in mmap.mmap ()
> > > > #0  0x0000555555f3488e in mmap.mmap ()
> > > > #1  0x0000555555e2f7bf in mmap_per_evsel (evlist=evlist@entry=0x7fffedcc1150, ops=ops@entry=0x7fffffffaf50, idx=idx@entry=0, mp=mp@entry=0x7fffffffaf70, cpu_idx=cpu_idx@entry=0, thread=thread@entry=0, _output=0x7fffffffaf08, _output_overwrite=0x7fffffffaf04, nr_mmaps=0x7fffffffaf0c) at evlist.c:598
> > > > #2  0x0000555555e2ef96 in mmap_per_thread (evlist=0x7fffedcc1150, ops=0x7fffffffaf50, mp=0x7fffffffaf70) at evlist.c:650
> > > > #3  perf_evlist__mmap_ops (evlist=0x7fffedcc1150, ops=0x7fffffffaf50, mp=0x7fffffffaf70) at evlist.c:748
> > > > #4  0x0000555555f2150d in evlist.mmap_ex ()
> > > > #5  0x0000555555db0b0a in record.open ()
> > > > #6  0x0000555555dadea7 in __cmd_record ()
> > > > #7  0x0000555555daca89 in cmd_record ()
> > > > #8  0x0000555555e27d53 in run_builtin ()
> > > > #9  0x0000555555e277cf in main ()
> > > 
> > > Please indent terminal outpus otherwise git will eat up lines start with
> > > the hash (#).
> > > 
> > > > rip            0x555555f3488e      0x555555f3488e <mmap.mmap+382>
> > > > rax            0x7fffef9e9bd0      140737213537232
> > > > rbx            0x7fffedd249a0      140737183369632
> > > > rcx            0x3ffffffffffffff   288230376151711743
> > > > rdx            0x8000000000000000  -9223372036854775808
> > > > rsi            0x0                 0
> > > > rdi            0x7fffef9e9bd0      140737213537232
> > > >    0x555555f34876 <mmap__mmap+358>:	movswq 0x10(%rbx),%rcx
> > > >    0x555555f3487b <mmap__mmap+363>:	mov    0xb8(%rbx),%rax
> > > >    0x555555f34882 <mmap__mmap+370>:	mov    $0x1,%edx
> > > >    0x555555f34887 <mmap__mmap+375>:	shl    %cl,%rdx
> > > >    0x555555f3488a <mmap__mmap+378>:	shr    $0x6,%rcx
> > > > => 0x555555f3488e <mmap__mmap+382>:	or     %rdx,(%rax,%rcx,8)
> > > >    0x555555f34892 <mmap__mmap+386>:	lea    0x17711b(%rip),%r14        # 0x5555560ab9b4 <verbose>
> > > >    0x555555f34899 <mmap__mmap+393>:	cmpl   $0x2,(%r14)
> > > >    0x555555f3489d <mmap__mmap+397>:	jne    0x555555f348f7 <mmap__mmap+487>
> > > >    0x555555f3489f <mmap__mmap+399>:	mov    0xb8(%rbx),%rdi
> > > >    0x555555f348a6 <mmap__mmap+406>:	mov    0xc0(%rbx),%esi
> > > >    0x555555f348ac <mmap__mmap+412>:	lea    -0x430(%rbp),%r12
> > > >
> > > > Only construct and apply reader affinity masks for buffers with a
> > > > nonnegative CPU. Skip the reader-side bitmap operations as well, since
> > > > per-thread buffers no longer allocate an affinity mask.
> > > 
> > > Maybe we can just reject those options when they are used together.
> > > 
> > > Thanks,
> > > Namhyung
> > > 
> > > >
> > > > Fixes: 8384a2600c7d ("perf record: Adapt affinity to machines with #CPUs > 1K")
> > > > Signed-off-by: Paul Moses <p@1g4.org>
> > > > ---
> > > >  tools/perf/builtin-record.c | 2 +-
> > > >  tools/perf/util/mmap.c      | 4 ++--
> > > >  2 files changed, 3 insertions(+), 3 deletions(-)
> > > >
> > > > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> > > > index a57987851cf0..d7c8f490cb62 100644
> > > > --- a/tools/perf/builtin-record.c
> > > > +++ b/tools/perf/builtin-record.c
> > > > @@ -1565,7 +1565,7 @@ static struct perf_event_header finished_init_event = {
> > > >
> > > >  static void record__adjust_affinity(struct record *rec, struct mmap *map)
> > > >  {
> > > > -	if (rec->opts.affinity != PERF_AFFINITY_SYS &&
> > > > +	if (map->core.cpu.cpu >= 0 && rec->opts.affinity != PERF_AFFINITY_SYS &&
> > > >  	    !bitmap_equal(thread->mask->affinity.bits, map->affinity_mask.bits,
> > > >  			  thread->mask->affinity.nbits)) {
> > > >  		bitmap_zero(thread->mask->affinity.bits, thread->mask->affinity.nbits);
> > > > diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
> > > > index 358e70c4f3ed..be3dffdaede8 100644
> > > > --- a/tools/perf/util/mmap.c
> > > > +++ b/tools/perf/util/mmap.c
> > > > @@ -292,8 +292,8 @@ int mmap__mmap(struct mmap *map, struct mmap_params *mp, int fd, struct perf_cpu
> > > >  		return -1;
> > > >  	}
> > > >
> > > > -	if (mp->affinity != PERF_AFFINITY_SYS &&
> > > > -		perf_mmap__setup_affinity_mask(map, mp)) {
> > > > +	if (cpu.cpu >= 0 && mp->affinity != PERF_AFFINITY_SYS &&
> > > > +	    perf_mmap__setup_affinity_mask(map, mp)) {
> > > >  		pr_debug2("failed to alloc mmap affinity mask, error %d\n",
> > > >  			  errno);
> > > >  		return -1;
> > Hi Namhyung,
> > 
> > Can we please get this one settled first. There have been issues
> > with important patches being overlooked for months.
> > 
> > https://lore.kernel.org/linux-perf-users/20261020171946.3593127-1-p@1g4.org/
> 
> Sorry about the delay.  But please understand that there can be some
> delays during a merge window.  I'll take a look at the link but you
> can ping me if it takes too long.
> 
> Arnaldo, I think it's simple enough to go to v7.4.

Sure, I'LL process it, just looked and on only this other one:
https://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools.git/commit/?h=perf-tools&id=82b4a28e758816365405e01d9ed09027d13ef77a

From Paul is in perf-tools for v7.4, should be in linux-next for some
days, Look at the pair of additional fixes from him,

- Arnaldo

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-11-09 17:35 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-30  6:59 [PATCH] perf record: Skip affinity for per-thread mmap buffers Paul
2026-10-30  7:06 ` sashiko-bot
2026-11-06  7:18 ` Namhyung Kim
2026-11-06  7:32   ` Paul Moses
2026-11-06 21:44     ` Namhyung Kim
2026-11-09 17:34       ` Arnaldo Carvalho de Melo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.