diff mbox series

[v6,1/3] arch: vDSO: Add a __vdso_getrandom prototype for all architectures

Message ID 20240901061315.15693-2-xry111@xry111.site
State New
Headers show
Series LoongArch: Implement getrandom() in vDSO | expand

Commit Message

Xi Ruoyao Sept. 1, 2024, 6:13 a.m. UTC
Without a prototype, we'll have to add a prototype for each architecture
implementing vDSO getrandom.  As most architectures will likely have the
vDSO getrandom implemented in a near future, and we'd like to keep the
declarations compatible everywhere (to ease the Glibc work), we should
really just have one copy of the prototype.

Suggested-by: Huacai Chen <chenhuacai@kernel.org>
Signed-off-by: Xi Ruoyao <xry111@xry111.site>
---
 arch/x86/entry/vdso/vgetrandom.c | 2 --
 include/vdso/getrandom.h         | 5 +++++
 2 files changed, 5 insertions(+), 2 deletions(-)

Comments

Huacai Chen Sept. 1, 2024, 8:44 a.m. UTC | #1
Hi, Ruoyao,

On Sun, Sep 1, 2024 at 2:13 PM Xi Ruoyao <xry111@xry111.site> wrote:
>
> Without a prototype, we'll have to add a prototype for each architecture
> implementing vDSO getrandom.  As most architectures will likely have the
> vDSO getrandom implemented in a near future, and we'd like to keep the
> declarations compatible everywhere (to ease the Glibc work), we should
> really just have one copy of the prototype.
>
> Suggested-by: Huacai Chen <chenhuacai@kernel.org>
> Signed-off-by: Xi Ruoyao <xry111@xry111.site>
> ---
>  arch/x86/entry/vdso/vgetrandom.c | 2 --
>  include/vdso/getrandom.h         | 5 +++++
>  2 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/entry/vdso/vgetrandom.c b/arch/x86/entry/vdso/vgetrandom.c
> index 52d3c7faae2e..430862b8977c 100644
> --- a/arch/x86/entry/vdso/vgetrandom.c
> +++ b/arch/x86/entry/vdso/vgetrandom.c
> @@ -6,8 +6,6 @@
>
>  #include "../../../../lib/vdso/getrandom.c"
>
> -ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len);
> -
>  ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len)
>  {
>         return __cvdso_getrandom(buffer, len, flags, opaque_state, opaque_len);
> diff --git a/include/vdso/getrandom.h b/include/vdso/getrandom.h
> index 4cf02e678f5e..08b47b002bf7 100644
> --- a/include/vdso/getrandom.h
> +++ b/include/vdso/getrandom.h
> @@ -56,4 +56,9 @@ struct vgetrandom_state {
>   */
>  extern void __arch_chacha20_blocks_nostack(u8 *dst_bytes, const u32 *key, u32 *counter, size_t nblocks);
>
> +/**
Though in this file there are already comments beginning with /**, but
it seems the kernel's code style suggests beginning with /*.

Huacai

> + * __vdso_getrandom: Prototype of vDSO getrandom.
> + */
> +extern ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len);
> +
>  #endif /* _VDSO_GETRANDOM_H */
> --
> 2.46.0
>
Jason A. Donenfeld Sept. 1, 2024, 1:23 p.m. UTC | #2
On Sun, Sep 01, 2024 at 04:44:40PM +0800, Huacai Chen wrote:
> Hi, Ruoyao,
> 
> On Sun, Sep 1, 2024 at 2:13 PM Xi Ruoyao <xry111@xry111.site> wrote:
> >
> > Without a prototype, we'll have to add a prototype for each architecture
> > implementing vDSO getrandom.  As most architectures will likely have the
> > vDSO getrandom implemented in a near future, and we'd like to keep the
> > declarations compatible everywhere (to ease the Glibc work), we should
> > really just have one copy of the prototype.
> >
> > Suggested-by: Huacai Chen <chenhuacai@kernel.org>
> > Signed-off-by: Xi Ruoyao <xry111@xry111.site>
> > ---
> >  arch/x86/entry/vdso/vgetrandom.c | 2 --
> >  include/vdso/getrandom.h         | 5 +++++
> >  2 files changed, 5 insertions(+), 2 deletions(-)
> >
> > diff --git a/arch/x86/entry/vdso/vgetrandom.c b/arch/x86/entry/vdso/vgetrandom.c
> > index 52d3c7faae2e..430862b8977c 100644
> > --- a/arch/x86/entry/vdso/vgetrandom.c
> > +++ b/arch/x86/entry/vdso/vgetrandom.c
> > @@ -6,8 +6,6 @@
> >
> >  #include "../../../../lib/vdso/getrandom.c"
> >
> > -ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len);
> > -
> >  ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len)
> >  {
> >         return __cvdso_getrandom(buffer, len, flags, opaque_state, opaque_len);
> > diff --git a/include/vdso/getrandom.h b/include/vdso/getrandom.h
> > index 4cf02e678f5e..08b47b002bf7 100644
> > --- a/include/vdso/getrandom.h
> > +++ b/include/vdso/getrandom.h
> > @@ -56,4 +56,9 @@ struct vgetrandom_state {
> >   */
> >  extern void __arch_chacha20_blocks_nostack(u8 *dst_bytes, const u32 *key, u32 *counter, size_t nblocks);
> >
> > +/**
> Though in this file there are already comments beginning with /**, but
> it seems the kernel's code style suggests beginning with /*.

/** is for docbook comments.
Jason A. Donenfeld Sept. 1, 2024, 1:39 p.m. UTC | #3
On Sun, Sep 01, 2024 at 03:23:39PM +0200, Jason A. Donenfeld wrote:
> On Sun, Sep 01, 2024 at 04:44:40PM +0800, Huacai Chen wrote:
> > Hi, Ruoyao,
> > 
> > On Sun, Sep 1, 2024 at 2:13 PM Xi Ruoyao <xry111@xry111.site> wrote:
> > >
> > > Without a prototype, we'll have to add a prototype for each architecture
> > > implementing vDSO getrandom.  As most architectures will likely have the
> > > vDSO getrandom implemented in a near future, and we'd like to keep the
> > > declarations compatible everywhere (to ease the Glibc work), we should
> > > really just have one copy of the prototype.
> > >
> > > Suggested-by: Huacai Chen <chenhuacai@kernel.org>
> > > Signed-off-by: Xi Ruoyao <xry111@xry111.site>
> > > ---
> > >  arch/x86/entry/vdso/vgetrandom.c | 2 --
> > >  include/vdso/getrandom.h         | 5 +++++
> > >  2 files changed, 5 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/arch/x86/entry/vdso/vgetrandom.c b/arch/x86/entry/vdso/vgetrandom.c
> > > index 52d3c7faae2e..430862b8977c 100644
> > > --- a/arch/x86/entry/vdso/vgetrandom.c
> > > +++ b/arch/x86/entry/vdso/vgetrandom.c
> > > @@ -6,8 +6,6 @@
> > >
> > >  #include "../../../../lib/vdso/getrandom.c"
> > >
> > > -ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len);
> > > -
> > >  ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len)
> > >  {
> > >         return __cvdso_getrandom(buffer, len, flags, opaque_state, opaque_len);
> > > diff --git a/include/vdso/getrandom.h b/include/vdso/getrandom.h
> > > index 4cf02e678f5e..08b47b002bf7 100644
> > > --- a/include/vdso/getrandom.h
> > > +++ b/include/vdso/getrandom.h
> > > @@ -56,4 +56,9 @@ struct vgetrandom_state {
> > >   */
> > >  extern void __arch_chacha20_blocks_nostack(u8 *dst_bytes, const u32 *key, u32 *counter, size_t nblocks);
> > >
> > > +/**
> > Though in this file there are already comments beginning with /**, but
> > it seems the kernel's code style suggests beginning with /*.
> 
> /** is for docbook comments.

I'll fix this commit up as follows:
Christophe Leroy Sept. 1, 2024, 6:06 p.m. UTC | #4
Le 01/09/2024 à 08:13, Xi Ruoyao a écrit :
> Without a prototype, we'll have to add a prototype for each architecture
> implementing vDSO getrandom.  As most architectures will likely have the
> vDSO getrandom implemented in a near future, and we'd like to keep the
> declarations compatible everywhere (to ease the Glibc work), we should
> really just have one copy of the prototype.

It is a good idea but it have to handle all architectures, not only half 
of them. If you look into vdso_config.h in selftests, you can see that 
there are two names:

__kernel_getrandom is used on arm64, powerpc, s390,

__vdso_getrandom is used on arm, mips, sparc, x86, riscv, loongarch

Christophe



> 
> Suggested-by: Huacai Chen <chenhuacai@kernel.org>
> Signed-off-by: Xi Ruoyao <xry111@xry111.site>
> ---
>   arch/x86/entry/vdso/vgetrandom.c | 2 --
>   include/vdso/getrandom.h         | 5 +++++
>   2 files changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/entry/vdso/vgetrandom.c b/arch/x86/entry/vdso/vgetrandom.c
> index 52d3c7faae2e..430862b8977c 100644
> --- a/arch/x86/entry/vdso/vgetrandom.c
> +++ b/arch/x86/entry/vdso/vgetrandom.c
> @@ -6,8 +6,6 @@
>   
>   #include "../../../../lib/vdso/getrandom.c"
>   
> -ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len);
> -
>   ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len)
>   {
>   	return __cvdso_getrandom(buffer, len, flags, opaque_state, opaque_len);
> diff --git a/include/vdso/getrandom.h b/include/vdso/getrandom.h
> index 4cf02e678f5e..08b47b002bf7 100644
> --- a/include/vdso/getrandom.h
> +++ b/include/vdso/getrandom.h
> @@ -56,4 +56,9 @@ struct vgetrandom_state {
>    */
>   extern void __arch_chacha20_blocks_nostack(u8 *dst_bytes, const u32 *key, u32 *counter, size_t nblocks);
>   
> +/**
> + * __vdso_getrandom: Prototype of vDSO getrandom.
> + */
> +extern ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len);
> +
>   #endif /* _VDSO_GETRANDOM_H */
Jason A. Donenfeld Sept. 1, 2024, 6:13 p.m. UTC | #5
On Sun, Sep 01, 2024 at 08:06:51PM +0200, Christophe Leroy wrote:
> 
> 
> Le 01/09/2024 à 08:13, Xi Ruoyao a écrit :
> > Without a prototype, we'll have to add a prototype for each architecture
> > implementing vDSO getrandom.  As most architectures will likely have the
> > vDSO getrandom implemented in a near future, and we'd like to keep the
> > declarations compatible everywhere (to ease the Glibc work), we should
> > really just have one copy of the prototype.
> 
> It is a good idea but it have to handle all architectures, not only half 
> of them. If you look into vdso_config.h in selftests, you can see that 
> there are two names:
> 
> __kernel_getrandom is used on arm64, powerpc, s390,
> 
> __vdso_getrandom is used on arm, mips, sparc, x86, riscv, loongarch

I thought about this too, but actually it looks like the __vdso_* ones
are already being handled this way, while the __kernel_* ones have their
own special thing going on. See include/vdso/gettime.h. So this patch
makes __vdso_getrandom() just like the other ones in gettime.h, which is
fine with me.
diff mbox series

Patch

diff --git a/arch/x86/entry/vdso/vgetrandom.c b/arch/x86/entry/vdso/vgetrandom.c
index 52d3c7faae2e..430862b8977c 100644
--- a/arch/x86/entry/vdso/vgetrandom.c
+++ b/arch/x86/entry/vdso/vgetrandom.c
@@ -6,8 +6,6 @@ 
 
 #include "../../../../lib/vdso/getrandom.c"
 
-ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len);
-
 ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len)
 {
 	return __cvdso_getrandom(buffer, len, flags, opaque_state, opaque_len);
diff --git a/include/vdso/getrandom.h b/include/vdso/getrandom.h
index 4cf02e678f5e..08b47b002bf7 100644
--- a/include/vdso/getrandom.h
+++ b/include/vdso/getrandom.h
@@ -56,4 +56,9 @@  struct vgetrandom_state {
  */
 extern void __arch_chacha20_blocks_nostack(u8 *dst_bytes, const u32 *key, u32 *counter, size_t nblocks);
 
+/**
+ * __vdso_getrandom: Prototype of vDSO getrandom.
+ */
+extern ssize_t __vdso_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, size_t opaque_len);
+
 #endif /* _VDSO_GETRANDOM_H */