[PATCH v7 11/25] coresight: etb: allow etb to be built as a module
Tingwei Zhang
tingweiz at codeaurora.org
Thu Aug 6 07:19:23 EDT 2020
On Wed, Aug 05, 2020 at 11:43:36PM +0800, Suzuki K Poulose wrote:
> On 08/05/2020 03:54 AM, Tingwei Zhang wrote:
> >From: Kim Phillips <kim.phillips at arm.com>
> >
> >Allow to build coresight-etb10 as a module, for ease of development.
> >
> >- Kconfig becomes a tristate, to allow =m
> >- add an etb_remove function, for module unload
> >- add a MODULE_DEVICE_TABLE for autoloading on boot
> >
> >Cc: Mathieu Poirier <mathieu.poirier at linaro.org>
> >Cc: Leo Yan <leo.yan at linaro.org>
> >Cc: Alexander Shishkin <alexander.shishkin at linux.intel.com>
> >Cc: Randy Dunlap <rdunlap at infradead.org>
> >Cc: Suzuki K Poulose <Suzuki.Poulose at arm.com>
> >Cc: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
> >Cc: Russell King <linux at armlinux.org.uk>
> >Signed-off-by: Kim Phillips <kim.phillips at arm.com>
> >Signed-off-by: Tingwei Zhang <tingwei at codeaurora.org>
> >Tested-by: Mike Leach <mike.leach at linaro.org>
>
>
> >---
> > drivers/hwtracing/coresight/Kconfig | 5 ++++-
> > drivers/hwtracing/coresight/coresight-etb10.c | 20 ++++++++++++++++++-
> > 2 files changed, 23 insertions(+), 2 deletions(-)
> >
> >diff --git a/drivers/hwtracing/coresight/Kconfig
> >b/drivers/hwtracing/coresight/Kconfig
> >index d6e107bbd30b..996d84a1edb8 100644
> >--- a/drivers/hwtracing/coresight/Kconfig
> >+++ b/drivers/hwtracing/coresight/Kconfig
> >@@ -57,13 +57,16 @@ config CORESIGHT_SINK_TPIU
> > the on-board coresight memory can handle.
> >
> > config CORESIGHT_SINK_ETBV10
> >- bool "Coresight ETBv1.0 driver"
> >+ tristate "Coresight ETBv1.0 driver"
> > depends on CORESIGHT_LINKS_AND_SINKS
> > help
> > This enables support for the Embedded Trace Buffer version 1.0 driver
> > that complies with the generic implementation of the component
> >without
> > special enhancement or added features.
> >
> >+ To compile this driver as a module, choose M here: the
> >+ module will be called coresight-etb10.
> >+
> > config CORESIGHT_SOURCE_ETM3X
> > tristate "CoreSight Embedded Trace Macrocell 3.x driver"
> > depends on !ARM64
> >diff --git a/drivers/hwtracing/coresight/coresight-etb10.c
> >b/drivers/hwtracing/coresight/coresight-etb10.c
> >index 04ee9cda988d..b40756497c9a 100644
> >--- a/drivers/hwtracing/coresight/coresight-etb10.c
> >+++ b/drivers/hwtracing/coresight/coresight-etb10.c
> >@@ -801,6 +801,16 @@ static int etb_probe(struct amba_device *adev, const
> >struct amba_id *id)
> > return ret;
> > }
> >
> >+static int __exit etb_remove(struct amba_device *adev)
> >+{
> >+ struct etb_drvdata *drvdata = dev_get_drvdata(&adev->dev);
> >+
> >+ misc_deregister(&drvdata->miscdev);
> >+ coresight_unregister(drvdata->csdev);
> >+
> >+ return 0;
> >+}
> >+
>
> I am worried about the dangling reference via the misc device to
> the drvdata. Not sure, if we need to grab the reference the module
> for each open fd on the misc device. The misc device infrastructure
> doesn't seem to do any of this implicitly. This is something worth
> checking. I will see if I can trigger this.
>
Misc device is one char device. cdev_get() is called in chrdev_open()
to grab reference of module. Look like we are safe here.
Thanks,
Tingwei
> i.e,
>
> CPU 0: CPU1:
>
> open("/dev/etb")
> etb_open()
> ... etb_remove() {
> ..
> coresight_unregister()
> }
>
>
> read()
> etb_read()
> deal with free'd drvdata ?
>
>
> Cheers
> Suzuki
More information about the linux-arm-kernel
mailing list