linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] perf/core: Improve arguments checking of inherited per-task counters when sampling.
@ 2025-08-14 11:06 Chengdong Li
  2025-08-19 10:26 ` Mark Rutland
  2025-08-20  7:17 ` kernel test robot
  0 siblings, 2 replies; 5+ messages in thread
From: Chengdong Li @ 2025-08-14 11:06 UTC (permalink / raw)
  To: peterz, mingo, acme, namhyung, mark.rutland, alexander.shishkin,
	jolsa, irogers, adrian.hunter, kan.liang
  Cc: linux-perf-users, linux-kernel, Chengdong Li

It's not allowed to mmap() of inherited per-task counters with CPU ==
-1, this would create a performance issue. But it is not friendly to
developers as current implementation postponed the arguments checking to
perf_mmap(), developer can get an -EINVAL from mmap() but without
any previous error returned from perf_event_open().

This patch improves it by moving the arguments checking from perf_mmap()
to perf_event_open().

Signed-off-by: Chengdong Li <chengdongli@optimatist.com>
---
 kernel/events/core.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/kernel/events/core.c b/kernel/events/core.c
index 8060c2857bb2..f102adb395ec 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -6941,14 +6941,6 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
 	int ret, flags = 0;
 	mapped_f mapped;
 
-	/*
-	 * Don't allow mmap() of inherited per-task counters. This would
-	 * create a performance issue due to all children writing to the
-	 * same rb.
-	 */
-	if (event->cpu == -1 && event->attr.inherit)
-		return -EINVAL;
-
 	if (!(vma->vm_flags & VM_SHARED))
 		return -EINVAL;
 
@@ -13392,6 +13384,18 @@ SYSCALL_DEFINE5(perf_event_open,
 			return -EACCES;
 	}
 
+	/*
+	 * Don't allow perf_event_open() of inherited per-task counters
+	 * with cpu == 1 when sampling. Otherwise, this would create a
+	 * performance issue due to all children writing to the same mmap()
+	 * created ring buffer.
+	 *
+	 * We recommend to call perf_event_open() for all cpus when sampling on
+	 * inherited per-task counters.
+	 */
+	if (attr.sample_freq && attr.inherit && cpu == -1)
+		return -EINVAL;
+
 	if (attr.freq) {
 		if (attr.sample_freq > sysctl_perf_event_sample_rate)
 			return -EINVAL;
-- 
2.43.0


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

end of thread, other threads:[~2025-08-27 10:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-14 11:06 [PATCH] perf/core: Improve arguments checking of inherited per-task counters when sampling Chengdong Li
2025-08-19 10:26 ` Mark Rutland
2025-08-19 13:31   ` Chengdong Li(李成栋)
2025-08-27 10:44     ` Mark Rutland
2025-08-20  7:17 ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).