[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