]> git.baikalelectronics.ru Git - kernel.git/commit
dsa: b53: avoid 'maybe-uninitialized' warning
authorArnd Bergmann <arnd@arndb.de>
Mon, 27 Jun 2016 09:19:13 +0000 (11:19 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 29 Jun 2016 09:07:12 +0000 (05:07 -0400)
commite9c3fb343ffce8f93857a8cc17f11ae1b3dc3ba8
tree1f0dcf0fd1664e70a6f96fa4716ce7fa7b509f01
parenteac34071350609c4f75a62b660a1f952b09811e2
dsa: b53: avoid 'maybe-uninitialized' warning

In some configurations, gcc produces a warning for correct code
in this driver:

drivers/net/dsa/b53/b53_mmap.c: In function 'b53_mmap_read64':
drivers/net/dsa/b53/b53_mmap.c:107:10: error: 'hi' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  *val = ((u64)hi << 32) | lo;
          ^~~~~~~
drivers/net/dsa/b53/b53_mmap.c: In function 'b53_mmap_read48':
drivers/net/dsa/b53/b53_mmap.c:91:11: error: 'hi' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   *val = ((u64)hi << 32) | lo;
           ^~~~~~~
drivers/net/dsa/b53/b53_mmap.c:83:11: error: 'hi' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   *val = ((u64)hi << 16) | lo;

I have seen the warning before and at the time thought I had fixed
it with 7c4b41659b51 ("dsa: b53: fix big-endian register access"),
however it now came back in a different randconfig build that happens
to have different inlining decisions in the compiler.

The mistake that gcc makes here is that it thinks the second call to
readl() might fail because the address 'reg + 4' is not a multiple
of four despite having knowing that 'reg' itself is a multiple of four.

By open-coding the two reads without the redundant alignment check,
we can avoid the warning and produce slightly better object code, but
get slightly longer source code instead.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/b53/b53_mmap.c