diff mbox series

[1/2] build system: make install-stubdom depend on install-tools again

Message ID 20190415162809.23675-2-ian.jackson@eu.citrix.com (mailing list archive)
State New, archived
Headers show
Series Fix make -j race due to stubdom and tools make -C | expand

Commit Message

Ian Jackson April 15, 2019, 4:28 p.m. UTC
In d290e325179ccee966cd679d0fed48be6f4cc1b7
  "build system: don't let install-stubdom depend on install-tools"
the dependency of install-stubdom on install-tools was removed.

However, this was not correct.   stubdom/Makefile contains this:

  $(XEN_ROOT)/tools/qemu-xen-traditional-dir:
       $(MAKE) DESTDIR= -C $(XEN_ROOT)/tools qemu-xen-traditional-dir-find

As I have written before:

  With recursive make, it is necessary for the overall structure of the
  makefiles to sequence things so that each directory is entered exactly
  once, before its dependent directories are entered.  (It is possible
  to violate this rule without creating races but it is tricky and
  inadvisable.)

Since d290e325179c, it can happen that the command for the
qemu-xen-traditional-dir-find rule is run twice simultaneously - once
as a result of $(MAKE) -C tools install, and once as a result of
$(MAKE) -C stubdom install.  If you get unlucky, this causes lossage.
(This just happened to me in an osstest flight.)

In principle we could alternatively fix this by lifting the commands
in the qemu-xen-traditional-dir-find target (and perhaps other things
too) into the toplevel Makefile, as was done for mini-os.

But that seems overkill given how bad the stubdom build system is, and
the fact that we think at some point this qemu-trad will go away
entirely.  Adding the tools dependency back to the stubdom build is
by and large good enough.

(Someone who really wants to build stubdom without tools is welcome to
do this separation if they really want to.)

CC: Juergen Gross <jgross@suse.com>
CC: Wei Liu <wei.liu2@citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Wei Liu April 17, 2019, 11:39 a.m. UTC | #1
On Mon, Apr 15, 2019 at 05:28:08PM +0100, Ian Jackson wrote:
> In d290e325179ccee966cd679d0fed48be6f4cc1b7
>   "build system: don't let install-stubdom depend on install-tools"
> the dependency of install-stubdom on install-tools was removed.
> 
> However, this was not correct.   stubdom/Makefile contains this:
> 
>   $(XEN_ROOT)/tools/qemu-xen-traditional-dir:
>        $(MAKE) DESTDIR= -C $(XEN_ROOT)/tools qemu-xen-traditional-dir-find
> 
> As I have written before:
> 
>   With recursive make, it is necessary for the overall structure of the
>   makefiles to sequence things so that each directory is entered exactly
>   once, before its dependent directories are entered.  (It is possible
>   to violate this rule without creating races but it is tricky and
>   inadvisable.)
> 
> Since d290e325179c, it can happen that the command for the
> qemu-xen-traditional-dir-find rule is run twice simultaneously - once
> as a result of $(MAKE) -C tools install, and once as a result of
> $(MAKE) -C stubdom install.  If you get unlucky, this causes lossage.
> (This just happened to me in an osstest flight.)
> 
> In principle we could alternatively fix this by lifting the commands
> in the qemu-xen-traditional-dir-find target (and perhaps other things
> too) into the toplevel Makefile, as was done for mini-os.
> 
> But that seems overkill given how bad the stubdom build system is, and
> the fact that we think at some point this qemu-trad will go away
> entirely.  Adding the tools dependency back to the stubdom build is
> by and large good enough.
> 
> (Someone who really wants to build stubdom without tools is welcome to
> do this separation if they really want to.)
> 
> CC: Juergen Gross <jgross@suse.com>
> CC: Wei Liu <wei.liu2@citrix.com>
> Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>

Acked-by: Wei Liu <wei.liu2@citrix.com>
Ian Jackson April 23, 2019, 4:01 p.m. UTC | #2
Wei Liu writes ("Re: [PATCH 1/2] build system: make install-stubdom depend on install-tools again"):
> On Mon, Apr 15, 2019 at 05:28:08PM +0100, Ian Jackson wrote:
> > In d290e325179ccee966cd679d0fed48be6f4cc1b7
> >   "build system: don't let install-stubdom depend on install-tools"
> > the dependency of install-stubdom on install-tools was removed.
> > 
> > However, this was not correct.   stubdom/Makefile contains this:
> > 
> >   $(XEN_ROOT)/tools/qemu-xen-traditional-dir:
> >        $(MAKE) DESTDIR= -C $(XEN_ROOT)/tools qemu-xen-traditional-dir-find
...
> Acked-by: Wei Liu <wei.liu2@citrix.com>

Thanks.  Since this is related to unblocking osstest (it is causing
spurious build failures in various push gates), I have pushed it.

Unfortunately I think this patch is not suitable for backport so this
bug will continue to trouble us in stable branches from 4.9 onwards.

Ian.
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index d959cd5b47..829ac63741 100644
--- a/Makefile
+++ b/Makefile
@@ -127,7 +127,7 @@  install-tools: install-tools-public-headers
 	$(MAKE) -C tools install
 
 .PHONY: install-stubdom
-install-stubdom: mini-os-dir install-tools-public-headers
+install-stubdom: mini-os-dir install-tools
 	$(MAKE) -C stubdom install
 ifeq (x86_64,$(XEN_TARGET_ARCH))
 	XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom install-grub