All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] perf parse-events: Use strcmp to compare the PMU name
@ 2020-04-30  0:36 Jin Yao
  2020-04-30  8:45 ` Jiri Olsa
  0 siblings, 1 reply; 13+ messages in thread
From: Jin Yao @ 2020-04-30  0:36 UTC (permalink / raw)
  To: acme, jolsa, peterz, mingo, alexander.shishkin
  Cc: Linux-kernel, ak, kan.liang, yao.jin, Jin Yao

A big uncore event group is split into multiple small groups which
only include the uncore events from the same PMU. This has been
supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
uncore event aliases in small groups properly").

If the event's PMU name starts to repeat, it must be a new event.
That can be used to distinguish the leader from other members.
But now it only compares the pointer of pmu_name
(leader->pmu_name == evsel->pmu_name).

If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
the event list is:

evsel->name					evsel->pmu_name
---------------------------------------------------------------
unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_4 (as leader)
unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_2
unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_0
unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_5
unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_3
unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_1
unc_iio_data_req_of_cpu.mem_write.part1		uncore_iio_4
......

For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
"uncore_iio_4", it should be the event from PMU "uncore_iio_4".
It's not a new leader for this PMU.

But if we use "(leader->pmu_name == evsel->pmu_name)", the check
would be failed and the event is stored to leaders[] as a new
PMU leader.

So this patch uses strcmp to compare the PMU name between events.

Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore event aliases in small groups properly")
Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
 tools/perf/util/parse-events.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 10107747b361..786eddb6a097 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -1629,12 +1629,11 @@ parse_events__set_leader_for_uncore_aliase(char *name, struct list_head *list,
 		 * event. That can be used to distinguish the leader from
 		 * other members, even they have the same event name.
 		 */
-		if ((leader != evsel) && (leader->pmu_name == evsel->pmu_name)) {
+		if ((leader != evsel) &&
+		    !strcmp(leader->pmu_name, evsel->pmu_name)) {
 			is_leader = false;
 			continue;
 		}
-		/* The name is always alias name */
-		WARN_ON(strcmp(leader->name, evsel->name));
 
 		/* Store the leader event for each PMU */
 		leaders[nr_pmu++] = (uintptr_t) evsel;
-- 
2.17.1


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

* Re: [PATCH] perf parse-events: Use strcmp to compare the PMU name
  2020-04-30  0:36 [PATCH] perf parse-events: Use strcmp to compare the PMU name Jin Yao
@ 2020-04-30  8:45 ` Jiri Olsa
  2020-04-30  8:54   ` John Garry
                     ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Jiri Olsa @ 2020-04-30  8:45 UTC (permalink / raw)
  To: Jin Yao
  Cc: acme, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin, John Garry

On Thu, Apr 30, 2020 at 08:36:18AM +0800, Jin Yao wrote:
> A big uncore event group is split into multiple small groups which
> only include the uncore events from the same PMU. This has been
> supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
> uncore event aliases in small groups properly").
> 
> If the event's PMU name starts to repeat, it must be a new event.
> That can be used to distinguish the leader from other members.
> But now it only compares the pointer of pmu_name
> (leader->pmu_name == evsel->pmu_name).
> 
> If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
> the event list is:
> 
> evsel->name					evsel->pmu_name
> ---------------------------------------------------------------
> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_4 (as leader)
> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_2
> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_0
> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_5
> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_3
> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_1
> unc_iio_data_req_of_cpu.mem_write.part1		uncore_iio_4
> ......
> 
> For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
> "uncore_iio_4", it should be the event from PMU "uncore_iio_4".
> It's not a new leader for this PMU.
> 
> But if we use "(leader->pmu_name == evsel->pmu_name)", the check
> would be failed and the event is stored to leaders[] as a new
> PMU leader.
> 
> So this patch uses strcmp to compare the PMU name between events.
> 
> Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore event aliases in small groups properly")
> Signed-off-by: Jin Yao <yao.jin@linux.intel.com>

looks good, any chance we could have automated test
for this uncore leader setup logic? like maybe the way
John did the pmu-events tests? like test will trigger
only when there's the pmu/events in the system

Acked-by: Jiri Olsa <jolsa@redhat.com>

thanks,
jirka


> ---
>  tools/perf/util/parse-events.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> index 10107747b361..786eddb6a097 100644
> --- a/tools/perf/util/parse-events.c
> +++ b/tools/perf/util/parse-events.c
> @@ -1629,12 +1629,11 @@ parse_events__set_leader_for_uncore_aliase(char *name, struct list_head *list,
>  		 * event. That can be used to distinguish the leader from
>  		 * other members, even they have the same event name.
>  		 */
> -		if ((leader != evsel) && (leader->pmu_name == evsel->pmu_name)) {
> +		if ((leader != evsel) &&
> +		    !strcmp(leader->pmu_name, evsel->pmu_name)) {
>  			is_leader = false;
>  			continue;
>  		}
> -		/* The name is always alias name */
> -		WARN_ON(strcmp(leader->name, evsel->name));
>  
>  		/* Store the leader event for each PMU */
>  		leaders[nr_pmu++] = (uintptr_t) evsel;
> -- 
> 2.17.1
> 


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

* Re: [PATCH] perf parse-events: Use strcmp to compare the PMU name
  2020-04-30  8:45 ` Jiri Olsa
@ 2020-04-30  8:54   ` John Garry
  2020-04-30 11:15     ` Jiri Olsa
  2020-04-30 13:45   ` Jin, Yao
  2020-05-07 16:44   ` Arnaldo Carvalho de Melo
  2 siblings, 1 reply; 13+ messages in thread
From: John Garry @ 2020-04-30  8:54 UTC (permalink / raw)
  To: Jiri Olsa, Jin Yao
  Cc: acme, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin

On 30/04/2020 09:45, Jiri Olsa wrote:
> On Thu, Apr 30, 2020 at 08:36:18AM +0800, Jin Yao wrote:
>> A big uncore event group is split into multiple small groups which
>> only include the uncore events from the same PMU. This has been
>> supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
>> uncore event aliases in small groups properly").
>>
>> If the event's PMU name starts to repeat, it must be a new event.
>> That can be used to distinguish the leader from other members.
>> But now it only compares the pointer of pmu_name
>> (leader->pmu_name == evsel->pmu_name).
>>
>> If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
>> the event list is:
>>
>> evsel->name					evsel->pmu_name
>> ---------------------------------------------------------------
>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_4 (as leader)
>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_2
>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_0
>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_5
>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_3
>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_1
>> unc_iio_data_req_of_cpu.mem_write.part1		uncore_iio_4
>> ......
>>
>> For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
>> "uncore_iio_4", it should be the event from PMU "uncore_iio_4".
>> It's not a new leader for this PMU.
>>
>> But if we use "(leader->pmu_name == evsel->pmu_name)", the check
>> would be failed and the event is stored to leaders[] as a new
>> PMU leader.
>>
>> So this patch uses strcmp to compare the PMU name between events.
>>
>> Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore event aliases in small groups properly")
>> Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> 
> looks good, any chance we could have automated test
> for this uncore leader setup logic? like maybe the way
> John did the pmu-events tests? like test will trigger
> only when there's the pmu/events in the system
> 
> Acked-by: Jiri Olsa <jolsa@redhat.com>
> 
> thanks,
> jirka

Hi jirka,

JFYI, this is effectively the same patch as I mentioned to you, which 
was a fix for the same WARN:

https://lore.kernel.org/linux-arm-kernel/1587120084-18990-2-git-send-email-john.garry@huawei.com/

but I found that it "fixed" d4953f7ef1a2 ("perf parse-events: Fix 3 use 
after frees found with clang ASANutil/parse-events.c"), based on bisect 
breakage

cheers

> 
> 
>> ---
>>   tools/perf/util/parse-events.c | 5 ++---
>>   1 file changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
>> index 10107747b361..786eddb6a097 100644
>> --- a/tools/perf/util/parse-events.c
>> +++ b/tools/perf/util/parse-events.c
>> @@ -1629,12 +1629,11 @@ parse_events__set_leader_for_uncore_aliase(char *name, struct list_head *list,
>>   		 * event. That can be used to distinguish the leader from
>>   		 * other members, even they have the same event name.
>>   		 */
>> -		if ((leader != evsel) && (leader->pmu_name == evsel->pmu_name)) {
>> +		if ((leader != evsel) &&
>> +		    !strcmp(leader->pmu_name, evsel->pmu_name)) {
>>   			is_leader = false;
>>   			continue;
>>   		}
>> -		/* The name is always alias name */
>> -		WARN_ON(strcmp(leader->name, evsel->name));
>>   
>>   		/* Store the leader event for each PMU */
>>   		leaders[nr_pmu++] = (uintptr_t) evsel;
>> -- 
>> 2.17.1
>>
> 
> .
> 


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

* Re: [PATCH] perf parse-events: Use strcmp to compare the PMU name
  2020-04-30  8:54   ` John Garry
@ 2020-04-30 11:15     ` Jiri Olsa
  2020-04-30 11:48       ` John Garry
  0 siblings, 1 reply; 13+ messages in thread
From: Jiri Olsa @ 2020-04-30 11:15 UTC (permalink / raw)
  To: John Garry
  Cc: Jin Yao, acme, jolsa, peterz, mingo, alexander.shishkin,
	Linux-kernel, ak, kan.liang, yao.jin

On Thu, Apr 30, 2020 at 09:54:18AM +0100, John Garry wrote:
> On 30/04/2020 09:45, Jiri Olsa wrote:
> > On Thu, Apr 30, 2020 at 08:36:18AM +0800, Jin Yao wrote:
> > > A big uncore event group is split into multiple small groups which
> > > only include the uncore events from the same PMU. This has been
> > > supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
> > > uncore event aliases in small groups properly").
> > > 
> > > If the event's PMU name starts to repeat, it must be a new event.
> > > That can be used to distinguish the leader from other members.
> > > But now it only compares the pointer of pmu_name
> > > (leader->pmu_name == evsel->pmu_name).
> > > 
> > > If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
> > > the event list is:
> > > 
> > > evsel->name					evsel->pmu_name
> > > ---------------------------------------------------------------
> > > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_4 (as leader)
> > > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_2
> > > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_0
> > > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_5
> > > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_3
> > > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_1
> > > unc_iio_data_req_of_cpu.mem_write.part1		uncore_iio_4
> > > ......
> > > 
> > > For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
> > > "uncore_iio_4", it should be the event from PMU "uncore_iio_4".
> > > It's not a new leader for this PMU.
> > > 
> > > But if we use "(leader->pmu_name == evsel->pmu_name)", the check
> > > would be failed and the event is stored to leaders[] as a new
> > > PMU leader.
> > > 
> > > So this patch uses strcmp to compare the PMU name between events.
> > > 
> > > Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore event aliases in small groups properly")
> > > Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> > 
> > looks good, any chance we could have automated test
> > for this uncore leader setup logic? like maybe the way
> > John did the pmu-events tests? like test will trigger
> > only when there's the pmu/events in the system
> > 
> > Acked-by: Jiri Olsa <jolsa@redhat.com>
> > 
> > thanks,
> > jirka
> 
> Hi jirka,
> 
> JFYI, this is effectively the same patch as I mentioned to you, which was a
> fix for the same WARN:
> 
> https://lore.kernel.org/linux-arm-kernel/1587120084-18990-2-git-send-email-john.garry@huawei.com/
> 
> but I found that it "fixed" d4953f7ef1a2 ("perf parse-events: Fix 3 use
> after frees found with clang ASANutil/parse-events.c"), based on bisect
> breakage

hum right.. sorry I did not recalled that, there's
also the warn removal in here, could you guys also
plz sync on the fixes clauses?

thanks,
jirka

> 
> cheers
> 
> > 
> > 
> > > ---
> > >   tools/perf/util/parse-events.c | 5 ++---
> > >   1 file changed, 2 insertions(+), 3 deletions(-)
> > > 
> > > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> > > index 10107747b361..786eddb6a097 100644
> > > --- a/tools/perf/util/parse-events.c
> > > +++ b/tools/perf/util/parse-events.c
> > > @@ -1629,12 +1629,11 @@ parse_events__set_leader_for_uncore_aliase(char *name, struct list_head *list,
> > >   		 * event. That can be used to distinguish the leader from
> > >   		 * other members, even they have the same event name.
> > >   		 */
> > > -		if ((leader != evsel) && (leader->pmu_name == evsel->pmu_name)) {
> > > +		if ((leader != evsel) &&
> > > +		    !strcmp(leader->pmu_name, evsel->pmu_name)) {
> > >   			is_leader = false;
> > >   			continue;
> > >   		}
> > > -		/* The name is always alias name */
> > > -		WARN_ON(strcmp(leader->name, evsel->name));
> > >   		/* Store the leader event for each PMU */
> > >   		leaders[nr_pmu++] = (uintptr_t) evsel;
> > > -- 
> > > 2.17.1
> > > 
> > 
> > .
> > 
> 


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

* Re: [PATCH] perf parse-events: Use strcmp to compare the PMU name
  2020-04-30 11:15     ` Jiri Olsa
@ 2020-04-30 11:48       ` John Garry
  2020-04-30 13:38         ` Jin, Yao
  0 siblings, 1 reply; 13+ messages in thread
From: John Garry @ 2020-04-30 11:48 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: Jin Yao, acme, jolsa, peterz, mingo, alexander.shishkin,
	Linux-kernel, ak, kan.liang, yao.jin, irogers

On 30/04/2020 12:15, Jiri Olsa wrote:

+

> On Thu, Apr 30, 2020 at 09:54:18AM +0100, John Garry wrote:
>> On 30/04/2020 09:45, Jiri Olsa wrote:
>>> On Thu, Apr 30, 2020 at 08:36:18AM +0800, Jin Yao wrote:
>>>> A big uncore event group is split into multiple small groups which
>>>> only include the uncore events from the same PMU. This has been
>>>> supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
>>>> uncore event aliases in small groups properly").
>>>>
>>>> If the event's PMU name starts to repeat, it must be a new event.
>>>> That can be used to distinguish the leader from other members.
>>>> But now it only compares the pointer of pmu_name
>>>> (leader->pmu_name == evsel->pmu_name).
>>>>
>>>> If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
>>>> the event list is:
>>>>
>>>> evsel->name					evsel->pmu_name
>>>> ---------------------------------------------------------------
>>>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_4 (as leader)
>>>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_2
>>>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_0
>>>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_5
>>>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_3
>>>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_1
>>>> unc_iio_data_req_of_cpu.mem_write.part1		uncore_iio_4
>>>> ......
>>>>
>>>> For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
>>>> "uncore_iio_4", it should be the event from PMU "uncore_iio_4".
>>>> It's not a new leader for this PMU.
>>>>
>>>> But if we use "(leader->pmu_name == evsel->pmu_name)", the check
>>>> would be failed and the event is stored to leaders[] as a new
>>>> PMU leader.
>>>>
>>>> So this patch uses strcmp to compare the PMU name between events.
>>>>
>>>> Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore event aliases in small groups properly")
>>>> Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
>>>
>>> looks good, any chance we could have automated test
>>> for this uncore leader setup logic? like maybe the way
>>> John did the pmu-events tests? like test will trigger
>>> only when there's the pmu/events in the system
>>>
>>> Acked-by: Jiri Olsa <jolsa@redhat.com>
>>>
>>> thanks,
>>> jirka
>>
>> Hi jirka,
>>
>> JFYI, this is effectively the same patch as I mentioned to you, which was a
>> fix for the same WARN:
>>
>> https://lore.kernel.org/linux-arm-kernel/1587120084-18990-2-git-send-email-john.garry@huawei.com/
>>
>> but I found that it "fixed" d4953f7ef1a2 ("perf parse-events: Fix 3 use
>> after frees found with clang ASANutil/parse-events.c"), based on bisect
>> breakage
> 
> hum right.. sorry I did not recalled that, there's
> also the warn removal in here, could you guys also
> plz sync on the fixes clauses?

I just thought that it fixes d4953f7ef1a2, as I found that the pointer 
equality fails from that commit. I assume the parse-events code was 
sound before then (in that regard). That's all I know :)

Thanks!

> 
> thanks,
> jirka
> 
>>
>> cheers
>>
>>>
>>>
>>>> ---
>>>>    tools/perf/util/parse-events.c | 5 ++---
>>>>    1 file changed, 2 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
>>>> index 10107747b361..786eddb6a097 100644
>>>> --- a/tools/perf/util/parse-events.c
>>>> +++ b/tools/perf/util/parse-events.c
>>>> @@ -1629,12 +1629,11 @@ parse_events__set_leader_for_uncore_aliase(char *name, struct list_head *list,
>>>>    		 * event. That can be used to distinguish the leader from
>>>>    		 * other members, even they have the same event name.
>>>>    		 */
>>>> -		if ((leader != evsel) && (leader->pmu_name == evsel->pmu_name)) {
>>>> +		if ((leader != evsel) &&
>>>> +		    !strcmp(leader->pmu_name, evsel->pmu_name)) {
>>>>    			is_leader = false;
>>>>    			continue;
>>>>    		}
>>>> -		/* The name is always alias name */
>>>> -		WARN_ON(strcmp(leader->name, evsel->name));
>>>>    		/* Store the leader event for each PMU */
>>>>    		leaders[nr_pmu++] = (uintptr_t) evsel;
>>>> -- 
>>>> 2.17.1
>>>>
>>>
>>> .
>>>
>>
> 
> .
> 


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

* Re: [PATCH] perf parse-events: Use strcmp to compare the PMU name
  2020-04-30 11:48       ` John Garry
@ 2020-04-30 13:38         ` Jin, Yao
  2020-05-07 16:46           ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 13+ messages in thread
From: Jin, Yao @ 2020-04-30 13:38 UTC (permalink / raw)
  To: John Garry, Jiri Olsa
  Cc: acme, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin, irogers

Hi John, Jiri,

On 4/30/2020 7:48 PM, John Garry wrote:
> On 30/04/2020 12:15, Jiri Olsa wrote:
> 
> +
> 
>> On Thu, Apr 30, 2020 at 09:54:18AM +0100, John Garry wrote:
>>> On 30/04/2020 09:45, Jiri Olsa wrote:
>>>> On Thu, Apr 30, 2020 at 08:36:18AM +0800, Jin Yao wrote:
>>>>> A big uncore event group is split into multiple small groups which
>>>>> only include the uncore events from the same PMU. This has been
>>>>> supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
>>>>> uncore event aliases in small groups properly").
>>>>>
>>>>> If the event's PMU name starts to repeat, it must be a new event.
>>>>> That can be used to distinguish the leader from other members.
>>>>> But now it only compares the pointer of pmu_name
>>>>> (leader->pmu_name == evsel->pmu_name).
>>>>>
>>>>> If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
>>>>> the event list is:
>>>>>
>>>>> evsel->name                    evsel->pmu_name
>>>>> ---------------------------------------------------------------
>>>>> unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_4 (as leader)
>>>>> unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_2
>>>>> unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_0
>>>>> unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_5
>>>>> unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_3
>>>>> unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_1
>>>>> unc_iio_data_req_of_cpu.mem_write.part1        uncore_iio_4
>>>>> ......
>>>>>
>>>>> For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
>>>>> "uncore_iio_4", it should be the event from PMU "uncore_iio_4".
>>>>> It's not a new leader for this PMU.
>>>>>
>>>>> But if we use "(leader->pmu_name == evsel->pmu_name)", the check
>>>>> would be failed and the event is stored to leaders[] as a new
>>>>> PMU leader.
>>>>>
>>>>> So this patch uses strcmp to compare the PMU name between events.
>>>>>
>>>>> Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore event aliases in 
>>>>> small groups properly")
>>>>> Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
>>>>
>>>> looks good, any chance we could have automated test
>>>> for this uncore leader setup logic? like maybe the way
>>>> John did the pmu-events tests? like test will trigger
>>>> only when there's the pmu/events in the system
>>>>
>>>> Acked-by: Jiri Olsa <jolsa@redhat.com>
>>>>
>>>> thanks,
>>>> jirka
>>>
>>> Hi jirka,
>>>
>>> JFYI, this is effectively the same patch as I mentioned to you, which was a
>>> fix for the same WARN:
>>>
>>> https://lore.kernel.org/linux-arm-kernel/1587120084-18990-2-git-send-email-john.garry@huawei.com/ 
>>>
>>>
>>> but I found that it "fixed" d4953f7ef1a2 ("perf parse-events: Fix 3 use
>>> after frees found with clang ASANutil/parse-events.c"), based on bisect
>>> breakage
>>
>> hum right.. sorry I did not recalled that, there's
>> also the warn removal in here, could you guys also
>> plz sync on the fixes clauses?
> 
> I just thought that it fixes d4953f7ef1a2, as I found that the pointer equality 
> fails from that commit. I assume the parse-events code was sound before then (in 
> that regard). That's all I know :)
> 
> Thanks!
> 

For 3cdc5c2cb924a, I just think it should use strcmp for pmu_name comparison 
rather than using pointer. But I'm OK to add d4953f7ef1a2 in fixes clauses. :)

Thanks
Jin Yao

>>
>> thanks,
>> jirka
>>
>>>
>>> cheers
>>>
>>>>
>>>>
>>>>> ---
>>>>>    tools/perf/util/parse-events.c | 5 ++---
>>>>>    1 file changed, 2 insertions(+), 3 deletions(-)
>>>>>
>>>>> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
>>>>> index 10107747b361..786eddb6a097 100644
>>>>> --- a/tools/perf/util/parse-events.c
>>>>> +++ b/tools/perf/util/parse-events.c
>>>>> @@ -1629,12 +1629,11 @@ parse_events__set_leader_for_uncore_aliase(char 
>>>>> *name, struct list_head *list,
>>>>>             * event. That can be used to distinguish the leader from
>>>>>             * other members, even they have the same event name.
>>>>>             */
>>>>> -        if ((leader != evsel) && (leader->pmu_name == evsel->pmu_name)) {
>>>>> +        if ((leader != evsel) &&
>>>>> +            !strcmp(leader->pmu_name, evsel->pmu_name)) {
>>>>>                is_leader = false;
>>>>>                continue;
>>>>>            }
>>>>> -        /* The name is always alias name */
>>>>> -        WARN_ON(strcmp(leader->name, evsel->name));
>>>>>            /* Store the leader event for each PMU */
>>>>>            leaders[nr_pmu++] = (uintptr_t) evsel;
>>>>> -- 
>>>>> 2.17.1
>>>>>
>>>>
>>>> .
>>>>
>>>
>>
>> .
>>
> 

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

* Re: [PATCH] perf parse-events: Use strcmp to compare the PMU name
  2020-04-30  8:45 ` Jiri Olsa
  2020-04-30  8:54   ` John Garry
@ 2020-04-30 13:45   ` Jin, Yao
  2020-04-30 15:32     ` Jiri Olsa
  2020-05-07 16:44   ` Arnaldo Carvalho de Melo
  2 siblings, 1 reply; 13+ messages in thread
From: Jin, Yao @ 2020-04-30 13:45 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: acme, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin, John Garry

Hi Jiri,

On 4/30/2020 4:45 PM, Jiri Olsa wrote:
> On Thu, Apr 30, 2020 at 08:36:18AM +0800, Jin Yao wrote:
>> A big uncore event group is split into multiple small groups which
>> only include the uncore events from the same PMU. This has been
>> supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
>> uncore event aliases in small groups properly").
>>
>> If the event's PMU name starts to repeat, it must be a new event.
>> That can be used to distinguish the leader from other members.
>> But now it only compares the pointer of pmu_name
>> (leader->pmu_name == evsel->pmu_name).
>>
>> If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
>> the event list is:
>>
>> evsel->name					evsel->pmu_name
>> ---------------------------------------------------------------
>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_4 (as leader)
>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_2
>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_0
>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_5
>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_3
>> unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_1
>> unc_iio_data_req_of_cpu.mem_write.part1		uncore_iio_4
>> ......
>>
>> For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
>> "uncore_iio_4", it should be the event from PMU "uncore_iio_4".
>> It's not a new leader for this PMU.
>>
>> But if we use "(leader->pmu_name == evsel->pmu_name)", the check
>> would be failed and the event is stored to leaders[] as a new
>> PMU leader.
>>
>> So this patch uses strcmp to compare the PMU name between events.
>>
>> Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore event aliases in small groups properly")
>> Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> 
> looks good, any chance we could have automated test
> for this uncore leader setup logic? like maybe the way
> John did the pmu-events tests? like test will trigger
> only when there's the pmu/events in the system
> 
> Acked-by: Jiri Olsa <jolsa@redhat.com>
> 
> thanks,
> jirka
> 
> 

I'm considering to use LKP to do the sanity tests for all perf events 
(core/uncore) and perf metrics periodically. It may help us to find the 
regressions on time.

Thanks
Jin Yao

>> ---
>>   tools/perf/util/parse-events.c | 5 ++---
>>   1 file changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
>> index 10107747b361..786eddb6a097 100644
>> --- a/tools/perf/util/parse-events.c
>> +++ b/tools/perf/util/parse-events.c
>> @@ -1629,12 +1629,11 @@ parse_events__set_leader_for_uncore_aliase(char *name, struct list_head *list,
>>   		 * event. That can be used to distinguish the leader from
>>   		 * other members, even they have the same event name.
>>   		 */
>> -		if ((leader != evsel) && (leader->pmu_name == evsel->pmu_name)) {
>> +		if ((leader != evsel) &&
>> +		    !strcmp(leader->pmu_name, evsel->pmu_name)) {
>>   			is_leader = false;
>>   			continue;
>>   		}
>> -		/* The name is always alias name */
>> -		WARN_ON(strcmp(leader->name, evsel->name));
>>   
>>   		/* Store the leader event for each PMU */
>>   		leaders[nr_pmu++] = (uintptr_t) evsel;
>> -- 
>> 2.17.1
>>
> 

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

* Re: [PATCH] perf parse-events: Use strcmp to compare the PMU name
  2020-04-30 13:45   ` Jin, Yao
@ 2020-04-30 15:32     ` Jiri Olsa
  2020-05-06 22:45       ` Ian Rogers
  0 siblings, 1 reply; 13+ messages in thread
From: Jiri Olsa @ 2020-04-30 15:32 UTC (permalink / raw)
  To: Jin, Yao
  Cc: acme, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin, John Garry

On Thu, Apr 30, 2020 at 09:45:14PM +0800, Jin, Yao wrote:
> Hi Jiri,
> 
> On 4/30/2020 4:45 PM, Jiri Olsa wrote:
> > On Thu, Apr 30, 2020 at 08:36:18AM +0800, Jin Yao wrote:
> > > A big uncore event group is split into multiple small groups which
> > > only include the uncore events from the same PMU. This has been
> > > supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
> > > uncore event aliases in small groups properly").
> > > 
> > > If the event's PMU name starts to repeat, it must be a new event.
> > > That can be used to distinguish the leader from other members.
> > > But now it only compares the pointer of pmu_name
> > > (leader->pmu_name == evsel->pmu_name).
> > > 
> > > If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
> > > the event list is:
> > > 
> > > evsel->name					evsel->pmu_name
> > > ---------------------------------------------------------------
> > > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_4 (as leader)
> > > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_2
> > > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_0
> > > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_5
> > > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_3
> > > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_1
> > > unc_iio_data_req_of_cpu.mem_write.part1		uncore_iio_4
> > > ......
> > > 
> > > For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
> > > "uncore_iio_4", it should be the event from PMU "uncore_iio_4".
> > > It's not a new leader for this PMU.
> > > 
> > > But if we use "(leader->pmu_name == evsel->pmu_name)", the check
> > > would be failed and the event is stored to leaders[] as a new
> > > PMU leader.
> > > 
> > > So this patch uses strcmp to compare the PMU name between events.
> > > 
> > > Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore event aliases in small groups properly")
> > > Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> > 
> > looks good, any chance we could have automated test
> > for this uncore leader setup logic? like maybe the way
> > John did the pmu-events tests? like test will trigger
> > only when there's the pmu/events in the system
> > 
> > Acked-by: Jiri Olsa <jolsa@redhat.com>
> > 
> > thanks,
> > jirka
> > 
> > 
> 
> I'm considering to use LKP to do the sanity tests for all perf events
> (core/uncore) and perf metrics periodically. It may help us to find the
> regressions on time.

sounds good ;) thanks

jirka


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

* Re: [PATCH] perf parse-events: Use strcmp to compare the PMU name
  2020-04-30 15:32     ` Jiri Olsa
@ 2020-05-06 22:45       ` Ian Rogers
  2020-05-06 23:46         ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 13+ messages in thread
From: Ian Rogers @ 2020-05-06 22:45 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: Jin, Yao, Arnaldo Carvalho de Melo, Jiri Olsa, Peter Zijlstra,
	Ingo Molnar, Alexander Shishkin, LKML, Andi Kleen, kan.liang,
	yao.jin, John Garry

On Thu, Apr 30, 2020 at 8:33 AM Jiri Olsa <jolsa@redhat.com> wrote:
>
> On Thu, Apr 30, 2020 at 09:45:14PM +0800, Jin, Yao wrote:
> > Hi Jiri,
> >
> > On 4/30/2020 4:45 PM, Jiri Olsa wrote:
> > > On Thu, Apr 30, 2020 at 08:36:18AM +0800, Jin Yao wrote:
> > > > A big uncore event group is split into multiple small groups which
> > > > only include the uncore events from the same PMU. This has been
> > > > supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
> > > > uncore event aliases in small groups properly").
> > > >
> > > > If the event's PMU name starts to repeat, it must be a new event.
> > > > That can be used to distinguish the leader from other members.
> > > > But now it only compares the pointer of pmu_name
> > > > (leader->pmu_name == evsel->pmu_name).
> > > >
> > > > If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
> > > > the event list is:
> > > >
> > > > evsel->name                                       evsel->pmu_name
> > > > ---------------------------------------------------------------
> > > > unc_iio_data_req_of_cpu.mem_write.part0           uncore_iio_4 (as leader)
> > > > unc_iio_data_req_of_cpu.mem_write.part0           uncore_iio_2
> > > > unc_iio_data_req_of_cpu.mem_write.part0           uncore_iio_0
> > > > unc_iio_data_req_of_cpu.mem_write.part0           uncore_iio_5
> > > > unc_iio_data_req_of_cpu.mem_write.part0           uncore_iio_3
> > > > unc_iio_data_req_of_cpu.mem_write.part0           uncore_iio_1
> > > > unc_iio_data_req_of_cpu.mem_write.part1           uncore_iio_4
> > > > ......
> > > >
> > > > For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
> > > > "uncore_iio_4", it should be the event from PMU "uncore_iio_4".
> > > > It's not a new leader for this PMU.
> > > >
> > > > But if we use "(leader->pmu_name == evsel->pmu_name)", the check
> > > > would be failed and the event is stored to leaders[] as a new
> > > > PMU leader.
> > > >
> > > > So this patch uses strcmp to compare the PMU name between events.
> > > >
> > > > Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore event aliases in small groups properly")
> > > > Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> > >
> > > looks good, any chance we could have automated test
> > > for this uncore leader setup logic? like maybe the way
> > > John did the pmu-events tests? like test will trigger
> > > only when there's the pmu/events in the system
> > >
> > > Acked-by: Jiri Olsa <jolsa@redhat.com>
> > >
> > > thanks,
> > > jirka
> > >
> > >
> >
> > I'm considering to use LKP to do the sanity tests for all perf events
> > (core/uncore) and perf metrics periodically. It may help us to find the
> > regressions on time.
>
> sounds good ;) thanks
>
> jirka

I've tested this and would be happy to see this merged. John's bisect
found a memory leak fix of mine as the culprit.

Wrt testing, libbpf is using github/travis CI:
https://github.com/libbpf/libbpf
https://travis-ci.org/libbpf/libbpf
Perhaps that kind of set up can automate testing and lower the
reviewer burden - but there's upfront cost in setting it up.

Thanks,
Ian

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

* Re: [PATCH] perf parse-events: Use strcmp to compare the PMU name
  2020-05-06 22:45       ` Ian Rogers
@ 2020-05-06 23:46         ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 13+ messages in thread
From: Arnaldo Carvalho de Melo @ 2020-05-06 23:46 UTC (permalink / raw)
  To: Ian Rogers
  Cc: Jiri Olsa, Jin, Yao, Jiri Olsa, Peter Zijlstra, Ingo Molnar,
	Alexander Shishkin, LKML, Andi Kleen, kan.liang, yao.jin,
	John Garry

Em Wed, May 06, 2020 at 03:45:59PM -0700, Ian Rogers escreveu:
> On Thu, Apr 30, 2020 at 8:33 AM Jiri Olsa <jolsa@redhat.com> wrote:
> >
> > On Thu, Apr 30, 2020 at 09:45:14PM +0800, Jin, Yao wrote:
> > > Hi Jiri,
> > >
> > > On 4/30/2020 4:45 PM, Jiri Olsa wrote:
> > > > On Thu, Apr 30, 2020 at 08:36:18AM +0800, Jin Yao wrote:
> > > > > A big uncore event group is split into multiple small groups which
> > > > > only include the uncore events from the same PMU. This has been
> > > > > supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
> > > > > uncore event aliases in small groups properly").
> > > > >
> > > > > If the event's PMU name starts to repeat, it must be a new event.
> > > > > That can be used to distinguish the leader from other members.
> > > > > But now it only compares the pointer of pmu_name
> > > > > (leader->pmu_name == evsel->pmu_name).
> > > > >
> > > > > If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
> > > > > the event list is:
> > > > >
> > > > > evsel->name                                       evsel->pmu_name
> > > > > ---------------------------------------------------------------
> > > > > unc_iio_data_req_of_cpu.mem_write.part0           uncore_iio_4 (as leader)
> > > > > unc_iio_data_req_of_cpu.mem_write.part0           uncore_iio_2
> > > > > unc_iio_data_req_of_cpu.mem_write.part0           uncore_iio_0
> > > > > unc_iio_data_req_of_cpu.mem_write.part0           uncore_iio_5
> > > > > unc_iio_data_req_of_cpu.mem_write.part0           uncore_iio_3
> > > > > unc_iio_data_req_of_cpu.mem_write.part0           uncore_iio_1
> > > > > unc_iio_data_req_of_cpu.mem_write.part1           uncore_iio_4
> > > > > ......
> > > > >
> > > > > For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
> > > > > "uncore_iio_4", it should be the event from PMU "uncore_iio_4".
> > > > > It's not a new leader for this PMU.
> > > > >
> > > > > But if we use "(leader->pmu_name == evsel->pmu_name)", the check
> > > > > would be failed and the event is stored to leaders[] as a new
> > > > > PMU leader.
> > > > >
> > > > > So this patch uses strcmp to compare the PMU name between events.
> > > > >
> > > > > Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore event aliases in small groups properly")
> > > > > Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> > > >
> > > > looks good, any chance we could have automated test
> > > > for this uncore leader setup logic? like maybe the way
> > > > John did the pmu-events tests? like test will trigger
> > > > only when there's the pmu/events in the system
> > > >
> > > > Acked-by: Jiri Olsa <jolsa@redhat.com>
> > > >
> > > > thanks,
> > > > jirka
> > > >
> > > >
> > >
> > > I'm considering to use LKP to do the sanity tests for all perf events
> > > (core/uncore) and perf metrics periodically. It may help us to find the
> > > regressions on time.
> >
> > sounds good ;) thanks
> >
> > jirka
> 
> I've tested this and would be happy to see this merged. John's bisect
> found a memory leak fix of mine as the culprit.
> 
> Wrt testing, libbpf is using github/travis CI:
> https://github.com/libbpf/libbpf
> https://travis-ci.org/libbpf/libbpf
> Perhaps that kind of set up can automate testing and lower the
> reviewer burden - but there's upfront cost in setting it up.

Well, if someone wants to bear this upfront cost, I can provide all the
Dockerfiles + scripts I have to build those images, etc, I just don't
have the time right now to invest in learning about travis, etc.

That would be awesome.

But if people run:

make -C tools/perf build-test

And:

perf test

Before sending pull requests, that would as well be fantastic :)

- Arnaldo

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

* Re: [PATCH] perf parse-events: Use strcmp to compare the PMU name
  2020-04-30  8:45 ` Jiri Olsa
  2020-04-30  8:54   ` John Garry
  2020-04-30 13:45   ` Jin, Yao
@ 2020-05-07 16:44   ` Arnaldo Carvalho de Melo
  2 siblings, 0 replies; 13+ messages in thread
From: Arnaldo Carvalho de Melo @ 2020-05-07 16:44 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: Jin Yao, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel,
	ak, kan.liang, yao.jin, John Garry

Em Thu, Apr 30, 2020 at 10:45:29AM +0200, Jiri Olsa escreveu:
> On Thu, Apr 30, 2020 at 08:36:18AM +0800, Jin Yao wrote:
> > A big uncore event group is split into multiple small groups which
> > only include the uncore events from the same PMU. This has been
> > supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
> > uncore event aliases in small groups properly").
> > 
> > If the event's PMU name starts to repeat, it must be a new event.
> > That can be used to distinguish the leader from other members.
> > But now it only compares the pointer of pmu_name
> > (leader->pmu_name == evsel->pmu_name).
> > 
> > If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
> > the event list is:
> > 
> > evsel->name					evsel->pmu_name
> > ---------------------------------------------------------------
> > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_4 (as leader)
> > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_2
> > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_0
> > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_5
> > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_3
> > unc_iio_data_req_of_cpu.mem_write.part0		uncore_iio_1
> > unc_iio_data_req_of_cpu.mem_write.part1		uncore_iio_4
> > ......
> > 
> > For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
> > "uncore_iio_4", it should be the event from PMU "uncore_iio_4".
> > It's not a new leader for this PMU.
> > 
> > But if we use "(leader->pmu_name == evsel->pmu_name)", the check
> > would be failed and the event is stored to leaders[] as a new
> > PMU leader.
> > 
> > So this patch uses strcmp to compare the PMU name between events.
> > 
> > Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore event aliases in small groups properly")
> > Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> 
> looks good, any chance we could have automated test
> for this uncore leader setup logic? like maybe the way
> John did the pmu-events tests? like test will trigger
> only when there's the pmu/events in the system
> 
> Acked-by: Jiri Olsa <jolsa@redhat.com>

Thanks, applied.

- Arnaldo

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

* Re: [PATCH] perf parse-events: Use strcmp to compare the PMU name
  2020-04-30 13:38         ` Jin, Yao
@ 2020-05-07 16:46           ` Arnaldo Carvalho de Melo
  2020-05-07 17:24             ` Ian Rogers
  0 siblings, 1 reply; 13+ messages in thread
From: Arnaldo Carvalho de Melo @ 2020-05-07 16:46 UTC (permalink / raw)
  To: Jin, Yao
  Cc: John Garry, Jiri Olsa, jolsa, peterz, mingo, alexander.shishkin,
	Linux-kernel, ak, kan.liang, yao.jin, irogers

Em Thu, Apr 30, 2020 at 09:38:34PM +0800, Jin, Yao escreveu:
> Hi John, Jiri,
> 
> On 4/30/2020 7:48 PM, John Garry wrote:
> > On 30/04/2020 12:15, Jiri Olsa wrote:
> > 
> > +
> > 
> > > On Thu, Apr 30, 2020 at 09:54:18AM +0100, John Garry wrote:
> > > > On 30/04/2020 09:45, Jiri Olsa wrote:
> > > > > On Thu, Apr 30, 2020 at 08:36:18AM +0800, Jin Yao wrote:
> > > > > > A big uncore event group is split into multiple small groups which
> > > > > > only include the uncore events from the same PMU. This has been
> > > > > > supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
> > > > > > uncore event aliases in small groups properly").
> > > > > > 
> > > > > > If the event's PMU name starts to repeat, it must be a new event.
> > > > > > That can be used to distinguish the leader from other members.
> > > > > > But now it only compares the pointer of pmu_name
> > > > > > (leader->pmu_name == evsel->pmu_name).
> > > > > > 
> > > > > > If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
> > > > > > the event list is:
> > > > > > 
> > > > > > evsel->name                    evsel->pmu_name
> > > > > > ---------------------------------------------------------------
> > > > > > unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_4 (as leader)
> > > > > > unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_2
> > > > > > unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_0
> > > > > > unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_5
> > > > > > unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_3
> > > > > > unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_1
> > > > > > unc_iio_data_req_of_cpu.mem_write.part1        uncore_iio_4
> > > > > > ......
> > > > > > 
> > > > > > For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
> > > > > > "uncore_iio_4", it should be the event from PMU "uncore_iio_4".
> > > > > > It's not a new leader for this PMU.
> > > > > > 
> > > > > > But if we use "(leader->pmu_name == evsel->pmu_name)", the check
> > > > > > would be failed and the event is stored to leaders[] as a new
> > > > > > PMU leader.
> > > > > > 
> > > > > > So this patch uses strcmp to compare the PMU name between events.
> > > > > > 
> > > > > > Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore
> > > > > > event aliases in small groups properly")
> > > > > > Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> > > > > 
> > > > > looks good, any chance we could have automated test
> > > > > for this uncore leader setup logic? like maybe the way
> > > > > John did the pmu-events tests? like test will trigger
> > > > > only when there's the pmu/events in the system
> > > > > 
> > > > > Acked-by: Jiri Olsa <jolsa@redhat.com>
> > > > > 
> > > > > thanks,
> > > > > jirka
> > > > 
> > > > Hi jirka,
> > > > 
> > > > JFYI, this is effectively the same patch as I mentioned to you, which was a
> > > > fix for the same WARN:
> > > > 
> > > > https://lore.kernel.org/linux-arm-kernel/1587120084-18990-2-git-send-email-john.garry@huawei.com/
> > > > 
> > > > 
> > > > but I found that it "fixed" d4953f7ef1a2 ("perf parse-events: Fix 3 use
> > > > after frees found with clang ASANutil/parse-events.c"), based on bisect
> > > > breakage
> > > 
> > > hum right.. sorry I did not recalled that, there's
> > > also the warn removal in here, could you guys also
> > > plz sync on the fixes clauses?
> > 
> > I just thought that it fixes d4953f7ef1a2, as I found that the pointer
> > equality fails from that commit. I assume the parse-events code was
> > sound before then (in that regard). That's all I know :)
> > 
> > Thanks!
> > 
> 
> For 3cdc5c2cb924a, I just think it should use strcmp for pmu_name comparison
> rather than using pointer. But I'm OK to add d4953f7ef1a2 in fixes clauses.
> :)

So, I'm keeping Ian's patch, as I just applied it, and replaced the
fixes clause to:

Fixes: d4953f7ef1a2 ("perf parse-events: Fix 3 use after frees found with clang ASAN")


Would this be ok? Or does John's fix has something else in it (I haven't
checked).

- Arnaldo

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

* Re: [PATCH] perf parse-events: Use strcmp to compare the PMU name
  2020-05-07 16:46           ` Arnaldo Carvalho de Melo
@ 2020-05-07 17:24             ` Ian Rogers
  0 siblings, 0 replies; 13+ messages in thread
From: Ian Rogers @ 2020-05-07 17:24 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Jin, Yao, John Garry, Jiri Olsa, Jiri Olsa, Peter Zijlstra,
	Ingo Molnar, Alexander Shishkin, LKML, Andi Kleen, kan.liang,
	yao.jin

On Thu, May 7, 2020 at 9:46 AM Arnaldo Carvalho de Melo
<arnaldo.melo@gmail.com> wrote:
>
> Em Thu, Apr 30, 2020 at 09:38:34PM +0800, Jin, Yao escreveu:
> > Hi John, Jiri,
> >
> > On 4/30/2020 7:48 PM, John Garry wrote:
> > > On 30/04/2020 12:15, Jiri Olsa wrote:
> > >
> > > +
> > >
> > > > On Thu, Apr 30, 2020 at 09:54:18AM +0100, John Garry wrote:
> > > > > On 30/04/2020 09:45, Jiri Olsa wrote:
> > > > > > On Thu, Apr 30, 2020 at 08:36:18AM +0800, Jin Yao wrote:
> > > > > > > A big uncore event group is split into multiple small groups which
> > > > > > > only include the uncore events from the same PMU. This has been
> > > > > > > supported in the commit 3cdc5c2cb924a ("perf parse-events: Handle
> > > > > > > uncore event aliases in small groups properly").
> > > > > > >
> > > > > > > If the event's PMU name starts to repeat, it must be a new event.
> > > > > > > That can be used to distinguish the leader from other members.
> > > > > > > But now it only compares the pointer of pmu_name
> > > > > > > (leader->pmu_name == evsel->pmu_name).
> > > > > > >
> > > > > > > If we use "perf stat -M LLC_MISSES.PCIE_WRITE -a" on cascadelakex,
> > > > > > > the event list is:
> > > > > > >
> > > > > > > evsel->name                    evsel->pmu_name
> > > > > > > ---------------------------------------------------------------
> > > > > > > unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_4 (as leader)
> > > > > > > unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_2
> > > > > > > unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_0
> > > > > > > unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_5
> > > > > > > unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_3
> > > > > > > unc_iio_data_req_of_cpu.mem_write.part0        uncore_iio_1
> > > > > > > unc_iio_data_req_of_cpu.mem_write.part1        uncore_iio_4
> > > > > > > ......
> > > > > > >
> > > > > > > For the event "unc_iio_data_req_of_cpu.mem_write.part1" with
> > > > > > > "uncore_iio_4", it should be the event from PMU "uncore_iio_4".
> > > > > > > It's not a new leader for this PMU.
> > > > > > >
> > > > > > > But if we use "(leader->pmu_name == evsel->pmu_name)", the check
> > > > > > > would be failed and the event is stored to leaders[] as a new
> > > > > > > PMU leader.
> > > > > > >
> > > > > > > So this patch uses strcmp to compare the PMU name between events.
> > > > > > >
> > > > > > > Fixes: 3cdc5c2cb924a ("perf parse-events: Handle uncore
> > > > > > > event aliases in small groups properly")
> > > > > > > Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> > > > > >
> > > > > > looks good, any chance we could have automated test
> > > > > > for this uncore leader setup logic? like maybe the way
> > > > > > John did the pmu-events tests? like test will trigger
> > > > > > only when there's the pmu/events in the system
> > > > > >
> > > > > > Acked-by: Jiri Olsa <jolsa@redhat.com>
> > > > > >
> > > > > > thanks,
> > > > > > jirka
> > > > >
> > > > > Hi jirka,
> > > > >
> > > > > JFYI, this is effectively the same patch as I mentioned to you, which was a
> > > > > fix for the same WARN:
> > > > >
> > > > > https://lore.kernel.org/linux-arm-kernel/1587120084-18990-2-git-send-email-john.garry@huawei.com/
> > > > >
> > > > >
> > > > > but I found that it "fixed" d4953f7ef1a2 ("perf parse-events: Fix 3 use
> > > > > after frees found with clang ASANutil/parse-events.c"), based on bisect
> > > > > breakage
> > > >
> > > > hum right.. sorry I did not recalled that, there's
> > > > also the warn removal in here, could you guys also
> > > > plz sync on the fixes clauses?
> > >
> > > I just thought that it fixes d4953f7ef1a2, as I found that the pointer
> > > equality fails from that commit. I assume the parse-events code was
> > > sound before then (in that regard). That's all I know :)
> > >
> > > Thanks!
> > >
> >
> > For 3cdc5c2cb924a, I just think it should use strcmp for pmu_name comparison
> > rather than using pointer. But I'm OK to add d4953f7ef1a2 in fixes clauses.
> > :)
>
> So, I'm keeping Ian's patch, as I just applied it, and replaced the
> fixes clause to:
>
> Fixes: d4953f7ef1a2 ("perf parse-events: Fix 3 use after frees found with clang ASAN")
>
>
> Would this be ok? Or does John's fix has something else in it (I haven't
> checked).

It is great! This patch is the same as John's except it also removes a
warning that can now no longer happen. As such this patch is the
better and the Fixes is correct.

Thanks,
Ian

> - Arnaldo

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

end of thread, other threads:[~2020-05-07 17:24 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-30  0:36 [PATCH] perf parse-events: Use strcmp to compare the PMU name Jin Yao
2020-04-30  8:45 ` Jiri Olsa
2020-04-30  8:54   ` John Garry
2020-04-30 11:15     ` Jiri Olsa
2020-04-30 11:48       ` John Garry
2020-04-30 13:38         ` Jin, Yao
2020-05-07 16:46           ` Arnaldo Carvalho de Melo
2020-05-07 17:24             ` Ian Rogers
2020-04-30 13:45   ` Jin, Yao
2020-04-30 15:32     ` Jiri Olsa
2020-05-06 22:45       ` Ian Rogers
2020-05-06 23:46         ` Arnaldo Carvalho de Melo
2020-05-07 16:44   ` 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.