[PATCH 2/3] coresight: Fail to open with return stacks if they are unavailable

James Clark james.clark at arm.com
Fri Dec 17 01:40:55 PST 2021



On 13/12/2021 09:48, Mike Leach wrote:
> Hi James,
> 
> A couple of points - relating mainly to docs:
> 

Hi Mike,

Thanks for the feedback. I was in the process of adding some docs and
ran into this https://lkml.org/lkml/2021/12/16/1087 so I went to fix
that first. Now I will add some more details and resubmit.

> 1. Activating branch broadcast overrides any setting of return stack.
> As a minimum there needs to be a documentation update to reflect this
> -Setting both options is not prohibited in hardware - and in the case
> where we can use branch broadcast over a range both are then relevant.
> 

Do you mean that if branch broadcast and return stacks are both requested,
but branch broadcast is limited to a range, return stacks will only be
available outside that branch broadcast range? But if branch broadcast is
enabled for all ranges there will be no return stacks at all?

> 2. A documented note to reflect that choosing this option will result
> in a significant increase in the amount of trace generated - possible
> danger of overflows, or less actual instructions covered. In addition
> perhaps documents could reflect the intended use-case for this option,
> given the disadvantages.
> 

Will do.

> 3. Has this been tested in a situation where it will be of use?
> Testing against static code images will show the same decoded trace
> output as not using branch broadcast. (although the packet dumps will
> show additional output)> 
> Given a primary use is for situations where code is patched or
> dynamically altered at runtime - then this can affect the full decode
> output. If the code is being patched to only alter the branch
> addresses then decode should work against static images.
> If, however, we are tracing code that adds in new branches, on top of
> NOPs for example, then the decoding against the original static image
> will be wrong, as the image will have the NOPs, rather than the branch
> instructions so the apparent location of E atoms will be in a
> different position to the actual code. Is there anything in perf that
> will ensure that the patched code is presented to the decoder?
> 
> If there are potential decode issues - these too need documenting.
> 

I'm not sure this should be a blocking issue for this set. Branch broadcast
could already be enabled by setting the mode via sysfs. And the perf decode
part isn't necessarily a step in the workflow, maybe someone wants to gather
data for another tool.

I will do some testing after this change though, but I imagine we would have
had issues reported it it wasn't working already which lowers the priority.

James

> Other than the documents and testing,  I cannot see any issues with
> this patch set in terms of setting and enabling the option.
> 
> Regards
> 
> Mike
> 
> 
> On Fri, 10 Dec 2021 at 17:22, Mathieu Poirier
> <mathieu.poirier at linaro.org> wrote:
>>
>> Hi James,
>>
>> On Thu, Dec 09, 2021 at 11:13:55AM +0000, James Clark wrote:
>>>
>>>
>>> On 09/12/2021 11:00, Suzuki K Poulose wrote:
>>>> On 08/12/2021 16:09, James Clark wrote:
>>>>> Maintain consistency with the other options by failing to open when they
>>>>> aren't supported. For example ETM_OPT_TS, ETM_OPT_CTXTID2 and the newly
>>>>> added ETM_OPT_BRANCH_BROADCAST all return with -EINVAL if they are
>>>>> requested but not supported by hardware.
>>>>>
>>>>> The consequence of not doing this is that the user may not be
>>>>> aware that they are not enabling the feature as it is silently disabled.
>>>>>
>>>>> Signed-off-by: James Clark <james.clark at arm.com>
>>>>> ---
>>>>>   drivers/hwtracing/coresight/coresight-etm4x-core.c | 13 +++++++++----
>>>>>   1 file changed, 9 insertions(+), 4 deletions(-)
>>>>>
>>>>> diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c
>>>>> index d2bafb50c66a..0a9bb943a5e5 100644
>>>>> --- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
>>>>> +++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
>>>>> @@ -674,10 +674,15 @@ static int etm4_parse_event_config(struct coresight_device *csdev,
>>>>>       }
>>>>>         /* return stack - enable if selected and supported */
>>>>> -    if ((attr->config & BIT(ETM_OPT_RETSTK)) && drvdata->retstack)
>>>>> -        /* bit[12], Return stack enable bit */
>>>>> -        config->cfg |= BIT(12);
>>>>> -
>>>>> +    if (attr->config & BIT(ETM_OPT_RETSTK)) {
>>>>> +        if (!drvdata->retstack) {
>>>>> +            ret = -EINVAL;
>>>>> +            goto out;
>>>>> +        } else {
>>>>> +            /* bit[12], Return stack enable bit */
>>>>> +            config->cfg |= BIT(12);
>>>>> +        }
>>>>
>>>> nit: While at this, please could you change the hard coded value
>>>> to ETM4_CFG_BIT_RETSTK ?
>>>>
>>> I started changing them all because I had trouble searching for bits by name but then
>>> I thought it would snowball into a bigger change so I undid it.
>>>
>>> I think I'll just go and do it now if it's an issue here.
>>
>> I can apply this set right away and you send another patch to fix all hard coded
>> bitfields or you can send another revision with all 4 patches included in it
>> (bitfields fix plus these 3).  Just let me know what you want to do.  And next
>> time please add a cover letter.
>>
>> Thanks,
>> Mathieu
>>
>>>
>>>> Otherwise, looks good to me
>>>>
>>>> Suzuki
> 
> 
> 



More information about the linux-arm-kernel mailing list