On Wed, Jan 18, 2006 at 12:52:03PM +0000, Martin Michlmayr wrote: > * Ralf Baechle <ralf@xxxxxxxxxxxxxx> [2005-11-03 16:33]: > > > There was a comment on IRC that there was a register allocation issue which > > > lead to the current code. I'm not sure of the exact details, but I _think_ > > > this change ends up being equivilent to the code it replaces. > > > > It's correct - but triggers plenty of extra warnings and you forgot about > > get_user() which has the same kind of issue. Also you don't have the > > guarantee that <linux/types.h> has been included, so in order to avoid a > > yet another header file dependency I changed s8, s16 etc. to char, short, > > int, long long. Working on it but as usual uaccess.h is quite a quiz. > > What's the status of this? > > With current linux-mips git I still get the problem. As a reminder, > the error is: > > CC fs/compat_ioctl.o > fs/compat_ioctl.c: In function 'fd_ioctl_trans': > fs/compat_ioctl.c:1831: error: read-only variable '__gu_val' used as 'asm' output > fs/compat_ioctl.c:1831: error: read-only variable '__gu_val' used as 'asm' output > fs/compat_ioctl.c:1831: error: read-only variable '__gu_val' used as 'asm' output > fs/compat_ioctl.c:1831: error: read-only variable '__gu_val' used as 'asm' output > make[1]: *** [fs/compat_ioctl.o] Error 1 I have not been able to find some construct that keeps gcc happy and at the same time doesn't result in significantly worse code. That matters because get_user / put_user are used very often throughout the kernel. Ralf