Subject: [PATCH v7 0/9] ARM: VDSO

From: [email-masked] (Andy Lutomirski)
Date: Mon, 30 Jun 2014 14:56:49 -0700

On 06/30/2014 08:42 AM, Nathan Lynch wrote:
> On 06/30/2014 09:40 AM, Will Deacon wrote:
>> Hi Nathan,
>>
>> On Mon, Jun 23, 2014 at 04:11:49AM +0100, Nathan Lynch wrote:
>>> Provide fast userspace implementations of gettimeofday and
>>> clock_gettime on systems that implement the generic timers extension
>>> defined in ARMv7.  This follows the example of arm64 in conception but
>>> significantly differs in some aspects of the implementation (C vs
>>> assembly, mainly).
>>
>> [...]
>>
>> This series is starting to gain traction now, so it's probably time to start
>> thinking about implementing this for CONFIG_COMPAT on arm64. We currently
>> map a fake vectors page there, but this would be much more flexible,
>> particularly as its written in C (and so we would magically get any new
>> functions added to the 32-bit version).
>>
>> So, there are a couple of questions that spring to mind:
>>
>>   - How difficult is it to share the vdso code with arm64 to build a compat
>>     vdso? (getting the Makefile to work will be hard, as we'll need an arm
>>     toolchain...).
> 
> Not sure.  x86 might be the best example to work from here, although it
> has the advantage of everything living under arch/x86.  64-bit powerpc
> kernels provide a 32-bit VDSO for compat tasks but I think it doesn't
> really share code with the 64-bit VDSO.

Heh.  x86 was not a shining example of how to share code.  It's a little
bit better now (3.16-rc3 and up).

> 
>>
>>   - If we use your code to build an arm64 vdso, how much slower is it than
>>     the handcrafted asm we currently have?
> 
> Someone with access to 64-bit hardware (i.e. not me) would have to find
> this out, but I would not be surprised if the C code could be tightened
> up -- I have not spent much time on optimizing it.
> 

I can't comment on ARM specifically, but the only assembly in the x86
vclock_gettime is an asm volatile (""), which causes gcc to emit more
optimal code.  I doubt I could shave off more than a cycle or two by
rewriting it in assembly.

--Andy