Re: [PATCH v11 09/24] coresight: etm3x: allow etm3x to be built as a module
On Wed, Sep 23, 2020 at 05:42:08AM +0800, Mathieu Poirier wrote: > On Tue, Sep 15, 2020 at 12:09:18PM -0600, Mathieu Poirier wrote: > > On Tue, Sep 15, 2020 at 06:41:01PM +0800, Tingwei Zhang wrote: > > > From: Kim Phillips > > > > > > 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 > > > - delay advertising the per-cpu etmdrvdata > > > - protect etmdrvdata[] by modifying it on relevant CPU > > > > > > Cc: Mathieu Poirier > > > Cc: Leo Yan > > > Cc: Alexander Shishkin > > > Cc: Randy Dunlap > > > Cc: Suzuki K Poulose > > > Cc: Greg Kroah-Hartman > > > Cc: Russell King > > > Signed-off-by: Kim Phillips > > > Signed-off-by: Tingwei Zhang > > > Reviewed-by: Mike Leach > > > --- > > > drivers/hwtracing/coresight/Kconfig | 5 +- > > > drivers/hwtracing/coresight/Makefile | 5 +- > > > ...resight-etm3x.c => coresight-etm3x-core.c} | 148 > ++ > > > 3 files changed, 122 insertions(+), 36 deletions(-) > > > rename drivers/hwtracing/coresight/{coresight-etm3x.c => > coresight-etm3x-core.c} (90%) > > > > > I got tired of waiting for a V12 and Mike has based his work on complex > configuration on your patchset. So I did the corrections and applied > this set to my tree. With a little luck Greg won't mind the late > submission and > things will work out fine. > > You owe me a beer. If Greg accepts my pull request, you owe him one too. > > Mathieu > Really appreciated it, Mathieu. I definitely owe you and Greg one. I was waiting for other comments. Thanks Tingwei > > > 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..86b4648844b4 100644 > > > --- a/drivers/hwtracing/coresight/Makefile > > > +++ b/drivers/hwtracing/coresight/Makefile > > > @@ -11,8 +11,9 @@ 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 \ > > > - coresight-etm3x-sysfs.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 > > > obj-$(CONFIG_CORESIGHT_STM) += coresight-stm.o > > > diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c > b/drivers/hwtracing/coresight/coresight-etm3x-core.c > > > similarity index 90% > > > rename from drivers/hwtracing/coresight/coresight-etm3x.c > > > rename to drivers/hwtracing/coresight/coresight-etm3x-core.c > > > index bf22dcfd3327..56eba0b5c71f 100644 > > > --- a/drivers/hwtracing/coresight/coresight-etm3x.c > > > +++ b/drivers/hwtracing/coresight/coresight-etm3x-core.c > > > @@ -782,6 +782,42 @@ static void etm_init_trace_id(struct etm_drvdata > *drvdata) > > > drvdata->traceid = coresight_get_trace_id(drvdata->cpu); > > > } > > > > > > +static int __init etm_hp_setup(void) > > > +{ > > > + int ret; > > > + > > > + ret = > cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ARM_CORESIGHT_STARTING, > > > + "arm/coresight:starting", > > > + etm_starting_cpu, > etm_dying_cpu); > > > > Indentation problem. > > > > > + > > > + if (ret) > > > + return ret; > > > + > > > + ret =
Re: [PATCH v11 09/24] coresight: etm3x: allow etm3x to be built as a module
On Tue, Sep 15, 2020 at 12:09:18PM -0600, Mathieu Poirier wrote: > On Tue, Sep 15, 2020 at 06:41:01PM +0800, Tingwei Zhang wrote: > > From: Kim Phillips > > > > 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 > > - delay advertising the per-cpu etmdrvdata > > - protect etmdrvdata[] by modifying it on relevant CPU > > > > Cc: Mathieu Poirier > > Cc: Leo Yan > > Cc: Alexander Shishkin > > Cc: Randy Dunlap > > Cc: Suzuki K Poulose > > Cc: Greg Kroah-Hartman > > Cc: Russell King > > Signed-off-by: Kim Phillips > > Signed-off-by: Tingwei Zhang > > Reviewed-by: Mike Leach > > --- > > drivers/hwtracing/coresight/Kconfig | 5 +- > > drivers/hwtracing/coresight/Makefile | 5 +- > > ...resight-etm3x.c => coresight-etm3x-core.c} | 148 ++ > > 3 files changed, 122 insertions(+), 36 deletions(-) > > rename drivers/hwtracing/coresight/{coresight-etm3x.c => > > coresight-etm3x-core.c} (90%) > > I got tired of waiting for a V12 and Mike has based his work on complex configuration on your patchset. So I did the corrections and applied this set to my tree. With a little luck Greg won't mind the late submission and things will work out fine. You owe me a beer. If Greg accepts my pull request, you owe him one too. Mathieu > > 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..86b4648844b4 100644 > > --- a/drivers/hwtracing/coresight/Makefile > > +++ b/drivers/hwtracing/coresight/Makefile > > @@ -11,8 +11,9 @@ 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 \ > > - coresight-etm3x-sysfs.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 > > obj-$(CONFIG_CORESIGHT_STM) += coresight-stm.o > > diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c > > b/drivers/hwtracing/coresight/coresight-etm3x-core.c > > similarity index 90% > > rename from drivers/hwtracing/coresight/coresight-etm3x.c > > rename to drivers/hwtracing/coresight/coresight-etm3x-core.c > > index bf22dcfd3327..56eba0b5c71f 100644 > > --- a/drivers/hwtracing/coresight/coresight-etm3x.c > > +++ b/drivers/hwtracing/coresight/coresight-etm3x-core.c > > @@ -782,6 +782,42 @@ static void etm_init_trace_id(struct etm_drvdata > > *drvdata) > > drvdata->traceid = coresight_get_trace_id(drvdata->cpu); > > } > > > > +static int __init etm_hp_setup(void) > > +{ > > + int ret; > > + > > + ret = > > cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ARM_CORESIGHT_STARTING, > > +"arm/coresight:starting", > > +etm_starting_cpu, etm_dying_cpu); > > Indentation problem. > > > + > > + if (ret) > > + return ret; > > + > > + ret = cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ONLINE_DYN, > > + "arm/coresight:online", > > + etm_online_cpu, NULL); > > + > > + /* HP dyn state ID returned in ret on success */ > > + if (ret > 0) { > > + hp_online = ret; > > + return 0; > > + } > > + > >
Re: [PATCH v11 09/24] coresight: etm3x: allow etm3x to be built as a module
On Tue, Sep 15, 2020 at 06:41:01PM +0800, Tingwei Zhang wrote: > From: Kim Phillips > > 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 > - delay advertising the per-cpu etmdrvdata > - protect etmdrvdata[] by modifying it on relevant CPU > > Cc: Mathieu Poirier > Cc: Leo Yan > Cc: Alexander Shishkin > Cc: Randy Dunlap > Cc: Suzuki K Poulose > Cc: Greg Kroah-Hartman > Cc: Russell King > Signed-off-by: Kim Phillips > Signed-off-by: Tingwei Zhang > Reviewed-by: Mike Leach > --- > drivers/hwtracing/coresight/Kconfig | 5 +- > drivers/hwtracing/coresight/Makefile | 5 +- > ...resight-etm3x.c => coresight-etm3x-core.c} | 148 ++ > 3 files changed, 122 insertions(+), 36 deletions(-) > rename drivers/hwtracing/coresight/{coresight-etm3x.c => > coresight-etm3x-core.c} (90%) > > 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..86b4648844b4 100644 > --- a/drivers/hwtracing/coresight/Makefile > +++ b/drivers/hwtracing/coresight/Makefile > @@ -11,8 +11,9 @@ 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 \ > - coresight-etm3x-sysfs.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 > obj-$(CONFIG_CORESIGHT_STM) += coresight-stm.o > diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c > b/drivers/hwtracing/coresight/coresight-etm3x-core.c > similarity index 90% > rename from drivers/hwtracing/coresight/coresight-etm3x.c > rename to drivers/hwtracing/coresight/coresight-etm3x-core.c > index bf22dcfd3327..56eba0b5c71f 100644 > --- a/drivers/hwtracing/coresight/coresight-etm3x.c > +++ b/drivers/hwtracing/coresight/coresight-etm3x-core.c > @@ -782,6 +782,42 @@ static void etm_init_trace_id(struct etm_drvdata > *drvdata) > drvdata->traceid = coresight_get_trace_id(drvdata->cpu); > } > > +static int __init etm_hp_setup(void) > +{ > + int ret; > + > + ret = > cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ARM_CORESIGHT_STARTING, > + "arm/coresight:starting", > + etm_starting_cpu, etm_dying_cpu); Indentation problem. > + > + if (ret) > + return ret; > + > + ret = cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ONLINE_DYN, > +"arm/coresight:online", > +etm_online_cpu, NULL); > + > + /* HP dyn state ID returned in ret on success */ > + if (ret > 0) { > + hp_online = ret; > + return 0; > + } > + > + /* failed dyn state - remove others */ > + cpuhp_remove_state_nocalls(CPUHP_AP_ARM_CORESIGHT_STARTING); > + > + return ret; > +} > + > +static void etm_hp_clear(void) > +{ > + cpuhp_remove_state_nocalls(CPUHP_AP_ARM_CORESIGHT_STARTING); > + if (hp_online) { > + cpuhp_remove_state_nocalls(hp_online); > + hp_online = 0; > + } > +} > + > static int etm_probe(struct amba_device *adev, const struct amba_id *id) > { > int ret; > @@ -824,38 +860,23 @@ static int etm_probe(struct amba_device *adev, const >
[PATCH v11 09/24] coresight: etm3x: allow etm3x to be built as a module
From: Kim Phillips 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 - delay advertising the per-cpu etmdrvdata - protect etmdrvdata[] by modifying it on relevant CPU Cc: Mathieu Poirier Cc: Leo Yan Cc: Alexander Shishkin Cc: Randy Dunlap Cc: Suzuki K Poulose Cc: Greg Kroah-Hartman Cc: Russell King Signed-off-by: Kim Phillips Signed-off-by: Tingwei Zhang Reviewed-by: Mike Leach --- drivers/hwtracing/coresight/Kconfig | 5 +- drivers/hwtracing/coresight/Makefile | 5 +- ...resight-etm3x.c => coresight-etm3x-core.c} | 148 ++ 3 files changed, 122 insertions(+), 36 deletions(-) rename drivers/hwtracing/coresight/{coresight-etm3x.c => coresight-etm3x-core.c} (90%) 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..86b4648844b4 100644 --- a/drivers/hwtracing/coresight/Makefile +++ b/drivers/hwtracing/coresight/Makefile @@ -11,8 +11,9 @@ 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 \ - coresight-etm3x-sysfs.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 obj-$(CONFIG_CORESIGHT_STM) += coresight-stm.o diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c b/drivers/hwtracing/coresight/coresight-etm3x-core.c similarity index 90% rename from drivers/hwtracing/coresight/coresight-etm3x.c rename to drivers/hwtracing/coresight/coresight-etm3x-core.c index bf22dcfd3327..56eba0b5c71f 100644 --- a/drivers/hwtracing/coresight/coresight-etm3x.c +++ b/drivers/hwtracing/coresight/coresight-etm3x-core.c @@ -782,6 +782,42 @@ static void etm_init_trace_id(struct etm_drvdata *drvdata) drvdata->traceid = coresight_get_trace_id(drvdata->cpu); } +static int __init etm_hp_setup(void) +{ + int ret; + + ret = cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ARM_CORESIGHT_STARTING, +"arm/coresight:starting", +etm_starting_cpu, etm_dying_cpu); + + if (ret) + return ret; + + ret = cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ONLINE_DYN, + "arm/coresight:online", + etm_online_cpu, NULL); + + /* HP dyn state ID returned in ret on success */ + if (ret > 0) { + hp_online = ret; + return 0; + } + + /* failed dyn state - remove others */ + cpuhp_remove_state_nocalls(CPUHP_AP_ARM_CORESIGHT_STARTING); + + return ret; +} + +static void etm_hp_clear(void) +{ + cpuhp_remove_state_nocalls(CPUHP_AP_ARM_CORESIGHT_STARTING); + if (hp_online) { + cpuhp_remove_state_nocalls(hp_online); + hp_online = 0; + } +} + static int etm_probe(struct amba_device *adev, const struct amba_id *id) { int ret; @@ -824,38 +860,23 @@ static int etm_probe(struct amba_device *adev, const struct amba_id *id) return -ENOMEM; cpus_read_lock(); - etmdrvdata[drvdata->cpu] = drvdata; if (smp_call_function_single(drvdata->cpu, etm_init_arch_data, drvdata, 1))