diff mbox series

[U-Boot] Makefile: Correct SPL/TPL/DTB build race condition

Message ID 20171112034840.9990-1-m.v.b@runbox.com
State Accepted
Commit dd2081a8e46877df5166fcd5af7f26c74a799317
Delegated to: Tom Rini
Headers show
Series [U-Boot] Makefile: Correct SPL/TPL/DTB build race condition | expand

Commit Message

M. Vefa Bicakci Nov. 12, 2017, 3:48 a.m. UTC
When building on a multi-core machine for an SPL-enabled board that
also uses CONFIG_OF_EMBED, the following error can be encountered
due to a race condition:

  make[3]: *** No rule to make target 'spl/dts/dt.dtb.o', needed by
    'spl/dts/built-in.o'.  Stop.
  ../scripts/Makefile.spl:364: recipe for target 'spl/dts' failed
  make[2]: *** [spl/dts] Error 2
  make[2]: *** Waiting for unfinished jobs....

A reliable way to trigger this race condition is to add "sleep 60" to
the end of the "arch-dtbs" rule's recipe in "dts/Makefile" and to build
U-Boot against a board which uses the CONFIG_OF_EMBED and CONFIG_SPL
options using "make -j8" or a similar command.

This commit corrects this race condition via the use of CONFIG_OF_EMBED
in the same way that commit 3c00a2c8b5e2 ("Makefile: Correct dependency
race condition with TPL") and commit 054b3a1e80fc ("dm: Makefile: Build
of-platdata before SPL") use CONFIG_OF_SEPARATE.

Signed-off-by: M. Vefa Bicakci <m.v.b@runbox.com>
---

 Makefile | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Simon Glass Nov. 20, 2017, 3:39 p.m. UTC | #1
On 11 November 2017 at 20:48, M. Vefa Bicakci <m.v.b@runbox.com> wrote:
> When building on a multi-core machine for an SPL-enabled board that
> also uses CONFIG_OF_EMBED, the following error can be encountered
> due to a race condition:
>
>   make[3]: *** No rule to make target 'spl/dts/dt.dtb.o', needed by
>     'spl/dts/built-in.o'.  Stop.
>   ../scripts/Makefile.spl:364: recipe for target 'spl/dts' failed
>   make[2]: *** [spl/dts] Error 2
>   make[2]: *** Waiting for unfinished jobs....
>
> A reliable way to trigger this race condition is to add "sleep 60" to
> the end of the "arch-dtbs" rule's recipe in "dts/Makefile" and to build
> U-Boot against a board which uses the CONFIG_OF_EMBED and CONFIG_SPL
> options using "make -j8" or a similar command.
>
> This commit corrects this race condition via the use of CONFIG_OF_EMBED
> in the same way that commit 3c00a2c8b5e2 ("Makefile: Correct dependency
> race condition with TPL") and commit 054b3a1e80fc ("dm: Makefile: Build
> of-platdata before SPL") use CONFIG_OF_SEPARATE.
>
> Signed-off-by: M. Vefa Bicakci <m.v.b@runbox.com>
> ---
>
>  Makefile | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>
Tom Rini Nov. 21, 2017, 1:05 p.m. UTC | #2
On Sat, Nov 11, 2017 at 10:48:40PM -0500, M. Vefa Bicakci wrote:

> When building on a multi-core machine for an SPL-enabled board that
> also uses CONFIG_OF_EMBED, the following error can be encountered
> due to a race condition:
> 
>   make[3]: *** No rule to make target 'spl/dts/dt.dtb.o', needed by
>     'spl/dts/built-in.o'.  Stop.
>   ../scripts/Makefile.spl:364: recipe for target 'spl/dts' failed
>   make[2]: *** [spl/dts] Error 2
>   make[2]: *** Waiting for unfinished jobs....
> 
> A reliable way to trigger this race condition is to add "sleep 60" to
> the end of the "arch-dtbs" rule's recipe in "dts/Makefile" and to build
> U-Boot against a board which uses the CONFIG_OF_EMBED and CONFIG_SPL
> options using "make -j8" or a similar command.
> 
> This commit corrects this race condition via the use of CONFIG_OF_EMBED
> in the same way that commit 3c00a2c8b5e2 ("Makefile: Correct dependency
> race condition with TPL") and commit 054b3a1e80fc ("dm: Makefile: Build
> of-platdata before SPL") use CONFIG_OF_SEPARATE.
> 
> Signed-off-by: M. Vefa Bicakci <m.v.b@runbox.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 91f41fea8482..a6b489bd86e9 100644
--- a/Makefile
+++ b/Makefile
@@ -1402,8 +1402,8 @@  u-boot.lds: $(LDSCRIPT) prepare FORCE
 spl/u-boot-spl.bin: spl/u-boot-spl
 	@:
 spl/u-boot-spl: tools prepare \
-		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb) \
-		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_TPL_OF_PLATDATA),dts/dt.dtb)
+		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb) \
+		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_TPL_OF_PLATDATA),dts/dt.dtb)
 	$(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl all
 
 spl/sunxi-spl.bin: spl/u-boot-spl
@@ -1419,7 +1419,7 @@  spl/boot.bin: spl/u-boot-spl
 	@:
 
 tpl/u-boot-tpl.bin: tools prepare \
-		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb)
+		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb)
 	$(Q)$(MAKE) obj=tpl -f $(srctree)/scripts/Makefile.spl all
 
 TAG_SUBDIRS := $(patsubst %,$(srctree)/%,$(u-boot-dirs) include)