2006-01-15 21:26:07

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH 2/2] kbuild: fix make -jN with multiple targets with make O=...

[It is pushed out at:
git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild.git]

The way multiple targets was handled with make O=...
broke because for each high-level target make spawned
a parallel make resulting in a broken build.
Reported by Keith Owens <[email protected]>

Signed-off-by: Sam Ravnborg <[email protected]>

---

Makefile | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)

296e0855b0f9a4ec9be17106ac541745a55b2ce1
diff --git a/Makefile b/Makefile
index deedaf7..b3dd9db 100644
--- a/Makefile
+++ b/Makefile
@@ -106,12 +106,13 @@ KBUILD_OUTPUT := $(shell cd $(KBUILD_OUT
$(if $(KBUILD_OUTPUT),, \
$(error output directory "$(saved-output)" does not exist))

-.PHONY: $(MAKECMDGOALS)
+.PHONY: $(MAKECMDGOALS) cdbuilddir
+$(MAKECMDGOALS) _all: cdbuilddir

-$(filter-out _all,$(MAKECMDGOALS)) _all:
+cdbuilddir:
$(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
KBUILD_SRC=$(CURDIR) \
- KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile $@
+ KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile $(MAKECMDGOALS)

# Leave processing to above invocation of make
skip-makefile := 1
--
1.0.GIT




2006-01-16 02:10:11

by Kalin KOZHUHAROV

[permalink] [raw]
Subject: Re: [PATCH 2/2] kbuild: fix make -jN with multiple targets with make O=...

Sam Ravnborg wrote:
> [It is pushed out at:
> git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild.git]
>
> The way multiple targets was handled with make O=...
> broke because for each high-level target make spawned
> a parallel make resulting in a broken build.
> Reported by Keith Owens <[email protected]>

When did it break? Are any of the released (not -git) kernels affected?

> Signed-off-by: Sam Ravnborg <[email protected]>
>
> ---
>
> Makefile | 7 ++++---
> 1 files changed, 4 insertions(+), 3 deletions(-)
>
> 296e0855b0f9a4ec9be17106ac541745a55b2ce1
> diff --git a/Makefile b/Makefile
> index deedaf7..b3dd9db 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -106,12 +106,13 @@ KBUILD_OUTPUT := $(shell cd $(KBUILD_OUT
> $(if $(KBUILD_OUTPUT),, \
> $(error output directory "$(saved-output)" does not exist))
>
> -.PHONY: $(MAKECMDGOALS)
> +.PHONY: $(MAKECMDGOALS) cdbuilddir
> +$(MAKECMDGOALS) _all: cdbuilddir
>
> -$(filter-out _all,$(MAKECMDGOALS)) _all:
> +cdbuilddir:
> $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
> KBUILD_SRC=$(CURDIR) \
> - KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile $@
> + KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile $(MAKECMDGOALS)
>
> # Leave processing to above invocation of make
> skip-makefile := 1

Kalin.
--
|[ ~~~~~~~~~~~~~~~~~~~~~~ ]|
+-> http://ThinRope.net/ <-+
|[ ______________________ ]|

2006-01-16 02:24:18

by Keith Owens

[permalink] [raw]
Subject: Re: [PATCH 2/2] kbuild: fix make -jN with multiple targets with make O=...

Kalin KOZHUHAROV (on Mon, 16 Jan 2006 11:09:51 +0900) wrote:
>Sam Ravnborg wrote:
>> [It is pushed out at:
>> git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild.git]
>>
>> The way multiple targets was handled with make O=...
>> broke because for each high-level target make spawned
>> a parallel make resulting in a broken build.
>> Reported by Keith Owens <[email protected]>
>
>When did it break? Are any of the released (not -git) kernels affected?

2.6.15 has the problem. It only triggers with the combination of a
separate object directory _and_ multiple targets on the make command
line _and_ running make in parallel (make -j).

2006-01-16 02:43:12

by Kalin KOZHUHAROV

[permalink] [raw]
Subject: Re: [PATCH 2/2] kbuild: fix make -jN with multiple targets with make O=...

Keith Owens wrote:
> Kalin KOZHUHAROV (on Mon, 16 Jan 2006 11:09:51 +0900) wrote:
>> Sam Ravnborg wrote:
>>> [It is pushed out at:
>>> git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild.git]
>>>
>>> The way multiple targets was handled with make O=...
>>> broke because for each high-level target make spawned
>>> a parallel make resulting in a broken build.
>>> Reported by Keith Owens <[email protected]>
>> When did it break? Are any of the released (not -git) kernels affected?
>
> 2.6.15 has the problem. It only triggers with the combination of a
> separate object directory _and_ multiple targets on the make command
> line _and_ running make in parallel (make -j).

Thanks for the clarification!

I am safe as I don't usually use multiple targets, but I always compile with
KBUILD_OUTPUT set and make -j5 (and distcc).

However, some of the out-of-tree modules might break, will stay on alert.
A quick check through the relevant to my hardware ebuilds (/me on Gentoo)
showed no show stoppers, they all do:

for T in $TARGETS; do make $T; done

(MAKEOPTS=-jN is handled internally on Gentoo if configured; and I use
/var/kernels/out to compile my kernels)

Please get that patch into 2.6.15.2 if possible (seems many people have ppp
problems, so I guess that will be released soon).

Kalin.

--
|[ ~~~~~~~~~~~~~~~~~~~~~~ ]|
+-> http://ThinRope.net/ <-+
|[ ______________________ ]|

2006-01-16 02:50:20

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [PATCH 2/2] kbuild: fix make -jN with multiple targets with make O=...

On Mon, Jan 16, 2006 at 11:42:30AM +0900, Kalin KOZHUHAROV wrote:
>> When did it break? Are any of the released (not -git) kernels affected?
> >
> > 2.6.15 has the problem. It only triggers with the combination of a
> > separate object directory _and_ multiple targets on the make command
> > line _and_ running make in parallel (make -j).
I have not tested, but I beleive the bug has been present since day one
of the make O=... feature inclusion.


> Please get that patch into 2.6.15.2 if possible (seems many people have ppp
> problems, so I guess that will be released soon).
Since it has been present for long then we are not in a big hurry.
One report in many months.

Sam