Re: [PATCH v8 09/24] coresight: etm3x: allow etm3x to be built as a module
From: Tingwei Zhang <hidden>
Date: 2020-08-13 02:18:32
On Thu, Aug 13, 2020 at 04:47:41AM +0800, Mathieu Poirier wrote:
On Fri, Aug 07, 2020 at 07:11:38PM +0800, Tingwei Zhang wrote:quoted
From: Kim Phillips <redacted> Allow to build coresight-etm3x as a module, for ease of development. - Kconfig becomes a tristate, to allow =m - append -core to source file name to allow module to be called coresight-etm3x by the Makefile - add an etm_remove function, for module unload - add a MODULE_DEVICE_TABLE for autoloading on boot Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: Leo Yan <redacted> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Randy Dunlap <redacted> Cc: Suzuki K Poulose <Suzuki.Poulose@arm.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Russell King <linux@armlinux.org.uk> Signed-off-by: Kim Phillips <redacted> Signed-off-by: Tingwei Zhang <redacted> Reviewed-by: Mike Leach <redacted> --- drivers/hwtracing/coresight/Kconfig | 5 +++- drivers/hwtracing/coresight/Makefile | 3 ++- ...resight-etm3x.c => coresight-etm3x-core.c} | 27 ++++++++++++++++++- 3 files changed, 32 insertions(+), 3 deletions(-) rename drivers/hwtracing/coresight/{coresight-etm3x.c =>coresight-etm3x-core.c} (97%)quoted
diff --git a/drivers/hwtracing/coresight/Kconfigb/drivers/hwtracing/coresight/Kconfigquoted
index 6433f835fc97..8fd9fd139cf3 100644--- a/drivers/hwtracing/coresight/Kconfig +++ b/drivers/hwtracing/coresight/Kconfig@@ -65,7 +65,7 @@ config CORESIGHT_SINK_ETBV10 special enhancement or added features. config CORESIGHT_SOURCE_ETM3X - bool "CoreSight Embedded Trace Macrocell 3.x driver" + tristate "CoreSight Embedded Trace Macrocell 3.x driver" depends on !ARM64 select CORESIGHT_LINKS_AND_SINKS help@@ -74,6 +74,9 @@ config CORESIGHT_SOURCE_ETM3X This is primarily useful for instruction level tracing.Dependingquoted
the ETM version data tracing may also be available. + To compile this driver as a module, choose M here: the + module will be called coresight-etm3x. + config CORESIGHT_SOURCE_ETM4X bool "CoreSight Embedded Trace Macrocell 4.x driver" depends on ARM64diff --git a/drivers/hwtracing/coresight/Makefileb/drivers/hwtracing/coresight/Makefilequoted
index 19497d1d92bf..d619cfd0abd8 100644--- a/drivers/hwtracing/coresight/Makefile +++ b/drivers/hwtracing/coresight/Makefile@@ -11,7 +11,8 @@ obj-$(CONFIG_CORESIGHT_SINK_TPIU) += coresight-tpiu.o obj-$(CONFIG_CORESIGHT_SINK_ETBV10) += coresight-etb10.o obj-$(CONFIG_CORESIGHT_LINKS_AND_SINKS) += coresight-funnel.o \ coresight-replicator.o -obj-$(CONFIG_CORESIGHT_SOURCE_ETM3X) += coresight-etm3x.ocoresight-etm-cp14.o \quoted
+obj-$(CONFIG_CORESIGHT_SOURCE_ETM3X) += coresight-etm3x.o +coresight-etm3x-y := coresight-etm3x-core.o coresight-etm-cp14.o \ coresight-etm3x-sysfs.o obj-$(CONFIG_CORESIGHT_SOURCE_ETM4X) += coresight-etm4x.o \ coresight-etm4x-sysfs.odiff --git a/drivers/hwtracing/coresight/coresight-etm3x.cb/drivers/hwtracing/coresight/coresight-etm3x-core.cquoted
similarity index 97% rename from drivers/hwtracing/coresight/coresight-etm3x.c rename to drivers/hwtracing/coresight/coresight-etm3x-core.c index bf22dcfd3327..82b333c40006 100644--- a/drivers/hwtracing/coresight/coresight-etm3x.c +++ b/drivers/hwtracing/coresight/coresight-etm3x-core.c@@ -895,6 +895,23 @@ static int etm_probe(struct amba_device *adev,const struct amba_id *id)quoted
return ret; } +static int __exit etm_remove(struct amba_device *adev) +{Not sure adding __exit does anything special here since all the code is removed by the kernel anyway. The same comment goes for the other drivers in this set.
We still need to remove any reference in other part of Kernel to etm device. For example, we remove ETM module but keep coresight module. ETM-perf and coresight-core still could access ETM device structure if etm_perf_symlink() and coresigh_unregister() are not called in etm_remove. We need clean any reference to ETM device structure up. Thanks, Tingwei
quoted
+ struct etm_drvdata *drvdata = dev_get_drvdata(&adev->dev); + + etm_perf_symlink(drvdata->csdev, false); + + if (--etm_count == 0) { +cpuhp_remove_state_nocalls(CPUHP_AP_ARM_CORESIGHT_STARTING);quoted
+ if (hp_online) + cpuhp_remove_state_nocalls(hp_online); + } + + coresight_unregister(drvdata->csdev); + + return 0; +} + #ifdef CONFIG_PM static int etm_runtime_suspend(struct device *dev) {@@ -937,6 +954,8 @@ static const struct amba_id etm_ids[] = { { 0, 0}, }; +MODULE_DEVICE_TABLE(amba, etm_ids); + static struct amba_driver etm_driver = { .drv = { .name = "coresight-etm3x",@@ -945,6 +964,12 @@ static struct amba_driver etm_driver = { .suppress_bind_attrs = true, }, .probe = etm_probe, + .remove = etm_remove, .id_table = etm_ids, }; -builtin_amba_driver(etm_driver); +module_amba_driver(etm_driver); + +MODULE_AUTHOR("Pratik Patel <pratikp@codeaurora.org>"); +MODULE_AUTHOR("Mathieu Poirier <mathieu.poirier@linaro.org>"); +MODULE_DESCRIPTION("Arm CoreSight Program Flow Trace driver");That should be "Arm CoreSight Embedded Trace Macrocell 3.x driver" With the above: Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>quoted
+MODULE_LICENSE("GPL v2"); -- The Qualcomm Innovation Center, Inc. is a member of the Code AuroraForum,quoted
a Linux Foundation Collaborative Project
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel