[U-Boot] [PATCH v2] kbuild: fix parallel build race caused by u-boot.cfg regeneration

Multiple people have reported intermittent build failure in parallel building.
Kever Yang reported this issue some time ago [1], but I could not get enough clue at that time.
This time, Richard Purdie provided a full build log [2], which was very helpful for me to root-cause it.
The cause of the problem is commit 0d982c585330 ("Makefile: add dependencies to regenerate u-boot.cfg when lost").
That commit added the 'cfg' as the prerequisite of the 'all' target, so the parallel build tries to run it simultaneously, then regenerates a symlink while building objects.
When u-boot.cfg is accidentally lost, let's rebuild it before descending into any subdirectories.
Also, what is annoying is u-boot.cfg is currently regenerated every time since it depends on FORCE. We can get rid of all the prerequisites of u-boot.cfg because u-boot.cfg is rebuilt anyway as the byproduct of auto.conf when a user updates the .config file.
[1] https://lists.denx.de/pipermail/u-boot/2018-June/330341.html [2] https://autobuilder.yoctoproject.org/typhoon/#/builders/65/builds/160/steps/...
Fixes: 0d982c585330 ("Makefile: add dependencies to regenerate u-boot.cfg when lost") Reported-by: Kever Yang kever.yang@rock-chips.com Reported-by: Richard Purdie richard.purdie@linuxfoundation.org Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com Reviewed-by: Simon Glass sjg@chromium.org ---
Changes in v2: - Move 'cfg' before 'prepare0' to avoid a race between them
Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile index eeb299f..c6eb727 100644 --- a/Makefile +++ b/Makefile @@ -534,7 +534,7 @@ include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd @# Otherwise, 'make silentoldconfig' would be invoked twice. $(Q)touch include/config/auto.conf
-u-boot.cfg spl/u-boot.cfg tpl/u-boot.cfg: include/config.h FORCE +u-boot.cfg spl/u-boot.cfg tpl/u-boot.cfg: $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf $(@)
-include include/autoconf.mk @@ -910,7 +910,7 @@ quiet_cmd_cfgcheck = CFGCHK $2 cmd_cfgcheck = $(srctree)/scripts/check-config.sh $2 \ $(srctree)/scripts/config_whitelist.txt $(srctree)
-all: $(ALL-y) cfg +all: $(ALL-y) ifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y) @echo >&2 "===================== WARNING ======================" @echo >&2 "This board uses CONFIG_DM_I2C_COMPAT. Please remove" @@ -1530,7 +1530,7 @@ ifneq ($(KBUILD_SRC),) endif
# prepare2 creates a makefile if using a separate output directory -prepare2: prepare3 outputmakefile +prepare2: prepare3 outputmakefile cfg
prepare1: prepare2 $(version_h) $(timestamp_h) \ include/config/auto.conf

On Thu, Jan 10, 2019 at 11:11:39PM +0900, Masahiro Yamada wrote:
Multiple people have reported intermittent build failure in parallel building.
Kever Yang reported this issue some time ago [1], but I could not get enough clue at that time.
This time, Richard Purdie provided a full build log [2], which was very helpful for me to root-cause it.
The cause of the problem is commit 0d982c585330 ("Makefile: add dependencies to regenerate u-boot.cfg when lost").
That commit added the 'cfg' as the prerequisite of the 'all' target, so the parallel build tries to run it simultaneously, then regenerates a symlink while building objects.
When u-boot.cfg is accidentally lost, let's rebuild it before descending into any subdirectories.
Also, what is annoying is u-boot.cfg is currently regenerated every time since it depends on FORCE. We can get rid of all the prerequisites of u-boot.cfg because u-boot.cfg is rebuilt anyway as the byproduct of auto.conf when a user updates the .config file.
[1] https://lists.denx.de/pipermail/u-boot/2018-June/330341.html [2] https://autobuilder.yoctoproject.org/typhoon/#/builders/65/builds/160/steps/...
Fixes: 0d982c585330 ("Makefile: add dependencies to regenerate u-boot.cfg when lost") Reported-by: Kever Yang kever.yang@rock-chips.com Reported-by: Richard Purdie richard.purdie@linuxfoundation.org Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot/master, thanks!
participants (2)
-
Masahiro Yamada
-
Tom Rini