Re: [PATCH 5/7] x86/vdso: Add vDSO functions for direct store instructions

From: Andy Lutomirski
Date: Mon Jul 23 2018 - 21:48:05 EST


On 07/23/2018 05:55 AM, Fenghua Yu wrote:
User wants to query if direct store instructions are supported and use
the instructions. The vDSO functions provides fast interface for user
to query the support and use the instructions.

movdiri_supported and its alias __vdso_movdiri_supported check if
movdiri instructions are supported.

movdir64b_supported and its alias __vdso_movdir64b_supported checks
if movdir64b instruction is supported.

movdiri32 and its alias __vdso_movdiri32 provide user APIs for calling
32-bit movdiri instruction.

movdiri64 and its alias __vdso_movdiri64 provide user APIs for calling
64-bit movdiri instruction.

movdir64b and its alias __vdso_movdir64b provide user APIs to move
64-byte data through movdir64b instruction.

The instructions can be implemented in intrinsic functions in future
GCC. But the vDSO interfaces are available to user without the
intrinsic functions support in GCC and the APIs movdiri_supported and
movdir64b_supported cannot be implemented as GCC functions.

I'm not convinced that any of this belongs in the vDSO at all. You could just add AT_HWCAP (or AT_HWCAP2) flags for the new instructions. Or user code could use CPUID just like for any other new instruction. But, if there really is some compelling reason to add this to the vDSO, then see below:


+
+notrace bool __vdso_movdiri_supported(void)
+{
+ return _vdso_funcs_data->movdiri_supported;

return static_cpu_has(X86_FEATURE_MOVDIRI);

And all the VVAR stuff can be removed.