On Thu, Jun 12, 2003 at 09:36:25PM +0000, Andrew Clausen wrote:
> On Thu, Jun 12, 2003 at 06:59:26AM -0400, Trevor Woerner wrote:
> > I'm crossing my fingers and hoping that my solution is to build all
> > user-space apps with some switch that will set the sizes of data types
> > to be the same between user space and kernel space. Does some such
> > option exist?
> No, the kernel should provide 32 bit values. This is a bug.
> I *thought* I sent a patch for this a while ago... I'm not sure now.
You sent it and I applied your patch on February 21. Old mail appended
below again for Trevor's reference. It doesn't explain why he sees
64-bit values though. Trevor, what kernel exactly are you running?
Date: Thu, 20 Feb 2003 11:26:55 +1100
From: Andrew Clausen <email@example.com>
To: Linux-MIPS <firstname.lastname@example.org>
Cc: email@example.com, firstname.lastname@example.org
Subject: [patch] sys32_sysinfo broken on mips64 and ia64
The sys32_sysinfo() calls are currently using an old version of
"struct sysinfo32", in both the mips64 and ia64 ports.
busybox's init can't cope with the bogus output on my Origin 200,
so this bug prevents the Debian installer from bootstrapping.
This is the mips64 version of the patch. A very similar patch
could be constructed for ia64... it's very obvious what to do,
so I'll leave it to you ia64 people :)
diff -u -r126.96.36.199 linux32.c
--- arch/mips64/kernel/linux32.c 23 Jan 2003 02:12:59 -0000
+++ arch/mips64/kernel/linux32.c 20 Feb 2003 00:05:41 -0000
@@ -672,8 +672,11 @@
- unsigned short procs;
- char _f;
+ u16 procs;
+ u32 totalhigh;
+ u32 freehigh;
+ u32 mem_unit;
+ char _f;
extern asmlinkage int sys_sysinfo(struct sysinfo *info);
@@ -698,6 +701,9 @@
err |= __put_user (s.totalswap, &info->totalswap);
err |= __put_user (s.freeswap, &info->freeswap);
err |= __put_user (s.procs, &info->procs);
+ err |= __put_user (s.totalhigh, &info->totalhigh);
+ err |= __put_user (s.freehigh, &info->freehigh);
+ err |= __put_user (s.mem_unit, &info->mem_unit);