* [PATCH v4 0/4] Don't create Python bytecode when building the kernel
@ 2025-04-24 0:16 Mauro Carvalho Chehab
2025-04-24 0:16 ` [PATCH v4 1/4] docs: Makefile: get rid of KERNELDOC_CONF env variable Mauro Carvalho Chehab
` (5 more replies)
0 siblings, 6 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-04-24 0:16 UTC (permalink / raw)
To: Jonathan Corbet, Linux Doc Mailing List
Cc: Mauro Carvalho Chehab, linux-kernel, David Airlie, Jani Nikula,
Joonas Lahtinen, Maarten Lankhorst, Masahiro Yamada,
Maxime Ripard, Nathan Chancellor, Nicolas Schier, Rodrigo Vivi,
Simona Vetter, Thomas Zimmermann, Tvrtko Ursulin, dri-devel,
intel-gfx, linux-kbuild
As reported by Andy, the Kernel build system runs kernel-doc script for DRM,
when W=1. Due to Python's normal behavior, its JIT compiler will create
a bytecode and store it under scripts/lib/*/__pycache__. As one may be using
O= and even having the sources on a read-only mount point, disable its
creation during build time.
This is done by adding PYTHONDONTWRITEBYTECODE=1 on every place
where the script is called within Kbuild and when called via another script.
This only solves half of the issue though, as one may be manually running
the script by hand, without asking Python to not store any bytecode.
This should be OK, but afterwards, git status will list the __pycache__ as
not committed. To prevent that, add *.pyc to .gitignore.
This series contain 4 patches:
- patch 1 adjusts a variable that pass extra data to scripts/kerneldoc.py;
- patch 2moves scripts/kernel-doc location to the main makefile
and exports it, as scripts/Makefile.build will need it;
- patch 3 disables __pycache__ generation and ensure that the entire Kbuild
will use KERNELDOC var for the location of kernel-doc;
- patch 4 adds *.pyc at the list of object files to be ignored.
---
v4:
- placed *.pyc at the alphabetical order at the final patch
v3:
- move KERNELDOC to the main Makefile;
- get rid of the badly-named KERNELDOC_CONF var.
v2:
- added a .gitignore file;
- add PYTHONDONTWRITEBYTECODE=1 to the places where kernel-doc
is called.
Mauro Carvalho Chehab (4):
docs: Makefile: get rid of KERNELDOC_CONF env variable
Makefile: move KERNELDOC macro to the main Makefile
scripts/kernel-doc.py: don't create *.pyc files
.gitignore: ignore Python compiled bytecode
.gitignore | 1 +
Documentation/Makefile | 5 ++---
Makefile | 5 +++++
drivers/gpu/drm/Makefile | 2 +-
drivers/gpu/drm/i915/Makefile | 2 +-
include/drm/Makefile | 2 +-
scripts/Makefile.build | 2 +-
scripts/find-unused-docs.sh | 2 +-
8 files changed, 13 insertions(+), 8 deletions(-)
--
2.49.0
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v4 1/4] docs: Makefile: get rid of KERNELDOC_CONF env variable
2025-04-24 0:16 [PATCH v4 0/4] Don't create Python bytecode when building the kernel Mauro Carvalho Chehab
@ 2025-04-24 0:16 ` Mauro Carvalho Chehab
2025-04-24 0:16 ` [PATCH v4 2/4] Makefile: move KERNELDOC macro to the main Makefile Mauro Carvalho Chehab
` (4 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-04-24 0:16 UTC (permalink / raw)
To: Jonathan Corbet, Linux Doc Mailing List
Cc: Mauro Carvalho Chehab, linux-kernel, Andy Shevchenko
Despite its name, what's there is a set of Sphinx arguments that
are passed to sphinx/kerneldoc.py:
- kerneldoc_srctree: location of the source tree;
- kerneldoc_bin: external script to excecute kernel-doc
Drop it, and just place the values at the already-existing
ALLSPHINXOPTS variable.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
Documentation/Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Documentation/Makefile b/Documentation/Makefile
index c022b97c487e..a006c7681412 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -61,8 +61,8 @@ endif #HAVE_LATEXMK
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
KERNELDOC = $(srctree)/scripts/kernel-doc.py
-KERNELDOC_CONF = -D kerneldoc_srctree=$(srctree) -D kerneldoc_bin=$(KERNELDOC)
-ALLSPHINXOPTS = $(KERNELDOC_CONF) $(PAPEROPT_$(PAPER)) $(SPHINXOPTS)
+ALLSPHINXOPTS = -D kerneldoc_srctree=$(srctree) -D kerneldoc_bin=$(KERNELDOC)
+ALLSPHINXOPTS += $(PAPEROPT_$(PAPER)) $(SPHINXOPTS)
ifneq ($(wildcard $(srctree)/.config),)
ifeq ($(CONFIG_RUST),y)
# Let Sphinx know we will include rustdoc
--
2.49.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 2/4] Makefile: move KERNELDOC macro to the main Makefile
2025-04-24 0:16 [PATCH v4 0/4] Don't create Python bytecode when building the kernel Mauro Carvalho Chehab
2025-04-24 0:16 ` [PATCH v4 1/4] docs: Makefile: get rid of KERNELDOC_CONF env variable Mauro Carvalho Chehab
@ 2025-04-24 0:16 ` Mauro Carvalho Chehab
2025-04-24 0:16 ` [PATCH v4 3/4] scripts/kernel-doc.py: don't create *.pyc files Mauro Carvalho Chehab
` (3 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-04-24 0:16 UTC (permalink / raw)
To: Jonathan Corbet, Linux Doc Mailing List
Cc: Mauro Carvalho Chehab, Masahiro Yamada, Nathan Chancellor,
Nicolas Schier, linux-kbuild, linux-kernel, Andy Shevchenko
As kernel-doc script is used not only on Documentation, but
also on scripts and drivers/drm Makefiles, move it to the
main makefile, as otherwise sub-makefiles may not have it.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
Documentation/Makefile | 1 -
Makefile | 5 +++++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/Documentation/Makefile b/Documentation/Makefile
index a006c7681412..8c1f6a3dfc44 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -60,7 +60,6 @@ endif #HAVE_LATEXMK
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
-KERNELDOC = $(srctree)/scripts/kernel-doc.py
ALLSPHINXOPTS = -D kerneldoc_srctree=$(srctree) -D kerneldoc_bin=$(KERNELDOC)
ALLSPHINXOPTS += $(PAPEROPT_$(PAPER)) $(SPHINXOPTS)
ifneq ($(wildcard $(srctree)/.config),)
diff --git a/Makefile b/Makefile
index 38689a0c3605..2a05988740a9 100644
--- a/Makefile
+++ b/Makefile
@@ -458,6 +458,11 @@ endif
HOSTRUSTC = rustc
HOSTPKG_CONFIG = pkg-config
+# the KERNELDOC macro needs to be exported, as scripts/Makefile.build
+# has a logic to call it
+KERNELDOC = $(srctree)/scripts/kernel-doc.py
+export KERNELDOC
+
KBUILD_USERHOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \
-O2 -fomit-frame-pointer -std=gnu11
KBUILD_USERCFLAGS := $(KBUILD_USERHOSTCFLAGS) $(USERCFLAGS)
--
2.49.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 3/4] scripts/kernel-doc.py: don't create *.pyc files
2025-04-24 0:16 [PATCH v4 0/4] Don't create Python bytecode when building the kernel Mauro Carvalho Chehab
2025-04-24 0:16 ` [PATCH v4 1/4] docs: Makefile: get rid of KERNELDOC_CONF env variable Mauro Carvalho Chehab
2025-04-24 0:16 ` [PATCH v4 2/4] Makefile: move KERNELDOC macro to the main Makefile Mauro Carvalho Chehab
@ 2025-04-24 0:16 ` Mauro Carvalho Chehab
2025-04-25 18:46 ` Nicolas Schier
2025-04-24 0:16 ` [PATCH v4 4/4] .gitignore: ignore Python compiled bytecode Mauro Carvalho Chehab
` (2 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-04-24 0:16 UTC (permalink / raw)
To: Jonathan Corbet, Linux Doc Mailing List
Cc: Mauro Carvalho Chehab, David Airlie, Jani Nikula, Joonas Lahtinen,
Maarten Lankhorst, Masahiro Yamada, Maxime Ripard,
Nathan Chancellor, Nicolas Schier, Rodrigo Vivi, Simona Vetter,
Thomas Zimmermann, Tvrtko Ursulin, dri-devel, intel-gfx,
linux-kbuild, linux-kernel, Andy Shevchenko, Andy Shevchenko
As reported by Andy, kernel-doc.py is creating a __pycache__
directory at build time.
Disable creation of __pycache__ for the libraries used by
kernel-doc.py, when excecuted via the build system or via
scripts/find-unused-docs.sh.
Reported-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Closes: https://lore.kernel.org/linux-doc/Z_zYXAJcTD-c3xTe@black.fi.intel.com/
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/gpu/drm/Makefile | 2 +-
drivers/gpu/drm/i915/Makefile | 2 +-
include/drm/Makefile | 2 +-
scripts/Makefile.build | 2 +-
scripts/find-unused-docs.sh | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index ed54a546bbe2..d21d0cd2c752 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -236,7 +236,7 @@ always-$(CONFIG_DRM_HEADER_TEST) += \
quiet_cmd_hdrtest = HDRTEST $(patsubst %.hdrtest,%.h,$@)
cmd_hdrtest = \
$(CC) $(c_flags) -fsyntax-only -x c /dev/null -include $< -include $<; \
- $(srctree)/scripts/kernel-doc -none $(if $(CONFIG_WERROR)$(CONFIG_DRM_WERROR),-Werror) $<; \
+ PYTHONDONTWRITEBYTECODE=1 $(KERNELDOC) -none $(if $(CONFIG_WERROR)$(CONFIG_DRM_WERROR),-Werror) $<; \
touch $@
$(obj)/%.hdrtest: $(src)/%.h FORCE
diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index ed05b131ed3a..ab6b89a163e7 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -408,7 +408,7 @@ obj-$(CONFIG_DRM_I915_GVT_KVMGT) += kvmgt.o
#
# Enable locally for CONFIG_DRM_I915_WERROR=y. See also scripts/Makefile.build
ifdef CONFIG_DRM_I915_WERROR
- cmd_checkdoc = $(srctree)/scripts/kernel-doc -none -Werror $<
+ cmd_checkdoc = PYTHONDONTWRITEBYTECODE=1 $(KERNELDOC) -none -Werror $<
endif
# header test
diff --git a/include/drm/Makefile b/include/drm/Makefile
index a7bd15d2803e..1df6962556ef 100644
--- a/include/drm/Makefile
+++ b/include/drm/Makefile
@@ -11,7 +11,7 @@ always-$(CONFIG_DRM_HEADER_TEST) += \
quiet_cmd_hdrtest = HDRTEST $(patsubst %.hdrtest,%.h,$@)
cmd_hdrtest = \
$(CC) $(c_flags) -fsyntax-only -x c /dev/null -include $< -include $<; \
- $(srctree)/scripts/kernel-doc -none $(if $(CONFIG_WERROR)$(CONFIG_DRM_WERROR),-Werror) $<; \
+ PYTHONDONTWRITEBYTECODE=1 $(KERNELDOC) -none $(if $(CONFIG_WERROR)$(CONFIG_DRM_WERROR),-Werror) $<; \
touch $@
$(obj)/%.hdrtest: $(src)/%.h FORCE
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 13dcd86e74ca..884dc86ce04e 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -83,7 +83,7 @@ else ifeq ($(KBUILD_CHECKSRC),2)
endif
ifneq ($(KBUILD_EXTRA_WARN),)
- cmd_checkdoc = $(srctree)/scripts/kernel-doc -none $(KDOCFLAGS) \
+ cmd_checkdoc = PYTHONDONTWRITEBYTECODE=1 $(KERNELDOC) -none $(KDOCFLAGS) \
$(if $(findstring 2, $(KBUILD_EXTRA_WARN)), -Wall) \
$<
endif
diff --git a/scripts/find-unused-docs.sh b/scripts/find-unused-docs.sh
index ee6a50e33aba..d6d397fbf917 100755
--- a/scripts/find-unused-docs.sh
+++ b/scripts/find-unused-docs.sh
@@ -54,7 +54,7 @@ for file in `find $1 -name '*.c'`; do
if [[ ${FILES_INCLUDED[$file]+_} ]]; then
continue;
fi
- str=$(scripts/kernel-doc -export "$file" 2>/dev/null)
+ str=$(PYTHONDONTWRITEBYTECODE=1 scripts/kernel-doc -export "$file" 2>/dev/null)
if [[ -n "$str" ]]; then
echo "$file"
fi
--
2.49.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 4/4] .gitignore: ignore Python compiled bytecode
2025-04-24 0:16 [PATCH v4 0/4] Don't create Python bytecode when building the kernel Mauro Carvalho Chehab
` (2 preceding siblings ...)
2025-04-24 0:16 ` [PATCH v4 3/4] scripts/kernel-doc.py: don't create *.pyc files Mauro Carvalho Chehab
@ 2025-04-24 0:16 ` Mauro Carvalho Chehab
2025-04-24 13:52 ` Miguel Ojeda
2025-04-24 16:19 ` [PATCH v4 0/4] Don't create Python bytecode when building the kernel Jonathan Corbet
2025-04-26 2:39 ` Akira Yokosawa
5 siblings, 1 reply; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-04-24 0:16 UTC (permalink / raw)
To: Jonathan Corbet, Linux Doc Mailing List
Cc: Mauro Carvalho Chehab, Steven Rostedt (Google),
Thomas Weißschuh, Ard Biesheuvel, Kris Van Hees,
Laurent Pinchart, Masahiro Yamada, Miguel Ojeda,
Nathan Chancellor, linux-kernel
While the building system doesn't create any Python JIT bytecode,
if one manually runs kernel-doc.py or get_abi.py, Python will,
by default, create a bytecode and store it under scripts/lib/*.
This is normal, and not controlled by the Kernel itself. So,
add *.pyc as an extension to be ignored.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index f2f63e47fb88..bf5ee6e01cd4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,6 +40,7 @@
*.o
*.o.*
*.patch
+*.pyc
*.rmeta
*.rpm
*.rsi
--
2.49.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v4 4/4] .gitignore: ignore Python compiled bytecode
2025-04-24 0:16 ` [PATCH v4 4/4] .gitignore: ignore Python compiled bytecode Mauro Carvalho Chehab
@ 2025-04-24 13:52 ` Miguel Ojeda
0 siblings, 0 replies; 12+ messages in thread
From: Miguel Ojeda @ 2025-04-24 13:52 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: Jonathan Corbet, Linux Doc Mailing List, Steven Rostedt (Google),
Thomas Weißschuh, Ard Biesheuvel, Kris Van Hees,
Laurent Pinchart, Masahiro Yamada, Miguel Ojeda,
Nathan Chancellor, linux-kernel
On Thu, Apr 24, 2025 at 2:17 AM Mauro Carvalho Chehab
<mchehab+huawei@kernel.org> wrote:
>
> While the building system doesn't create any Python JIT bytecode,
> if one manually runs kernel-doc.py or get_abi.py, Python will,
> by default, create a bytecode and store it under scripts/lib/*.
>
> This is normal, and not controlled by the Kernel itself. So,
> add *.pyc as an extension to be ignored.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Looks sorted now, thanks!
Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
Cheers,
Miguel
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/4] Don't create Python bytecode when building the kernel
2025-04-24 0:16 [PATCH v4 0/4] Don't create Python bytecode when building the kernel Mauro Carvalho Chehab
` (3 preceding siblings ...)
2025-04-24 0:16 ` [PATCH v4 4/4] .gitignore: ignore Python compiled bytecode Mauro Carvalho Chehab
@ 2025-04-24 16:19 ` Jonathan Corbet
2025-04-26 2:39 ` Akira Yokosawa
5 siblings, 0 replies; 12+ messages in thread
From: Jonathan Corbet @ 2025-04-24 16:19 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Linux Doc Mailing List
Cc: Mauro Carvalho Chehab, linux-kernel, David Airlie, Jani Nikula,
Joonas Lahtinen, Maarten Lankhorst, Masahiro Yamada,
Maxime Ripard, Nathan Chancellor, Nicolas Schier, Rodrigo Vivi,
Simona Vetter, Thomas Zimmermann, Tvrtko Ursulin, dri-devel,
intel-gfx, linux-kbuild
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> writes:
> As reported by Andy, the Kernel build system runs kernel-doc script for DRM,
> when W=1. Due to Python's normal behavior, its JIT compiler will create
> a bytecode and store it under scripts/lib/*/__pycache__. As one may be using
> O= and even having the sources on a read-only mount point, disable its
> creation during build time.
>
> This is done by adding PYTHONDONTWRITEBYTECODE=1 on every place
> where the script is called within Kbuild and when called via another script.
>
> This only solves half of the issue though, as one may be manually running
> the script by hand, without asking Python to not store any bytecode.
> This should be OK, but afterwards, git status will list the __pycache__ as
> not committed. To prevent that, add *.pyc to .gitignore.
>
> This series contain 4 patches:
>
> - patch 1 adjusts a variable that pass extra data to scripts/kerneldoc.py;
> - patch 2moves scripts/kernel-doc location to the main makefile
> and exports it, as scripts/Makefile.build will need it;
> - patch 3 disables __pycache__ generation and ensure that the entire Kbuild
> will use KERNELDOC var for the location of kernel-doc;
> - patch 4 adds *.pyc at the list of object files to be ignored.
I've applied the set, thanks.
jon
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 3/4] scripts/kernel-doc.py: don't create *.pyc files
2025-04-24 0:16 ` [PATCH v4 3/4] scripts/kernel-doc.py: don't create *.pyc files Mauro Carvalho Chehab
@ 2025-04-25 18:46 ` Nicolas Schier
2025-04-30 15:41 ` Mauro Carvalho Chehab
0 siblings, 1 reply; 12+ messages in thread
From: Nicolas Schier @ 2025-04-25 18:46 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: Jonathan Corbet, Linux Doc Mailing List, David Airlie,
Jani Nikula, Joonas Lahtinen, Maarten Lankhorst, Masahiro Yamada,
Maxime Ripard, Nathan Chancellor, Nicolas Schier, Rodrigo Vivi,
Simona Vetter, Thomas Zimmermann, Tvrtko Ursulin, dri-devel,
intel-gfx, linux-kbuild, linux-kernel, Andy Shevchenko,
Andy Shevchenko
On Thu, Apr 24, 2025 at 08:16:23AM +0800 Mauro Carvalho Chehab wrote:
> As reported by Andy, kernel-doc.py is creating a __pycache__
> directory at build time.
>
> Disable creation of __pycache__ for the libraries used by
> kernel-doc.py, when excecuted via the build system or via
> scripts/find-unused-docs.sh.
>
> Reported-by: Andy Shevchenko <andriy.shevchenko@intel.com>
> Closes: https://lore.kernel.org/linux-doc/Z_zYXAJcTD-c3xTe@black.fi.intel.com/
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
> drivers/gpu/drm/Makefile | 2 +-
> drivers/gpu/drm/i915/Makefile | 2 +-
> include/drm/Makefile | 2 +-
> scripts/Makefile.build | 2 +-
> scripts/find-unused-docs.sh | 2 +-
> 5 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> index ed54a546bbe2..d21d0cd2c752 100644
> --- a/drivers/gpu/drm/Makefile
> +++ b/drivers/gpu/drm/Makefile
> @@ -236,7 +236,7 @@ always-$(CONFIG_DRM_HEADER_TEST) += \
> quiet_cmd_hdrtest = HDRTEST $(patsubst %.hdrtest,%.h,$@)
> cmd_hdrtest = \
> $(CC) $(c_flags) -fsyntax-only -x c /dev/null -include $< -include $<; \
> - $(srctree)/scripts/kernel-doc -none $(if $(CONFIG_WERROR)$(CONFIG_DRM_WERROR),-Werror) $<; \
> + PYTHONDONTWRITEBYTECODE=1 $(KERNELDOC) -none $(if $(CONFIG_WERROR)$(CONFIG_DRM_WERROR),-Werror) $<; \
Did someone check if we could add
sys.dont_write_bytecode = True
to the script itself instead of cluttering PYTHONDONTWRITEBYTECODE
everywhere [1]?
Kind regards,
Nicolas
[1]: https://docs.python.org/3/library/sys.html#sys.dont_write_bytecode
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/4] Don't create Python bytecode when building the kernel
2025-04-24 0:16 [PATCH v4 0/4] Don't create Python bytecode when building the kernel Mauro Carvalho Chehab
` (4 preceding siblings ...)
2025-04-24 16:19 ` [PATCH v4 0/4] Don't create Python bytecode when building the kernel Jonathan Corbet
@ 2025-04-26 2:39 ` Akira Yokosawa
2025-04-26 12:57 ` Mauro Carvalho Chehab
5 siblings, 1 reply; 12+ messages in thread
From: Akira Yokosawa @ 2025-04-26 2:39 UTC (permalink / raw)
To: Andy Shevchenko
Cc: airlied, corbet, dri-devel, intel-gfx, jani.nikula,
joonas.lahtinen, linux-doc, linux-kbuild, linux-kernel,
maarten.lankhorst, masahiroy, mripard, nathan, nicolas.schier,
rodrigo.vivi, simona, tursulin, tzimmermann, mchehab+huawei,
Akira Yokosawa
Hi Andy,
Responding to Mauro's cover-letter of v4 at:
https://lore.kernel.org/cover.1745453655.git.mchehab+huawei@kernel.org/
, which did not CC'd to you.
On Thu, 24 Apr 2025 08:16:20 +0800, Mauro Carvalho Chehab wrote:
> As reported by Andy, the Kernel build system runs kernel-doc script for DRM,
> when W=1. Due to Python's normal behavior, its JIT compiler will create
> a bytecode and store it under scripts/lib/*/__pycache__. As one may be using
> O= and even having the sources on a read-only mount point, disable its
> creation during build time.
>
> This is done by adding PYTHONDONTWRITEBYTECODE=1 on every place
> where the script is called within Kbuild and when called via another script.
>
> This only solves half of the issue though, as one may be manually running
> the script by hand, without asking Python to not store any bytecode.
> This should be OK, but afterwards, git status will list the __pycache__ as
> not committed. To prevent that, add *.pyc to .gitignore.
>
> This series contain 4 patches:
>
> - patch 1 adjusts a variable that pass extra data to scripts/kerneldoc.py;
> - patch 2moves scripts/kernel-doc location to the main makefile
> and exports it, as scripts/Makefile.build will need it;
> - patch 3 disables __pycache__ generation and ensure that the entire Kbuild
> will use KERNELDOC var for the location of kernel-doc;
> - patch 4 adds *.pyc at the list of object files to be ignored.
I see Jon has merged them all, but responding here anyway.
In https://lore.kernel.org/Z_zYXAJcTD-c3xTe@black.fi.intel.com/, you said:
> This started well, until it becomes a scripts/lib/kdoc.
> So, it makes the `make O=...` builds dirty *). Please make sure this doesn't leave
> "disgusting turd" )as said by Linus) in the clean tree.
>
>*) it creates that __pycache__ disaster. And no, .gitignore IS NOT a solution.w
Andy, I don't agree with your words "__pycache__ disaster" and
".gitignore IS NOT a solution".
Running "find . -name ".gitignore" -exec grep -nH --null -F -e ".pyc" \{\} +"
under today's Linus master returns this:
-------------------------------------------------------------
./scripts/gdb/linux/.gitignore:2:*.pyc
./drivers/comedi/drivers/ni_routing/tools/.gitignore:3:*.pyc
./tools/perf/.gitignore:32:*.pyc
./tools/testing/selftests/tc-testing/.gitignore:3:*.pyc
./Documentation/.gitignore:3:*.pyc
-------------------------------------------------------------
, and they have been working perfectly.
Having seen your response at https://lore.kernel.org/aAoERIArkvj497ns@smile.fi.intel.com/ :
> I tried before, but I admit, that I have missed something. It was a mess
> in that case. Now I probably can't repeat as I don't remember what was
> the environment and settings I had that time. I'm really glad to see it
> is working this way!
, I'm guessing you had a traumatic experience caused by python's bytecode
caching in the past. Do you still believe ".gitignore IS NOT a solution"?
From my viewpoint, applying only 4/4 of this series is the right thing to do.
Bothering with might-become-incompatilbe-in-the-future python environment
variables in kernel Makefiles looks over-engineering to me.
Also, as Mauro says in 3/4, it is incomplete in that it does not cover
the cases where those scripts are invoked outside of kernel build.
And it will interfere with existing developers who want the benefit of
bytecode caching.
I'm not precluding the possibility of incoherent bytecode cache; for example
by using a shared kernel source tree among several developers, and only
one of them (owner) has a write permission of it. In that case, said
owner might update the tree without running relevant python scripts.
I don't know if python can notice outdated cache and disregard it.
In such a situation, setting PYTHONPYCACHEPREFIX as an environment
variable should help, for sure, but only in such special cases.
Andy, what do you say if I ask reverts of 1/4, 2/4/, and 3/4?
Regards,
Akira
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/4] Don't create Python bytecode when building the kernel
2025-04-26 2:39 ` Akira Yokosawa
@ 2025-04-26 12:57 ` Mauro Carvalho Chehab
2025-04-28 7:35 ` Andy Shevchenko
0 siblings, 1 reply; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-04-26 12:57 UTC (permalink / raw)
To: Akira Yokosawa
Cc: Andy Shevchenko, airlied, corbet, dri-devel, intel-gfx,
jani.nikula, joonas.lahtinen, linux-doc, linux-kbuild,
linux-kernel, maarten.lankhorst, masahiroy, mripard, nathan,
nicolas.schier, rodrigo.vivi, simona, tursulin, tzimmermann
Hi Akira,
Em Sat, 26 Apr 2025 11:39:05 +0900
Akira Yokosawa <akiyks@gmail.com> escreveu:
> Bothering with might-become-incompatilbe-in-the-future python environment
> variables in kernel Makefiles looks over-engineering to me.
> Also, as Mauro says in 3/4, it is incomplete in that it does not cover
> the cases where those scripts are invoked outside of kernel build.
> And it will interfere with existing developers who want the benefit of
> bytecode caching.
>
> I'm not precluding the possibility of incoherent bytecode cache; for example
> by using a shared kernel source tree among several developers, and only
> one of them (owner) has a write permission of it. In that case, said
> owner might update the tree without running relevant python scripts.
>
> I don't know if python can notice outdated cache and disregard it.
>
> In such a situation, setting PYTHONPYCACHEPREFIX as an environment
> variable should help, for sure, but only in such special cases.
>
> Andy, what do you say if I ask reverts of 1/4, 2/4/, and 3/4?
Patches 1 and 2 are, IMO, needed anyway, as they fix a problem:
KERNELDOC environment is not used consistently.
Now, patch 3 is the one that may require more thinking.
I agree with Andy that, when O=<dir> is used, nothing shall be
written to source dir.
There are a couple of reasons for that:
1. source dir may be read only;
2. one may want to do cross compilation and use multiple output
directories, one for each version;
3. the source dir could be mapped via NFS to multiple machines
with different architectures.
For (3), it could mean that multiple machines may have different
Python versions, so, sharing the Python bytecode from source dir doesn't
sound a good idea. Also, I'm not sure if the pyc from different archs
would be identical.
With that, there are two options:
a. disable cache;
b. set PYTHONCACHEPREFIX.
We're currently doing (a). I guess everybody agrees that this is
is not ideal.
So, ideally, we should move to (b). For Spinx, the easiest solution
is just to place it under Documentation/output, but this is not
generic enough: ideally, we should revert patch 3 and set
PYTHONCACHEPREFIX when O is used. Eventually, we can apply my
patch for Documentation/output, while we craft such logic.
Regards,
Mauro
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/4] Don't create Python bytecode when building the kernel
2025-04-26 12:57 ` Mauro Carvalho Chehab
@ 2025-04-28 7:35 ` Andy Shevchenko
0 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2025-04-28 7:35 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: Akira Yokosawa, airlied, corbet, dri-devel, intel-gfx,
jani.nikula, joonas.lahtinen, linux-doc, linux-kbuild,
linux-kernel, maarten.lankhorst, masahiroy, mripard, nathan,
nicolas.schier, rodrigo.vivi, simona, tursulin, tzimmermann
On Sat, Apr 26, 2025 at 08:57:08PM +0800, Mauro Carvalho Chehab wrote:
> Em Sat, 26 Apr 2025 11:39:05 +0900
> Akira Yokosawa <akiyks@gmail.com> escreveu:
>
> > Bothering with might-become-incompatilbe-in-the-future python environment
> > variables in kernel Makefiles looks over-engineering to me.
> > Also, as Mauro says in 3/4, it is incomplete in that it does not cover
> > the cases where those scripts are invoked outside of kernel build.
> > And it will interfere with existing developers who want the benefit of
> > bytecode caching.
> >
> > I'm not precluding the possibility of incoherent bytecode cache; for example
> > by using a shared kernel source tree among several developers, and only
> > one of them (owner) has a write permission of it. In that case, said
> > owner might update the tree without running relevant python scripts.
> >
> > I don't know if python can notice outdated cache and disregard it.
> >
> > In such a situation, setting PYTHONPYCACHEPREFIX as an environment
> > variable should help, for sure, but only in such special cases.
> >
> > Andy, what do you say if I ask reverts of 1/4, 2/4/, and 3/4?
>
> Patches 1 and 2 are, IMO, needed anyway, as they fix a problem:
> KERNELDOC environment is not used consistently.
>
> Now, patch 3 is the one that may require more thinking.
>
> I agree with Andy that, when O=<dir> is used, nothing shall be
> written to source dir.
>
> There are a couple of reasons for that:
>
> 1. source dir may be read only;
> 2. one may want to do cross compilation and use multiple output
> directories, one for each version;
> 3. the source dir could be mapped via NFS to multiple machines
> with different architectures.
>
> For (3), it could mean that multiple machines may have different
> Python versions, so, sharing the Python bytecode from source dir doesn't
> sound a good idea. Also, I'm not sure if the pyc from different archs
> would be identical.
>
> With that, there are two options:
>
> a. disable cache;
> b. set PYTHONCACHEPREFIX.
Thanks, Mauro, for replying. I'm with you on all of it.
> We're currently doing (a). I guess everybody agrees that this is
> is not ideal.
Yes, I also prefer to have cache working if it's possible. The only BUT here is
that users should not suffer from it.
> So, ideally, we should move to (b). For Spinx, the easiest solution
> is just to place it under Documentation/output, but this is not
> generic enough: ideally, we should revert patch 3 and set
> PYTHONCACHEPREFIX when O is used. Eventually, we can apply my
> patch for Documentation/output, while we craft such logic.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 3/4] scripts/kernel-doc.py: don't create *.pyc files
2025-04-25 18:46 ` Nicolas Schier
@ 2025-04-30 15:41 ` Mauro Carvalho Chehab
0 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-04-30 15:41 UTC (permalink / raw)
To: Nicolas Schier
Cc: Jonathan Corbet, Linux Doc Mailing List, David Airlie,
Jani Nikula, Joonas Lahtinen, Maarten Lankhorst, Masahiro Yamada,
Maxime Ripard, Nathan Chancellor, Nicolas Schier, Rodrigo Vivi,
Simona Vetter, Thomas Zimmermann, Tvrtko Ursulin, dri-devel,
intel-gfx, linux-kbuild, linux-kernel, Andy Shevchenko,
Andy Shevchenko
Em Fri, 25 Apr 2025 20:46:41 +0200
Nicolas Schier <nicolas@fjasle.eu> escreveu:
> On Thu, Apr 24, 2025 at 08:16:23AM +0800 Mauro Carvalho Chehab wrote:
> > As reported by Andy, kernel-doc.py is creating a __pycache__
> > directory at build time.
> >
> > Disable creation of __pycache__ for the libraries used by
> > kernel-doc.py, when excecuted via the build system or via
> > scripts/find-unused-docs.sh.
> >
> > Reported-by: Andy Shevchenko <andriy.shevchenko@intel.com>
> > Closes: https://lore.kernel.org/linux-doc/Z_zYXAJcTD-c3xTe@black.fi.intel.com/
> > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> > Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > ---
> > drivers/gpu/drm/Makefile | 2 +-
> > drivers/gpu/drm/i915/Makefile | 2 +-
> > include/drm/Makefile | 2 +-
> > scripts/Makefile.build | 2 +-
> > scripts/find-unused-docs.sh | 2 +-
> > 5 files changed, 5 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> > index ed54a546bbe2..d21d0cd2c752 100644
> > --- a/drivers/gpu/drm/Makefile
> > +++ b/drivers/gpu/drm/Makefile
> > @@ -236,7 +236,7 @@ always-$(CONFIG_DRM_HEADER_TEST) += \
> > quiet_cmd_hdrtest = HDRTEST $(patsubst %.hdrtest,%.h,$@)
> > cmd_hdrtest = \
> > $(CC) $(c_flags) -fsyntax-only -x c /dev/null -include $< -include $<; \
> > - $(srctree)/scripts/kernel-doc -none $(if $(CONFIG_WERROR)$(CONFIG_DRM_WERROR),-Werror) $<; \
> > + PYTHONDONTWRITEBYTECODE=1 $(KERNELDOC) -none $(if $(CONFIG_WERROR)$(CONFIG_DRM_WERROR),-Werror) $<; \
>
> Did someone check if we could add
>
> sys.dont_write_bytecode = True
>
> to the script itself instead of cluttering PYTHONDONTWRITEBYTECODE
> everywhere [1]?
Nice to know that we can set it at the script level. Yet, this is is
meant to be a temporary solution, as IMO the best is to set
PYTHONCACHEPREFIX to match the directory on O=, when it is used.
Thanks,
Mauro
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2025-04-30 15:41 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-24 0:16 [PATCH v4 0/4] Don't create Python bytecode when building the kernel Mauro Carvalho Chehab
2025-04-24 0:16 ` [PATCH v4 1/4] docs: Makefile: get rid of KERNELDOC_CONF env variable Mauro Carvalho Chehab
2025-04-24 0:16 ` [PATCH v4 2/4] Makefile: move KERNELDOC macro to the main Makefile Mauro Carvalho Chehab
2025-04-24 0:16 ` [PATCH v4 3/4] scripts/kernel-doc.py: don't create *.pyc files Mauro Carvalho Chehab
2025-04-25 18:46 ` Nicolas Schier
2025-04-30 15:41 ` Mauro Carvalho Chehab
2025-04-24 0:16 ` [PATCH v4 4/4] .gitignore: ignore Python compiled bytecode Mauro Carvalho Chehab
2025-04-24 13:52 ` Miguel Ojeda
2025-04-24 16:19 ` [PATCH v4 0/4] Don't create Python bytecode when building the kernel Jonathan Corbet
2025-04-26 2:39 ` Akira Yokosawa
2025-04-26 12:57 ` Mauro Carvalho Chehab
2025-04-28 7:35 ` Andy Shevchenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).