diff mbox series

coresight: trbe: Move check for kernelspace unmapped at EL0 to probe

Message ID 20220201122212.3009461-1-sudeep.holla@arm.com (mailing list archive)
State New, archived
Headers show
Series coresight: trbe: Move check for kernelspace unmapped at EL0 to probe | expand

Commit Message

Sudeep Holla Feb. 1, 2022, 12:22 p.m. UTC
Currently with the check present in the module initialisation, it shouts
on all the systems irrespective of presence of coresight trace buffer
extensions.

Similar to Arm SPE perf driver, move the check for kernelspace unmapping
when running at EL0 to the device probe instead of module initialisation.

Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: coresight@lists.linaro.org
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
 drivers/hwtracing/coresight/coresight-trbe.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Anshuman Khandual Feb. 3, 2022, 6:25 a.m. UTC | #1
On 2/1/22 5:52 PM, Sudeep Holla wrote:
> Currently with the check present in the module initialisation, it shouts
> on all the systems irrespective of presence of coresight trace buffer
> extensions.

IIUC a system with CONFIG_CORESIGHT_TRBE enabled but without a TRBE DT
i.e "arm,trace-buffer-extension" complains about kernel space unmapping
at EL0 (even though it does not even really have TRBE HW to initialize).

> 
> Similar to Arm SPE perf driver, move the check for kernelspace unmapping
> when running at EL0 to the device probe instead of module initialisation.

Makes sense.

> 
> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
> Cc: Mike Leach <mike.leach@linaro.org>
> Cc: Leo Yan <leo.yan@linaro.org>
> Cc: Anshuman Khandual <anshuman.khandual@arm.com>
> Cc: coresight@lists.linaro.org
> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> ---
>  drivers/hwtracing/coresight/coresight-trbe.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/hwtracing/coresight/coresight-trbe.c b/drivers/hwtracing/coresight/coresight-trbe.c
> index 276862c07e32..3fe2ce1ba5bf 100644
> --- a/drivers/hwtracing/coresight/coresight-trbe.c
> +++ b/drivers/hwtracing/coresight/coresight-trbe.c
> @@ -1423,6 +1423,11 @@ static int arm_trbe_device_probe(struct platform_device *pdev)
>  	struct device *dev = &pdev->dev;
>  	int ret;
>  

Could you please add a similar comment like SPE driver regarding how
the TRBE buffer will be inaccessible, if kernel gets unmapped at EL0
and trace capture will terminate.

> +	if (arm64_kernel_unmapped_at_el0()) {
> +		pr_err("TRBE wouldn't work if kernel gets unmapped at EL0\n");
> +		return -EOPNOTSUPP;
> +	}
> +
>  	drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
>  	if (!drvdata)
>  		return -ENOMEM;
> @@ -1484,11 +1489,6 @@ static int __init arm_trbe_init(void)
>  {
>  	int ret;
>  
> -	if (arm64_kernel_unmapped_at_el0()) {
> -		pr_err("TRBE wouldn't work if kernel gets unmapped at EL0\n");
> -		return -EOPNOTSUPP;
> -	}
> -
>  	ret = platform_driver_register(&arm_trbe_driver);
>  	if (!ret)
>  		return 0;
>
Sudeep Holla Feb. 3, 2022, 12:04 p.m. UTC | #2
On Thu, Feb 03, 2022 at 11:55:58AM +0530, Anshuman Khandual wrote:
> 
> 
> On 2/1/22 5:52 PM, Sudeep Holla wrote:
> > Currently with the check present in the module initialisation, it shouts
> > on all the systems irrespective of presence of coresight trace buffer
> > extensions.
> 
> IIUC a system with CONFIG_CORESIGHT_TRBE enabled but without a TRBE DT
> i.e "arm,trace-buffer-extension" complains about kernel space unmapping
> at EL0 (even though it does not even really have TRBE HW to initialize).


Correct. Basically, this error will be seen on all systems(DT and ACPI) when
the module is compiled. It really doesn't matter if the system supports TRBE.

> > 
> > Similar to Arm SPE perf driver, move the check for kernelspace unmapping
> > when running at EL0 to the device probe instead of module initialisation.
> 
> Makes sense.
>

Thanks.

> > 
> > Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> > Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
> > Cc: Mike Leach <mike.leach@linaro.org>
> > Cc: Leo Yan <leo.yan@linaro.org>
> > Cc: Anshuman Khandual <anshuman.khandual@arm.com>
> > Cc: coresight@lists.linaro.org
> > Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> > ---
> >  drivers/hwtracing/coresight/coresight-trbe.c | 10 +++++-----
> >  1 file changed, 5 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/hwtracing/coresight/coresight-trbe.c b/drivers/hwtracing/coresight/coresight-trbe.c
> > index 276862c07e32..3fe2ce1ba5bf 100644
> > --- a/drivers/hwtracing/coresight/coresight-trbe.c
> > +++ b/drivers/hwtracing/coresight/coresight-trbe.c
> > @@ -1423,6 +1423,11 @@ static int arm_trbe_device_probe(struct platform_device *pdev)
> >  	struct device *dev = &pdev->dev;
> >  	int ret;
> >  
> 
> Could you please add a similar comment like SPE driver regarding how
> the TRBE buffer will be inaccessible, if kernel gets unmapped at EL0
> and trace capture will terminate.
>

Sure I can add that. But if the device probe fails, will you be able to even
start the trace capture, sorry I didn't get what you mean by "trace capture
will terminate". I assume it must be "trace capture is not possible or not
allowed" IIUC.
Anshuman Khandual Feb. 3, 2022, 12:17 p.m. UTC | #3
On 2/3/22 5:34 PM, Sudeep Holla wrote:
>> Could you please add a similar comment like SPE driver regarding how
>> the TRBE buffer will be inaccessible, if kernel gets unmapped at EL0
>> and trace capture will terminate.
>>
> Sure I can add that. But if the device probe fails, will you be able to even
> start the trace capture, sorry I didn't get what you mean by "trace capture
> will terminate". I assume it must be "trace capture is not possible or not
> allowed" IIUC.

I guess the comment should be framed like - what might happen if the following
code block which checks for arm64_kernel_unmapped_at_el0() is not present. If
TRBE gets enabled along with kernel unmapping at EL0 supported, trace capture
will terminate.
Suzuki K Poulose Feb. 3, 2022, 12:21 p.m. UTC | #4
On 03/02/2022 12:04, Sudeep Holla wrote:
> On Thu, Feb 03, 2022 at 11:55:58AM +0530, Anshuman Khandual wrote:
>>
>>
>> On 2/1/22 5:52 PM, Sudeep Holla wrote:
>>> Currently with the check present in the module initialisation, it shouts
>>> on all the systems irrespective of presence of coresight trace buffer
>>> extensions.
>>
>> IIUC a system with CONFIG_CORESIGHT_TRBE enabled but without a TRBE DT
>> i.e "arm,trace-buffer-extension" complains about kernel space unmapping
>> at EL0 (even though it does not even really have TRBE HW to initialize).
> 
> 
> Correct. Basically, this error will be seen on all systems(DT and ACPI) when
> the module is compiled. It really doesn't matter if the system supports TRBE.
> 
>>>
>>> Similar to Arm SPE perf driver, move the check for kernelspace unmapping
>>> when running at EL0 to the device probe instead of module initialisation.
>>
>> Makes sense.
>>
> 
> Thanks.
> 
>>>
>>> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
>>> Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
>>> Cc: Mike Leach <mike.leach@linaro.org>
>>> Cc: Leo Yan <leo.yan@linaro.org>
>>> Cc: Anshuman Khandual <anshuman.khandual@arm.com>
>>> Cc: coresight@lists.linaro.org
>>> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
>>> ---
>>>   drivers/hwtracing/coresight/coresight-trbe.c | 10 +++++-----
>>>   1 file changed, 5 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/drivers/hwtracing/coresight/coresight-trbe.c b/drivers/hwtracing/coresight/coresight-trbe.c
>>> index 276862c07e32..3fe2ce1ba5bf 100644
>>> --- a/drivers/hwtracing/coresight/coresight-trbe.c
>>> +++ b/drivers/hwtracing/coresight/coresight-trbe.c
>>> @@ -1423,6 +1423,11 @@ static int arm_trbe_device_probe(struct platform_device *pdev)
>>>   	struct device *dev = &pdev->dev;
>>>   	int ret;
>>>   
>>
>> Could you please add a similar comment like SPE driver regarding how
>> the TRBE buffer will be inaccessible, if kernel gets unmapped at EL0
>> and trace capture will terminate.
>>
> 
> Sure I can add that. But if the device probe fails, will you be able to even
> start the trace capture, sorry I didn't get what you mean by "trace capture
> will terminate". I assume it must be "trace capture is not possible or not
> allowed" IIUC.
> 

"Trace capture is not possible with kernel page table isolation"

  is good enough.

Thanks for making these changes

Cheers
Suzuki
diff mbox series

Patch

diff --git a/drivers/hwtracing/coresight/coresight-trbe.c b/drivers/hwtracing/coresight/coresight-trbe.c
index 276862c07e32..3fe2ce1ba5bf 100644
--- a/drivers/hwtracing/coresight/coresight-trbe.c
+++ b/drivers/hwtracing/coresight/coresight-trbe.c
@@ -1423,6 +1423,11 @@  static int arm_trbe_device_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	int ret;
 
+	if (arm64_kernel_unmapped_at_el0()) {
+		pr_err("TRBE wouldn't work if kernel gets unmapped at EL0\n");
+		return -EOPNOTSUPP;
+	}
+
 	drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
 	if (!drvdata)
 		return -ENOMEM;
@@ -1484,11 +1489,6 @@  static int __init arm_trbe_init(void)
 {
 	int ret;
 
-	if (arm64_kernel_unmapped_at_el0()) {
-		pr_err("TRBE wouldn't work if kernel gets unmapped at EL0\n");
-		return -EOPNOTSUPP;
-	}
-
 	ret = platform_driver_register(&arm_trbe_driver);
 	if (!ret)
 		return 0;