Patch "kbuild: avoid build error when single DTB is turned into composite DTB" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    kbuild: avoid build error when single DTB is turned into composite DTB

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     kbuild-avoid-build-error-when-single-dtb-is-turned-i.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit ff69f6929fc14062a8ebeef19cb9251f7a304e18
Author: Masahiro Yamada <masahiroy@xxxxxxxxxx>
Date:   Thu Jul 4 22:13:58 2024 +0900

    kbuild: avoid build error when single DTB is turned into composite DTB
    
    [ Upstream commit 712aba5543b88996bc4682086471076fbf048927 ]
    
    As commit afa974b77128 ("kbuild: add real-prereqs shorthand for
    $(filter-out FORCE,$^)") explained, $(real-prereqs) is not just a list
    of objects when linking a multi-object module. If a single-object module
    is turned into a multi-object module, $^ (and therefore $(real-prereqs)
    as well) contains header files recorded in the *.cmd file. Such headers
    must be filtered out.
    
    Now that a DTB can be built either from a single source or multiple
    source files, the same issue can occur.
    
    Consider the following scenario:
    
    First, foo.dtb is implemented as a single-blob device tree.
    
    The code looks something like this:
    
    [Sample Code 1]
    
      Makefile:
    
          dtb-y += foo.dtb
    
      foo.dts:
    
        #include <dt-bindings/gpio/gpio.h>
        /dts-v1/;
        / { };
    
    When it is compiled, .foo.dtb.cmd records that foo.dtb depends on
    scripts/dtc/include-prefixes/dt-bindings/gpio/gpio.h.
    
    Later, foo.dtb is split into a base and an overlay. The code looks
    something like this:
    
    [Sample Code 2]
    
      Makefile:
    
          dtb-y += foo.dtb
          foo-dtbs := foo-base.dtb foo-addon.dtbo
    
      foo-base.dts:
    
        #include <dt-bindings/gpio/gpio.h>
        /dts-v1/;
        / { };
    
      foo-addon.dtso:
    
        /dts-v1/;
        /plugin/;
        / { };
    
    If you rebuild foo.dtb without 'make clean', you will get this error:
    
        Overlay 'scripts/dtc/include-prefixes/dt-bindings/gpio/gpio.h' is incomplete
    
    $(real-prereqs) contains not only foo-base.dtb and foo-addon.dtbo but
    also scripts/dtc/include-prefixes/dt-bindings/gpio/gpio.h, which is
    passed to scripts/dtc/fdtoverlay.
    
    Fixes: 15d16d6dadf6 ("kbuild: Add generic rule to apply fdtoverlay")
    Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 3aa384cec76b8..d236e5658f9b1 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -382,8 +382,12 @@ cmd_dtc = $(HOSTCC) -E $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ;
 		-d $(depfile).dtc.tmp $(dtc-tmp) ; \
 	cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile)
 
+# NOTE:
+# Do not replace $(filter %.dtb %.dtbo, $^) with $(real-prereqs). When a single
+# DTB is turned into a multi-blob DTB, $^ will contain header file dependencies
+# recorded in the .*.cmd file.
 quiet_cmd_fdtoverlay = DTOVL   $@
-      cmd_fdtoverlay = $(objtree)/scripts/dtc/fdtoverlay -o $@ -i $(real-prereqs)
+      cmd_fdtoverlay = $(objtree)/scripts/dtc/fdtoverlay -o $@ -i $(filter %.dtb %.dtbo, $^)
 
 $(multi-dtb-y): FORCE
 	$(call if_changed,fdtoverlay)




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux