diff mbox series

memstick: r592: ignore kfifo_out() return code again

Message ID 20210421135215.3414589-1-arnd@kernel.org
State New
Headers show
Series memstick: r592: ignore kfifo_out() return code again | expand

Commit Message

Arnd Bergmann April 21, 2021, 1:51 p.m. UTC
From: Arnd Bergmann <arnd@arndb.de>


A minor cleanup to address a clang warning removed an assigned
but unused local variable, but this now caused a gcc warning as
kfifo_out() is annotated to require checking its return code:

In file included from drivers/memstick/host/r592.h:13,
                 from drivers/memstick/host/r592.c:21:
drivers/memstick/host/r592.c: In function 'r592_flush_fifo_write':
include/linux/kfifo.h:588:1: error: ignoring return value of '__kfifo_uint_must_check_helper' declared with attribute 'warn_unused_result' [-Werror=unused-result]
  588 | __kfifo_uint_must_check_helper( \
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  589 | ({ \
      | ~~~~
  590 |         typeof((fifo) + 1) __tmp = (fifo); \
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  591 |         typeof(__tmp->ptr) __buf = (buf); \
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  592 |         unsigned long __n = (n); \
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~
  593 |         const size_t __recsize = sizeof(*__tmp->rectype); \
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  594 |         struct __kfifo *__kfifo = &__tmp->kfifo; \
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  595 |         (__recsize) ?\
      |         ~~~~~~~~~~~~~~
  596 |         __kfifo_out_r(__kfifo, __buf, __n, __recsize) : \
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  597 |         __kfifo_out(__kfifo, __buf, __n); \
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  598 | }) \
      | ~~~~
  599 | )
      | ~
drivers/memstick/host/r592.c:367:9: note: in expansion of macro 'kfifo_out'
  367 |         kfifo_out(&dev->pio_fifo, buffer, 4);
      |         ^~~~~~~~~

The value was never checked here, and the purpose of the function
is only to flush the contents, so restore the old behavior but
add a cast to void and a comment, which hopefully warns with neither
gcc nor clang now.

If anyone has an idea for how to fix it without ignoring the return
code, that is probably better.

Fixes: 4b00ed3c5072 ("memstick: r592: remove unused variable")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

---
 drivers/memstick/host/r592.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

-- 
2.29.2

Comments

Nick Desaulniers April 21, 2021, 5:16 p.m. UTC | #1
On Wed, Apr 21, 2021 at 6:52 AM Arnd Bergmann <arnd@kernel.org> wrote:
>

> From: Arnd Bergmann <arnd@arndb.de>

>

> A minor cleanup to address a clang warning removed an assigned

> but unused local variable, but this now caused a gcc warning as

> kfifo_out() is annotated to require checking its return code:

>

> In file included from drivers/memstick/host/r592.h:13,

>                  from drivers/memstick/host/r592.c:21:

> drivers/memstick/host/r592.c: In function 'r592_flush_fifo_write':

> include/linux/kfifo.h:588:1: error: ignoring return value of '__kfifo_uint_must_check_helper' declared with attribute 'warn_unused_result' [-Werror=unused-result]

>   588 | __kfifo_uint_must_check_helper( \

>       | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   589 | ({ \

>       | ~~~~

>   590 |         typeof((fifo) + 1) __tmp = (fifo); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   591 |         typeof(__tmp->ptr) __buf = (buf); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   592 |         unsigned long __n = (n); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~

>   593 |         const size_t __recsize = sizeof(*__tmp->rectype); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   594 |         struct __kfifo *__kfifo = &__tmp->kfifo; \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   595 |         (__recsize) ?\

>       |         ~~~~~~~~~~~~~~

>   596 |         __kfifo_out_r(__kfifo, __buf, __n, __recsize) : \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   597 |         __kfifo_out(__kfifo, __buf, __n); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   598 | }) \

>       | ~~~~

>   599 | )

>       | ~

> drivers/memstick/host/r592.c:367:9: note: in expansion of macro 'kfifo_out'

>   367 |         kfifo_out(&dev->pio_fifo, buffer, 4);

>       |         ^~~~~~~~~

>

> The value was never checked here, and the purpose of the function

> is only to flush the contents, so restore the old behavior but

> add a cast to void and a comment, which hopefully warns with neither

> gcc nor clang now.

>

> If anyone has an idea for how to fix it without ignoring the return

> code, that is probably better.


Should r592_flush_fifo_write be made to return an int, then callers of
r592_flush_fifo_write percolate up their return code?
r592_transfer_fifo_pio() seems to only return 0, but its callers are
doing return code checking.

>

> Fixes: 4b00ed3c5072 ("memstick: r592: remove unused variable")

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> ---

>  drivers/memstick/host/r592.c | 5 ++++-

>  1 file changed, 4 insertions(+), 1 deletion(-)

>

> diff --git a/drivers/memstick/host/r592.c b/drivers/memstick/host/r592.c

> index 026fadaa1d5d..615a83782e55 100644

> --- a/drivers/memstick/host/r592.c

> +++ b/drivers/memstick/host/r592.c

> @@ -359,12 +359,15 @@ static void r592_write_fifo_pio(struct r592_device *dev,

>  /* Flushes the temporary FIFO used to make aligned DWORD writes */

>  static void r592_flush_fifo_write(struct r592_device *dev)

>  {

> +       int ret;

>         u8 buffer[4] = { 0 };

>

>         if (kfifo_is_empty(&dev->pio_fifo))

>                 return;

>

> -       kfifo_out(&dev->pio_fifo, buffer, 4);

> +       ret = kfifo_out(&dev->pio_fifo, buffer, 4);

> +       /* intentionally ignore __must_check return code */

> +       (void)ret;

>         r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)buffer);

>  }

>

> --

> 2.29.2

>



-- 
Thanks,
~Nick Desaulniers
Arnd Bergmann April 21, 2021, 7:27 p.m. UTC | #2
On Wed, Apr 21, 2021 at 7:17 PM 'Nick Desaulniers' via Clang Built
Linux <clang-built-linux@googlegroups.com> wrote:
> On Wed, Apr 21, 2021 at 6:52 AM Arnd Bergmann <arnd@kernel.org> wrote:


> > The value was never checked here, and the purpose of the function

> > is only to flush the contents, so restore the old behavior but

> > add a cast to void and a comment, which hopefully warns with neither

> > gcc nor clang now.

> >

> > If anyone has an idea for how to fix it without ignoring the return

> > code, that is probably better.

>

> Should r592_flush_fifo_write be made to return an int, then callers of

> r592_flush_fifo_write percolate up their return code?

> r592_transfer_fifo_pio() seems to only return 0, but its callers are

> doing return code checking.


I looked into that but couldn't come up with anything useful to do with
the return code in the callers. kfifo_out() itself doesn't seem to
ever return an error but only the length.

        Arnd
Ulf Hansson April 23, 2021, 7:59 a.m. UTC | #3
On Wed, 21 Apr 2021 at 15:52, Arnd Bergmann <arnd@kernel.org> wrote:
>

> From: Arnd Bergmann <arnd@arndb.de>

>

> A minor cleanup to address a clang warning removed an assigned

> but unused local variable, but this now caused a gcc warning as

> kfifo_out() is annotated to require checking its return code:

>

> In file included from drivers/memstick/host/r592.h:13,

>                  from drivers/memstick/host/r592.c:21:

> drivers/memstick/host/r592.c: In function 'r592_flush_fifo_write':

> include/linux/kfifo.h:588:1: error: ignoring return value of '__kfifo_uint_must_check_helper' declared with attribute 'warn_unused_result' [-Werror=unused-result]

>   588 | __kfifo_uint_must_check_helper( \

>       | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   589 | ({ \

>       | ~~~~

>   590 |         typeof((fifo) + 1) __tmp = (fifo); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   591 |         typeof(__tmp->ptr) __buf = (buf); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   592 |         unsigned long __n = (n); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~

>   593 |         const size_t __recsize = sizeof(*__tmp->rectype); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   594 |         struct __kfifo *__kfifo = &__tmp->kfifo; \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   595 |         (__recsize) ?\

>       |         ~~~~~~~~~~~~~~

>   596 |         __kfifo_out_r(__kfifo, __buf, __n, __recsize) : \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   597 |         __kfifo_out(__kfifo, __buf, __n); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   598 | }) \

>       | ~~~~

>   599 | )

>       | ~

> drivers/memstick/host/r592.c:367:9: note: in expansion of macro 'kfifo_out'

>   367 |         kfifo_out(&dev->pio_fifo, buffer, 4);

>       |         ^~~~~~~~~

>

> The value was never checked here, and the purpose of the function

> is only to flush the contents, so restore the old behavior but

> add a cast to void and a comment, which hopefully warns with neither

> gcc nor clang now.

>

> If anyone has an idea for how to fix it without ignoring the return

> code, that is probably better.


Perhaps, if you can't do anything with return value, why is kfifo_out
declared like this?

>

> Fixes: 4b00ed3c5072 ("memstick: r592: remove unused variable")

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>


Kind regards
Uffe

> ---

>  drivers/memstick/host/r592.c | 5 ++++-

>  1 file changed, 4 insertions(+), 1 deletion(-)

>

> diff --git a/drivers/memstick/host/r592.c b/drivers/memstick/host/r592.c

> index 026fadaa1d5d..615a83782e55 100644

> --- a/drivers/memstick/host/r592.c

> +++ b/drivers/memstick/host/r592.c

> @@ -359,12 +359,15 @@ static void r592_write_fifo_pio(struct r592_device *dev,

>  /* Flushes the temporary FIFO used to make aligned DWORD writes */

>  static void r592_flush_fifo_write(struct r592_device *dev)

>  {

> +       int ret;

>         u8 buffer[4] = { 0 };

>

>         if (kfifo_is_empty(&dev->pio_fifo))

>                 return;

>

> -       kfifo_out(&dev->pio_fifo, buffer, 4);

> +       ret = kfifo_out(&dev->pio_fifo, buffer, 4);

> +       /* intentionally ignore __must_check return code */

> +       (void)ret;

>         r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)buffer);

>  }

>

> --

> 2.29.2

>
Ulf Hansson April 26, 2021, 9:44 a.m. UTC | #4
On Wed, 21 Apr 2021 at 15:52, Arnd Bergmann <arnd@kernel.org> wrote:
>

> From: Arnd Bergmann <arnd@arndb.de>

>

> A minor cleanup to address a clang warning removed an assigned

> but unused local variable, but this now caused a gcc warning as

> kfifo_out() is annotated to require checking its return code:

>

> In file included from drivers/memstick/host/r592.h:13,

>                  from drivers/memstick/host/r592.c:21:

> drivers/memstick/host/r592.c: In function 'r592_flush_fifo_write':

> include/linux/kfifo.h:588:1: error: ignoring return value of '__kfifo_uint_must_check_helper' declared with attribute 'warn_unused_result' [-Werror=unused-result]

>   588 | __kfifo_uint_must_check_helper( \

>       | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   589 | ({ \

>       | ~~~~

>   590 |         typeof((fifo) + 1) __tmp = (fifo); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   591 |         typeof(__tmp->ptr) __buf = (buf); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   592 |         unsigned long __n = (n); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~

>   593 |         const size_t __recsize = sizeof(*__tmp->rectype); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   594 |         struct __kfifo *__kfifo = &__tmp->kfifo; \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   595 |         (__recsize) ?\

>       |         ~~~~~~~~~~~~~~

>   596 |         __kfifo_out_r(__kfifo, __buf, __n, __recsize) : \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   597 |         __kfifo_out(__kfifo, __buf, __n); \

>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

>   598 | }) \

>       | ~~~~

>   599 | )

>       | ~

> drivers/memstick/host/r592.c:367:9: note: in expansion of macro 'kfifo_out'

>   367 |         kfifo_out(&dev->pio_fifo, buffer, 4);

>       |         ^~~~~~~~~

>

> The value was never checked here, and the purpose of the function

> is only to flush the contents, so restore the old behavior but

> add a cast to void and a comment, which hopefully warns with neither

> gcc nor clang now.

>

> If anyone has an idea for how to fix it without ignoring the return

> code, that is probably better.

>

> Fixes: 4b00ed3c5072 ("memstick: r592: remove unused variable")

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>


Applied for next, thanks!

Kind regards
Uffe

> ---

>  drivers/memstick/host/r592.c | 5 ++++-

>  1 file changed, 4 insertions(+), 1 deletion(-)

>

> diff --git a/drivers/memstick/host/r592.c b/drivers/memstick/host/r592.c

> index 026fadaa1d5d..615a83782e55 100644

> --- a/drivers/memstick/host/r592.c

> +++ b/drivers/memstick/host/r592.c

> @@ -359,12 +359,15 @@ static void r592_write_fifo_pio(struct r592_device *dev,

>  /* Flushes the temporary FIFO used to make aligned DWORD writes */

>  static void r592_flush_fifo_write(struct r592_device *dev)

>  {

> +       int ret;

>         u8 buffer[4] = { 0 };

>

>         if (kfifo_is_empty(&dev->pio_fifo))

>                 return;

>

> -       kfifo_out(&dev->pio_fifo, buffer, 4);

> +       ret = kfifo_out(&dev->pio_fifo, buffer, 4);

> +       /* intentionally ignore __must_check return code */

> +       (void)ret;

>         r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)buffer);

>  }

>

> --

> 2.29.2

>
diff mbox series

Patch

diff --git a/drivers/memstick/host/r592.c b/drivers/memstick/host/r592.c
index 026fadaa1d5d..615a83782e55 100644
--- a/drivers/memstick/host/r592.c
+++ b/drivers/memstick/host/r592.c
@@ -359,12 +359,15 @@  static void r592_write_fifo_pio(struct r592_device *dev,
 /* Flushes the temporary FIFO used to make aligned DWORD writes */
 static void r592_flush_fifo_write(struct r592_device *dev)
 {
+	int ret;
 	u8 buffer[4] = { 0 };
 
 	if (kfifo_is_empty(&dev->pio_fifo))
 		return;
 
-	kfifo_out(&dev->pio_fifo, buffer, 4);
+	ret = kfifo_out(&dev->pio_fifo, buffer, 4);
+	/* intentionally ignore __must_check return code */
+	(void)ret;
 	r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)buffer);
 }