From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: alice.mei.rogers@gmail.com, james.clark@linaro.org,
leo.yan@linux.dev, namhyung@kernel.org, adrian.hunter@intel.com,
dapeng1.mi@linux.intel.com, linux-kernel@vger.kernel.org,
linux-perf-users@vger.kernel.org, mingo@redhat.com,
peterz@infradead.org, tmricht@linux.ibm.com
Subject: Re: [PATCH v4 47/49] perf Makefile: Update Python script installation path
Date: Sat, 26 Sep 2026 21:05:36 +0200 [thread overview]
Message-ID: <argXgGhrHBCWhkc7@x2> (raw)
In-Reply-To: <20260926062029.800743-48-irogers@google.com>
On Fri, Sep 25, 2026 at 11:20:14PM -0700, Ian Rogers wrote:
> Replace the libpython feature test with a python-module feature test
> checking for Python C extension build capability, and update feature
> test references accordingly.
>
> Remove references to the legacy scripts/python directory and install
> standalone Python scripts (python/*.py), type stubs (python/perf.pyi),
> and the compiled perf extension module (python/perf*.so, when built)
> directly under the python directory in libexec. Update the TUI script
> browser (ui/browsers/scripts.c) to discover standalone scripts from the
> updated installation path.
Resolved a conflict here, final result:
⬢ [acme@toolbx perf-tools-next]$ diff -u tools/perf/Makefile.perf.orig tools/perf/Makefile.perf
--- tools/perf/Makefile.perf.orig 2026-09-26 20:54:07.068821895 +0200
+++ tools/perf/Makefile.perf 2026-09-26 21:00:31.671088291 +0200
@@ -19,7 +19,7 @@
#
# Define LIBPERL to enable perl script extension.
#
-# Define NO_LIBPYTHON to disable python script extension.
+# Define NO_PYTHON_MODULE to disable python script extension.
#
# Define PYTHON to point to the python binary if the default
# `python' is not correct; for example: PYTHON=python2
@@ -900,14 +900,8 @@
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'; \
$(INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
endif
-ifndef NO_LIBPYTHON
+ifndef NO_PYTHON_MODULE
$(call QUIET_INSTALL, python-scripts) \
- $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
- $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'; \
- $(INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -m 644 -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
- $(INSTALL) scripts/python/*.py -m 644 -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'; \
- $(INSTALL) scripts/python/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
- $(call QUIET_INSTALL, python-scripts-standalone) \
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/python' && \
$(INSTALL) python/*.py -m 755 -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/python' && \
$(INSTALL) python/perf.pyi -m 644 -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/python' && \
⬢ [acme@toolbx perf-tools-next]$
and:
diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index e04125ad4f28fc94..6cb6b02fb0d23808 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -312,7 +312,7 @@ PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
# Python 3.8 changed the output of `python-config --ldflags` to not include the
# '-lpythonX.Y' flag unless '--embed' is also passed. The feature check for
-# libpython fails if that flag is not included in LDFLAGS
+# python-module fails if that flag is not included in LDFLAGS
ifeq ($(shell $(PYTHON_CONFIG_SQ) --ldflags --embed 2>&1 1>/dev/null; echo $$?), 0)
PYTHON_CONFIG_LDFLAGS := --ldflags --embed
else
@@ -335,8 +335,8 @@ ifdef PYTHON_CONFIG
endif
endif
-FEATURE_CHECK_CFLAGS-libpython := $(PYTHON_EMBED_CCOPTS)
-FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
+FEATURE_CHECK_CFLAGS-python-module := $(PYTHON_EMBED_CCOPTS)
+FEATURE_CHECK_LDFLAGS-python-module := $(PYTHON_EMBED_LDOPTS)
FEATURE_CHECK_LDFLAGS-libaio = -lrt
@@ -808,9 +808,8 @@ endif
disable-python = $(eval $(disable-python_code))
define disable-python_code
- CFLAGS += -DNO_LIBPYTHON
$(warning $1)
- NO_LIBPYTHON := 1
+ NO_PYTHON_MODULE := 1
endef
# Minimum Python version for the interpreters perf runs while building,
@@ -824,7 +823,7 @@ ifdef PYTHON
endif
PYTHON_EXTENSION_SUFFIX := '.so'
-ifdef NO_LIBPYTHON
+ifdef NO_PYTHON_MODULE
$(call disable-python,Python support disabled by user)
else
@@ -837,7 +836,7 @@ else
$(call disable-python,No 'python-config' tool was found: disables Python support - please install python-devel/python-dev)
else
- ifneq ($(feature-libpython), 1)
+ ifneq ($(feature-python-module), 1)
$(call disable-python,No 'Python.h' was found: disables Python support - please install python-devel/python-dev)
else
# The binding is built even when jevents generation is turned off
@@ -846,9 +845,9 @@ else
# older interpreters with "TypeError: 'type' object is not
# subscriptable" instead of a Makefile error.
ifneq ($(PYTHON_39_GOOD), 1)
- $(error ERROR: Python interpreter needed for the python binding too old (older than 3.9). Install a newer python or build with NO_LIBPYTHON=1.)
+ $(error ERROR: Python interpreter needed for the python binding too old (older than 3.9). Install a newer python or build with NO_PYTHON_MODULE=1.)
endif
- CFLAGS += -DHAVE_LIBPYTHON_SUPPORT
+ CFLAGS += -DHAVE_PYTHON_MODULE_SUPPORT
PYTHON_SETUPTOOLS_INSTALLED := $(shell $(PYTHON) -c 'import setuptools;' 2> /dev/null && echo "yes" || echo "no")
ifeq ($(PYTHON_SETUPTOOLS_INSTALLED), yes)
PYTHON_EXTENSION_SUFFIX := $(shell $(PYTHON) -c 'from importlib import machinery; print(machinery.EXTENSION_SUFFIXES[0])')
> Assisted-by: Antigravity:gemini-3.1-pro
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
> tools/build/Makefile.feature | 4 +-
> tools/build/feature/Makefile | 4 +-
> tools/build/feature/test-all.c | 6 +-
> tools/build/feature/test-libpython.c | 10 --
> tools/build/feature/test-python-module.c | 13 ++
> tools/perf/Documentation/perf-check.txt | 1 +
> tools/perf/Makefile.config | 15 +-
> tools/perf/Makefile.perf | 8 +-
> tools/perf/builtin-check.c | 2 +-
> tools/perf/scripts/install-build-deps.sh | 4 +-
> tools/perf/tests/make | 8 +-
> tools/perf/ui/browsers/scripts.c | 184 +++++++++++++++--------
> 12 files changed, 156 insertions(+), 103 deletions(-)
> delete mode 100644 tools/build/feature/test-libpython.c
> create mode 100644 tools/build/feature/test-python-module.c
>
> diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
> index 331f5cdfc34b..3ca7a4f5c7fd 100644
> --- a/tools/build/Makefile.feature
> +++ b/tools/build/Makefile.feature
> @@ -79,7 +79,7 @@ FEATURE_TESTS_BASIC := \
> libelf-zstd \
> libnuma \
> numa_num_possible_cpus \
> - libpython \
> + python-module \
> libslang \
> libtraceevent \
> libcpupower \
> @@ -145,7 +145,7 @@ FEATURE_DISPLAY ?= \
> libelf \
> libnuma \
> numa_num_possible_cpus \
> - libpython \
> + python-module \
> libcapstone \
> llvm-perf \
> zlib \
> diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> index cdf89f132074..269af8e8f5cf 100644
> --- a/tools/build/feature/Makefile
> +++ b/tools/build/feature/Makefile
> @@ -32,7 +32,7 @@ FILES= \
> test-libnuma.bin \
> test-numa_num_possible_cpus.bin \
> test-libperl.bin \
> - test-libpython.bin \
> + test-python-module.bin \
> test-libslang.bin \
> test-libtraceevent.bin \
> test-libcpupower.bin \
> @@ -261,7 +261,7 @@ endif
> $(OUTPUT)test-libperl.bin:
> $(BUILD) $(FLAGS_PERL_EMBED)
>
> -$(OUTPUT)test-libpython.bin:
> +$(OUTPUT)test-python-module.bin:
> $(BUILD) $(FLAGS_PYTHON_EMBED)
>
> $(OUTPUT)test-libbfd.bin:
> diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c
> index 544563d62950..0ee16eccd9e0 100644
> --- a/tools/build/feature/test-all.c
> +++ b/tools/build/feature/test-all.c
> @@ -10,8 +10,8 @@
> * Quirk: Python headers cannot be in arbitrary places, so keep this testcase at
> * the top:
> */
> -#define main main_test_libpython
> -# include "test-libpython.c"
> +#define main main_test_python_module
> +# include "test-python-module.c"
> #undef main
>
> #define main main_test_hello
> @@ -148,7 +148,7 @@
>
> int main(int argc, char *argv[])
> {
> - main_test_libpython();
> + main_test_python_module();
> main_test_hello();
> main_test_libelf();
> main_test_gettid();
> diff --git a/tools/build/feature/test-libpython.c b/tools/build/feature/test-libpython.c
> deleted file mode 100644
> index 371c9113e49d..000000000000
> --- a/tools/build/feature/test-libpython.c
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -#include <Python.h>
> -
> -int main(void)
> -{
> - Py_Initialize();
> -
> - return 0;
> -}
> -#undef _GNU_SOURCE
> diff --git a/tools/build/feature/test-python-module.c b/tools/build/feature/test-python-module.c
> new file mode 100644
> index 000000000000..50e9e5062feb
> --- /dev/null
> +++ b/tools/build/feature/test-python-module.c
> @@ -0,0 +1,13 @@
> +// SPDX-License-Identifier: GPL-2.0
> +#include <Python.h>
> +
> +int main(void)
> +{
> + static struct PyModuleDef moduledef = {
> + PyModuleDef_HEAD_INIT,
> + .m_name = "test",
> + };
> + PyObject *module = PyModule_Create(&moduledef);
> +
> + return module ? 0 : -1;
> +}
> diff --git a/tools/perf/Documentation/perf-check.txt b/tools/perf/Documentation/perf-check.txt
> index 3d169e5bb372..a80913794eb6 100644
> --- a/tools/perf/Documentation/perf-check.txt
> +++ b/tools/perf/Documentation/perf-check.txt
> @@ -65,6 +65,7 @@ feature::
> libunwind / HAVE_LIBUNWIND_SUPPORT
> lzma / HAVE_LZMA_SUPPORT
> numa_num_possible_cpus / HAVE_LIBNUMA_SUPPORT
> + python-module / HAVE_PYTHON_MODULE_SUPPORT
> zlib / HAVE_ZLIB_SUPPORT
> zstd / HAVE_ZSTD_SUPPORT
>
> diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> index e6cfcbe0483b..6c0071db8523 100644
> --- a/tools/perf/Makefile.config
> +++ b/tools/perf/Makefile.config
> @@ -312,7 +312,7 @@ PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
>
> # Python 3.8 changed the output of `python-config --ldflags` to not include the
> # '-lpythonX.Y' flag unless '--embed' is also passed. The feature check for
> -# libpython fails if that flag is not included in LDFLAGS
> +# python-module fails if that flag is not included in LDFLAGS
> ifeq ($(shell $(PYTHON_CONFIG_SQ) --ldflags --embed 2>&1 1>/dev/null; echo $$?), 0)
> PYTHON_CONFIG_LDFLAGS := --ldflags --embed
> else
> @@ -335,8 +335,8 @@ ifdef PYTHON_CONFIG
> endif
> endif
>
> -FEATURE_CHECK_CFLAGS-libpython := $(PYTHON_EMBED_CCOPTS)
> -FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
> +FEATURE_CHECK_CFLAGS-python-module := $(PYTHON_EMBED_CCOPTS)
> +FEATURE_CHECK_LDFLAGS-python-module := $(PYTHON_EMBED_LDOPTS)
>
> FEATURE_CHECK_LDFLAGS-libaio = -lrt
>
> @@ -808,13 +808,12 @@ endif
>
> disable-python = $(eval $(disable-python_code))
> define disable-python_code
> - CFLAGS += -DNO_LIBPYTHON
> $(warning $1)
> - NO_LIBPYTHON := 1
> + NO_PYTHON_MODULE := 1
> endef
>
> PYTHON_EXTENSION_SUFFIX := '.so'
> -ifdef NO_LIBPYTHON
> +ifdef NO_PYTHON_MODULE
> $(call disable-python,Python support disabled by user)
> else
>
> @@ -827,10 +826,10 @@ else
> $(call disable-python,No 'python-config' tool was found: disables Python support - please install python-devel/python-dev)
> else
>
> - ifneq ($(feature-libpython), 1)
> + ifneq ($(feature-python-module), 1)
> $(call disable-python,No 'Python.h' was found: disables Python support - please install python-devel/python-dev)
> else
> - CFLAGS += -DHAVE_LIBPYTHON_SUPPORT
> + CFLAGS += -DHAVE_PYTHON_MODULE_SUPPORT
> PYTHON_SETUPTOOLS_INSTALLED := $(shell $(PYTHON) -c 'import setuptools;' 2> /dev/null && echo "yes" || echo "no")
> ifeq ($(PYTHON_SETUPTOOLS_INSTALLED), yes)
> PYTHON_EXTENSION_SUFFIX := $(shell $(PYTHON) -c 'from importlib import machinery; print(machinery.EXTENSION_SUFFIXES[0])')
> diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
> index eaff13a31c50..8fe603aa9773 100644
> --- a/tools/perf/Makefile.perf
> +++ b/tools/perf/Makefile.perf
> @@ -19,7 +19,7 @@ include ../scripts/utilities.mak
> #
> # Define LIBPERL to enable perl script extension.
> #
> -# Define NO_LIBPYTHON to disable python script extension.
> +# Define NO_PYTHON_MODULE to disable python script extension.
> #
> # Define PYTHON to point to the python binary if the default
> # `python' is not correct; for example: PYTHON=python2
> @@ -900,11 +900,9 @@ ifdef LIBPERL
> $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'; \
> $(INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
> endif
> -ifndef NO_LIBPYTHON
> +
> +ifndef NO_PYTHON_MODULE
> $(call QUIET_INSTALL, python-scripts) \
> - $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'; \
> - $(INSTALL) python/*.py -m 644 -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'
> - $(call QUIET_INSTALL, python-scripts-standalone) \
> $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/python' && \
> $(INSTALL) python/*.py -m 755 -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/python' && \
> $(INSTALL) python/perf.pyi -m 644 -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/python' && \
> diff --git a/tools/perf/builtin-check.c b/tools/perf/builtin-check.c
> index 35272aaeb613..06711362d37f 100644
> --- a/tools/perf/builtin-check.c
> +++ b/tools/perf/builtin-check.c
> @@ -52,7 +52,7 @@ struct feature_status supported_features[] = {
> FEATURE_STATUS("libnuma", HAVE_LIBNUMA_SUPPORT),
> FEATURE_STATUS("libopencsd", HAVE_CSTRACE_SUPPORT),
> FEATURE_STATUS_TIP("libperl", HAVE_LIBPERL_SUPPORT, "Deprecated, use LIBPERL=1 and install perl-ExtUtils-Embed/libperl-dev to build with it"),
> - FEATURE_STATUS("python-module", HAVE_LIBPYTHON_SUPPORT),
> + FEATURE_STATUS("python-module", HAVE_PYTHON_MODULE_SUPPORT),
> FEATURE_STATUS("libpfm4", HAVE_LIBPFM),
> FEATURE_STATUS("libslang", HAVE_SLANG_SUPPORT),
> FEATURE_STATUS("libtraceevent", HAVE_LIBTRACEEVENT),
> diff --git a/tools/perf/scripts/install-build-deps.sh b/tools/perf/scripts/install-build-deps.sh
> index a601a5260c17..3e53c7bf0f85 100755
> --- a/tools/perf/scripts/install-build-deps.sh
> +++ b/tools/perf/scripts/install-build-deps.sh
> @@ -155,7 +155,7 @@ fedora_pkg_for() {
> libcapstone)
> echo "capstone-devel"
> ;;
> - libpython)
> + python-module)
> echo "python3-devel"
> ;;
> libtraceevent)
> @@ -314,7 +314,7 @@ debian_pkg_for() {
> libcapstone)
> echo "libcapstone-dev"
> ;;
> - libpython)
> + python-module)
> echo "python3-dev"
> ;;
> libtraceevent)
> diff --git a/tools/perf/tests/make b/tools/perf/tests/make
> index 8e55ff1aecbd..cf9d4b5d3153 100644
> --- a/tools/perf/tests/make
> +++ b/tools/perf/tests/make
> @@ -80,8 +80,8 @@ make_jevents_all := JEVENTS_ARCH=all
> make_no_bpf_skel := BUILD_BPF_SKEL=0
> make_gen_vmlinux_h := GEN_VMLINUX_H=1
> make_libperl := LIBPERL=1
> -make_no_libpython := NO_LIBPYTHON=1
> -make_no_scripts := NO_LIBPYTHON=1
> +make_no_python_module := NO_PYTHON_MODULE=1
> +make_no_scripts := NO_PYTHON_MODULE=1
> make_no_slang := NO_SLANG=1
> make_no_demangle := NO_DEMANGLE=1
> make_no_libelf := NO_LIBELF=1
> @@ -121,7 +121,7 @@ make_install_prefix_slash := install prefix=/tmp/krava/
> make_static := LDFLAGS=-static NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 NO_JVMTI=1 NO_LIBTRACEEVENT=1 NO_LIBELF=1
>
> # all the NO_* variable combined
> -make_minimal := NO_LIBPYTHON=1
> +make_minimal := NO_PYTHON_MODULE=1
> make_minimal += NO_DEMANGLE=1 NO_LIBELF=1 NO_BACKTRACE=1
> make_minimal += NO_LIBNUMA=1 NO_LIBBIONIC=1 NO_LIBDW=1
> make_minimal += NO_LIBBPF=1
> @@ -176,7 +176,7 @@ run += make_jevents_all
> run += make_no_bpf_skel
> run += make_gen_vmlinux_h
> run += make_libperl
> -run += make_no_libpython
> +run += make_no_python_module
> run += make_no_scripts
> run += make_no_slang
> run += make_no_demangle
> diff --git a/tools/perf/ui/browsers/scripts.c b/tools/perf/ui/browsers/scripts.c
> index 94cc1f427c96..b8a3383ec02a 100644
> --- a/tools/perf/ui/browsers/scripts.c
> +++ b/tools/perf/ui/browsers/scripts.c
> @@ -1,4 +1,11 @@
> // SPDX-License-Identifier: GPL-2.0
> +#include <dirent.h>
> +#include <fcntl.h>
> +#include <limits.h>
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include <unistd.h>
> #include "../../util/util.h" // perf_exe()
> #include "../util.h"
> #include "../../util/evlist.h"
> @@ -14,7 +21,6 @@
> #include <linux/string.h>
> #include <linux/zalloc.h>
> #include <subcmd/exec-cmd.h>
> -#include <stdlib.h>
>
> #define SCRIPT_NAMELEN 128
> #define SCRIPT_MAX_NO 64
> @@ -128,7 +134,7 @@ static int check_ev_match(int dir_fd, const char *scriptname, struct perf_sessio
> if (!len)
> break;
>
> - snprintf(evname, len + 1, "%s", p);
> + snprintf(evname, sizeof(evname), "%.*s", (int)len, p);
>
> match = 0;
> evlist__for_each_entry(session->evlist, pos) {
> @@ -159,6 +165,7 @@ static int check_ev_match(int dir_fd, const char *scriptname, struct perf_sessio
> static int find_scripts(char **scripts_array, char **scripts_path_array, int num,
> int pathlen)
> {
> + int namelen;
> struct dirent *script_dirent, *lang_dirent;
> int scripts_dir_fd, lang_dir_fd;
> DIR *scripts_dir, *lang_dir;
> @@ -180,73 +187,118 @@ static int find_scripts(char **scripts_array, char **scripts_path_array, int num
>
> snprintf(scripts_path, sizeof(scripts_path), "%s/scripts", exec_path);
> scripts_dir_fd = open(scripts_path, O_DIRECTORY);
> - pr_err("Failed to open directory '%s'", scripts_path);
> - if (scripts_dir_fd == -1) {
> - perf_session__delete(session);
> - return -1;
> - }
> }
> - scripts_dir = fdopendir(scripts_dir_fd);
> - if (!scripts_dir) {
> - close(scripts_dir_fd);
> - perf_session__delete(session);
> - return -1;
> + if (scripts_dir_fd != -1) {
> + scripts_dir = fdopendir(scripts_dir_fd);
> + if (scripts_dir) {
> + while ((lang_dirent = readdir(scripts_dir)) != NULL) {
> + if (lang_dirent->d_type != DT_DIR &&
> + (lang_dirent->d_type == DT_UNKNOWN &&
> + !is_directory_at(scripts_dir_fd, lang_dirent->d_name)))
> + continue;
> + if (!strcmp(lang_dirent->d_name, ".") ||
> + !strcmp(lang_dirent->d_name, ".."))
> + continue;
> +
> + if (strstr(lang_dirent->d_name, "python"))
> + continue;
> +
> + lang_dir_fd = openat(scripts_dir_fd, lang_dirent->d_name,
> + O_DIRECTORY);
> + if (lang_dir_fd == -1)
> + continue;
> + lang_dir = fdopendir(lang_dir_fd);
> + if (!lang_dir) {
> + close(lang_dir_fd);
> + continue;
> + }
> + while ((script_dirent = readdir(lang_dir)) != NULL) {
> + if (script_dirent->d_type == DT_DIR)
> + continue;
> + if (script_dirent->d_type == DT_UNKNOWN &&
> + is_directory_at(lang_dir_fd, script_dirent->d_name))
> + continue;
> + /* Skip those real time scripts: xxxtop.p[yl] */
> + if (strstr(script_dirent->d_name, "top."))
> + continue;
> + if (i >= num)
> + break;
> + scnprintf(scripts_path_array[i], pathlen,
> + "%s/scripts/%s/%s", exec_path,
> + lang_dirent->d_name,
> + script_dirent->d_name);
> + temp = strrchr(script_dirent->d_name, '.');
> + namelen = temp ? (int)(temp - script_dirent->d_name)
> + : (int)strlen(script_dirent->d_name);
> +
> + if (namelen >= SCRIPT_NAMELEN)
> + namelen = SCRIPT_NAMELEN - 1;
> + snprintf(scripts_array[i], namelen + 1, "%s",
> + script_dirent->d_name);
> +
> + if (check_ev_match(lang_dir_fd, scripts_array[i], session))
> + continue;
> +
> + i++;
> + }
> + closedir(lang_dir);
> + }
> + closedir(scripts_dir);
> + } else {
> + close(scripts_dir_fd);
> + }
> }
>
> - while ((lang_dirent = readdir(scripts_dir)) != NULL) {
> - if (lang_dirent->d_type != DT_DIR &&
> - (lang_dirent->d_type == DT_UNKNOWN &&
> - !is_directory_at(scripts_dir_fd, lang_dirent->d_name)))
> - continue;
> - if (!strcmp(lang_dirent->d_name, ".") || !strcmp(lang_dirent->d_name, ".."))
> - continue;
> -
> -#ifndef HAVE_LIBPERL_SUPPORT
> - if (strstr(lang_dirent->d_name, "perl"))
> - continue;
> -#endif
> -#ifndef HAVE_LIBPYTHON_SUPPORT
> - if (strstr(lang_dirent->d_name, "python"))
> - continue;
> -#endif
> -
> - lang_dir_fd = openat(scripts_dir_fd, lang_dirent->d_name, O_DIRECTORY);
> - if (lang_dir_fd == -1)
> - continue;
> - lang_dir = fdopendir(lang_dir_fd);
> - if (!lang_dir) {
> - close(lang_dir_fd);
> - continue;
> - }
> - while ((script_dirent = readdir(lang_dir)) != NULL) {
> - if (script_dirent->d_type == DT_DIR)
> - continue;
> - if (script_dirent->d_type == DT_UNKNOWN &&
> - is_directory_at(lang_dir_fd, script_dirent->d_name))
> - continue;
> - /* Skip those real time scripts: xxxtop.p[yl] */
> - if (strstr(script_dirent->d_name, "top."))
> - continue;
> - if (i >= num)
> - break;
> - scnprintf(scripts_path_array[i], pathlen, "%s/scripts/%s/%s",
> - exec_path,
> - lang_dirent->d_name,
> - script_dirent->d_name);
> - temp = strchr(script_dirent->d_name, '.');
> - snprintf(scripts_array[i],
> - (temp - script_dirent->d_name) + 1,
> - "%s", script_dirent->d_name);
> -
> - if (check_ev_match(lang_dir_fd, scripts_array[i], session))
> - continue;
> -
> - i++;
> +#ifdef HAVE_PYTHON_MODULE_SUPPORT
> + {
> + char py_scripts_path[PATH_MAX];
> + int py_scripts_dir_fd;
> + DIR *py_scripts_dir;
> + int len;
> +
> + snprintf(py_scripts_path, sizeof(py_scripts_path), "%s/python", exec_path);
> + py_scripts_dir_fd = open(py_scripts_path, O_DIRECTORY);
> + if (py_scripts_dir_fd != -1) {
> + py_scripts_dir = fdopendir(py_scripts_dir_fd);
> + if (py_scripts_dir) {
> + while ((script_dirent = readdir(py_scripts_dir)) != NULL) {
> + if (script_dirent->d_type == DT_DIR)
> + continue;
> + if (script_dirent->d_type == DT_UNKNOWN &&
> + is_directory_at(py_scripts_dir_fd,
> + script_dirent->d_name))
> + continue;
> + /* Skip those real time scripts: xxxtop.p[yl] */
> + if (strstr(script_dirent->d_name, "top."))
> + continue;
> + if (i >= num)
> + break;
> + len = strlen(script_dirent->d_name);
> + if (len <= 3 ||
> + strcmp(script_dirent->d_name + len - 3, ".py"))
> + continue;
> +
> + scnprintf(scripts_path_array[i], pathlen, "%s/python/%s",
> + exec_path,
> + script_dirent->d_name);
> + temp = strrchr(script_dirent->d_name, '.');
> + namelen = temp ? (int)(temp - script_dirent->d_name)
> + : (int)strlen(script_dirent->d_name);
> +
> + if (namelen >= SCRIPT_NAMELEN)
> + namelen = SCRIPT_NAMELEN - 1;
> + snprintf(scripts_array[i], namelen + 1, "%s",
> + script_dirent->d_name);
> +
> + i++;
> + }
> + closedir(py_scripts_dir);
> + } else {
> + close(py_scripts_dir_fd);
> + }
> }
> - closedir(lang_dir);
> }
> -
> - closedir(scripts_dir);
> +#endif
> perf_session__delete(session);
> return i;
> }
> @@ -264,7 +316,7 @@ static int list_scripts(char *script_name, bool *custom,
> int ret = 0;
> int max_std, custom_perf;
> char pbuf[256];
> - const char *perf = perf_exe(pbuf, sizeof pbuf);
> + const char *perf = perf_exe(pbuf, sizeof(pbuf));
> struct script_config scriptc = {
> .names = (const char **)names,
> .paths = paths,
> @@ -354,7 +406,7 @@ int script_browse(const char *script_opt, struct evsel *evsel)
> return -1;
>
> if (asprintf(&cmd, "%s%s %s %s%s 2>&1 | less",
> - custom ? "perf script -s " : "",
> + custom ? "perf script " : "",
> script_name,
> script_opt ? script_opt : "",
> input_name ? "-i " : "",
> --
> 2.56.0.rc1.315.gc6ed9934b7-goog
next prev parent reply other threads:[~2026-09-26 19:05 UTC|newest]
Thread overview: 216+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-20 5:20 [PATCH v1 00/49] perf: Complete transition to standalone Python scripts Ian Rogers
2026-09-20 5:20 ` [PATCH v1 01/49] perf python: Update syscall format string to optional positional Ian Rogers
2026-09-20 5:20 ` [PATCH v1 02/49] perf python: Update callchain stubs and session thread lookup Ian Rogers
2026-09-20 5:20 ` [PATCH v1 03/49] perf python: Clean up pylint warnings in ilist.py Ian Rogers
2026-09-20 5:20 ` [PATCH v1 04/49] perf python: Clean up pylint warnings in treport.py Ian Rogers
2026-09-20 5:20 ` [PATCH v1 05/49] perf python: Clean up pylint warnings in tracepoint.py Ian Rogers
2026-09-20 5:20 ` [PATCH v1 06/49] perf python: Clean up pylint warnings in twatch.py Ian Rogers
2026-09-20 5:20 ` [PATCH v1 07/49] perf python: Improve perf script -l descriptions Ian Rogers
2026-09-20 5:21 ` [PATCH v1 08/49] perf python: Expose addr location, transaction, and context_switch Ian Rogers
2026-09-20 5:21 ` [PATCH v1 09/49] perf python: Add Intel PT call_return and itrace capability Ian Rogers
2026-09-20 5:21 ` [PATCH v1 10/49] perf python: Allow KeyboardInterrupt to propagate in LiveSession Ian Rogers
2026-09-20 5:21 ` [PATCH v1 11/49] perf pmu-events: Clean up mypy and pylint issues Ian Rogers
2026-09-20 5:21 ` [PATCH v1 12/49] perf test: Clean up mypy and pylint issues in shell test libraries Ian Rogers
2026-09-20 5:21 ` [PATCH v1 13/49] perf build: Make mypy build test opt-out (NO_MYPY=1) Ian Rogers
2026-09-20 5:21 ` [PATCH v1 14/49] perf build: Make pylint build test opt-out (NO_PYLINT=1) Ian Rogers
2026-09-20 5:21 ` [PATCH v1 15/49] perf Makefile: Install standalone Python scripts during transition Ian Rogers
2026-09-20 5:21 ` [PATCH v1 16/49] perf python: Port stat-cpi to perf module Ian Rogers
2026-09-20 5:21 ` [PATCH v1 17/49] perf python: Port mem-phys-addr " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 18/49] perf python: Port stackcollapse " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 19/49] perf python: Port flamegraph " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 20/49] perf python: Port gecko " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 21/49] perf python: Port event_analyzing_sample " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 22/49] perf python: Port syscall-counts " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 23/49] perf python: Port syscall-counts-by-pid " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 24/49] perf python: Port failed-syscalls-by-pid " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 25/49] perf python: Port failed-syscalls from Perl " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 26/49] perf python: Port sctop " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 27/49] perf python: Port rw-by-file from Perl " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 28/49] perf python: Port rw-by-pid " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 29/49] perf python: Port rwtop " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 30/49] perf python: Port futex-contention " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 31/49] perf python: Port task-analyzer " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 32/49] perf python: Port sched-migration and SchedGui " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 33/49] perf python: Port wakeup-latency from Perl " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 34/49] perf python: Port compaction-times " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 35/49] perf python: Port net_dropmonitor " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 36/49] perf python: Port netdev-times " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 37/49] perf python: Port check-perf-trace " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 38/49] perf python: Port arm-cs-trace-disasm " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 39/49] perf python: Port powerpc-hcalls " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 40/49] perf python: Port intel-pt-events and libxed " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 41/49] perf test: Migrate Intel PT virtual LBR test to Python API Ian Rogers
2026-09-20 5:21 ` [PATCH v1 42/49] perf python: Port export-to-sqlite to perf module Ian Rogers
2026-09-20 5:21 ` [PATCH v1 43/49] perf python: Port export-to-postgresql " Ian Rogers
2026-09-20 5:21 ` [PATCH v1 44/49] perf python: Move and clean up exported-sql-viewer.py Ian Rogers
2026-09-20 5:21 ` [PATCH v1 45/49] perf python: Move and clean up parallel-perf.py Ian Rogers
2026-09-20 5:21 ` [PATCH v1 46/49] perf: Remove libpython support and legacy Python scripts Ian Rogers
2026-09-20 5:21 ` [PATCH v1 47/49] perf Makefile: Update Python script installation path Ian Rogers
2026-09-20 5:21 ` [PATCH v1 48/49] perf script: Support standalone scripts and remove embedded scripting Ian Rogers
2026-09-20 5:21 ` [PATCH v1 49/49] perf Documentation: Update for standalone Python scripts Ian Rogers
2026-09-21 5:06 ` [PATCH v2 00/49] perf: Complete transition to " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 01/49] perf python: Update syscall format string to optional positional Ian Rogers
2026-09-21 5:06 ` [PATCH v2 02/49] perf python: Update callchain stubs and session thread lookup Ian Rogers
2026-09-21 5:06 ` [PATCH v2 03/49] perf python: Clean up pylint warnings in ilist.py Ian Rogers
2026-09-21 5:06 ` [PATCH v2 04/49] perf python: Clean up pylint warnings in treport.py Ian Rogers
2026-09-21 5:06 ` [PATCH v2 05/49] perf python: Clean up pylint warnings in tracepoint.py Ian Rogers
2026-09-21 5:06 ` [PATCH v2 06/49] perf python: Clean up pylint warnings in twatch.py Ian Rogers
2026-09-21 5:06 ` [PATCH v2 07/49] perf python: Improve perf script -l descriptions Ian Rogers
2026-09-21 5:06 ` [PATCH v2 08/49] perf python: Expose addr location, transaction, and context_switch Ian Rogers
2026-09-21 5:06 ` [PATCH v2 09/49] perf python: Add Intel PT call_return and itrace capability Ian Rogers
2026-09-22 13:11 ` James Clark
2026-09-22 17:00 ` Ian Rogers
2026-09-21 5:06 ` [PATCH v2 10/49] perf python: Allow KeyboardInterrupt to propagate in LiveSession Ian Rogers
2026-09-21 5:06 ` [PATCH v2 11/49] perf pmu-events: Clean up mypy and pylint issues Ian Rogers
2026-09-21 5:06 ` [PATCH v2 12/49] perf test: Clean up mypy and pylint issues in shell test libraries Ian Rogers
2026-09-21 5:06 ` [PATCH v2 13/49] perf build: Make mypy build test opt-out (NO_MYPY=1) Ian Rogers
2026-09-22 13:11 ` James Clark
2026-09-22 16:59 ` Ian Rogers
2026-09-21 5:06 ` [PATCH v2 14/49] perf build: Make pylint build test opt-out (NO_PYLINT=1) Ian Rogers
2026-09-21 5:06 ` [PATCH v2 15/49] perf Makefile: Install standalone Python scripts during transition Ian Rogers
2026-09-21 5:06 ` [PATCH v2 16/49] perf python: Port stat-cpi to perf module Ian Rogers
2026-09-21 5:06 ` [PATCH v2 17/49] perf python: Port mem-phys-addr " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 18/49] perf python: Port stackcollapse " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 19/49] perf python: Port flamegraph " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 20/49] perf python: Port gecko " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 21/49] perf python: Port event_analyzing_sample " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 22/49] perf python: Port syscall-counts " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 23/49] perf python: Port syscall-counts-by-pid " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 24/49] perf python: Port failed-syscalls-by-pid " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 25/49] perf python: Port failed-syscalls from Perl " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 26/49] perf python: Port sctop " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 27/49] perf python: Port rw-by-file from Perl " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 28/49] perf python: Port rw-by-pid " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 29/49] perf python: Port rwtop " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 30/49] perf python: Port futex-contention " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 31/49] perf python: Port task-analyzer " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 32/49] perf python: Port sched-migration and SchedGui " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 33/49] perf python: Port wakeup-latency from Perl " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 34/49] perf python: Port compaction-times " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 35/49] perf python: Port net_dropmonitor " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 36/49] perf python: Port netdev-times " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 37/49] perf python: Port check-perf-trace " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 38/49] perf python: Port arm-cs-trace-disasm " Ian Rogers
2026-09-22 13:12 ` James Clark
2026-09-23 5:23 ` Ian Rogers
2026-09-23 8:16 ` James Clark
2026-09-23 9:00 ` Leo Yan
2026-09-23 9:08 ` Leo Yan
2026-09-23 13:16 ` Ian Rogers
2026-09-23 13:40 ` Ian Rogers
2026-09-24 15:41 ` Leo Yan
2026-09-25 21:45 ` Ian Rogers
2026-09-21 5:06 ` [PATCH v2 39/49] perf python: Port powerpc-hcalls " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 40/49] perf python: Port intel-pt-events and libxed " Ian Rogers
2026-09-21 5:06 ` [PATCH v2 41/49] perf test: Migrate Intel PT virtual LBR test to Python API Ian Rogers
2026-09-21 5:07 ` [PATCH v2 42/49] perf python: Port export-to-sqlite to perf module Ian Rogers
2026-09-21 5:07 ` [PATCH v2 43/49] perf python: Port export-to-postgresql " Ian Rogers
2026-09-21 5:07 ` [PATCH v2 44/49] perf python: Move and clean up exported-sql-viewer.py Ian Rogers
2026-09-21 5:07 ` [PATCH v2 45/49] perf python: Move and clean up parallel-perf.py Ian Rogers
2026-09-21 5:07 ` [PATCH v2 46/49] perf: Remove libpython support and legacy Python scripts Ian Rogers
2026-09-21 5:07 ` [PATCH v2 47/49] perf Makefile: Update Python script installation path Ian Rogers
2026-09-21 5:07 ` [PATCH v2 48/49] perf script: Support standalone scripts and remove embedded scripting Ian Rogers
2026-09-21 5:07 ` [PATCH v2 49/49] perf Documentation: Update for standalone Python scripts Ian Rogers
2026-09-23 18:11 ` [PATCH v3 00/49] perf: Complete transition to " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 01/49] perf python: Update syscall helpers and expose arch_strerrno Ian Rogers
2026-09-23 18:11 ` [PATCH v3 02/49] perf python: Update callchain stubs and session thread lookup Ian Rogers
2026-09-23 18:11 ` [PATCH v3 03/49] perf python: Clean up pylint warnings in ilist.py Ian Rogers
2026-09-23 18:11 ` [PATCH v3 04/49] perf python: Clean up pylint warnings in treport.py Ian Rogers
2026-09-23 18:11 ` [PATCH v3 05/49] perf python: Clean up pylint warnings in tracepoint.py Ian Rogers
2026-09-23 18:11 ` [PATCH v3 06/49] perf python: Clean up pylint warnings in twatch.py Ian Rogers
2026-09-23 18:11 ` [PATCH v3 07/49] perf python: Improve perf script -l descriptions Ian Rogers
2026-09-23 18:11 ` [PATCH v3 08/49] perf python: Expose addr location, transaction, and context_switch Ian Rogers
2026-09-23 18:11 ` [PATCH v3 09/49] perf python: Add Intel PT call_return and itrace capability Ian Rogers
2026-09-23 18:11 ` [PATCH v3 10/49] perf python: Allow KeyboardInterrupt to propagate in LiveSession Ian Rogers
2026-09-23 18:11 ` [PATCH v3 11/49] perf pmu-events: Clean up mypy and pylint issues Ian Rogers
2026-09-23 18:11 ` [PATCH v3 12/49] perf test: Clean up mypy and pylint issues in shell test libraries Ian Rogers
2026-09-23 18:11 ` [PATCH v3 13/49] perf build: Make mypy build test opt-out (NO_MYPY=1) Ian Rogers
2026-09-23 18:11 ` [PATCH v3 14/49] perf build: Make pylint build test opt-out (NO_PYLINT=1) Ian Rogers
2026-09-23 18:11 ` [PATCH v3 15/49] perf Makefile: Install standalone Python scripts during transition Ian Rogers
2026-09-23 18:11 ` [PATCH v3 16/49] perf python: Port stat-cpi to perf module Ian Rogers
2026-09-23 18:11 ` [PATCH v3 17/49] perf python: Port mem-phys-addr " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 18/49] perf python: Port stackcollapse " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 19/49] perf python: Port flamegraph " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 20/49] perf python: Port gecko " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 21/49] perf python: Port event_analyzing_sample " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 22/49] perf python: Port syscall-counts " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 23/49] perf python: Port syscall-counts-by-pid " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 24/49] perf python: Port failed-syscalls-by-pid " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 25/49] perf python: Port failed-syscalls from Perl " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 26/49] perf python: Port sctop " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 27/49] perf python: Port rw-by-file from Perl " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 28/49] perf python: Port rw-by-pid " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 29/49] perf python: Port rwtop " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 30/49] perf python: Port futex-contention " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 31/49] perf python: Port task-analyzer " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 32/49] perf python: Port sched-migration and SchedGui " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 33/49] perf python: Port wakeup-latency from Perl " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 34/49] perf python: Port compaction-times " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 35/49] perf python: Port net_dropmonitor " Ian Rogers
2026-09-23 18:11 ` [PATCH v3 36/49] perf python: Port netdev-times " Ian Rogers
2026-09-23 18:12 ` [PATCH v3 37/49] perf python: Port check-perf-trace " Ian Rogers
2026-09-23 18:12 ` [PATCH v3 38/49] perf python: Port arm-cs-trace-disasm " Ian Rogers
2026-09-23 18:12 ` [PATCH v3 39/49] perf python: Port powerpc-hcalls " Ian Rogers
2026-09-23 18:12 ` [PATCH v3 40/49] perf python: Port intel-pt-events and libxed " Ian Rogers
2026-09-23 18:12 ` [PATCH v3 41/49] perf test: Migrate Intel PT virtual LBR test to Python API Ian Rogers
2026-09-23 18:12 ` [PATCH v3 42/49] perf python: Port export-to-sqlite to perf module Ian Rogers
2026-09-23 18:12 ` [PATCH v3 43/49] perf python: Port export-to-postgresql " Ian Rogers
2026-09-23 18:12 ` [PATCH v3 44/49] perf python: Move and clean up exported-sql-viewer.py Ian Rogers
2026-09-23 18:12 ` [PATCH v3 45/49] perf python: Move and clean up parallel-perf.py Ian Rogers
2026-09-23 18:12 ` [PATCH v3 46/49] perf: Remove libpython support and legacy Python scripts Ian Rogers
2026-09-23 18:12 ` [PATCH v3 47/49] perf Makefile: Update Python script installation path Ian Rogers
2026-09-23 18:12 ` [PATCH v3 48/49] perf script: Support standalone scripts and remove embedded scripting Ian Rogers
2026-09-23 18:12 ` [PATCH v3 49/49] perf Documentation: Update for standalone Python scripts Ian Rogers
2026-09-26 6:19 ` [PATCH v4 00/49] perf: Complete transition to " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 01/49] perf python: Update syscall helpers and expose arch_strerrno Ian Rogers
2026-09-26 6:19 ` [PATCH v4 02/49] perf python: Update callchain stubs and session thread lookup Ian Rogers
2026-09-26 6:19 ` [PATCH v4 03/49] perf python: Clean up pylint warnings in ilist.py Ian Rogers
2026-09-26 6:19 ` [PATCH v4 04/49] perf python: Clean up pylint warnings in treport.py Ian Rogers
2026-09-26 6:19 ` [PATCH v4 05/49] perf python: Clean up pylint warnings in tracepoint.py Ian Rogers
2026-09-26 6:19 ` [PATCH v4 06/49] perf python: Clean up pylint warnings in twatch.py Ian Rogers
2026-09-26 6:19 ` [PATCH v4 07/49] perf python: Improve perf script -l descriptions Ian Rogers
2026-09-26 6:19 ` [PATCH v4 08/49] perf python: Expose addr location, transaction, and context_switch Ian Rogers
2026-09-26 6:19 ` [PATCH v4 09/49] perf python: Add Intel PT call_return and itrace capability Ian Rogers
2026-09-26 6:19 ` [PATCH v4 10/49] perf python: Allow KeyboardInterrupt to propagate in LiveSession Ian Rogers
2026-09-26 6:19 ` [PATCH v4 11/49] perf pmu-events: Clean up mypy and pylint issues Ian Rogers
2026-09-26 6:19 ` [PATCH v4 12/49] perf test: Clean up mypy and pylint issues in shell test libraries Ian Rogers
2026-09-26 6:19 ` [PATCH v4 13/49] perf build: Make mypy build test opt-out (NO_MYPY=1) Ian Rogers
2026-09-26 6:19 ` [PATCH v4 14/49] perf build: Make pylint build test opt-out (NO_PYLINT=1) Ian Rogers
2026-09-26 6:19 ` [PATCH v4 15/49] perf Makefile: Install standalone Python scripts during transition Ian Rogers
2026-09-26 6:19 ` [PATCH v4 16/49] perf python: Port stat-cpi to perf module Ian Rogers
2026-09-26 6:19 ` [PATCH v4 17/49] perf python: Port mem-phys-addr " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 18/49] perf python: Port stackcollapse " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 19/49] perf python: Port flamegraph " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 20/49] perf python: Port gecko " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 21/49] perf python: Port event_analyzing_sample " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 22/49] perf python: Port syscall-counts " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 23/49] perf python: Port syscall-counts-by-pid " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 24/49] perf python: Port failed-syscalls-by-pid " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 25/49] perf python: Port failed-syscalls from Perl " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 26/49] perf python: Port sctop " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 27/49] perf python: Port rw-by-file from Perl " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 28/49] perf python: Port rw-by-pid " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 29/49] perf python: Port rwtop " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 30/49] perf python: Port futex-contention " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 31/49] perf python: Port task-analyzer " Ian Rogers
2026-09-26 6:19 ` [PATCH v4 32/49] perf python: Port sched-migration and SchedGui " Ian Rogers
2026-09-26 6:20 ` [PATCH v4 33/49] perf python: Port wakeup-latency from Perl " Ian Rogers
2026-09-26 6:20 ` [PATCH v4 34/49] perf python: Port compaction-times " Ian Rogers
2026-09-26 6:20 ` [PATCH v4 35/49] perf python: Port net_dropmonitor " Ian Rogers
2026-09-26 6:20 ` [PATCH v4 36/49] perf python: Port netdev-times " Ian Rogers
2026-09-26 6:20 ` [PATCH v4 37/49] perf python: Port check-perf-trace " Ian Rogers
2026-09-26 6:20 ` [PATCH v4 38/49] perf python: Port arm-cs-trace-disasm " Ian Rogers
2026-09-26 6:20 ` [PATCH v4 39/49] perf python: Port powerpc-hcalls " Ian Rogers
2026-09-26 6:20 ` [PATCH v4 40/49] perf python: Port intel-pt-events and libxed " Ian Rogers
2026-09-26 6:20 ` [PATCH v4 41/49] perf test: Migrate Intel PT virtual LBR test to Python API Ian Rogers
2026-09-26 6:20 ` [PATCH v4 42/49] perf python: Port export-to-sqlite to perf module Ian Rogers
2026-09-26 6:20 ` [PATCH v4 43/49] perf python: Port export-to-postgresql " Ian Rogers
2026-09-26 6:20 ` [PATCH v4 44/49] perf python: Move and clean up exported-sql-viewer.py Ian Rogers
2026-09-26 6:20 ` [PATCH v4 45/49] perf python: Move and clean up parallel-perf.py Ian Rogers
2026-09-26 6:20 ` [PATCH v4 46/49] perf: Remove libpython support and legacy Python scripts Ian Rogers
2026-09-26 18:56 ` Arnaldo Carvalho de Melo
2026-09-26 6:20 ` [PATCH v4 47/49] perf Makefile: Update Python script installation path Ian Rogers
2026-09-26 19:05 ` Arnaldo Carvalho de Melo [this message]
2026-09-26 6:20 ` [PATCH v4 48/49] perf script: Support standalone scripts and remove embedded scripting Ian Rogers
2026-09-26 19:17 ` Arnaldo Carvalho de Melo
2026-09-26 6:20 ` [PATCH v4 49/49] perf Documentation: Update for standalone Python scripts Ian Rogers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=argXgGhrHBCWhkc7@x2 \
--to=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alice.mei.rogers@gmail.com \
--cc=dapeng1.mi@linux.intel.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=leo.yan@linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=tmricht@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®