RE: [EXTERNAL] Re: [PATCH v7 5/7] coresight: tmc: Add support for reading crash data

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi James,

> -----Original Message-----
> From: James Clark <james.clark@xxxxxxx>
> Sent: Monday, April 22, 2024 1:48 PM
> To: Linu Cherian <lcherian@xxxxxxxxxxx>; Suzuki K Poulose
> <suzuki.poulose@xxxxxxx>
> Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; coresight@xxxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx; robh+dt@xxxxxxxxxx;
> krzysztof.kozlowski+dt@xxxxxxxxxx; conor+dt@xxxxxxxxxx;
> devicetree@xxxxxxxxxxxxxxx; Sunil Kovvuri Goutham
> <sgoutham@xxxxxxxxxxx>; George Cherian <gcherian@xxxxxxxxxxx>; Anil
> Kumar Reddy H <areddy3@xxxxxxxxxxx>; Tanmay Jagdale
> <tanmay@xxxxxxxxxxx>; mike.leach@xxxxxxxxxx; leo.yan@xxxxxxxxxx
> Subject: [EXTERNAL] Re: [PATCH v7 5/7] coresight: tmc: Add support for
> reading crash data
> 
> Prioritize security for external emails: Confirm sender and content safety
> before clicking links or opening attachments
> 
> ----------------------------------------------------------------------
> 
> 
> On 21/04/2024 03:49, Linu Cherian wrote:
> > Hi James,
> >
> >> -----Original Message-----
> >> From: James Clark <james.clark@xxxxxxx>
> >> Sent: Monday, April 15, 2024 2:59 PM
> >> To: Linu Cherian <lcherian@xxxxxxxxxxx>; Suzuki K Poulose
> >> <suzuki.poulose@xxxxxxx>
> >> Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; coresight@xxxxxxxxxxxxxxxx;
> >> linux- kernel@xxxxxxxxxxxxxxx; robh+dt@xxxxxxxxxx;
> >> krzysztof.kozlowski+dt@xxxxxxxxxx; conor+dt@xxxxxxxxxx;
> >> devicetree@xxxxxxxxxxxxxxx; Sunil Kovvuri Goutham
> >> <sgoutham@xxxxxxxxxxx>; George Cherian <gcherian@xxxxxxxxxxx>;
> Anil
> >> Kumar Reddy H <areddy3@xxxxxxxxxxx>; Tanmay Jagdale
> >> <tanmay@xxxxxxxxxxx>; mike.leach@xxxxxxxxxx; leo.yan@xxxxxxxxxx
> >> Subject: Re: [EXTERNAL] Re: [PATCH v7 5/7] coresight: tmc: Add
> >> support for reading crash data
> >>
> >>
> >>
> >> On 15/04/2024 05:01, Linu Cherian wrote:
> >>> Hi James,
> >>>
> >>>> -----Original Message-----
> >>>> From: James Clark <james.clark@xxxxxxx>
> >>>> Sent: Friday, April 12, 2024 3:36 PM
> >>>> To: Linu Cherian <lcherian@xxxxxxxxxxx>; Suzuki K Poulose
> >>>> <suzuki.poulose@xxxxxxx>
> >>>> Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx;
> >>>> coresight@xxxxxxxxxxxxxxxx;
> >>>> linux- kernel@xxxxxxxxxxxxxxx; robh+dt@xxxxxxxxxx;
> >>>> krzysztof.kozlowski+dt@xxxxxxxxxx; conor+dt@xxxxxxxxxx;
> >>>> devicetree@xxxxxxxxxxxxxxx; Sunil Kovvuri Goutham
> >>>> <sgoutham@xxxxxxxxxxx>; George Cherian <gcherian@xxxxxxxxxxx>;
> >> Anil
> >>>> Kumar Reddy H <areddy3@xxxxxxxxxxx>; Tanmay Jagdale
> >>>> <tanmay@xxxxxxxxxxx>; mike.leach@xxxxxxxxxx; leo.yan@xxxxxxxxxx
> >>>> Subject: [EXTERNAL] Re: [PATCH v7 5/7] coresight: tmc: Add support
> >>>> for reading crash data
> >>>>
> >>>> Prioritize security for external emails: Confirm sender and content
> >>>> safety before clicking links or opening attachments
> >>>>
> >>>> -------------------------------------------------------------------
> >>>> --
> >>>> -
> >>>>
> >>>>
> >>>> On 07/03/2024 03:36, Linu Cherian wrote:
> >>>>> * Introduce a new mode CS_MODE_READ_CRASHDATA for reading
> trace
> >>>>>   captured in previous crash/watchdog reset.
> >>>>>
> >>>>> * Add special device files for reading ETR/ETF crash data.
> >>>>>
> >>>>> * User can read the crash data as below
> >>>>>
> >>>>>   For example, for reading crash data from tmc_etf sink
> >>>>>
> >>>>>   #dd if=/dev/crash_tmc_etfXX of=~/cstrace.bin
> >>>>>
> >>>>> Signed-off-by: Anil Kumar Reddy <areddy3@xxxxxxxxxxx>
> >>>>> Signed-off-by: Tanmay Jagdale <tanmay@xxxxxxxxxxx>
> >>>>> Signed-off-by: Linu Cherian <lcherian@xxxxxxxxxxx>
> >>>>> ---
> >>>>> Changelog from v6:
> >>>>> * Removed read_prevboot flag in sysfs
> >>>>> * Added special device files for reading crashdata
> >>>>> * Renamed CS mode READ_PREVBOOT to READ_CRASHDATA
> >>>>> * Setting the READ_CRASHDATA mode is done as part of file open.
> >>>>>
> >>>>
> >>>> [...]
> >>>>
> >>>>> @@ -619,6 +740,19 @@ static int tmc_probe(struct amba_device
> >>>>> *adev,
> >>>> const struct amba_id *id)
> >>>>>  		coresight_unregister(drvdata->csdev);
> >>>>>  	else
> >>>>>  		pm_runtime_put(&adev->dev);
> >>>>> +
> >>>>> +	if (!is_tmc_reserved_region_valid(dev))
> >>>>> +		goto out;
> >>>>> +
> >>>>> +	drvdata->crashdev.name =
> >>>>> +		devm_kasprintf(dev, GFP_KERNEL, "%s_%s",
> "crash",
> >>>> desc.name);
> >>>>> +	drvdata->crashdev.minor = MISC_DYNAMIC_MINOR;
> >>>>> +	drvdata->crashdev.fops = &tmc_crashdata_fops;
> >>>>> +	ret = misc_register(&drvdata->crashdev);
> >>>>> +	if (ret)
> >>>>> +		pr_err("%s: Failed to setup dev interface for
> crashdata\n",
> >>>>> +		       desc.name);
> >>>>> +
> >>>>
> >>>> Is this all optional after the is_tmc_reserved_region_valid()?
> >>>> Skipping to out seems to be more like an error condition, but in
> >>>> this case it's not? Having it like this makes it more difficult to
> >>>> add extra steps to the probe function. You could move it to a
> >>>> function and flip
> >> the condition which would be clearer:
> >>>>
> >>>
> >>> Ack.
> >>>
> >>>>    if (is_tmc_reserved_region_valid(dev))
> >>>>       register_crash_dev_interface(drvdata);
> >>>>
> >
> > Did you meant changing the condition of "is_tmc_reserved_region_valid"
> by "flip the condition".
> > If yes, that’s not required IMHO, since the reserved region is still valid.
> >
> 
> By flip I mean remove the !. You had this:
> 
>   	if (!is_tmc_reserved_region_valid(dev))
> 		goto out;
> 
> But instead you should put your registration code in a function, remove the !
> and replace the goto with a function:
> 
>     if (is_tmc_reserved_region_valid(dev))
>         ret = register_crash_dev_interface(drvdata);
> 
> Where register_crash_dev_interface() is everything you added in between
> the goto and the out: label. The reason is that you've made it impossible to
> extend the probe function with new behavior without having to understand
> that this new bit must always come last. Otherwise new behavior would also
> be skipped over if the reserved region doesn't exist.
> 

Thanks. That’s clear to me.

> > IIUC, the idea here is to not to fail the tmc_probe due to an error
> > condition in register_crash_dev_interface,  so that the normal condition is
> not affected. Also the error condition can be notified to the user using a
> pr_dbg / pr_err.
> >
> > Thanks.
> >
> 
> I'm not sure I follow exactly what you mean here, but for the one error
> condition you are checking for on the call to misc_register() you can still
> return that from the new function and check it in the probe.

Actually was trying to clarify that we may not want to fail the probe due to a failure in the register_crash_dev_interface, since the normal trace operations could continue without crash_dev interface.(Tracing with or without the reserved region doesn’t get affected as well).
 Please see the changes below. That way the changes are simpler. 


@@ -507,6 +628,18 @@ static u32 tmc_etr_get_max_burst_size(struct device *dev)
        return burst_size;
 }

+static void register_crash_dev_interface(struct tmc_drvdata * drvdata,
+                                        const char *name)
+{
+       drvdata->crashdev.name =
+               devm_kasprintf(&drvdata->csdev->dev, GFP_KERNEL, "%s_%s", "crash", name);
+       drvdata->crashdev.minor = MISC_DYNAMIC_MINOR;
+       drvdata->crashdev.fops = &tmc_crashdata_fops;
+       if (misc_register(&drvdata->crashdev))
+               dev_dbg(&drvdata->csdev->dev,
+                       "Failed to setup user interface for crashdata\n");
+}
+
 static int tmc_probe(struct amba_device *adev, const struct amba_id *id)
 {
        int ret = 0;
@@ -619,6 +752,10 @@ static int tmc_probe(struct amba_device *adev, const struct amba_id *id)
                coresight_unregister(drvdata->csdev);
        else
                pm_runtime_put(&adev->dev);
+
+       if (is_tmc_reserved_region_valid(dev))
+               register_crash_dev_interface(drvdata, desc.name);
+
 out:
        return ret;
 }

Thanks.
Linu Cherian.




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux