ANDROID: arm64: Image.gz-dtb build target depends on Image.gz
authorAmit Pundir <amit.pundir@linaro.org>
Mon, 26 Mar 2018 15:13:33 +0000 (20:43 +0530)
committerAmit Pundir <amit.pundir@linaro.org>
Tue, 27 Mar 2018 13:43:57 +0000 (19:13 +0530)
While doing parallel builds using "make -j" option, I ran into
a build race condition a few times where-in Image.gz-dtb target
starts building before Image.gz is even ready, resulting in a
corrupt Image.gz-dtb kernel image.

How to reproduce -->

$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-androidkernel- defconfig menuconfig
+
CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE=y
CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE_NAMES="qcom/apq8096-db820c"

$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-androidkernel- -j9
<snip> ..
  SYSMAP  System.map
  OBJCOPY arch/arm64/boot/Image
  GZIP    arch/arm64/boot/Image.gz
  DTC     arch/arm64/boot/dts/qcom/apq8096-db820c.dtb
  Building modules, stage 2.
  CAT     arch/arm64/boot/Image.gz-dtb
  GZIP    arch/arm64/boot/Image.gz
.. <snip>

$ du -sh arch/arm64/boot/Image.gz-dtb
28K arch/arm64/boot/Image.gz-dtb

When built with this patch -->

$ du -sh arch/arm64/boot/Image.gz-dtb
8.9M arch/arm64/boot/Image.gz-dtb

Let's make Image.gz-dtb build target depend on Image.gz explicitly.

Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
arch/arm64/Makefile

index 3132997f668ebf59d0c53b2f37ff4b1406b5cdcc..78df900d75b5177331fc5d47673d05300aea6ef9 100644 (file)
@@ -157,7 +157,10 @@ dtbs: prepare scripts
 dtbs_install:
        $(Q)$(MAKE) $(dtbinst)=$(boot)/dts
 
-Image-dtb Image.gz-dtb: vmlinux scripts dtbs
+Image-dtb: vmlinux scripts dtbs
+       $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
+
+Image.gz-dtb: vmlinux scripts dtbs Image.gz
        $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
 
 PHONY += vdso_install