]> 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)
commit9b8abcb7573dc56804dea064bf6a274b45de30fd
tree1f0dcf0fd1664e70a6f96fa4716ce7fa7b509f01
parent6f4c731b5a189b480c95b233e8474f1249ebc065
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 b21a9648df84 ("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