[EXTERNAL] Re: [PATCH v7 5/7] coresight: tmc: Add support for reading crash data
Linu Cherian
lcherian at marvell.com
Wed Apr 24 19:07:01 PDT 2024
Hi James,
> -----Original Message-----
> From: James Clark <james.clark at arm.com>
> Sent: Monday, April 22, 2024 1:48 PM
> To: Linu Cherian <lcherian at marvell.com>; Suzuki K Poulose
> <suzuki.poulose at arm.com>
> Cc: linux-arm-kernel at lists.infradead.org; coresight at lists.linaro.org; linux-
> kernel at vger.kernel.org; robh+dt at kernel.org;
> krzysztof.kozlowski+dt at linaro.org; conor+dt at kernel.org;
> devicetree at vger.kernel.org; Sunil Kovvuri Goutham
> <sgoutham at marvell.com>; George Cherian <gcherian at marvell.com>; Anil
> Kumar Reddy H <areddy3 at marvell.com>; Tanmay Jagdale
> <tanmay at marvell.com>; mike.leach at linaro.org; leo.yan at linaro.org
> 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 at arm.com>
> >> Sent: Monday, April 15, 2024 2:59 PM
> >> To: Linu Cherian <lcherian at marvell.com>; Suzuki K Poulose
> >> <suzuki.poulose at arm.com>
> >> Cc: linux-arm-kernel at lists.infradead.org; coresight at lists.linaro.org;
> >> linux- kernel at vger.kernel.org; robh+dt at kernel.org;
> >> krzysztof.kozlowski+dt at linaro.org; conor+dt at kernel.org;
> >> devicetree at vger.kernel.org; Sunil Kovvuri Goutham
> >> <sgoutham at marvell.com>; George Cherian <gcherian at marvell.com>;
> Anil
> >> Kumar Reddy H <areddy3 at marvell.com>; Tanmay Jagdale
> >> <tanmay at marvell.com>; mike.leach at linaro.org; leo.yan at linaro.org
> >> 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 at arm.com>
> >>>> Sent: Friday, April 12, 2024 3:36 PM
> >>>> To: Linu Cherian <lcherian at marvell.com>; Suzuki K Poulose
> >>>> <suzuki.poulose at arm.com>
> >>>> Cc: linux-arm-kernel at lists.infradead.org;
> >>>> coresight at lists.linaro.org;
> >>>> linux- kernel at vger.kernel.org; robh+dt at kernel.org;
> >>>> krzysztof.kozlowski+dt at linaro.org; conor+dt at kernel.org;
> >>>> devicetree at vger.kernel.org; Sunil Kovvuri Goutham
> >>>> <sgoutham at marvell.com>; George Cherian <gcherian at marvell.com>;
> >> Anil
> >>>> Kumar Reddy H <areddy3 at marvell.com>; Tanmay Jagdale
> >>>> <tanmay at marvell.com>; mike.leach at linaro.org; leo.yan at linaro.org
> >>>> 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 at marvell.com>
> >>>>> Signed-off-by: Tanmay Jagdale <tanmay at marvell.com>
> >>>>> Signed-off-by: Linu Cherian <lcherian at marvell.com>
> >>>>> ---
> >>>>> 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.
More information about the linux-arm-kernel
mailing list