Commit 9943581c authored by James Clark's avatar James Clark Committed by Namhyung Kim
Browse files

perf scripting python: Add function to get a config value



This can be used to get config values like which objdump Perf uses for
disassembly.

Reviewed-by: default avatarLeo Yan <leo.yan@arm.com>
Signed-off-by: default avatarJames Clark <james.clark@linaro.org>
Tested-by: default avatarGanapatrao Kulkarni <gankulkarni@os.amperecomputing.com>
Cc: Ben Gainey <ben.gainey@arm.com>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Ruidong Tian <tianruidong@linux.alibaba.com>
Cc: Leo Yan <leo.yan@linux.dev>
Cc: Benjamin Gray <bgray@linux.ibm.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: coresight@lists.linaro.org
Cc: John Garry <john.g.garry@oracle.com>
Cc: scclevenger@os.amperecomputing.com
Link: https://lore.kernel.org/r/20240916135743.1490403-4-james.clark@linaro.org


Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
parent ba5ae78a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -624,7 +624,7 @@ as perf_trace_context.perf_script_context .
 perf_set_itrace_options(context, itrace_options) - set --itrace options if they have not been set already
 perf_sample_srcline(context) - returns source_file_name, line_number
 perf_sample_srccode(context) - returns source_file_name, line_number, source_line

 perf_config_get(config_name) - returns the value of the named config item, or None if unset

Util.py Module
~~~~~~~~~~~~~~
+11 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#define PY_SSIZE_T_CLEAN

#include <Python.h>
#include "../../../util/config.h"
#include "../../../util/trace-event.h"
#include "../../../util/event.h"
#include "../../../util/symbol.h"
@@ -182,6 +183,15 @@ static PyObject *perf_sample_srccode(PyObject *obj, PyObject *args)
	return perf_sample_src(obj, args, true);
}

static PyObject *__perf_config_get(PyObject *obj, PyObject *args)
{
	const char *config_name;

	if (!PyArg_ParseTuple(args, "s", &config_name))
		return NULL;
	return Py_BuildValue("s", perf_config_get(config_name));
}

static PyMethodDef ContextMethods[] = {
#ifdef HAVE_LIBTRACEEVENT
	{ "common_pc", perf_trace_context_common_pc, METH_VARARGS,
@@ -199,6 +209,7 @@ static PyMethodDef ContextMethods[] = {
	  METH_VARARGS,	"Get source file name and line number."},
	{ "perf_sample_srccode", perf_sample_srccode,
	  METH_VARARGS,	"Get source file name, line number and line."},
	{ "perf_config_get", __perf_config_get, METH_VARARGS, "Get perf config entry"},
	{ NULL, NULL, 0, NULL}
};

+22 −0
Original line number Diff line number Diff line
@@ -912,6 +912,7 @@ void set_buildid_dir(const char *dir)
struct perf_config_scan_data {
	const char *name;
	const char *fmt;
	const char *value;
	va_list args;
	int ret;
};
@@ -939,3 +940,24 @@ int perf_config_scan(const char *name, const char *fmt, ...)

	return d.ret;
}

static int perf_config_get_cb(const char *var, const char *value, void *data)
{
	struct perf_config_scan_data *d = data;

	if (!strcmp(var, d->name))
		d->value = value;

	return 0;
}

const char *perf_config_get(const char *name)
{
	struct perf_config_scan_data d = {
		.name = name,
		.value = NULL,
	};

	perf_config(perf_config_get_cb, &d);
	return d.value;
}
+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ typedef int (*config_fn_t)(const char *, const char *, void *);
int perf_default_config(const char *, const char *, void *);
int perf_config(config_fn_t fn, void *);
int perf_config_scan(const char *name, const char *fmt, ...) __scanf(2, 3);
const char *perf_config_get(const char *name);
int perf_config_set(struct perf_config_set *set,
		    config_fn_t fn, void *data);
int perf_config_int(int *dest, const char *, const char *);