On 25/04/2024 03:07, Linu Cherian wrote: > 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. Looks good to me!