diff mbox series

[v1] x86: suppress warning generated by W=1

Message ID 20230309174854.350143-1-vincenzopalazzodev@gmail.com (mailing list archive)
State New, archived
Headers show
Series [v1] x86: suppress warning generated by W=1 | expand

Commit Message

Vincenzo Palazzo March 9, 2023, 5:48 p.m. UTC
suppress unused warnings and fix the error that there is
with the W=1 enabled.

Warning generated

arch/x86/entry/common.c:238:24: error: no previous prototype for ‘do_SYSENTER_32’ [-Werror=missing-prototypes]
  238 | __visible noinstr long do_SYSENTER_32(struct pt_regs *regs)

Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
---
 arch/x86/entry/common.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Greg KH March 10, 2023, 7:33 a.m. UTC | #1
On Thu, Mar 09, 2023 at 06:48:54PM +0100, Vincenzo Palazzo wrote:
> suppress unused warnings and fix the error that there is
> with the W=1 enabled.

Why are you building with that option enabled?  It's not a normal one at
all.

> 
> Warning generated
> 
> arch/x86/entry/common.c:238:24: error: no previous prototype for ‘do_SYSENTER_32’ [-Werror=missing-prototypes]
>   238 | __visible noinstr long do_SYSENTER_32(struct pt_regs *regs)
> 
> Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
> ---
>  arch/x86/entry/common.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c
> index 6c2826417b33..8f17b2c3e9de 100644
> --- a/arch/x86/entry/common.c
> +++ b/arch/x86/entry/common.c
> @@ -234,6 +234,9 @@ __visible noinstr long do_fast_syscall_32(struct pt_regs *regs)
>  #endif
>  }
>  
> +/* prototype is a placeholder to suppress the missing prototype worning */
> +long do_SYSENTER_32(struct pt_regs *regs);

This feels wrong, sorry, and you have a spelling error in your comment.

> +
>  /* Returns 0 to return using IRET or 1 to return using SYSEXIT/SYSRETL. */
>  __visible noinstr long do_SYSENTER_32(struct pt_regs *regs)

It's wrong because look, you define it right here so why do you need a
prototype?

thanks,

greg k-h
Vincenzo Palazzo March 10, 2023, 9:19 a.m. UTC | #2
On Fri Mar 10, 2023 at 8:33 AM CET, Greg KH wrote:
> On Thu, Mar 09, 2023 at 06:48:54PM +0100, Vincenzo Palazzo wrote:
> > suppress unused warnings and fix the error that there is
> > with the W=1 enabled.
>
> Why are you building with that option enabled?  It's not a normal one at
> all.

I was using this option because I would like to see if my c code has
warnings, but currently it is not possible compile the kernel with 
W=1.

Maybe I'm missing a little bit of history here, this is not the correct
option to compile the kernel with -Wall?

Or it is the wrong way to compile the kernel with -Wall, so at this
point another good patch if we do not want to see the warnings, is
rework the W=1 to allow a subset of warnings, like the one in this
patch?

>
> > 
> > Warning generated
> > 
> > arch/x86/entry/common.c:238:24: error: no previous prototype for ‘do_SYSENTER_32’ [-Werror=missing-prototypes]
> >   238 | __visible noinstr long do_SYSENTER_32(struct pt_regs *regs)
> > 
> > Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
> > ---
> >  arch/x86/entry/common.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c
> > index 6c2826417b33..8f17b2c3e9de 100644
> > --- a/arch/x86/entry/common.c
> > +++ b/arch/x86/entry/common.c
> > @@ -234,6 +234,9 @@ __visible noinstr long do_fast_syscall_32(struct pt_regs *regs)
> >  #endif
> >  }
> >  
> > +/* prototype is a placeholder to suppress the missing prototype worning */
> > +long do_SYSENTER_32(struct pt_regs *regs);
>
> This feels wrong, sorry, and you have a spelling error in your comment.

Yeah it is, in fact this do not make sense because we are in a c file.
However, looks like it is the only option to suppress the warnings in
this case?

Do you know some magic __attribute__ that can suppress it for a not
static function like the one in this PATCH?

>
> > +
> >  /* Returns 0 to return using IRET or 1 to return using SYSEXIT/SYSRETL. */
> >  __visible noinstr long do_SYSENTER_32(struct pt_regs *regs)
>
> It's wrong because look, you define it right here so why do you need a
> prototype?

Here the problem is the macros __visible that force the function to be 
not static because need to be visible outside, and in C as far I know a 
procedure without a prototype need to be static, for this reason I made the 
previous trick to suppress the warning.

I thought also to modify the macros in some way but I did not have a
good idea.

P.S: Thanks to catch the typo, I will provide a v2 when we converge in a
common solution.

Cheers!

Vincent.
Greg KH March 10, 2023, 9:28 a.m. UTC | #3
On Fri, Mar 10, 2023 at 10:19:53AM +0100, Vincenzo Palazzo wrote:
> On Fri Mar 10, 2023 at 8:33 AM CET, Greg KH wrote:
> > On Thu, Mar 09, 2023 at 06:48:54PM +0100, Vincenzo Palazzo wrote:
> > > suppress unused warnings and fix the error that there is
> > > with the W=1 enabled.
> >
> > Why are you building with that option enabled?  It's not a normal one at
> > all.
> 
> I was using this option because I would like to see if my c code has
> warnings, but currently it is not possible compile the kernel with 
> W=1.

Yes, that is the main issue here, the kernel does not build cleanly for
lots of good reasons (i.e. foolish compiler warnings that are not
actually pointing out a real problem), so that option is not enabled by
default right now.

So this change is not needed right now, perhaps you can fix up the
compiler to not make this type of warning for code that is correct?

> Maybe I'm missing a little bit of history here, this is not the correct
> option to compile the kernel with -Wall?

Yes, but the kernel does not build cleanly with that option, as you have
found out.  Fixes for when the kernel code is wrong is great to have,
but not at the expense of "we are doing this only to shut up the
compiler because it does not understand our code" like you are doing
here, sorry.

thanks,

greg k-h
Vincenzo Palazzo March 10, 2023, 9:35 a.m. UTC | #4
On Fri Mar 10, 2023 at 10:28 AM CET, Greg KH wrote:
> On Fri, Mar 10, 2023 at 10:19:53AM +0100, Vincenzo Palazzo wrote:
> > On Fri Mar 10, 2023 at 8:33 AM CET, Greg KH wrote:
> > > On Thu, Mar 09, 2023 at 06:48:54PM +0100, Vincenzo Palazzo wrote:
> > > > suppress unused warnings and fix the error that there is
> > > > with the W=1 enabled.
> > >
> > > Why are you building with that option enabled?  It's not a normal one at
> > > all.
> > 
> > I was using this option because I would like to see if my c code has
> > warnings, but currently it is not possible compile the kernel with 
> > W=1.
>
> Yes, that is the main issue here, the kernel does not build cleanly for
> lots of good reasons (i.e. foolish compiler warnings that are not
> actually pointing out a real problem), so that option is not enabled by
> default right now.

I see, I was missing this info :) thanks!

>
> So this change is not needed right now, perhaps you can fix up the
> compiler to not make this type of warning for code that is correct?

I would happy to, but I am pretty sure that the compiler guys had a
strong option to keep this option enabled.

However, I could try to make an informative email to see if there is any
way to fix this warning without write hacky code.

>
> > Maybe I'm missing a little bit of history here, this is not the correct
> > option to compile the kernel with -Wall?
>
> Yes, but the kernel does not build cleanly with that option, as you have
> found out.  Fixes for when the kernel code is wrong is great to have,
> but not at the expense of "we are doing this only to shut up the
> compiler because it does not understand our code" like you are doing
> here, sorry.

Yep, I see you point and I share your idea to do not try to do this kind 
of suppress work just because the code do not looks like write
in the standart way.

>
> thanks,

Thanks to you for this good information.

Cheers!

Vincent.
diff mbox series

Patch

diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c
index 6c2826417b33..8f17b2c3e9de 100644
--- a/arch/x86/entry/common.c
+++ b/arch/x86/entry/common.c
@@ -234,6 +234,9 @@  __visible noinstr long do_fast_syscall_32(struct pt_regs *regs)
 #endif
 }
 
+/* prototype is a placeholder to suppress the missing prototype worning */
+long do_SYSENTER_32(struct pt_regs *regs);
+
 /* Returns 0 to return using IRET or 1 to return using SYSEXIT/SYSRETL. */
 __visible noinstr long do_SYSENTER_32(struct pt_regs *regs)
 {