Re: [PATCH] x86-64: Clean up vdso/kernel shared variables

From: Andrew Lutomirski
Date: Wed Mar 30 2011 - 11:33:47 EST


On Wed, Mar 30, 2011 at 11:03 AM, H. Peter Anvin <hpa@xxxxxxxxxx> wrote:
> On 03/29/2011 07:29 AM, Andy Lutomirski wrote:
>> Variables that are shared between the vdso and the kernel are
>> currently a bit of a mess.  They are each defined with their own
>> magic, they are accessed differently in the kernel, the vsyscall page,
>> and the vdso, and one of them (vsyscall_clock) doesn't even really
>> exist.
>>
>> This changes them all to use a common mechanism.  All of them are
>> delcared in vvar.h with a fixed address (validated by the linker
>> script).  In the kernel (as before), they look like ordinary
>> read-write variables.  In the vsyscall page and the vdso, they are
>> accessed through a new macro VVAR, which gives read-only access.
>>
>> The vdso is now loaded verbatim into memory without any fixups.  As a
>> side bonus, access from the vdso is faster because a level of
>> indirection is removed.
>>
>> Signed-off-by: Andy Lutomirski <luto@xxxxxxx>
>
> How does this deal with variables which really should be shared with
> multiple vdsos (in particular the 32-bit vdso and the 64-bit vdso)?
> Part of me is wondering if it might not be simpler to put them all into
> a structure?

Good question. As far as I can tell, the 32-bit VDSO doesn't access
the vsyscall page at all. I think it just has the magic needed to
invoke syscalls. I don't know whether there even is a 32-bit
vgettimeofday, etc.

If we wanted to *add* that (for a huge performance increase on systems
with stable TSC), then there would need to be a 32-bit visible address
for the vsyscall page, and I don't know enough about the architecture
to do that without a bit of research. Nor do I really feel inclined
to start messing with magic functions called compat_vread :)

I think a structure would be a little simpler, but similar magic would
be needed to find the think as we have now. The down side is that
most of the kernel expects there to be a symbol called "jiffies". So
we'd need more linker magic to make jiffies exist and point to the
right place in the structure.

--Andy
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/