On Wed, Jan 18, 2006 at 12:52:03PM +0000, Martin Michlmayr wrote:
> * Ralf Baechle <ralf@linux-mips.org> [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
|