On Tue, Jun 25, 2019 at 11:24 AM Nathan Chancellor <natechancellor@xxxxxxxxx> wrote: > > Clang warns: > > In file included from net/xdp/xsk_queue.c:10: > net/xdp/xsk_queue.h:292:2: warning: expression result unused > [-Wunused-value] > WRITE_ONCE(q->ring->producer, q->prod_tail); > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > include/linux/compiler.h:284:6: note: expanded from macro 'WRITE_ONCE' > __u.__val; \ > ~~~ ^~~~~ > 1 warning generated. > > The q->prod_tail assignment has a comma at the end, not a semi-colon. > Fix that so clang no longer warns and everything works as expected. oh no! -Wunderhanded-C-contest-style-use-of-comma-operator strikes again! Great find and thanks for the fix. Acked-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> Björn and Alexei should carefully review. Because WRITE_ONCE is a macro that expands to a GNU C statement expression, which returns the last statement, this code was previously assigning q->prod_tail to itself, now it's assigning it to q->prod_head. I assume that was not intentional, but am unfamiliar with the code. > > Fixes: c497176cb2e4 ("xsk: add Rx receive functions and poll support") > Link: https://github.com/ClangBuiltLinux/linux/issues/544 > Signed-off-by: Nathan Chancellor <natechancellor@xxxxxxxxx> > --- > net/xdp/xsk_queue.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/net/xdp/xsk_queue.h b/net/xdp/xsk_queue.h > index 88b9ae24658d..cba4a640d5e8 100644 > --- a/net/xdp/xsk_queue.h > +++ b/net/xdp/xsk_queue.h > @@ -288,7 +288,7 @@ static inline void xskq_produce_flush_desc(struct xsk_queue *q) > /* Order producer and data */ > smp_wmb(); /* B, matches C */ > > - q->prod_tail = q->prod_head, > + q->prod_tail = q->prod_head; > WRITE_ONCE(q->ring->producer, q->prod_tail); > } > > -- > 2.22.0 > -- Thanks, ~Nick Desaulniers