diff mbox series

[net] gve: DQO: Suppress unused var warnings

Message ID 20210723231957.1113800-1-bcf@google.com
State New
Headers show
Series [net] gve: DQO: Suppress unused var warnings | expand

Commit Message

Bailey Forrest July 23, 2021, 11:19 p.m. UTC
Some variables become unused when `CONFIG_NEED_DMA_MAP_STATE=n`.

We only suppress when `CONFIG_NEED_DMA_MAP_STATE=n` in order to avoid
false negatives.

Fixes: a57e5de476be ("gve: DQO: Add TX path")
Signed-off-by: Bailey Forrest <bcf@google.com>
---
 drivers/net/ethernet/google/gve/gve_tx_dqo.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

Comments

Arnd Bergmann Sept. 27, 2021, 9:58 a.m. UTC | #1
On Sat, Jul 24, 2021 at 1:19 AM Bailey Forrest <bcf@google.com> wrote:
>

> Some variables become unused when `CONFIG_NEED_DMA_MAP_STATE=n`.

>

> We only suppress when `CONFIG_NEED_DMA_MAP_STATE=n` in order to avoid

> false negatives.

>

> Fixes: a57e5de476be ("gve: DQO: Add TX path")

> Signed-off-by: Bailey Forrest <bcf@google.com>


Hi Bailey,

I see that the warning still exists in linux-5.15-rc3 and net-next,
I'm building with my original patch[1] to get around the -Werror
warnings.

Can you resend your patch, or should I resend mine after all?

      Arnd

[1] https://lore.kernel.org/all/20210721151100.2042139-1-arnd@kernel.org/
Bailey Forrest Sept. 27, 2021, 8:21 p.m. UTC | #2
Apologies, resending as text

On Mon, Sep 27, 2021 at 2:59 AM Arnd Bergmann <arnd@kernel.org> wrote:
>

> On Sat, Jul 24, 2021 at 1:19 AM Bailey Forrest <bcf@google.com> wrote:

> >

> > Some variables become unused when `CONFIG_NEED_DMA_MAP_STATE=n`.

> >

> > We only suppress when `CONFIG_NEED_DMA_MAP_STATE=n` in order to avoid

> > false negatives.

> >

> > Fixes: a57e5de476be ("gve: DQO: Add TX path")

> > Signed-off-by: Bailey Forrest <bcf@google.com>

>

> Hi Bailey,

>

> I see that the warning still exists in linux-5.15-rc3 and net-next,

> I'm building with my original patch[1] to get around the -Werror

> warnings.

>

> Can you resend your patch, or should I resend mine after all?

>

>       Arnd

>

> [1] https://lore.kernel.org/all/20210721151100.2042139-1-arnd@kernel.org/


Hi David/Jakub,

Any thoughts on my patch? I'm open to alternative suggestions for how
to resolve this.

This patch still works and merges cleanly on HEAD.

Thanks,
Bailey
Jakub Kicinski Sept. 27, 2021, 11:21 p.m. UTC | #3
On Mon, 27 Sep 2021 13:21:30 -0700 Bailey Forrest wrote:
> Apologies, resending as text

> 

> On Mon, Sep 27, 2021 at 2:59 AM Arnd Bergmann <arnd@kernel.org> wrote:

> >

> > On Sat, Jul 24, 2021 at 1:19 AM Bailey Forrest <bcf@google.com> wrote:  

> > >

> > > Some variables become unused when `CONFIG_NEED_DMA_MAP_STATE=n`.

> > >

> > > We only suppress when `CONFIG_NEED_DMA_MAP_STATE=n` in order to avoid

> > > false negatives.

> > >

> > > Fixes: a57e5de476be ("gve: DQO: Add TX path")

> > > Signed-off-by: Bailey Forrest <bcf@google.com>  

> >

> > Hi Bailey,

> >

> > I see that the warning still exists in linux-5.15-rc3 and net-next,

> > I'm building with my original patch[1] to get around the -Werror

> > warnings.

> >

> > Can you resend your patch, or should I resend mine after all?

> >

> >       Arnd

> >

> > [1] https://lore.kernel.org/all/20210721151100.2042139-1-arnd@kernel.org/  

> 

> Hi David/Jakub,

> 

> Any thoughts on my patch? I'm open to alternative suggestions for how

> to resolve this.

> 

> This patch still works and merges cleanly on HEAD.


Looks like fixing this on the wrong end, dma_unmap_len_set() 
and friends should always evaluate their arguments.
Bailey Forrest Sept. 27, 2021, 11:59 p.m. UTC | #4
On Mon, Sep 27, 2021 at 4:21 PM Jakub Kicinski <kuba@kernel.org> wrote:
>

> On Mon, 27 Sep 2021 13:21:30 -0700 Bailey Forrest wrote:

> > Apologies, resending as text

> >

> > On Mon, Sep 27, 2021 at 2:59 AM Arnd Bergmann <arnd@kernel.org> wrote:

> > >

> > > On Sat, Jul 24, 2021 at 1:19 AM Bailey Forrest <bcf@google.com> wrote:

> > > >

> > > > Some variables become unused when `CONFIG_NEED_DMA_MAP_STATE=n`.

> > > >

> > > > We only suppress when `CONFIG_NEED_DMA_MAP_STATE=n` in order to avoid

> > > > false negatives.

> > > >

> > > > Fixes: a57e5de476be ("gve: DQO: Add TX path")

> > > > Signed-off-by: Bailey Forrest <bcf@google.com>

> > >

> > > Hi Bailey,

> > >

> > > I see that the warning still exists in linux-5.15-rc3 and net-next,

> > > I'm building with my original patch[1] to get around the -Werror

> > > warnings.

> > >

> > > Can you resend your patch, or should I resend mine after all?

> > >

> > >       Arnd

> > >

> > > [1] https://lore.kernel.org/all/20210721151100.2042139-1-arnd@kernel.org/

> >

> > Hi David/Jakub,

> >

> > Any thoughts on my patch? I'm open to alternative suggestions for how

> > to resolve this.

> >

> > This patch still works and merges cleanly on HEAD.

>

> Looks like fixing this on the wrong end, dma_unmap_len_set()

> and friends should always evaluate their arguments.


That makes sense.

Arnd, if you want to fix this inside of the dma_* macros, the
following diff resolves the errors reported for this driver:

diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index dca2b1355bb1..f51eee0f678e 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -590,10 +590,21 @@ static inline int dma_mmap_wc(struct device *dev,
 #else
 #define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME)
 #define DEFINE_DMA_UNMAP_LEN(LEN_NAME)
-#define dma_unmap_addr(PTR, ADDR_NAME)           (0)
-#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL)  do { } while (0)
-#define dma_unmap_len(PTR, LEN_NAME)             (0)
-#define dma_unmap_len_set(PTR, LEN_NAME, VAL)    do { } while (0)
+
+#define dma_unmap_addr(PTR, ADDR_NAME) ({ (void)PTR; 0; })
+
+#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL) do { \
+ (void)PTR; \
+ (void)VAL; \
+} while (0)
+
+#define dma_unmap_len(PTR, LEN_NAME) ({ (void)PTR; 0; })
+
+#define dma_unmap_len_set(PTR, LEN_NAME, VAL) do { \
+ (void)PTR; \
+ (void)VAL; \
+} while (0)
+
 #endif

 #endif /* _LINUX_DMA_MAPPING_H */
Arnd Bergmann Sept. 28, 2021, 2:15 p.m. UTC | #5
On Tue, Sep 28, 2021 at 2:00 AM Bailey Forrest <bcf@google.com> wrote:
> On Mon, Sep 27, 2021 at 4:21 PM Jakub Kicinski <kuba@kernel.org> wrote:

> > On Mon, 27 Sep 2021 13:21:30 -0700 Bailey Forrest wrote:

> >

> > Looks like fixing this on the wrong end, dma_unmap_len_set()

> > and friends should always evaluate their arguments.

>

> That makes sense.

>

> Arnd, if you want to fix this inside of the dma_* macros, the

> following diff resolves the errors reported for this driver:


> diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h

> index dca2b1355bb1..f51eee0f678e 100644

> --- a/include/linux/dma-mapping.h

> +++ b/include/linux/dma-mapping.h

> @@ -590,10 +590,21 @@ static inline int dma_mmap_wc(struct device *dev,

>  #else

>  #define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME)

>  #define DEFINE_DMA_UNMAP_LEN(LEN_NAME)

> -#define dma_unmap_addr(PTR, ADDR_NAME)           (0)

> -#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL)  do { } while (0)

> -#define dma_unmap_len(PTR, LEN_NAME)             (0)

> -#define dma_unmap_len_set(PTR, LEN_NAME, VAL)    do { } while (0)

> +

> +#define dma_unmap_addr(PTR, ADDR_NAME) ({ (void)PTR; 0; })

> +

> +#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL) do { \


Unfortunately, this breaks every other driver using these macros, as the
point of them is that the unmap-address is not actually defined
and not taking up space in data structure. Referencing it by name
is a compile-time bug.

I've come up with a new patch to gve that just removes the
"struct gve_tx_dma_buf" and open-codes the access everywhere,
sending that as v2 now. Feel free to take that and modify as needed
before sending on, or doing yet another patch.

        Arnd
Bailey Forrest Sept. 28, 2021, 8:04 p.m. UTC | #6
On Tue, Sep 28, 2021 at 7:15 AM Arnd Bergmann <arnd@kernel.org> wrote:
>

> On Tue, Sep 28, 2021 at 2:00 AM Bailey Forrest <bcf@google.com> wrote:

> > On Mon, Sep 27, 2021 at 4:21 PM Jakub Kicinski <kuba@kernel.org> wrote:

> > > On Mon, 27 Sep 2021 13:21:30 -0700 Bailey Forrest wrote:

> > >

> > > Looks like fixing this on the wrong end, dma_unmap_len_set()

> > > and friends should always evaluate their arguments.

> >

> > That makes sense.

> >

> > Arnd, if you want to fix this inside of the dma_* macros, the

> > following diff resolves the errors reported for this driver:

>

> > diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h

> > index dca2b1355bb1..f51eee0f678e 100644

> > --- a/include/linux/dma-mapping.h

> > +++ b/include/linux/dma-mapping.h

> > @@ -590,10 +590,21 @@ static inline int dma_mmap_wc(struct device *dev,

> >  #else

> >  #define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME)

> >  #define DEFINE_DMA_UNMAP_LEN(LEN_NAME)

> > -#define dma_unmap_addr(PTR, ADDR_NAME)           (0)

> > -#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL)  do { } while (0)

> > -#define dma_unmap_len(PTR, LEN_NAME)             (0)

> > -#define dma_unmap_len_set(PTR, LEN_NAME, VAL)    do { } while (0)

> > +

> > +#define dma_unmap_addr(PTR, ADDR_NAME) ({ (void)PTR; 0; })

> > +

> > +#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL) do { \

>

> Unfortunately, this breaks every other driver using these macros, as the

> point of them is that the unmap-address is not actually defined

> and not taking up space in data structure. Referencing it by name

> is a compile-time bug.


My patch works with a small modification:

```
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index dca2b1355bb1..04ca5467562e 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -590,10 +590,10 @@ static inline int dma_mmap_wc(struct device *dev,
 #else
 #define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME)
 #define DEFINE_DMA_UNMAP_LEN(LEN_NAME)
-#define dma_unmap_addr(PTR, ADDR_NAME)           (0)
-#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL)  do { } while (0)
-#define dma_unmap_len(PTR, LEN_NAME)             (0)
-#define dma_unmap_len_set(PTR, LEN_NAME, VAL)    do { } while (0)
+#define dma_unmap_addr(PTR, ADDR_NAME) ({ (void)PTR; 0; })
+#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL) do { (void)PTR; } while (0)
+#define dma_unmap_len(PTR, LEN_NAME) ({ (void)PTR; 0; })
+#define dma_unmap_len_set(PTR, LEN_NAME, VAL) do { (void)PTR; } while (0)
 #endif

 #endif /* _LINUX_DMA_MAPPING_H */
```


To me, this is still the preferred solution. However, your latest
patch looked fine to me.
diff mbox series

Patch

diff --git a/drivers/net/ethernet/google/gve/gve_tx_dqo.c b/drivers/net/ethernet/google/gve/gve_tx_dqo.c
index 05ddb6a75c38..f873321c022e 100644
--- a/drivers/net/ethernet/google/gve/gve_tx_dqo.c
+++ b/drivers/net/ethernet/google/gve/gve_tx_dqo.c
@@ -87,6 +87,9 @@  static void gve_tx_clean_pending_packets(struct gve_tx_ring *tx)
 		for (j = 0; j < cur_state->num_bufs; j++) {
 			struct gve_tx_dma_buf *buf = &cur_state->bufs[j];
 
+#ifndef CONFIG_NEED_DMA_MAP_STATE
+			(void)buf;  // Suppress unused variable.
+#endif
 			if (j == 0) {
 				dma_unmap_single(tx->dev,
 						 dma_unmap_addr(buf, dma),
@@ -459,9 +462,14 @@  static int gve_tx_add_skb_no_copy_dqo(struct gve_tx_ring *tx,
 
 	struct gve_tx_pending_packet_dqo *pending_packet;
 	struct gve_tx_metadata_dqo metadata;
+	struct gve_tx_dma_buf *buf;
 	s16 completion_tag;
 	int i;
 
+#ifndef CONFIG_NEED_DMA_MAP_STATE
+	(void)buf;  // Suppress unused variable.
+#endif
+
 	pending_packet = gve_alloc_pending_packet(tx);
 	pending_packet->skb = skb;
 	pending_packet->num_bufs = 0;
@@ -493,8 +501,6 @@  static int gve_tx_add_skb_no_copy_dqo(struct gve_tx_ring *tx,
 
 	/* Map the linear portion of skb */
 	{
-		struct gve_tx_dma_buf *buf =
-			&pending_packet->bufs[pending_packet->num_bufs];
 		u32 len = skb_headlen(skb);
 		dma_addr_t addr;
 
@@ -502,6 +508,7 @@  static int gve_tx_add_skb_no_copy_dqo(struct gve_tx_ring *tx,
 		if (unlikely(dma_mapping_error(tx->dev, addr)))
 			goto err;
 
+		buf = &pending_packet->bufs[pending_packet->num_bufs];
 		dma_unmap_len_set(buf, len, len);
 		dma_unmap_addr_set(buf, dma, addr);
 		++pending_packet->num_bufs;
@@ -512,8 +519,6 @@  static int gve_tx_add_skb_no_copy_dqo(struct gve_tx_ring *tx,
 	}
 
 	for (i = 0; i < shinfo->nr_frags; i++) {
-		struct gve_tx_dma_buf *buf =
-			&pending_packet->bufs[pending_packet->num_bufs];
 		const skb_frag_t *frag = &shinfo->frags[i];
 		bool is_eop = i == (shinfo->nr_frags - 1);
 		u32 len = skb_frag_size(frag);
@@ -523,6 +528,7 @@  static int gve_tx_add_skb_no_copy_dqo(struct gve_tx_ring *tx,
 		if (unlikely(dma_mapping_error(tx->dev, addr)))
 			goto err;
 
+		buf = &pending_packet->bufs[pending_packet->num_bufs];
 		dma_unmap_len_set(buf, len, len);
 		dma_unmap_addr_set(buf, dma, addr);
 		++pending_packet->num_bufs;
@@ -555,6 +561,9 @@  static int gve_tx_add_skb_no_copy_dqo(struct gve_tx_ring *tx,
 	for (i = 0; i < pending_packet->num_bufs; i++) {
 		struct gve_tx_dma_buf *buf = &pending_packet->bufs[i];
 
+#ifndef CONFIG_NEED_DMA_MAP_STATE
+		(void)buf;  // Suppress unused variable.
+#endif
 		if (i == 0) {
 			dma_unmap_single(tx->dev, dma_unmap_addr(buf, dma),
 					 dma_unmap_len(buf, len),