After the commit 1d0e12fd3a84 ("x86/defconfigs: Refresh defconfig files")
32-bit builds using defconfig become broken because on x86_64 build host
with no ARCH provided the default behaviour is to assume 64-bit independently
on the configuration file name. The crucial part is CONFIG_64BIT option
that used to be explicit. Let restore the latter option in order to unbreak
32-bit builds.
Fixes: 1d0e12fd3a84 ("x86/defconfigs: Refresh defconfig files")
Reported-by: Jarkko Nikula <[email protected]>
Signed-off-by: Andy Shevchenko <[email protected]>
Reviewed-by: Tony Luck <[email protected]>
---
arch/x86/configs/i386_defconfig | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/x86/configs/i386_defconfig b/arch/x86/configs/i386_defconfig
index d66078fc94a4..0b75c4291748 100644
--- a/arch/x86/configs/i386_defconfig
+++ b/arch/x86/configs/i386_defconfig
@@ -19,6 +19,7 @@ CONFIG_CGROUP_CPUACCT=y
CONFIG_BLK_DEV_INITRD=y
# CONFIG_COMPAT_BRK is not set
CONFIG_PROFILING=y
+# CONFIG_64BIT is not set
CONFIG_SMP=y
CONFIG_X86_GENERIC=y
CONFIG_HPET_TIMER=y
--
2.28.0
* Andy Shevchenko <[email protected]> wrote:
> After the commit 1d0e12fd3a84 ("x86/defconfigs: Refresh defconfig files")
> 32-bit builds using defconfig become broken because on x86_64 build host
> with no ARCH provided the default behaviour is to assume 64-bit independently
> on the configuration file name. The crucial part is CONFIG_64BIT option
> that used to be explicit. Let restore the latter option in order to unbreak
> 32-bit builds.
So exactly which build method broke due to this? The typical way to do a defconfig build is:
make ARCH=i386 defconfig
which still works fine AFAICS.
Thanks,
Ingo
On 9/8/20 5:13 AM, Ingo Molnar wrote:
>
> * Andy Shevchenko <[email protected]> wrote:
>
>> After the commit 1d0e12fd3a84 ("x86/defconfigs: Refresh defconfig files")
>> 32-bit builds using defconfig become broken because on x86_64 build host
>> with no ARCH provided the default behaviour is to assume 64-bit independently
>> on the configuration file name. The crucial part is CONFIG_64BIT option
>> that used to be explicit. Let restore the latter option in order to unbreak
>> 32-bit builds.
>
> So exactly which build method broke due to this? The typical way to do a defconfig build is:
>
> make ARCH=i386 defconfig
>
> which still works fine AFAICS.
>
> Thanks,
>
> Ingo
>
Here is a previous patch from someone else:
https://lore.kernel.org/lkml/[email protected]/
--
~Randy
On Tue, Sep 08, 2020 at 02:13:54PM +0200, Ingo Molnar wrote:
>
> * Andy Shevchenko <[email protected]> wrote:
>
> > After the commit 1d0e12fd3a84 ("x86/defconfigs: Refresh defconfig files")
> > 32-bit builds using defconfig become broken because on x86_64 build host
> > with no ARCH provided the default behaviour is to assume 64-bit independently
> > on the configuration file name. The crucial part is CONFIG_64BIT option
> > that used to be explicit. Let restore the latter option in order to unbreak
> > 32-bit builds.
>
> So exactly which build method broke due to this? The typical way to do a defconfig build is:
>
> make ARCH=i386 defconfig
>
> which still works fine AFAICS.
uname => x86_64
make i386_defconfig
It was very convenient to not supply ARCH when build on multi-arch host.
--
With Best Regards,
Andy Shevchenko
On Tue, Sep 8, 2020 at 8:53 PM Randy Dunlap <[email protected]> wrote:
> On 9/8/20 5:13 AM, Ingo Molnar wrote:
> > * Andy Shevchenko <[email protected]> wrote:
> >
> >> After the commit 1d0e12fd3a84 ("x86/defconfigs: Refresh defconfig files")
> >> 32-bit builds using defconfig become broken because on x86_64 build host
> >> with no ARCH provided the default behaviour is to assume 64-bit independently
> >> on the configuration file name. The crucial part is CONFIG_64BIT option
> >> that used to be explicit. Let restore the latter option in order to unbreak
> >> 32-bit builds.
> >
> > So exactly which build method broke due to this? The typical way to do a defconfig build is:
> >
> > make ARCH=i386 defconfig
> >
> > which still works fine AFAICS.
> >
> > Thanks,
> >
> > Ingo
> >
>
> Here is a previous patch from someone else:
>
> https://lore.kernel.org/lkml/[email protected]/
Thanks for pointing out. Whatever Ingo prefers (though personally I
think the other one requires more work on the shrinking commit
message).
--
With Best Regards,
Andy Shevchenko
Hi
On 9/8/20 3:13 PM, Ingo Molnar wrote:
>
> * Andy Shevchenko <[email protected]> wrote:
>
>> After the commit 1d0e12fd3a84 ("x86/defconfigs: Refresh defconfig files")
>> 32-bit builds using defconfig become broken because on x86_64 build host
>> with no ARCH provided the default behaviour is to assume 64-bit independently
>> on the configuration file name. The crucial part is CONFIG_64BIT option
>> that used to be explicit. Let restore the latter option in order to unbreak
>> 32-bit builds.
>
> So exactly which build method broke due to this? The typical way to do a defconfig build is:
>
> make ARCH=i386 defconfig
>
> which still works fine AFAICS.
>
Maybe wrong way to do it, just plain "make i386_defconfig". I'm aware of
ARCH=, but never needed to specify it for x86 targets.
Jarkko
* Andy Shevchenko <[email protected]> wrote:
> On Tue, Sep 08, 2020 at 02:13:54PM +0200, Ingo Molnar wrote:
> >
> > * Andy Shevchenko <[email protected]> wrote:
> >
> > > After the commit 1d0e12fd3a84 ("x86/defconfigs: Refresh defconfig files")
> > > 32-bit builds using defconfig become broken because on x86_64 build host
> > > with no ARCH provided the default behaviour is to assume 64-bit independently
> > > on the configuration file name. The crucial part is CONFIG_64BIT option
> > > that used to be explicit. Let restore the latter option in order to unbreak
> > > 32-bit builds.
> >
> > So exactly which build method broke due to this? The typical way to do a defconfig build is:
> >
> > make ARCH=i386 defconfig
> >
> > which still works fine AFAICS.
>
> uname => x86_64
> make i386_defconfig
>
> It was very convenient to not supply ARCH when build on multi-arch host.
Nice, TIL about the extended 'make *config' targets. :-)
Curiously, they aren't even mentioned in the 'configuration targets'
section of 'make help' and are not discoverable unless you know their
locations.
Anyway, your fix makes sense now to me too.
Do we need a similar for x86_64 defconfig, when built on 32-bit hosts? (not
that anyone does that in practice, but just for completeness.)
Also, it would be nice if there was a way to annotate the defconfig for
'make savedefconfig' preserved these ARCH choices - it currently strips out
all non-enabled options that match their default configuration value.
Thanks,
Ingo
On Wed, Sep 09, 2020 at 10:00:20AM +0200, Ingo Molnar wrote:
> * Andy Shevchenko <[email protected]> wrote:
> > On Tue, Sep 08, 2020 at 02:13:54PM +0200, Ingo Molnar wrote:
> > > * Andy Shevchenko <[email protected]> wrote:
...
> > uname => x86_64
> > make i386_defconfig
> >
> > It was very convenient to not supply ARCH when build on multi-arch host.
>
> Nice, TIL about the extended 'make *config' targets. :-)
>
> Curiously, they aren't even mentioned in the 'configuration targets'
> section of 'make help' and are not discoverable unless you know their
> locations.
>
> Anyway, your fix makes sense now to me too.
I see you applied original patch from Daniel.
> Do we need a similar for x86_64 defconfig, when built on 32-bit hosts? (not
> that anyone does that in practice, but just for completeness.)
I never heard about such use, I consider it more academic rather than
practical.
> Also, it would be nice if there was a way to annotate the defconfig for
> 'make savedefconfig' preserved these ARCH choices - it currently strips out
> all non-enabled options that match their default configuration value.
Hmm... Yes, perhaps it would be nice to have such an exception.
--
With Best Regards,
Andy Shevchenko