[PATCH] perf/arm-cmn: Move overlapping wp_combine field

Ilkka Koskinen ilkka at os.amperecomputing.com
Wed Mar 1 16:55:38 PST 2023


Hi Robin,

On Wed, 1 Mar 2023, Robin Murphy wrote:
> On 2023-03-01 17:55, Ilkka Koskinen wrote:
>> As eventid field was expanded to support new mesh versions, it started to
>> overlap with wp_combine field. Move wp_combine to fix the issue.
>
> Watchpoint events still only strictly need 2 bits of eventid, though. Could 
> you clarify whether userspace is getting confused by this, or whether it's 
> just arm_cmn_event_init() falling over itself (FWIW I can see how I broke 
> things there...)

Basically, perf seems to set eventid at first and then wp_combine field 
into the config argument. The problem is when arm_cmn_event_init() is 
doing:

 	eventid = CMN_EVENT_EVENTID(event);
 	....
 	if (eventid != CMN_WP_UP && eventid != CMN_WP_DOWN)
 		return -EINVAL;

If wp_combine has any of the overlapping bits set, eventid doesn't match 
with either up or down event.

Cheers, Ilkka

>
> Thanks,
> Robin.
>
>> Fixes: 23760a014417 ("perf/arm-cmn: Add CMN-700 support")
>> Signed-off-by: Ilkka Koskinen <ilkka at os.amperecomputing.com>
>> ---
>>   drivers/perf/arm-cmn.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>> 
>> diff --git a/drivers/perf/arm-cmn.c b/drivers/perf/arm-cmn.c
>> index c9689861be3f..9f2edc28d16e 100644
>> --- a/drivers/perf/arm-cmn.c
>> +++ b/drivers/perf/arm-cmn.c
>> @@ -166,7 +166,7 @@
>>   #define CMN_EVENT_BYNODEID(event)	FIELD_GET(CMN_CONFIG_BYNODEID, 
>> (event)->attr.config)
>>   #define CMN_EVENT_NODEID(event)		FIELD_GET(CMN_CONFIG_NODEID, 
>> (event)->attr.config)
>>   -#define CMN_CONFIG_WP_COMBINE		GENMASK_ULL(27, 24)
>> +#define CMN_CONFIG_WP_COMBINE		GENMASK_ULL(30, 27)
>>   #define CMN_CONFIG_WP_DEV_SEL		GENMASK_ULL(50, 48)
>>   #define CMN_CONFIG_WP_CHN_SEL		GENMASK_ULL(55, 51)
>>   /* Note that we don't yet support the tertiary match group on newer IPs 
>> */
>



More information about the linux-arm-kernel mailing list