sh_eth: Fix sleeping function called from invalid context
This resolves the following bug which can be reproduced by building the
kernel with CONFIG_DEBUG_ATOMIC_SLEEP=y and reading network statistics
while the network interface is down.
e.g.:
ifconfig eth0 down
cat /sys/class/net/eth0/statistics/tx_errors
----
[ 1238.161349] BUG: sleeping function called from invalid context at drivers/base/power/runtime.c:952
[ 1238.188279] in_atomic(): 1, irqs_disabled(): 0, pid: 1388, name: cat
[ 1238.207425] CPU: 0 PID: 1388 Comm: cat Not tainted
3.10.31-ltsi-00046-gefa0b46 #1087
[ 1238.230737] Backtrace:
[ 1238.238123] [<
c0012e64>] (dump_backtrace+0x0/0x10c) from [<
c0013000>] (show_stack+0x18/0x1c)
[ 1238.263499] r6:
000003b8 r5:
c06160c0 r4:
c0669e00 r3:
00404000
[ 1238.280583] [<
c0012fe8>] (show_stack+0x0/0x1c) from [<
c04515a4>] (dump_stack+0x20/0x28)
[ 1238.304631] [<
c0451584>] (dump_stack+0x0/0x28) from [<
c004970c>] (__might_sleep+0xf8/0x118)
[ 1238.329734] [<
c0049614>] (__might_sleep+0x0/0x118) from [<
c02465ac>] (__pm_runtime_resume+0x38/0x90)
[ 1238.357170] r7:
d616f000 r6:
c049c458 r5:
00000004 r4:
d6a17210
[ 1238.374251] [<
c0246574>] (__pm_runtime_resume+0x0/0x90) from [<
c029b1c4>] (sh_eth_get_stats+0x44/0x280)
[ 1238.402468] r7:
d616f000 r6:
c049c458 r5:
d5c21000 r4:
d5c21000
[ 1238.419552] [<
c029b180>] (sh_eth_get_stats+0x0/0x280) from [<
c03ae39c>] (dev_get_stats+0x54/0x88)
[ 1238.446204] r5:
d5c21000 r4:
d5ed7e08
[ 1238.456980] [<
c03ae348>] (dev_get_stats+0x0/0x88) from [<
c03c677c>] (netstat_show.isra.15+0x54/0x9c)
[ 1238.484413] r6:
d5c21000 r5:
d5c21238 r4:
00000028 r3:
00000001
[ 1238.501495] [<
c03c6728>] (netstat_show.isra.15+0x0/0x9c) from [<
c03c69b8>] (show_tx_errors+0x18/0x1c)
[ 1238.529196] r7:
d5f945d8 r6:
d5f945c0 r5:
c049716c r4:
c0650e7c
[ 1238.546279] [<
c03c69a0>] (show_tx_errors+0x0/0x1c) from [<
c023963c>] (dev_attr_show+0x24/0x50)
[ 1238.572157] [<
c0239618>] (dev_attr_show+0x0/0x50) from [<
c010c148>] (sysfs_read_file+0xb0/0x140)
[ 1238.598554] r5:
c049716c r4:
d5c21240
[ 1238.609326] [<
c010c098>] (sysfs_read_file+0x0/0x140) from [<
c00b9ee4>] (vfs_read+0xb0/0x13c)
[ 1238.634679] [<
c00b9e34>] (vfs_read+0x0/0x13c) from [<
c00ba0ac>] (SyS_read+0x44/0x74)
[ 1238.657944] r8:
bef45bf0 r7:
00000000 r6:
d6ac0600 r5:
00000000 r4:
00000000
[ 1238.678172] [<
c00ba068>] (SyS_read+0x0/0x74) from [<
c000eec0>] (ret_fast_syscall+0x0/0x30)
----
Signed-off-by: Mitsuhiro Kimura <mitsuhiro.kimura.kc@renesas.com>
Signed-off-by: Yoshihiro Kaneko <ykaneko0929@gmail.com>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Signed-off-by: David S. Miller <davem@davemloft.net>