Message ID | 20200807111153.7784-10-tingwei@codeaurora.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | coresight: allow to build coresight as modules | expand |
On Fri, Aug 07, 2020 at 07:11:38PM +0800, Tingwei Zhang wrote: > From: Kim Phillips <kim.phillips@arm.com> > > 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 <leo.yan@linaro.org> > Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> > Cc: Randy Dunlap <rdunlap@infradead.org> > 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 <kim.phillips@arm.com> > Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org> > Reviewed-by: Mike Leach <mike.leach@linaro.org> > --- > 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%) > > diff --git a/drivers/hwtracing/coresight/Kconfig b/drivers/hwtracing/coresight/Kconfig > 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. Depending > 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 ARM64 > diff --git a/drivers/hwtracing/coresight/Makefile b/drivers/hwtracing/coresight/Makefile > 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.o coresight-etm-cp14.o \ > +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.o > diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c b/drivers/hwtracing/coresight/coresight-etm3x-core.c > 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) > 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. > + 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); > + 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> > +MODULE_LICENSE("GPL v2"); > -- > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, > a Linux Foundation Collaborative Project >
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: > > From: Kim Phillips <kim.phillips@arm.com> > > > > 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 <leo.yan@linaro.org> > > Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> > > Cc: Randy Dunlap <rdunlap@infradead.org> > > 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 <kim.phillips@arm.com> > > Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org> > > Reviewed-by: Mike Leach <mike.leach@linaro.org> > > --- > > 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%) > > > > diff --git a/drivers/hwtracing/coresight/Kconfig > b/drivers/hwtracing/coresight/Kconfig > > 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. > Depending > > 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 ARM64 > > diff --git a/drivers/hwtracing/coresight/Makefile > b/drivers/hwtracing/coresight/Makefile > > 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.o > coresight-etm-cp14.o \ > > +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.o > > diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c > b/drivers/hwtracing/coresight/coresight-etm3x-core.c > > 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) > > 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 > > + 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); > > + 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> > > > +MODULE_LICENSE("GPL v2"); > > -- > > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora > Forum, > > a Linux Foundation Collaborative Project > >
On 08/07/2020 12:11 PM, Tingwei Zhang wrote: > From: Kim Phillips <kim.phillips@arm.com> > > 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 <leo.yan@linaro.org> > Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> > Cc: Randy Dunlap <rdunlap@infradead.org> > 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 <kim.phillips@arm.com> > Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org> > Reviewed-by: Mike Leach <mike.leach@linaro.org> > --- > 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%) > > diff --git a/drivers/hwtracing/coresight/Kconfig b/drivers/hwtracing/coresight/Kconfig > 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. Depending > 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 ARM64 > diff --git a/drivers/hwtracing/coresight/Makefile b/drivers/hwtracing/coresight/Makefile > 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.o coresight-etm-cp14.o \ > +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.o > diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c b/drivers/hwtracing/coresight/coresight-etm3x-core.c > 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) > return ret; > } > > +static int __exit etm_remove(struct amba_device *adev) > +{ > + 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); > + if (hp_online) > + cpuhp_remove_state_nocalls(hp_online); > + } > + As mentioned in the previous version, this needs fixing similar to the etm4x to avoid races with etm_count. I understand that it is an exisiting problem. But this set exposes it more due to etm_remove() calls and is much more probable to hit it. Suzuki
On Thu, Aug 13, 2020 at 05:47:22PM +0800, Suzuki K Poulose wrote: > On 08/07/2020 12:11 PM, Tingwei Zhang wrote: > >From: Kim Phillips <kim.phillips@arm.com> > > > >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 <leo.yan@linaro.org> > >Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> > >Cc: Randy Dunlap <rdunlap@infradead.org> > >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 <kim.phillips@arm.com> > >Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org> > >Reviewed-by: Mike Leach <mike.leach@linaro.org> > >--- > > 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%) > > > >diff --git a/drivers/hwtracing/coresight/Kconfig > >b/drivers/hwtracing/coresight/Kconfig > >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. Depending > > 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 ARM64 > >diff --git a/drivers/hwtracing/coresight/Makefile > >b/drivers/hwtracing/coresight/Makefile > >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.o > >coresight-etm-cp14.o \ > >+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.o > >diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c > >b/drivers/hwtracing/coresight/coresight-etm3x-core.c > >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) > > return ret; > > } > > > >+static int __exit etm_remove(struct amba_device *adev) > >+{ > >+ 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); > >+ if (hp_online) > >+ cpuhp_remove_state_nocalls(hp_online); > >+ } > >+ > > As mentioned in the previous version, this needs fixing > similar to the etm4x to avoid races with etm_count. I understand > that it is an exisiting problem. But this set exposes it more > due to etm_remove() calls and is much more probable to hit it. > OK. I'll fix this. Can you help to review ETM4 fix? If that's fine, I'll make similar fix here. Unfortunately, I don't have any device with ETM3. Can anyone help to verify the function on ETM3? I'll really appreciate that. Thanks, Tingwei > > Suzuki
On Thu, 13 Aug 2020 at 04:57, Tingwei Zhang <tingweiz@codeaurora.org> wrote: > > On Thu, Aug 13, 2020 at 05:47:22PM +0800, Suzuki K Poulose wrote: > > On 08/07/2020 12:11 PM, Tingwei Zhang wrote: > > >From: Kim Phillips <kim.phillips@arm.com> > > > > > >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 <leo.yan@linaro.org> > > >Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> > > >Cc: Randy Dunlap <rdunlap@infradead.org> > > >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 <kim.phillips@arm.com> > > >Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org> > > >Reviewed-by: Mike Leach <mike.leach@linaro.org> > > >--- > > > 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%) > > > > > >diff --git a/drivers/hwtracing/coresight/Kconfig > > >b/drivers/hwtracing/coresight/Kconfig > > >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. Depending > > > 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 ARM64 > > >diff --git a/drivers/hwtracing/coresight/Makefile > > >b/drivers/hwtracing/coresight/Makefile > > >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.o > > >coresight-etm-cp14.o \ > > >+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.o > > >diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c > > >b/drivers/hwtracing/coresight/coresight-etm3x-core.c > > >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) > > > return ret; > > > } > > > > > >+static int __exit etm_remove(struct amba_device *adev) > > >+{ > > >+ 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); > > >+ if (hp_online) > > >+ cpuhp_remove_state_nocalls(hp_online); > > >+ } > > >+ > > > > As mentioned in the previous version, this needs fixing > > similar to the etm4x to avoid races with etm_count. I understand > > that it is an exisiting problem. But this set exposes it more > > due to etm_remove() calls and is much more probable to hit it. > > > OK. I'll fix this. Can you help to review ETM4 fix? If that's fine, > I'll make similar fix here. > > Unfortunately, I don't have any device with ETM3. Can anyone help > to verify the function on ETM3? I'll really appreciate that. I'll take care of ETMv3. Please wait before sending a new revision since I am still reviewing the current set. I will let you know when I am done. > > Thanks, > Tingwei > > > > Suzuki
On Thu, Aug 13, 2020 at 11:00:04AM -0600, Mathieu Poirier wrote: > On Thu, 13 Aug 2020 at 04:57, Tingwei Zhang <tingweiz@codeaurora.org> wrote: > > > > On Thu, Aug 13, 2020 at 05:47:22PM +0800, Suzuki K Poulose wrote: > > > On 08/07/2020 12:11 PM, Tingwei Zhang wrote: > > > >From: Kim Phillips <kim.phillips@arm.com> > > > > > > > >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 <leo.yan@linaro.org> > > > >Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> > > > >Cc: Randy Dunlap <rdunlap@infradead.org> > > > >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 <kim.phillips@arm.com> > > > >Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org> > > > >Reviewed-by: Mike Leach <mike.leach@linaro.org> > > > >--- > > > > 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%) > > > > > > > >diff --git a/drivers/hwtracing/coresight/Kconfig > > > >b/drivers/hwtracing/coresight/Kconfig > > > >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. Depending > > > > 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 ARM64 > > > >diff --git a/drivers/hwtracing/coresight/Makefile > > > >b/drivers/hwtracing/coresight/Makefile > > > >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.o > > > >coresight-etm-cp14.o \ > > > >+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.o > > > >diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c > > > >b/drivers/hwtracing/coresight/coresight-etm3x-core.c > > > >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) > > > > return ret; > > > > } > > > > > > > >+static int __exit etm_remove(struct amba_device *adev) > > > >+{ > > > >+ 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); > > > >+ if (hp_online) > > > >+ cpuhp_remove_state_nocalls(hp_online); > > > >+ } > > > >+ > > > > > > As mentioned in the previous version, this needs fixing > > > similar to the etm4x to avoid races with etm_count. I understand > > > that it is an exisiting problem. But this set exposes it more > > > due to etm_remove() calls and is much more probable to hit it. > > > > > OK. I'll fix this. Can you help to review ETM4 fix? If that's fine, > > I'll make similar fix here. > > > > Unfortunately, I don't have any device with ETM3. Can anyone help > > to verify the function on ETM3? I'll really appreciate that. > > I'll take care of ETMv3. Please wait before sending a new revision > since I am still reviewing the current set. I will let you know when > I am done. > Thanks a lot, Mathieu. I'll wait for your comments. > > > > Thanks, > > Tingwei > > > > > > Suzuki > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff --git a/drivers/hwtracing/coresight/Kconfig b/drivers/hwtracing/coresight/Kconfig 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. Depending 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 ARM64 diff --git a/drivers/hwtracing/coresight/Makefile b/drivers/hwtracing/coresight/Makefile 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.o coresight-etm-cp14.o \ +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.o diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c b/drivers/hwtracing/coresight/coresight-etm3x-core.c 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) return ret; } +static int __exit etm_remove(struct amba_device *adev) +{ + 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); + 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"); +MODULE_LICENSE("GPL v2");