linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Don't mkdir -p include/config in the sourcetree when using O=outputdir option
@ 2010-01-06 16:09 John Kacur
  2010-01-06 19:34 ` Michal Marek
  0 siblings, 1 reply; 7+ messages in thread
From: John Kacur @ 2010-01-06 16:09 UTC (permalink / raw)
  To: linux-kernel, Michal Marek; +Cc: Sam Ravnborg, linux-kbuild

>From ee63a191e50a33f6c47a00dc8f69b009a5406890 Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Wed, 6 Jan 2010 16:18:02 +0100
Subject: [PATCH] Don't mkdir -p include/config in the sourcetree when using O=outputdir option

Problem: When using the option to put output files in a separate directory, make oldconfig (or related steps like silentoldconfig) create the include/config dierectory in the source tree. This causes the prepare3 check to fail, requiring the user to run make mrproper in the source tree to continue with the make.

Solution: Add the $(objtree) directory to the %config target.

The following is an example of how the Makefile currently can fail.
[jkacur@tycho rt.linux.git]$ make mrproper
[jkacur@tycho rt.linux.git]$ mkdir /bld/2.6.33-rc3
[jkacur@tycho rt.linux.git]$ cp /bld/config /bld/2.6.33-rc3/.config
[jkacur@tycho rt.linux.git]$ make O=/bld/2.6.33-rc3/ oldconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/basic/hash
  GEN     /bld/2.6.33-rc3/Makefile
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/kxgettext.o
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf -o arch/x86/Kconfig
[jkacur@tycho rt.linux.git]$ make O=/bld/2.6.33-rc3/
  GEN     /bld/2.6.33-rc3/Makefile
scripts/kconfig/conf -s arch/x86/Kconfig
  Using /home/jkacur/rt.linux.git as source for kernel
  /home/jkacur/rt.linux.git is not clean, please run 'make mrproper'
  in the '/home/jkacur/rt.linux.git' directory.
make[1]: *** [prepare3] Error 1
make: *** [sub-make] Error 2
[jkacur@tycho rt.linux.git]$ ls -ld include/config/
drwxrwxr-x 2 jkacur jkacur 6 2010-01-06 15:58 include/config/

Signed-off-by: John Kacur <jkacur@redhat.com>
---
 Makefile |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/Makefile b/Makefile
index 1231094..7d8d722 100644
--- a/Makefile
+++ b/Makefile
@@ -458,7 +458,7 @@ config: scripts_basic outputmakefile FORCE
 	$(Q)$(MAKE) $(build)=scripts/kconfig $@
 
 %config: scripts_basic outputmakefile FORCE
-	$(Q)mkdir -p include/linux include/config
+	$(Q)mkdir -p $(objtree)/include/linux include/config
 	$(Q)$(MAKE) $(build)=scripts/kconfig $@
 
 else
-- 
1.6.0.6


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] Don't mkdir -p include/config in the sourcetree when using O=outputdir option
  2010-01-06 16:09 [PATCH] Don't mkdir -p include/config in the sourcetree when using O=outputdir option John Kacur
@ 2010-01-06 19:34 ` Michal Marek
  2010-01-06 20:10   ` John Kacur
  0 siblings, 1 reply; 7+ messages in thread
From: Michal Marek @ 2010-01-06 19:34 UTC (permalink / raw)
  To: John Kacur; +Cc: linux-kernel, Sam Ravnborg, linux-kbuild

John Kacur napsal(a):
> The following is an example of how the Makefile currently can fail.
> [jkacur@tycho rt.linux.git]$ make mrproper
> [jkacur@tycho rt.linux.git]$ mkdir /bld/2.6.33-rc3
> [jkacur@tycho rt.linux.git]$ cp /bld/config /bld/2.6.33-rc3/.config
> [jkacur@tycho rt.linux.git]$ make O=/bld/2.6.33-rc3/ oldconfig
>   HOSTCC  scripts/basic/fixdep
>   HOSTCC  scripts/basic/docproc
>   HOSTCC  scripts/basic/hash
>   GEN     /bld/2.6.33-rc3/Makefile
>   HOSTCC  scripts/kconfig/conf.o
>   HOSTCC  scripts/kconfig/kxgettext.o
>   HOSTCC  scripts/kconfig/zconf.tab.o
>   HOSTLD  scripts/kconfig/conf
> scripts/kconfig/conf -o arch/x86/Kconfig
> [jkacur@tycho rt.linux.git]$ make O=/bld/2.6.33-rc3/
>   GEN     /bld/2.6.33-rc3/Makefile
> scripts/kconfig/conf -s arch/x86/Kconfig
>   Using /home/jkacur/rt.linux.git as source for kernel
>   /home/jkacur/rt.linux.git is not clean, please run 'make mrproper'
>   in the '/home/jkacur/rt.linux.git' directory.
> make[1]: *** [prepare3] Error 1
> make: *** [sub-make] Error 2
> [jkacur@tycho rt.linux.git]$ ls -ld include/config/
> drwxrwxr-x 2 jkacur jkacur 6 2010-01-06 15:58 include/config/
> 
> Signed-off-by: John Kacur <jkacur@redhat.com>
> ---
>  Makefile |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 1231094..7d8d722 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -458,7 +458,7 @@ config: scripts_basic outputmakefile FORCE
>  	$(Q)$(MAKE) $(build)=scripts/kconfig $@
>  
>  %config: scripts_basic outputmakefile FORCE
> -	$(Q)mkdir -p include/linux include/config
> +	$(Q)mkdir -p $(objtree)/include/linux include/config
>  	$(Q)$(MAKE) $(build)=scripts/kconfig $@

Can you double-check that this patch really fixes your issue and that
without this patch it fails again? Because 1) I can't reproduce this
behaviour and I also don't see how it could f, 2) your problem is a
include/config file somehow created in the source tree, but you patch
the creation of include/linux. And if there really needs to be a fix,
the same should be applied to the identical block above.

thanks,
Michal

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Don't mkdir -p include/config in the sourcetree when  using O=outputdir option
  2010-01-06 19:34 ` Michal Marek
@ 2010-01-06 20:10   ` John Kacur
  2010-01-06 20:45     ` Michal Marek
  0 siblings, 1 reply; 7+ messages in thread
From: John Kacur @ 2010-01-06 20:10 UTC (permalink / raw)
  To: Michal Marek; +Cc: linux-kernel, Sam Ravnborg, linux-kbuild

On Wed, Jan 6, 2010 at 8:34 PM, Michal Marek <mmarek@suse.cz> wrote:
> John Kacur napsal(a):
>> The following is an example of how the Makefile currently can fail.
>> [jkacur@tycho rt.linux.git]$ make mrproper
>> [jkacur@tycho rt.linux.git]$ mkdir /bld/2.6.33-rc3
>> [jkacur@tycho rt.linux.git]$ cp /bld/config /bld/2.6.33-rc3/.config
>> [jkacur@tycho rt.linux.git]$ make O=/bld/2.6.33-rc3/ oldconfig
>>   HOSTCC  scripts/basic/fixdep
>>   HOSTCC  scripts/basic/docproc
>>   HOSTCC  scripts/basic/hash
>>   GEN     /bld/2.6.33-rc3/Makefile
>>   HOSTCC  scripts/kconfig/conf.o
>>   HOSTCC  scripts/kconfig/kxgettext.o
>>   HOSTCC  scripts/kconfig/zconf.tab.o
>>   HOSTLD  scripts/kconfig/conf
>> scripts/kconfig/conf -o arch/x86/Kconfig
>> [jkacur@tycho rt.linux.git]$ make O=/bld/2.6.33-rc3/
>>   GEN     /bld/2.6.33-rc3/Makefile
>> scripts/kconfig/conf -s arch/x86/Kconfig
>>   Using /home/jkacur/rt.linux.git as source for kernel
>>   /home/jkacur/rt.linux.git is not clean, please run 'make mrproper'
>>   in the '/home/jkacur/rt.linux.git' directory.
>> make[1]: *** [prepare3] Error 1
>> make: *** [sub-make] Error 2
>> [jkacur@tycho rt.linux.git]$ ls -ld include/config/
>> drwxrwxr-x 2 jkacur jkacur 6 2010-01-06 15:58 include/config/
>>
>> Signed-off-by: John Kacur <jkacur@redhat.com>
>> ---
>>  Makefile |    2 +-
>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/Makefile b/Makefile
>> index 1231094..7d8d722 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -458,7 +458,7 @@ config: scripts_basic outputmakefile FORCE
>>       $(Q)$(MAKE) $(build)=scripts/kconfig $@
>>
>>  %config: scripts_basic outputmakefile FORCE
>> -     $(Q)mkdir -p include/linux include/config
>> +     $(Q)mkdir -p $(objtree)/include/linux include/config
>>       $(Q)$(MAKE) $(build)=scripts/kconfig $@
>
> Can you double-check that this patch really fixes your issue and that
> without this patch it fails again? Because 1) I can't reproduce this
> behaviour and I also don't see how it could f, 2) your problem is a
> include/config file somehow created in the source tree, but you patch
> the creation of include/linux. And if there really needs to be a fix,
> the same should be applied to the identical block above.
>
> thanks,

Hi Michal

Yes, I doubled checked that the problem exists, and it is quite easy for me to
reproduce. However, my proposed solution is also broken, please don't
apply, I'm still investigating.

I am surprised that you are not able to reproduce the problem though.
Did you follow the steps I that I outlined?

Thanks, John

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Don't mkdir -p include/config in the sourcetree when using O=outputdir option
  2010-01-06 20:10   ` John Kacur
@ 2010-01-06 20:45     ` Michal Marek
  2010-01-06 22:30       ` John Kacur
  0 siblings, 1 reply; 7+ messages in thread
From: Michal Marek @ 2010-01-06 20:45 UTC (permalink / raw)
  To: John Kacur; +Cc: linux-kernel, Sam Ravnborg, linux-kbuild

John Kacur napsal(a):
> Yes, I doubled checked that the problem exists, and it is quite easy for me to
> reproduce. However, my proposed solution is also broken, please don't
> apply, I'm still investigating.
> 
> I am surprised that you are not able to reproduce the problem though.
> Did you follow the steps I that I outlined?

I did

$ git checkout v2.6.33-rc3
$ mkdir /bld/2.6.33-rc3
$ zcat /proc/config.gz >/bld/2.6.33-rc3/.config
$ make O=/bld/2.6.33-rc3/ oldconfig
...
hit Enter several times
...
$ ls -ld include/config /bld/2.6.33-rc3/include/config/
ls: cannot access include/config: No such file or directory
drwxr-xr-x 2 mmarek users 4096 2010-01-06 21:35
/bld/2.6.33-rc3/include/config//
$ make O=/bld/2.6.33-rc3/
  GEN     /bld/2.6.33-rc3/Makefile
scripts/kconfig/conf -s arch/x86/Kconfig
  Using /home/mmarek/linux-2.6 as source for kernel
  GEN     /bld/2.6.33-rc3/Makefile
  CHK     include/linux/version.h
  UPD     include/linux/version.h
  CHK     include/generated/utsrelease.h
  UPD     include/generated/utsrelease.h
  CC      kernel/bounds.s
... continues building ...


The mkdir command has been in the Makefile since 2006 (c955cca), so I
think that your problem is caused by something else. Try a make V=1
build with a read-only source tree to see which mkdir command fails.

Michal

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Don't mkdir -p include/config in the sourcetree when  using O=outputdir option
  2010-01-06 20:45     ` Michal Marek
@ 2010-01-06 22:30       ` John Kacur
  2010-01-06 22:33         ` John Kacur
  2010-01-07 11:19         ` Michal Marek
  0 siblings, 2 replies; 7+ messages in thread
From: John Kacur @ 2010-01-06 22:30 UTC (permalink / raw)
  To: Michal Marek; +Cc: linux-kernel, Sam Ravnborg, linux-kbuild

On Wed, Jan 6, 2010 at 9:45 PM, Michal Marek <mmarek@suse.cz> wrote:
> John Kacur napsal(a):
>> Yes, I doubled checked that the problem exists, and it is quite easy for me to
>> reproduce. However, my proposed solution is also broken, please don't
>> apply, I'm still investigating.
>>
>> I am surprised that you are not able to reproduce the problem though.
>> Did you follow the steps I that I outlined?
>
> I did
>
> $ git checkout v2.6.33-rc3
> $ mkdir /bld/2.6.33-rc3
> $ zcat /proc/config.gz >/bld/2.6.33-rc3/.config
> $ make O=/bld/2.6.33-rc3/ oldconfig
> ...
> hit Enter several times
> ...
> $ ls -ld include/config /bld/2.6.33-rc3/include/config/
> ls: cannot access include/config: No such file or directory
> drwxr-xr-x 2 mmarek users 4096 2010-01-06 21:35
> /bld/2.6.33-rc3/include/config//
> $ make O=/bld/2.6.33-rc3/
>  GEN     /bld/2.6.33-rc3/Makefile
> scripts/kconfig/conf -s arch/x86/Kconfig
>  Using /home/mmarek/linux-2.6 as source for kernel
>  GEN     /bld/2.6.33-rc3/Makefile
>  CHK     include/linux/version.h
>  UPD     include/linux/version.h
>  CHK     include/generated/utsrelease.h
>  UPD     include/generated/utsrelease.h
>  CC      kernel/bounds.s
> ... continues building ...
>
>
> The mkdir command has been in the Makefile since 2006 (c955cca), so I
> think that your problem is caused by something else. Try a make V=1
> build with a read-only source tree to see which mkdir command fails.
>

Michal: The length of time that a bug exists in a piece of code is no
argument for
it's correctness!

I tried to debug this using
make -d V=1 O=/bld/2.6.33-rc3
and discovered that the bug did not always occur, but did sometimes.
This leads me to think that it is timing sensitive, and indeed the
problem shows up
more easily on a machine with multiple processors.

Is it possible that the step with mkdir -p can sometimes occur in a
Makefile parallel process
before the cd KBUILD_OUTPUT occurs? That would explain why it doesn't
reliably reproduce.

In any case, the idea behind my original patch is good, just specify
the full path
using the objtree variable and the problem goes away. The first round of my
implementation was simply lacking.

Following up this note with a patch.

John

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Don't mkdir -p include/config in the sourcetree when  using O=outputdir option
  2010-01-06 22:30       ` John Kacur
@ 2010-01-06 22:33         ` John Kacur
  2010-01-07 11:19         ` Michal Marek
  1 sibling, 0 replies; 7+ messages in thread
From: John Kacur @ 2010-01-06 22:33 UTC (permalink / raw)
  To: Michal Marek; +Cc: linux-kernel, Sam Ravnborg, linux-kbuild

[-- Attachment #1: Type: TEXT/PLAIN, Size: 3580 bytes --]



On Wed, 6 Jan 2010, John Kacur wrote:

> On Wed, Jan 6, 2010 at 9:45 PM, Michal Marek <mmarek@suse.cz> wrote:
> > John Kacur napsal(a):
> >> Yes, I doubled checked that the problem exists, and it is quite easy for me to
> >> reproduce. However, my proposed solution is also broken, please don't
> >> apply, I'm still investigating.
> >>
> >> I am surprised that you are not able to reproduce the problem though.
> >> Did you follow the steps I that I outlined?
> >
> > I did
> >
> > $ git checkout v2.6.33-rc3
> > $ mkdir /bld/2.6.33-rc3
> > $ zcat /proc/config.gz >/bld/2.6.33-rc3/.config
> > $ make O=/bld/2.6.33-rc3/ oldconfig
> > ...
> > hit Enter several times
> > ...
> > $ ls -ld include/config /bld/2.6.33-rc3/include/config/
> > ls: cannot access include/config: No such file or directory
> > drwxr-xr-x 2 mmarek users 4096 2010-01-06 21:35
> > /bld/2.6.33-rc3/include/config//
> > $ make O=/bld/2.6.33-rc3/
> >  GEN     /bld/2.6.33-rc3/Makefile
> > scripts/kconfig/conf -s arch/x86/Kconfig
> >  Using /home/mmarek/linux-2.6 as source for kernel
> >  GEN     /bld/2.6.33-rc3/Makefile
> >  CHK     include/linux/version.h
> >  UPD     include/linux/version.h
> >  CHK     include/generated/utsrelease.h
> >  UPD     include/generated/utsrelease.h
> >  CC      kernel/bounds.s
> > ... continues building ...
> >
> >
> > The mkdir command has been in the Makefile since 2006 (c955cca), so I
> > think that your problem is caused by something else. Try a make V=1
> > build with a read-only source tree to see which mkdir command fails.
> >
> 
> Michal: The length of time that a bug exists in a piece of code is no
> argument for
> it's correctness!
> 
> I tried to debug this using
> make -d V=1 O=/bld/2.6.33-rc3
> and discovered that the bug did not always occur, but did sometimes.
> This leads me to think that it is timing sensitive, and indeed the
> problem shows up
> more easily on a machine with multiple processors.
> 
> Is it possible that the step with mkdir -p can sometimes occur in a
> Makefile parallel process
> before the cd KBUILD_OUTPUT occurs? That would explain why it doesn't
> reliably reproduce.
> 
> In any case, the idea behind my original patch is good, just specify
> the full path
> using the objtree variable and the problem goes away. The first round of my
> implementation was simply lacking.
> 
> Following up this note with a patch.
> 
> John
> 

>From b9db45e49b36e589de410f1c34fe77087fa36796 Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Wed, 6 Jan 2010 23:16:38 +0100
Subject: [PATCH] Kbuild: Use $(objtree) for mkdir -p include/linux include/config

This fixes a problem where make sometimes creates the directories
include/linux include/config
in the local source tree, even though O=/outputdir was specified.

The solution is to give an absolute path using $(objtree)

Signed-off-by: John Kacur <jkacur@redhat.com>
---
 Makefile |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index 1231094..2f3ba92 100644
--- a/Makefile
+++ b/Makefile
@@ -454,11 +454,11 @@ include $(srctree)/arch/$(SRCARCH)/Makefile
 export KBUILD_DEFCONFIG KBUILD_KCONFIG
 
 config: scripts_basic outputmakefile FORCE
-	$(Q)mkdir -p include/linux include/config
+	$(Q)mkdir -p $(objtree)/include/linux $(objtree)/include/config
 	$(Q)$(MAKE) $(build)=scripts/kconfig $@
 
 %config: scripts_basic outputmakefile FORCE
-	$(Q)mkdir -p include/linux include/config
+	$(Q)mkdir -p $(objtree)/include/linux $(objtree)/include/config
 	$(Q)$(MAKE) $(build)=scripts/kconfig $@
 
 else
-- 
1.6.0.6

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] Don't mkdir -p include/config in the sourcetree when using O=outputdir option
  2010-01-06 22:30       ` John Kacur
  2010-01-06 22:33         ` John Kacur
@ 2010-01-07 11:19         ` Michal Marek
  1 sibling, 0 replies; 7+ messages in thread
From: Michal Marek @ 2010-01-07 11:19 UTC (permalink / raw)
  To: John Kacur; +Cc: linux-kernel, Sam Ravnborg, linux-kbuild

On 6.1.2010 23:30, John Kacur wrote:
> On Wed, Jan 6, 2010 at 9:45 PM, Michal Marek <mmarek@suse.cz> wrote:
> Michal: The length of time that a bug exists in a piece of code is no
> argument for
> it's correctness!

>From your original post I though it fails reliably for you. If it's a
race, then you're right, the time it was introduced is irrelevant :-).


> I tried to debug this using
> make -d V=1 O=/bld/2.6.33-rc3
> and discovered that the bug did not always occur, but did sometimes.
> This leads me to think that it is timing sensitive, and indeed the
> problem shows up
> more easily on a machine with multiple processors.
> 
> Is it possible that the step with mkdir -p can sometimes occur in a
> Makefile parallel process
> before the cd KBUILD_OUTPUT occurs? That would explain why it doesn't
> reliably reproduce.

OK, I still don't see how it fails, but adding $(objtree) there is a
valid change and if it fixes your problem, let's apply it.

Michal

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-01-07 11:20 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-01-06 16:09 [PATCH] Don't mkdir -p include/config in the sourcetree when using O=outputdir option John Kacur
2010-01-06 19:34 ` Michal Marek
2010-01-06 20:10   ` John Kacur
2010-01-06 20:45     ` Michal Marek
2010-01-06 22:30       ` John Kacur
2010-01-06 22:33         ` John Kacur
2010-01-07 11:19         ` Michal Marek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).