[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CA+55aFzVSY6G3ZDy7YhwGd2k+OBtpDZaobw8awCeyZsaAqHDVw@mail.gmail.com>
Date: Tue, 12 Feb 2013 15:06:51 -0800
From: Linus Torvalds <torvalds@...ux-foundation.org>
To: Ingo Molnar <mingo@...nel.org>, "H. Peter Anvin" <hpa@...or.com>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Jamie Lokier <jamie@...reable.org>,
Linus Torvalds <torvalds@...ux-foundation.org>,
ville.syrjala@...ux.intel.com, Borislav Petkov <bp@...en8.de>,
Russell King - ARM Linux <linux@....linux.org.uk>,
Thomas Gleixner <tglx@...utronix.de>,
"H. Peter Anvin" <hpa@...ux.intel.com>,
"H.J. Lu" <hjl.tools@...il.com>
Cc: linux-tip-commits@...r.kernel.org
Subject: Re: [tip:x86/mm] x86, mm: Redesign get_user with a
__builtin_choose_expr hack
So this looks clean, but I noticed something (that was true even of
the old 64-bit accesses)
On Tue, Feb 12, 2013 at 12:55 PM, tip-bot for H. Peter Anvin
<hpa@...ux.intel.com> wrote:
> + register __inttype(*(ptr)) __val_gu asm("%edx"); \
How does gcc even alllow this?
On x86-32, you cannot put a 64-bit value in %edx.
Where do the upper bits go? It clearly cannot be %edx:%eax, since we
put the error value in %eax.
So is the rule for x86-32 that naming "long long" register values
names the first register, and the high bits go into the next one (I
forget the crazy register numbering, I assume it's %ecx). Or what?
This should have a comment.
Also, come to think of it, we have tried the "named register
variables" thing before, and it has resulted in problems with scope.
In particular, two variables within the same scope and the same
register have been problematic. And it *does* happen, when you have
things like
/* copy_user */
put_user(get_user(.., addr), addr2);
and then things go downhill.
Maybe we do not have these issues, but there are good reasons why
we've tried very hard on x86 to avoid named register variables.
(I realize that they happen, and some other architectures don't even
have good support for naming registers any other way so they are way
more common there, so I probably worry needlessly, but it does worry
me).
Linus
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists