Message ID | 1393903321-6352-4-git-send-email-riku.voipio@linaro.org |
---|---|
State | Superseded |
Headers | show |
riku.voipio@linaro.org writes: > From: Riku Voipio <riku.voipio@linaro.org> > > Popular glibc based distributions[1] require minimum > 2.6.32 as kernel version. For some targets 2.6.18 > would be enough, but dropping so low would mean some > suboptimal system calls could get used. Is the effect of this to report system uname or minimum whichever is higher? > > Set the minimum kernel advertized to 2.6.32 for > all architectures but aarch64 to ensure working qemu > linux-user in case host kernel is older. So was skipping setting it for aarch64 deliberate? It would be nice to have an upstream fix for the hacks the distros are adding. I believe they are patching UNAME to 3.7.0 for aarch64. > > [1] https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/921078 > > Signed-off-by: Riku Voipio <riku.voipio@linaro.org> > --- > linux-user/alpha/syscall.h | 1 + > linux-user/arm/syscall.h | 1 + > linux-user/cris/syscall.h | 2 +- > linux-user/i386/syscall.h | 1 + > linux-user/m68k/syscall.h | 2 +- > linux-user/microblaze/syscall.h | 2 +- > linux-user/mips/syscall.h | 1 + > linux-user/mips64/syscall.h | 1 + > linux-user/openrisc/syscall.h | 1 + > linux-user/ppc/syscall.h | 1 + > linux-user/s390x/syscall.h | 1 + > linux-user/sh4/syscall.h | 1 + > linux-user/sparc/syscall.h | 1 + > linux-user/sparc64/syscall.h | 1 + > linux-user/unicore32/syscall.h | 1 + > linux-user/x86_64/syscall.h | 1 + > 16 files changed, 16 insertions(+), 3 deletions(-) > > diff --git a/linux-user/alpha/syscall.h b/linux-user/alpha/syscall.h > index 15a0100..ed13d9a 100644 > --- a/linux-user/alpha/syscall.h > +++ b/linux-user/alpha/syscall.h > @@ -39,6 +39,7 @@ struct target_pt_regs { > }; > > #define UNAME_MACHINE "alpha" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > #undef TARGET_EDEADLK > #define TARGET_EDEADLK 11 > diff --git a/linux-user/arm/syscall.h b/linux-user/arm/syscall.h > index 73f2931..ce2c2a8 100644 > --- a/linux-user/arm/syscall.h > +++ b/linux-user/arm/syscall.h > @@ -40,5 +40,6 @@ struct target_pt_regs { > #else > #define UNAME_MACHINE "armv5tel" > #endif > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > #define TARGET_CLONE_BACKWARDS > diff --git a/linux-user/cris/syscall.h b/linux-user/cris/syscall.h > index 832ee64..f5783c0 100644 > --- a/linux-user/cris/syscall.h > +++ b/linux-user/cris/syscall.h > @@ -1,8 +1,8 @@ > #ifndef CRIS_SYSCALL_H > #define CRIS_SYSCALL_H 1 > > - > #define UNAME_MACHINE "cris" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > /* pt_regs not only specifices the format in the user-struct during > * ptrace but is also the frame format used in the kernel prologue/epilogues > diff --git a/linux-user/i386/syscall.h b/linux-user/i386/syscall.h > index 12b8c3b..9bfc1ad 100644 > --- a/linux-user/i386/syscall.h > +++ b/linux-user/i386/syscall.h > @@ -144,5 +144,6 @@ struct target_vm86plus_struct { > }; > > #define UNAME_MACHINE "i686" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > #define TARGET_CLONE_BACKWARDS > diff --git a/linux-user/m68k/syscall.h b/linux-user/m68k/syscall.h > index 2618793..889eaf7 100644 > --- a/linux-user/m68k/syscall.h > +++ b/linux-user/m68k/syscall.h > @@ -15,7 +15,7 @@ struct target_pt_regs { > uint16_t __fill; > }; > > - > #define UNAME_MACHINE "m68k" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > void do_m68k_simcall(CPUM68KState *, int); > diff --git a/linux-user/microblaze/syscall.h b/linux-user/microblaze/syscall.h > index d550989..5b5f6b4 100644 > --- a/linux-user/microblaze/syscall.h > +++ b/linux-user/microblaze/syscall.h > @@ -1,8 +1,8 @@ > #ifndef MICROBLAZE_SYSCALLS_H > #define MICROBLAZE_SYSCALLS_H 1 > > - > #define UNAME_MACHINE "microblaze" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > /* We use microblaze_reg_t to keep things similar to the kernel sources. */ > typedef uint32_t microblaze_reg_t; > diff --git a/linux-user/mips/syscall.h b/linux-user/mips/syscall.h > index 9d437d9..5bc5696 100644 > --- a/linux-user/mips/syscall.h > +++ b/linux-user/mips/syscall.h > @@ -225,5 +225,6 @@ struct target_pt_regs { > #define TARGET_QEMU_ESIGRETURN 255 > > #define UNAME_MACHINE "mips" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > #define TARGET_CLONE_BACKWARDS > diff --git a/linux-user/mips64/syscall.h b/linux-user/mips64/syscall.h > index 1710f76..a7f5a58 100644 > --- a/linux-user/mips64/syscall.h > +++ b/linux-user/mips64/syscall.h > @@ -222,5 +222,6 @@ struct target_pt_regs { > #define TARGET_QEMU_ESIGRETURN 255 > > #define UNAME_MACHINE "mips64" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > #define TARGET_CLONE_BACKWARDS > diff --git a/linux-user/openrisc/syscall.h b/linux-user/openrisc/syscall.h > index bdbb577..c3b36da 100644 > --- a/linux-user/openrisc/syscall.h > +++ b/linux-user/openrisc/syscall.h > @@ -22,3 +22,4 @@ struct target_pt_regs { > }; > > #define UNAME_MACHINE "openrisc" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > diff --git a/linux-user/ppc/syscall.h b/linux-user/ppc/syscall.h > index ba36acb..6514c63 100644 > --- a/linux-user/ppc/syscall.h > +++ b/linux-user/ppc/syscall.h > @@ -62,5 +62,6 @@ struct target_revectored_struct { > #else > #define UNAME_MACHINE "ppc" > #endif > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > #define TARGET_CLONE_BACKWARDS > diff --git a/linux-user/s390x/syscall.h b/linux-user/s390x/syscall.h > index e5ce30b..aaad512 100644 > --- a/linux-user/s390x/syscall.h > +++ b/linux-user/s390x/syscall.h > @@ -21,5 +21,6 @@ struct target_pt_regs { > }; > > #define UNAME_MACHINE "s390x" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > #define TARGET_CLONE_BACKWARDS2 > diff --git a/linux-user/sh4/syscall.h b/linux-user/sh4/syscall.h > index 014bf58..ccd2216 100644 > --- a/linux-user/sh4/syscall.h > +++ b/linux-user/sh4/syscall.h > @@ -10,3 +10,4 @@ struct target_pt_regs { > }; > > #define UNAME_MACHINE "sh4" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > diff --git a/linux-user/sparc/syscall.h b/linux-user/sparc/syscall.h > index 4cd64bf..9549ea0 100644 > --- a/linux-user/sparc/syscall.h > +++ b/linux-user/sparc/syscall.h > @@ -7,6 +7,7 @@ struct target_pt_regs { > }; > > #define UNAME_MACHINE "sun4" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > /* SPARC kernels don't define this in their Kconfig, but they have the > * same ABI as if they did, implemented by sparc-specific code which fishes > diff --git a/linux-user/sparc64/syscall.h b/linux-user/sparc64/syscall.h > index e60bf31..82b1680 100644 > --- a/linux-user/sparc64/syscall.h > +++ b/linux-user/sparc64/syscall.h > @@ -8,6 +8,7 @@ struct target_pt_regs { > }; > > #define UNAME_MACHINE "sun4u" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > /* SPARC kernels don't define this in their Kconfig, but they have the > * same ABI as if they did, implemented by sparc-specific code which fishes > diff --git a/linux-user/unicore32/syscall.h b/linux-user/unicore32/syscall.h > index 010cdd8..f7e5525 100644 > --- a/linux-user/unicore32/syscall.h > +++ b/linux-user/unicore32/syscall.h > @@ -51,5 +51,6 @@ struct target_pt_regs { > #define UC32_SYSCALL_NR_set_tls (UC32_SYSCALL_ARCH_BASE + 5) > > #define UNAME_MACHINE "UniCore-II" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > #endif /* __UC32_SYSCALL_H__ */ > diff --git a/linux-user/x86_64/syscall.h b/linux-user/x86_64/syscall.h > index 81314cf..e03b5a0 100644 > --- a/linux-user/x86_64/syscall.h > +++ b/linux-user/x86_64/syscall.h > @@ -91,6 +91,7 @@ struct target_msqid64_ds { > }; > > #define UNAME_MACHINE "x86_64" > +#define UNAME_MINIMUM_RELEASE "2.6.32" > > #define TARGET_ARCH_SET_GS 0x1001 > #define TARGET_ARCH_SET_FS 0x1002
On 4 March 2014 11:32, Alex Bennée <alex.bennee@linaro.org> wrote: > > riku.voipio@linaro.org writes: > >> From: Riku Voipio <riku.voipio@linaro.org> >> >> Popular glibc based distributions[1] require minimum >> 2.6.32 as kernel version. For some targets 2.6.18 >> would be enough, but dropping so low would mean some >> suboptimal system calls could get used. > > Is the effect of this to report system uname or minimum whichever is higher? That's what this patch does. The old configure stuff which this patchset removed made it report "always that version", IIRC. >> Set the minimum kernel advertized to 2.6.32 for >> all architectures but aarch64 to ensure working qemu >> linux-user in case host kernel is older. > > So was skipping setting it for aarch64 deliberate? Yes, it already sets the minimum higher than this. >It would be nice to > have an upstream fix for the hacks the distros are adding. I think that's what this patchset is supposed to be :-) > I believe they are patching UNAME to 3.7.0 for aarch64. Only to the extent that they're still carrying bogus patches borrowed from the SuSE tree rather than using the better way of setting per-arch minumum reported uname that we applied upstream. thanks -- PMM
Peter Maydell <peter.maydell@linaro.org> writes: > On 4 March 2014 11:32, Alex Bennée <alex.bennee@linaro.org> wrote: >> >> riku.voipio@linaro.org writes: >> >>> From: Riku Voipio <riku.voipio@linaro.org> >>> >>> Popular glibc based distributions[1] require minimum >>> 2.6.32 as kernel version. For some targets 2.6.18 >>> would be enough, but dropping so low would mean some >>> suboptimal system calls could get used. <snip> >>It would be nice to >> have an upstream fix for the hacks the distros are adding. > > I think that's what this patchset is supposed to be :-) > >> I believe they are patching UNAME to 3.7.0 for aarch64. > > Only to the extent that they're still carrying bogus patches > borrowed from the SuSE tree rather than using the better > way of setting per-arch minumum reported uname that we > applied upstream. <snip> Only I didn't see linux-user/aarch64 in the diffstat, or did I miss another patch?
On 4 March 2014 16:31, Alex Bennée <alex.bennee@linaro.org> wrote: > Only I didn't see linux-user/aarch64 in the diffstat, or did I miss > another patch? That's because in master we're already setting the minimum uname for aarch64... thanks -- PMM
Peter Maydell <peter.maydell@linaro.org> writes: > On 4 March 2014 16:31, Alex Bennée <alex.bennee@linaro.org> wrote: >> Only I didn't see linux-user/aarch64 in the diffstat, or did I miss >> another patch? > > That's because in master we're already setting the minimum > uname for aarch64... Ahh, sneaked in while I wasn't looking ;-)
On 4 March 2014 13:41, Peter Maydell <peter.maydell@linaro.org> wrote: > On 4 March 2014 11:32, Alex Bennée <alex.bennee@linaro.org> wrote: > > Is the effect of this to report system uname or minimum whichever is higher? > > That's what this patch does. The old configure stuff which > this patchset removed made it report "always that version", > IIRC. Yes, configure indeed has that effect, so with the current ubuntu qemu you get: uname -r 3.8.0-35-generic qemu-arm ./arm/busybox uname -r 2.6.32 With these patches, qemu will report 2.6.32 or newer, if host kernel is newer. > >It would be nice to > > have an upstream fix for the hacks the distros are adding. > I think that's what this patchset is supposed to be :-) Yes. The patch 5/5 is heavy hammer to make distributions start using the new way. Else I fear they will just continue using the configure flag and their own hacks. > Only to the extent that they're still carrying bogus patches > borrowed from the SuSE tree rather than using the better > way of setting per-arch minumum reported uname that we > applied upstream. So you agree these patches are the way to go? If you believe these are too close to hard freeze, I can just send this list of patches for merging: https://git.linaro.org/people/riku.voipio/qemu.git/shortlog/refs/heads/linux-user-for-upstream Riku
On 7 March 2014 02:19, Riku Voipio <riku.voipio@linaro.org> wrote:
> So you agree these patches are the way to go?
I haven't actually reviewed them but I think the idea is right,
yes.
-- PMM
On 7 March 2014 10:45, Peter Maydell <peter.maydell@linaro.org> wrote: >> On 7 March 2014 02:19, Riku Voipio <riku.voipio@linaro.org> wrote: > > So you agree these patches are the way to go? > I haven't actually reviewed them but I think the idea is right, > yes. With the hard freeze getting close, and me being away until wednesday, I think I'll send a pull req for the reviewed patches now in que + this patch from this series. While this patch hasn't any reviews, it is probably less controversial than the others, and allows distributions to stop calling the configure option. Riku
diff --git a/linux-user/alpha/syscall.h b/linux-user/alpha/syscall.h index 15a0100..ed13d9a 100644 --- a/linux-user/alpha/syscall.h +++ b/linux-user/alpha/syscall.h @@ -39,6 +39,7 @@ struct target_pt_regs { }; #define UNAME_MACHINE "alpha" +#define UNAME_MINIMUM_RELEASE "2.6.32" #undef TARGET_EDEADLK #define TARGET_EDEADLK 11 diff --git a/linux-user/arm/syscall.h b/linux-user/arm/syscall.h index 73f2931..ce2c2a8 100644 --- a/linux-user/arm/syscall.h +++ b/linux-user/arm/syscall.h @@ -40,5 +40,6 @@ struct target_pt_regs { #else #define UNAME_MACHINE "armv5tel" #endif +#define UNAME_MINIMUM_RELEASE "2.6.32" #define TARGET_CLONE_BACKWARDS diff --git a/linux-user/cris/syscall.h b/linux-user/cris/syscall.h index 832ee64..f5783c0 100644 --- a/linux-user/cris/syscall.h +++ b/linux-user/cris/syscall.h @@ -1,8 +1,8 @@ #ifndef CRIS_SYSCALL_H #define CRIS_SYSCALL_H 1 - #define UNAME_MACHINE "cris" +#define UNAME_MINIMUM_RELEASE "2.6.32" /* pt_regs not only specifices the format in the user-struct during * ptrace but is also the frame format used in the kernel prologue/epilogues diff --git a/linux-user/i386/syscall.h b/linux-user/i386/syscall.h index 12b8c3b..9bfc1ad 100644 --- a/linux-user/i386/syscall.h +++ b/linux-user/i386/syscall.h @@ -144,5 +144,6 @@ struct target_vm86plus_struct { }; #define UNAME_MACHINE "i686" +#define UNAME_MINIMUM_RELEASE "2.6.32" #define TARGET_CLONE_BACKWARDS diff --git a/linux-user/m68k/syscall.h b/linux-user/m68k/syscall.h index 2618793..889eaf7 100644 --- a/linux-user/m68k/syscall.h +++ b/linux-user/m68k/syscall.h @@ -15,7 +15,7 @@ struct target_pt_regs { uint16_t __fill; }; - #define UNAME_MACHINE "m68k" +#define UNAME_MINIMUM_RELEASE "2.6.32" void do_m68k_simcall(CPUM68KState *, int); diff --git a/linux-user/microblaze/syscall.h b/linux-user/microblaze/syscall.h index d550989..5b5f6b4 100644 --- a/linux-user/microblaze/syscall.h +++ b/linux-user/microblaze/syscall.h @@ -1,8 +1,8 @@ #ifndef MICROBLAZE_SYSCALLS_H #define MICROBLAZE_SYSCALLS_H 1 - #define UNAME_MACHINE "microblaze" +#define UNAME_MINIMUM_RELEASE "2.6.32" /* We use microblaze_reg_t to keep things similar to the kernel sources. */ typedef uint32_t microblaze_reg_t; diff --git a/linux-user/mips/syscall.h b/linux-user/mips/syscall.h index 9d437d9..5bc5696 100644 --- a/linux-user/mips/syscall.h +++ b/linux-user/mips/syscall.h @@ -225,5 +225,6 @@ struct target_pt_regs { #define TARGET_QEMU_ESIGRETURN 255 #define UNAME_MACHINE "mips" +#define UNAME_MINIMUM_RELEASE "2.6.32" #define TARGET_CLONE_BACKWARDS diff --git a/linux-user/mips64/syscall.h b/linux-user/mips64/syscall.h index 1710f76..a7f5a58 100644 --- a/linux-user/mips64/syscall.h +++ b/linux-user/mips64/syscall.h @@ -222,5 +222,6 @@ struct target_pt_regs { #define TARGET_QEMU_ESIGRETURN 255 #define UNAME_MACHINE "mips64" +#define UNAME_MINIMUM_RELEASE "2.6.32" #define TARGET_CLONE_BACKWARDS diff --git a/linux-user/openrisc/syscall.h b/linux-user/openrisc/syscall.h index bdbb577..c3b36da 100644 --- a/linux-user/openrisc/syscall.h +++ b/linux-user/openrisc/syscall.h @@ -22,3 +22,4 @@ struct target_pt_regs { }; #define UNAME_MACHINE "openrisc" +#define UNAME_MINIMUM_RELEASE "2.6.32" diff --git a/linux-user/ppc/syscall.h b/linux-user/ppc/syscall.h index ba36acb..6514c63 100644 --- a/linux-user/ppc/syscall.h +++ b/linux-user/ppc/syscall.h @@ -62,5 +62,6 @@ struct target_revectored_struct { #else #define UNAME_MACHINE "ppc" #endif +#define UNAME_MINIMUM_RELEASE "2.6.32" #define TARGET_CLONE_BACKWARDS diff --git a/linux-user/s390x/syscall.h b/linux-user/s390x/syscall.h index e5ce30b..aaad512 100644 --- a/linux-user/s390x/syscall.h +++ b/linux-user/s390x/syscall.h @@ -21,5 +21,6 @@ struct target_pt_regs { }; #define UNAME_MACHINE "s390x" +#define UNAME_MINIMUM_RELEASE "2.6.32" #define TARGET_CLONE_BACKWARDS2 diff --git a/linux-user/sh4/syscall.h b/linux-user/sh4/syscall.h index 014bf58..ccd2216 100644 --- a/linux-user/sh4/syscall.h +++ b/linux-user/sh4/syscall.h @@ -10,3 +10,4 @@ struct target_pt_regs { }; #define UNAME_MACHINE "sh4" +#define UNAME_MINIMUM_RELEASE "2.6.32" diff --git a/linux-user/sparc/syscall.h b/linux-user/sparc/syscall.h index 4cd64bf..9549ea0 100644 --- a/linux-user/sparc/syscall.h +++ b/linux-user/sparc/syscall.h @@ -7,6 +7,7 @@ struct target_pt_regs { }; #define UNAME_MACHINE "sun4" +#define UNAME_MINIMUM_RELEASE "2.6.32" /* SPARC kernels don't define this in their Kconfig, but they have the * same ABI as if they did, implemented by sparc-specific code which fishes diff --git a/linux-user/sparc64/syscall.h b/linux-user/sparc64/syscall.h index e60bf31..82b1680 100644 --- a/linux-user/sparc64/syscall.h +++ b/linux-user/sparc64/syscall.h @@ -8,6 +8,7 @@ struct target_pt_regs { }; #define UNAME_MACHINE "sun4u" +#define UNAME_MINIMUM_RELEASE "2.6.32" /* SPARC kernels don't define this in their Kconfig, but they have the * same ABI as if they did, implemented by sparc-specific code which fishes diff --git a/linux-user/unicore32/syscall.h b/linux-user/unicore32/syscall.h index 010cdd8..f7e5525 100644 --- a/linux-user/unicore32/syscall.h +++ b/linux-user/unicore32/syscall.h @@ -51,5 +51,6 @@ struct target_pt_regs { #define UC32_SYSCALL_NR_set_tls (UC32_SYSCALL_ARCH_BASE + 5) #define UNAME_MACHINE "UniCore-II" +#define UNAME_MINIMUM_RELEASE "2.6.32" #endif /* __UC32_SYSCALL_H__ */ diff --git a/linux-user/x86_64/syscall.h b/linux-user/x86_64/syscall.h index 81314cf..e03b5a0 100644 --- a/linux-user/x86_64/syscall.h +++ b/linux-user/x86_64/syscall.h @@ -91,6 +91,7 @@ struct target_msqid64_ds { }; #define UNAME_MACHINE "x86_64" +#define UNAME_MINIMUM_RELEASE "2.6.32" #define TARGET_ARCH_SET_GS 0x1001 #define TARGET_ARCH_SET_FS 0x1002