[PATCH] kbuild: Avoid race generating / using MODLIB
From: Doug Anderson
Date: Thu Jun 27 2013 - 14:48:34 EST
The $(MODLIB) variable is recursively expanded and is:
$(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
The $(KERNELRELEASE) variable is also recursively expanded:
$(shell cat include/config/kernel.release 2> /dev/null)
The file being read is a generated by the Makefile itself. When the
file is generated it is removed and then recreated. This leaves a
period of time when the file doesn't exist. If we happen to use
$(MODLIB) during this time then we'll end up with a bad value.
This is fairly easy for me to reproduce by:
* Add a "sleep 2" between the 'rm -f $@' and the 'echo' in the rule
to build 'include/config/kernel.release'
* make -j32 ARCH=arm CROSS_COMPILE=armv7a-cros-linux-gnueabi- \
zImage dtbs modules
* make -j32 ARCH=arm CROSS_COMPILE=armv7a-cros-linux-gnueabi- \
INSTALL_PATH=foo INSTALL_MOD_PATH=foomod \
install firmware_install modules_install
Without trying to rethink the whole KERNELRELEASE variable, the simple
fix is to just add a dependency.
Signed-off-by: Doug Anderson <dianders@xxxxxxxxxxxx>
---
Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 0142c93..9cf2b24 100644
--- a/Makefile
+++ b/Makefile
@@ -964,7 +964,7 @@ PHONY += modules_install
modules_install: _modinst_ _modinst_post
PHONY += _modinst_
-_modinst_:
+_modinst_: include/config/kernel.release
@rm -rf $(MODLIB)/kernel
@rm -f $(MODLIB)/source
@mkdir -p $(MODLIB)/kernel
@@ -1232,7 +1232,7 @@ modules_install: _emodinst_ _emodinst_post
install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra)
PHONY += _emodinst_
-_emodinst_:
+_emodinst_: include/config/kernel.release
$(Q)mkdir -p $(MODLIB)/$(install-dir)
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
--
1.8.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/