linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] zlib: Put get_unaligned16() inside #ifdef block
@ 2017-05-22 21:13 Matthias Kaehlcke
  2017-05-22 21:39 ` Andrew Morton
  2017-05-23  7:36 ` Christoph Hellwig
  0 siblings, 2 replies; 5+ messages in thread
From: Matthias Kaehlcke @ 2017-05-22 21:13 UTC (permalink / raw)
  To: linux-kernel, Andrew Morton; +Cc: Matthias Kaehlcke

The function is not used when CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y.
Adding the #ifdef fixes the following warning when building with clang:

lib/zlib_inflate/inffast.c:31:1: error: unused function 'get_unaligned16'
    [-Werror,-Wunused-function]

Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
---
Note: Usually we would use the __maybe_unused attribute to silence the
warning. Since this code is used in the kernel decompression stub rather
than in the kernel itself we can't include <linux/compiler.h> with the
definition of __maybe_unused (it would be possible for some platforms,
however for powerpc the build fails with a compiler error). We could
redefine __maybe_unused or use the raw __attribute__((unused)), but
using the #ifdef is a simpler solution.

 lib/zlib_inflate/inffast.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/zlib_inflate/inffast.c b/lib/zlib_inflate/inffast.c
index 2c13ecc5bb2c..af2fd95e35e9 100644
--- a/lib/zlib_inflate/inffast.c
+++ b/lib/zlib_inflate/inffast.c
@@ -26,6 +26,7 @@ union uu {
 	unsigned char b[2];
 };
 
+#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
 /* Endian independed version */
 static inline unsigned short
 get_unaligned16(const unsigned short *p)
@@ -37,6 +38,7 @@ get_unaligned16(const unsigned short *p)
 	mm.b[1] = b[1];
 	return mm.us;
 }
+#endif
 
 #ifdef POSTINC
 #  define OFF 0
-- 
2.13.0.303.g4ebf302169-goog

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] zlib: Put get_unaligned16() inside #ifdef block
  2017-05-22 21:13 [PATCH] zlib: Put get_unaligned16() inside #ifdef block Matthias Kaehlcke
@ 2017-05-22 21:39 ` Andrew Morton
  2017-05-22 22:12   ` Matthias Kaehlcke
  2017-05-23  7:36 ` Christoph Hellwig
  1 sibling, 1 reply; 5+ messages in thread
From: Andrew Morton @ 2017-05-22 21:39 UTC (permalink / raw)
  To: Matthias Kaehlcke; +Cc: linux-kernel

On Mon, 22 May 2017 14:13:26 -0700 Matthias Kaehlcke <mka@chromium.org> wrote:

> The function is not used when CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y.
> Adding the #ifdef fixes the following warning when building with clang:
> 
> lib/zlib_inflate/inffast.c:31:1: error: unused function 'get_unaligned16'
>     [-Werror,-Wunused-function]
> 
> ...
>
> --- a/lib/zlib_inflate/inffast.c
> +++ b/lib/zlib_inflate/inffast.c
> @@ -26,6 +26,7 @@ union uu {
>  	unsigned char b[2];
>  };
>  
> +#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
>  /* Endian independed version */
>  static inline unsigned short
>  get_unaligned16(const unsigned short *p)
> @@ -37,6 +38,7 @@ get_unaligned16(const unsigned short *p)
>  	mm.b[1] = b[1];
>  	return mm.us;
>  }
> +#endif
>  
>  #ifdef POSTINC
>  #  define OFF 0

Do we really want to mucky up the source code to keep clang happy?  gcc
won't warn about an unused static inline.  Can we configure clang to do
the same?

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] zlib: Put get_unaligned16() inside #ifdef block
  2017-05-22 21:39 ` Andrew Morton
@ 2017-05-22 22:12   ` Matthias Kaehlcke
  0 siblings, 0 replies; 5+ messages in thread
From: Matthias Kaehlcke @ 2017-05-22 22:12 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel, Douglas Anderson

Hi Andrew,

El Mon, May 22, 2017 at 02:39:25PM -0700 Andrew Morton ha dit:

> On Mon, 22 May 2017 14:13:26 -0700 Matthias Kaehlcke <mka@chromium.org> wrote:
> 
> > The function is not used when CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y.
> > Adding the #ifdef fixes the following warning when building with clang:
> > 
> > lib/zlib_inflate/inffast.c:31:1: error: unused function 'get_unaligned16'
> >     [-Werror,-Wunused-function]
> > 
> > ...
> >
> > --- a/lib/zlib_inflate/inffast.c
> > +++ b/lib/zlib_inflate/inffast.c
> > @@ -26,6 +26,7 @@ union uu {
> >  	unsigned char b[2];
> >  };
> >  
> > +#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
> >  /* Endian independed version */
> >  static inline unsigned short
> >  get_unaligned16(const unsigned short *p)
> > @@ -37,6 +38,7 @@ get_unaligned16(const unsigned short *p)
> >  	mm.b[1] = b[1];
> >  	return mm.us;
> >  }
> > +#endif
> >  
> >  #ifdef POSTINC
> >  #  define OFF 0
> 
> Do we really want to mucky up the source code to keep clang happy?  gcc
> won't warn about an unused static inline.  Can we configure clang to do
> the same?

To my knowledge there is no option to tell clang to behave like gcc in
this aspect.

On the positive side the number of instances is relatively limited, at
least for defconfig and my custom configs. In most cases it is enough
with adding __maybe_unused, which is already widely used in the kernel.

Personally I think it is useful to be warned about unused functions in
.c files, regardless of whether the function is inline or not.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] zlib: Put get_unaligned16() inside #ifdef block
  2017-05-22 21:13 [PATCH] zlib: Put get_unaligned16() inside #ifdef block Matthias Kaehlcke
  2017-05-22 21:39 ` Andrew Morton
@ 2017-05-23  7:36 ` Christoph Hellwig
  2017-05-23 18:03   ` Matthias Kaehlcke
  1 sibling, 1 reply; 5+ messages in thread
From: Christoph Hellwig @ 2017-05-23  7:36 UTC (permalink / raw)
  To: Matthias Kaehlcke; +Cc: linux-kernel, Andrew Morton

On Mon, May 22, 2017 at 02:13:26PM -0700, Matthias Kaehlcke wrote:
> The function is not used when CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y.
> Adding the #ifdef fixes the following warning when building with clang:
> 
> lib/zlib_inflate/inffast.c:31:1: error: unused function 'get_unaligned16'
>     [-Werror,-Wunused-function]
> 
> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
> ---
> Note: Usually we would use the __maybe_unused attribute to silence the
> warning. Since this code is used in the kernel decompression stub rather
> than in the kernel itself we can't include <linux/compiler.h> with the
> definition of __maybe_unused (it would be possible for some platforms,
> however for powerpc the build fails with a compiler error). We could
> redefine __maybe_unused or use the raw __attribute__((unused)), but
> using the #ifdef is a simpler solution.

Usually one would take a look at the root cause.  And then remove
get_unaligned16 entirely and replace it with the get_unaligned
helper provided by the kernel.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] zlib: Put get_unaligned16() inside #ifdef block
  2017-05-23  7:36 ` Christoph Hellwig
@ 2017-05-23 18:03   ` Matthias Kaehlcke
  0 siblings, 0 replies; 5+ messages in thread
From: Matthias Kaehlcke @ 2017-05-23 18:03 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: linux-kernel, Andrew Morton

Hi Christoph,

El Tue, May 23, 2017 at 12:36:01AM -0700 Christoph Hellwig ha dit:

> On Mon, May 22, 2017 at 02:13:26PM -0700, Matthias Kaehlcke wrote:
> > The function is not used when CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y.
> > Adding the #ifdef fixes the following warning when building with clang:
> > 
> > lib/zlib_inflate/inffast.c:31:1: error: unused function 'get_unaligned16'
> >     [-Werror,-Wunused-function]
> > 
> > Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
> > ---
> > Note: Usually we would use the __maybe_unused attribute to silence the
> > warning. Since this code is used in the kernel decompression stub rather
> > than in the kernel itself we can't include <linux/compiler.h> with the
> > definition of __maybe_unused (it would be possible for some platforms,
> > however for powerpc the build fails with a compiler error). We could
> > redefine __maybe_unused or use the raw __attribute__((unused)), but
> > using the #ifdef is a simpler solution.
> 
> Usually one would take a look at the root cause.  And then remove
> get_unaligned16 entirely and replace it with the get_unaligned
> helper provided by the kernel.

Thanks for the suggestion to use get_unaligned().

Unfortunately that doesn't work without hackery, at least for
powerpc. We can add arch/powerpc/include to the include paths of
the decompression stub to be able to include <asm/unaligned.h>,
however the build then fails with "undefined reference to
`get_unaligned'", because on powerpc get/put_unaligned are defined
inside an #ifdef __KERNEL__ block. We probably don't want to define
__KERNEL__ for the decompression stub just to avoid an #ifndef in the
zlib code.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-05-23 18:03 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-22 21:13 [PATCH] zlib: Put get_unaligned16() inside #ifdef block Matthias Kaehlcke
2017-05-22 21:39 ` Andrew Morton
2017-05-22 22:12   ` Matthias Kaehlcke
2017-05-23  7:36 ` Christoph Hellwig
2017-05-23 18:03   ` Matthias Kaehlcke

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).