All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Liang, Kan" <kan.liang@linux.intel.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: mingo@redhat.com, tglx@linutronix.de, bp@alien8.de,
	acme@kernel.org, namhyung@kernel.org, irogers@google.com,
	linux-kernel@vger.kernel.org, ak@linux.intel.com,
	eranian@google.com
Subject: Re: [PATCH V9 3/7] perf: attach/detach PMU specific data
Date: Fri, 14 Mar 2025 10:38:29 -0400	[thread overview]
Message-ID: <1ec56e83-be22-480c-be60-5b898fc5f5b7@linux.intel.com> (raw)
In-Reply-To: <a619615f-3313-4e55-a780-f280fbb643dc@linux.intel.com>



On 2025-03-14 9:50 a.m., Liang, Kan wrote:
> 
> 
> On 2025-03-14 8:59 a.m., Peter Zijlstra wrote:
>> On Thu, Mar 13, 2025 at 05:02:38PM -0700, kan.liang@linux.intel.com wrote:
>>
>>> @@ -12551,6 +12813,14 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
>>>  	if (err)
>>>  		return ERR_PTR(err);
>>>  
>>> +	if (event->attach_state & PERF_ATTACH_TASK_DATA) {
>>> +		err = attach_perf_ctx_data(event);
>>> +		if (err) {
>>> +			security_perf_event_free(event);
>>> +			return ERR_PTR(err);
>>> +		}
>>> +	}
>>> +
>>>  	/* symmetric to unaccount_event() in _free_event() */
>>>  	account_event(event);
>>>  
>>
>> This seems weird. We just pushed all the error handling into
>> __free_event(), and now you're adding one special case back.
>>
>> Also, you've placed it after security_perf_event_alloc(), which I
>> _think_ wants to be last.
> 
> Right, I will send a new series to fix it.
> 

I think the attach_perf_ctx_data() should be moved even earlier, right
after the perf_init_event(). Because the PERF_ATTACH_TASK_DATA is set in
the event_init()->hw_config(), rather than after perf attach the data.

So any errors between perf_init_event() and attach_perf_ctx_data(event)
would cause the detach_perf_ctx_data() mistakenly invoked.

@@ -5393,6 +5607,9 @@ static void __free_event(struct perf_event *event)
 	if (is_cgroup_event(event))
 		perf_detach_cgroup(event);

+	if (event->attach_state & PERF_ATTACH_TASK_DATA)
+		detach_perf_ctx_data(event);
+
 	if (event->destroy)
 		event->destroy(event);
@@ -12481,6 +12746,18 @@ perf_event_alloc(struct perf_event_attr *attr,
int cpu,
 	if (IS_ERR(pmu))
 		return (void*)pmu;

+	/*
+	 * The PERF_ATTACH_TASK_DATA is set in the event_init()->hw_config().
+	 * The attach should be right after the perf_init_event().
+	 * Otherwise, the __free_event() would mistakenly detach the non-exist
+	 * perf_ctx_data because of the other errors between them.
+	 */
+	if (event->attach_state & PERF_ATTACH_TASK_DATA) {
+		err = attach_perf_ctx_data(event);
+ 		if (err)
+			return ERR_PTR(err);
+	}
+
 	/*
 	 * Disallow uncore-task events. Similarly, disallow uncore-cgroup
 	 * events (they don't make sense as the cgroup will be different


Thanks,
Kan


  reply	other threads:[~2025-03-14 14:38 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-14  0:02 [PATCH V9 1/7] perf: Save PMU specific data in task_struct kan.liang
2025-03-14  0:02 ` [PATCH V9 2/7] locking/percpu-rwsem: Add guard support kan.liang
2025-03-14  0:02 ` [PATCH V9 3/7] perf: attach/detach PMU specific data kan.liang
2025-03-14 12:59   ` Peter Zijlstra
2025-03-14 13:50     ` Liang, Kan
2025-03-14 14:38       ` Liang, Kan [this message]
2025-03-14 21:03         ` Peter Zijlstra
2025-03-14  0:02 ` [PATCH V9 4/7] perf: Supply task information to sched_task() kan.liang
2025-03-14  0:02 ` [PATCH V9 5/7] perf/x86/lbr: Fix shorter LBRs call stacks for the system-wide mode kan.liang
2025-03-14  0:02 ` [PATCH V9 6/7] perf/x86: Remove swap_task_ctx() kan.liang
2025-03-14  0:02 ` [PATCH V9 7/7] perf: Clean up pmu specific data kan.liang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1ec56e83-be22-480c-be60-5b898fc5f5b7@linux.intel.com \
    --to=kan.liang@linux.intel.com \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=eranian@google.com \
    --cc=irogers@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.