Re: [PATCH net] gve: DQO: Suppress unused var warnings
flat view
From: Bailey Forrest <hidden>
Date: 2021-09-28 20:04:23
Subsystem:
dma mapping helpers, the rest · Maintainers:
Marek Szyprowski, Linus Torvalds
On Tue, Sep 28, 2021 at 7:15 AM Arnd Bergmann [off-list ref] wrote:
On Tue, Sep 28, 2021 at 2:00 AM Bailey Forrest [off-list ref] wrote:quoted
On Mon, Sep 27, 2021 at 4:21 PM Jakub Kicinski [off-list ref] wrote:quoted
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:quoted
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.