Message ID | 20171229164739.rgcqmam6wtno6hge@treble (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
[Re: [Regression 4.15] Can't kill CONFIG_UNWINDER_ORC with fire or plague.] On 29/12/2017 (Fri 10:47) Josh Poimboeuf wrote: > This seems to be related to a kconfig quirk where only silentoldconfig > updates the include/config/auto.conf file. The other config targets > (oldconfig, defconfig, etc) don't touch it. It seems intentional, but I > have no idea why. > > That causes the Makefile to get stale data for 'CONFIG_*' variables when > it includes auto.conf. So I don't think this is specific to the ORC > check. It seems like it could also cause bugs elsewhere. OK, good - you agree with my initial diagnosis of stale auto.conf then. Not sure what Randy was testing when he said he couldn't reproduce it. > The below (ugly) patch fixes it, though I'm not sure this is the best > way to do it. We probably need Masahiro or Michal to chime in here. Yep, that is why I intentionally put the kbuild folks on the To/Cc of the original report (and ran away screaming at the prospect of debugging Makefiles on xmas day). But with holidays and all, it might not be until early January before they have a chance to reply. Paul. -- > > diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile > index 297c1bf35140..3a0d92040a9c 100644 > --- a/scripts/kconfig/Makefile > +++ b/scripts/kconfig/Makefile > @@ -21,18 +21,23 @@ unexport CONFIG_ > > xconfig: $(obj)/qconf > $< $(silent) $(Kconfig) > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > gconfig: $(obj)/gconf > $< $(silent) $(Kconfig) > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > menuconfig: $(obj)/mconf > $< $(silent) $(Kconfig) > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > config: $(obj)/conf > $< $(silent) --oldaskconfig $(Kconfig) > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > nconfig: $(obj)/nconf > $< $(silent) $(Kconfig) > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > silentoldconfig: $(obj)/conf > $(Q)mkdir -p include/config include/generated > @@ -85,6 +90,7 @@ PHONY += $(simple-targets) > > $(simple-targets): $(obj)/conf > $< $(silent) --$@ $(Kconfig) > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > PHONY += oldnoconfig savedefconfig defconfig > > @@ -108,9 +114,11 @@ else > $(Q)$(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG) > endif > endif > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > %_defconfig: $(obj)/conf > $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig) > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@) > > @@ -118,6 +126,7 @@ configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/c > $(if $(call configfiles),, $(error No configuration exists for this target on this architecture)) > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(configfiles) > +$(Q)yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > PHONY += kvmconfig > kvmconfig: kvm_guest.config > @@ -130,6 +139,7 @@ xenconfig: xen.config > PHONY += tinyconfig > tinyconfig: > $(Q)$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > # Help text used by make help > help: -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Dec 29, 2017 at 01:18:30PM -0500, Paul Gortmaker wrote: > [Re: [Regression 4.15] Can't kill CONFIG_UNWINDER_ORC with fire or plague.] On 29/12/2017 (Fri 10:47) Josh Poimboeuf wrote: > > > This seems to be related to a kconfig quirk where only silentoldconfig > > updates the include/config/auto.conf file. The other config targets > > (oldconfig, defconfig, etc) don't touch it. It seems intentional, but I > > have no idea why. > > > > That causes the Makefile to get stale data for 'CONFIG_*' variables when > > it includes auto.conf. So I don't think this is specific to the ORC > > check. It seems like it could also cause bugs elsewhere. > > OK, good - you agree with my initial diagnosis of stale auto.conf then. > Not sure what Randy was testing when he said he couldn't reproduce it. > FWIW just to add another data point, I tripped over this repeatedly during a recent bisect of v4.14..v4.15-rc4. My ad-hoc solution was to just delete the stale auto.conf and reconfigure, IIRC. It was pretty annoying at the time, and I assumed everyone would be tripping over it so didn't bother making noise on lkml. Looks like I was mistaken... Cheers, Vito Caputo > > The below (ugly) patch fixes it, though I'm not sure this is the best > > way to do it. We probably need Masahiro or Michal to chime in here. > > Yep, that is why I intentionally put the kbuild folks on the To/Cc of > the original report (and ran away screaming at the prospect of debugging > Makefiles on xmas day). But with holidays and all, it might not be > until early January before they have a chance to reply. > > Paul. > -- > > > > > diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile > > index 297c1bf35140..3a0d92040a9c 100644 > > --- a/scripts/kconfig/Makefile > > +++ b/scripts/kconfig/Makefile > > @@ -21,18 +21,23 @@ unexport CONFIG_ > > > > xconfig: $(obj)/qconf > > $< $(silent) $(Kconfig) > > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > > > gconfig: $(obj)/gconf > > $< $(silent) $(Kconfig) > > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > > > menuconfig: $(obj)/mconf > > $< $(silent) $(Kconfig) > > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > > > config: $(obj)/conf > > $< $(silent) --oldaskconfig $(Kconfig) > > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > > > nconfig: $(obj)/nconf > > $< $(silent) $(Kconfig) > > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > > > silentoldconfig: $(obj)/conf > > $(Q)mkdir -p include/config include/generated > > @@ -85,6 +90,7 @@ PHONY += $(simple-targets) > > > > $(simple-targets): $(obj)/conf > > $< $(silent) --$@ $(Kconfig) > > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > > > PHONY += oldnoconfig savedefconfig defconfig > > > > @@ -108,9 +114,11 @@ else > > $(Q)$(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG) > > endif > > endif > > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > > > %_defconfig: $(obj)/conf > > $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig) > > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > > > configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@) > > > > @@ -118,6 +126,7 @@ configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/c > > $(if $(call configfiles),, $(error No configuration exists for this target on this architecture)) > > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(configfiles) > > +$(Q)yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig > > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > > > PHONY += kvmconfig > > kvmconfig: kvm_guest.config > > @@ -130,6 +139,7 @@ xenconfig: xen.config > > PHONY += tinyconfig > > tinyconfig: > > $(Q)$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config > > + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig > > > > # Help text used by make help > > help: -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[Re: [Regression 4.15] Can't kill CONFIG_UNWINDER_ORC with fire or plague.] On 29/12/2017 (Fri 13:18) Paul Gortmaker wrote: > [Re: [Regression 4.15] Can't kill CONFIG_UNWINDER_ORC with fire or plague.] On 29/12/2017 (Fri 10:47) Josh Poimboeuf wrote: > > > This seems to be related to a kconfig quirk where only silentoldconfig > > updates the include/config/auto.conf file. The other config targets > > (oldconfig, defconfig, etc) don't touch it. It seems intentional, but I > > have no idea why. > > > > That causes the Makefile to get stale data for 'CONFIG_*' variables when > > it includes auto.conf. So I don't think this is specific to the ORC > > check. It seems like it could also cause bugs elsewhere. > > OK, good - you agree with my initial diagnosis of stale auto.conf then. > Not sure what Randy was testing when he said he couldn't reproduce it. > > > The below (ugly) patch fixes it, though I'm not sure this is the best > > way to do it. We probably need Masahiro or Michal to chime in here. > > Yep, that is why I intentionally put the kbuild folks on the To/Cc of > the original report (and ran away screaming at the prospect of debugging > Makefiles on xmas day). But with holidays and all, it might not be > until early January before they have a chance to reply. It is nearly a year later and we still have this false positive. paul@sm:~/git/linux-head$ make -j12 > /dev/null Makefile:966: *** "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel". Stop. paul@sm:~/git/linux-head$ grep UNWINDER_ORC .config # CONFIG_UNWINDER_ORC is not set We do know a bit more now -- the auto.conf issue has been independently confirmed and "fixed" for other subsystems/issues since, like RETPOLINE: --------------------- commit 25896d073d8a0403b07e6dec56f58e6c33678207 Author: Masahiro Yamada <yamada.masahiro@socionext.com> Date: Wed Dec 5 15:27:19 2018 +0900 x86/build: Fix compiler support check for CONFIG_RETPOLINE It is troublesome to add a diagnostic like this to the Makefile parse stage because the top-level Makefile could be parsed with a stale include/config/auto.conf. Once you are hit by the error about non-retpoline compiler, the compilation still breaks even after disabling CONFIG_RETPOLINE. --------------------- I'm not sure if we want to treat this on a per config option each time again and again, or undertake a more global kbuild approach, but it does warrant a mention and a re-examination before we "solve" this again. Paul. --
On Mon, Dec 17, 2018 at 6:45 AM Paul Gortmaker <paul.gortmaker@windriver.com> wrote: > > [Re: [Regression 4.15] Can't kill CONFIG_UNWINDER_ORC with fire or plague.] On 29/12/2017 (Fri 13:18) Paul Gortmaker wrote: > > > [Re: [Regression 4.15] Can't kill CONFIG_UNWINDER_ORC with fire or plague.] On 29/12/2017 (Fri 10:47) Josh Poimboeuf wrote: > > > > > This seems to be related to a kconfig quirk where only silentoldconfig > > > updates the include/config/auto.conf file. The other config targets > > > (oldconfig, defconfig, etc) don't touch it. It seems intentional, but I > > > have no idea why. > > > > > > That causes the Makefile to get stale data for 'CONFIG_*' variables when > > > it includes auto.conf. So I don't think this is specific to the ORC > > > check. It seems like it could also cause bugs elsewhere. > > > > OK, good - you agree with my initial diagnosis of stale auto.conf then. > > Not sure what Randy was testing when he said he couldn't reproduce it. > > > > > The below (ugly) patch fixes it, though I'm not sure this is the best > > > way to do it. We probably need Masahiro or Michal to chime in here. > > > > Yep, that is why I intentionally put the kbuild folks on the To/Cc of > > the original report (and ran away screaming at the prospect of debugging > > Makefiles on xmas day). But with holidays and all, it might not be > > until early January before they have a chance to reply. > > It is nearly a year later and we still have this false positive. > > paul@sm:~/git/linux-head$ make -j12 > /dev/null > Makefile:966: *** "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, > please install libelf-dev, libelf-devel or elfutils-libelf-devel". Stop. > paul@sm:~/git/linux-head$ grep UNWINDER_ORC .config > # CONFIG_UNWINDER_ORC is not set > > We do know a bit more now -- the auto.conf issue has been independently > confirmed and "fixed" for other subsystems/issues since, like RETPOLINE: > > --------------------- > commit 25896d073d8a0403b07e6dec56f58e6c33678207 > Author: Masahiro Yamada <yamada.masahiro@socionext.com> > Date: Wed Dec 5 15:27:19 2018 +0900 > > x86/build: Fix compiler support check for CONFIG_RETPOLINE > > It is troublesome to add a diagnostic like this to the Makefile > parse stage because the top-level Makefile could be parsed with > a stale include/config/auto.conf. > > Once you are hit by the error about non-retpoline compiler, the > compilation still breaks even after disabling CONFIG_RETPOLINE. > --------------------- > > I'm not sure if we want to treat this on a per config option each time > again and again, or undertake a more global kbuild approach, but it does > warrant a mention and a re-examination before we "solve" this again. I did not notice this thread (perhaps, it fell into my crack during the holidays) but I actually tried to fix this twice in a sophisticated way in the past. The first attempt (https://patchwork.kernel.org/patch/10516049/) was rejected by Josh Poimboeuf. The second one (https://patchwork.kernel.org/patch/10643245/) turned out not working as expected. Now, I am preparing for the third attempt, but it will take time for review. What I can do now is the similar fix-up as commit 25896d073d8. I will post a cheesy fix-up patch. -- Best Regards Masahiro Yamada
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile index 297c1bf35140..3a0d92040a9c 100644 --- a/scripts/kconfig/Makefile +++ b/scripts/kconfig/Makefile @@ -21,18 +21,23 @@ unexport CONFIG_ xconfig: $(obj)/qconf $< $(silent) $(Kconfig) + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig gconfig: $(obj)/gconf $< $(silent) $(Kconfig) + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig menuconfig: $(obj)/mconf $< $(silent) $(Kconfig) + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig config: $(obj)/conf $< $(silent) --oldaskconfig $(Kconfig) + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig nconfig: $(obj)/nconf $< $(silent) $(Kconfig) + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig silentoldconfig: $(obj)/conf $(Q)mkdir -p include/config include/generated @@ -85,6 +90,7 @@ PHONY += $(simple-targets) $(simple-targets): $(obj)/conf $< $(silent) --$@ $(Kconfig) + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig PHONY += oldnoconfig savedefconfig defconfig @@ -108,9 +114,11 @@ else $(Q)$(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG) endif endif + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig %_defconfig: $(obj)/conf $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig) + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@) @@ -118,6 +126,7 @@ configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/c $(if $(call configfiles),, $(error No configuration exists for this target on this architecture)) $(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(configfiles) +$(Q)yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig PHONY += kvmconfig kvmconfig: kvm_guest.config @@ -130,6 +139,7 @@ xenconfig: xen.config PHONY += tinyconfig tinyconfig: $(Q)$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config + $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig # Help text used by make help help: