Hi Mathieu,
On Tue, 18 May 2021 at 16:52, Mathieu Poirier mathieu.poirier@linaro.org wrote:
Good day Mike,
On Wed, May 12, 2021 at 10:17:47PM +0100, Mike Leach wrote:
An example of creating a loadable module to add CoreSight configurations into a system.
In the Kernel samples/coresight directory.
Signed-off-by: Mike Leach mike.leach@linaro.org
MAINTAINERS | 1 + samples/Kconfig | 9 +++ samples/Makefile | 1 + samples/coresight/Makefile | 4 ++ samples/coresight/coresight-cfg-sample.c | 73 ++++++++++++++++++++++++ 5 files changed, 88 insertions(+) create mode 100644 samples/coresight/Makefile create mode 100644 samples/coresight/coresight-cfg-sample.c
diff --git a/MAINTAINERS b/MAINTAINERS index bd7aff0c120f..9ff5f5e7dd06 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1789,6 +1789,7 @@ F: Documentation/trace/coresight/* F: drivers/hwtracing/coresight/* F: include/dt-bindings/arm/coresight-cti-dt.h F: include/linux/coresight* +F: samples/coresight/* F: tools/perf/arch/arm/util/auxtrace.c F: tools/perf/arch/arm/util/cs-etm.c F: tools/perf/arch/arm/util/cs-etm.h diff --git a/samples/Kconfig b/samples/Kconfig index b5a1a7aa7e23..0cd618e15571 100644 --- a/samples/Kconfig +++ b/samples/Kconfig @@ -223,4 +223,13 @@ config SAMPLE_WATCH_QUEUE Build example userspace program to use the new mount_notify(), sb_notify() syscalls and the KEYCTL_WATCH_KEY keyctl() function.
+config SAMPLE_CORESIGHT_SYSCFG
tristate "Build example loadable module for CoreSight config"
depends on CORESIGHT && m
help
Build an example loadable module that adds new CoreSight features
and configuration using the CoreSight system configuration API.
This demonstrates how a user may create their own CoreSight
configurations and easily load them into the system at runtime.
endif # SAMPLES diff --git a/samples/Makefile b/samples/Makefile index 087e0988ccc5..6c96297001a8 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -30,3 +30,4 @@ obj-$(CONFIG_SAMPLE_INTEL_MEI) += mei/ subdir-$(CONFIG_SAMPLE_WATCHDOG) += watchdog subdir-$(CONFIG_SAMPLE_WATCH_QUEUE) += watch_queue obj-$(CONFIG_DEBUG_KMEMLEAK_TEST) += kmemleak/ +obj-$(CONFIG_SAMPLE_CORESIGHT_SYSCFG) += coresight/ diff --git a/samples/coresight/Makefile b/samples/coresight/Makefile new file mode 100644 index 000000000000..09126aabf43d --- /dev/null +++ b/samples/coresight/Makefile @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0-only
+obj-$(CONFIG_SAMPLE_CORESIGHT_SYSCFG) += coresight-cfg-sample.o +ccflags-y += -I$(src)/../../drivers/hwtracing/coresight
On my side this really doesn't work and it's baffling. I double checked the path that gets generated with V=1 and it is correct. I ended up replacing $(src) with $(srctree), which gave me a full path rather than a relative path, to get things going. Please see if that works on your side.
I looked at other Makefiles and $(srctree) is predominant. As such I suggest to go with that to avoid further headaches.
If I substitute $(srctree) instead of $(src) I get the header file as not found. Paths generated... using $(src) : -Isamples/coresight/../../drivers/hwtracing/coresight using $(srctree): -I./../../drivers/hwtracing/coresight
However if I drop some of the relative path to make the line ccflags-y += -I$(srctree)/drivers/hwtracing/coresight
then $srctree does work. Can you confirm that is what you did on your system? If so we can go with that.
diff --git a/samples/coresight/coresight-cfg-sample.c b/samples/coresight/coresight-cfg-sample.c new file mode 100644 index 000000000000..865c188fae34 --- /dev/null +++ b/samples/coresight/coresight-cfg-sample.c @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: GPL-2.0 +/*
- Copyright(C) 2020 Linaro Limited. All rights reserved.
- Author: Mike Leach mike.leach@linaro.org
- */
+#include "coresight-config.h" +#include "coresight-syscfg.h"
+/* create an alternate autofdo configuration */
+/* we will provide 4 sets of preset parameter values */ +#define AFDO2_NR_PRESETS 4 +/* the total number of parameters in used features - strobing has 2 */ +#define AFDO2_NR_PARAM_SUM 2
+static const char *afdo2_ref_names[] = {
"strobing",
+};
+/*
- set of presets leaves strobing window constant while varying period to allow
- experimentation with mark / space ratios for various workloads
- */
+static u64 afdo2_presets[AFDO2_NR_PRESETS][AFDO2_NR_PARAM_SUM] = {
{ 1000, 100 },
{ 1000, 1000 },
{ 1000, 5000 },
{ 1000, 10000 },
+};
+struct cscfg_config_desc afdo2 = {
.name = "autofdo2",
.description = "Setup ETMs with strobing for autofdo\n"
"Supplied presets allow experimentation with mark-space ratio for various loads\n",
.nr_feat_refs = ARRAY_SIZE(afdo2_ref_names),
.feat_ref_names = afdo2_ref_names,
.nr_presets = AFDO2_NR_PRESETS,
.nr_total_params = AFDO2_NR_PARAM_SUM,
.presets = &afdo2_presets[0][0],
+};
+static struct cscfg_feature_desc *sample_feats[] = {
0
NULL
+};
+static struct cscfg_config_desc *sample_cfgs[] = {
&afdo2,
0
NULL
The end result is the same but it is a matter of time before it gets flagged by a bot.
Agreed - I'll fix the Nulls
Thanks
Mike
With the above:
Reviewed-by: Mathieu Poirier mathieu.poirier@linaro.org
+};
+static struct cscfg_load_owner_info mod_owner = {
.type = CSCFG_OWNER_MODULE,
.owner_handle = THIS_MODULE,
+};
+/* module init and exit - just load and unload configs */ +static int __init cscfg_sample_init(void) +{
return cscfg_load_config_sets(sample_cfgs, sample_feats, &mod_owner);
+}
+static void __exit cscfg_sample_exit(void) +{
cscfg_unload_config_sets(&mod_owner);
+}
+module_init(cscfg_sample_init); +module_exit(cscfg_sample_exit);
+MODULE_LICENSE("GPL v2"); +MODULE_AUTHOR("Mike Leach mike.leach@linaro.org");
+MODULE_DESCRIPTION("CoreSight Syscfg Example");
2.17.1