Eric Dumazet
2695578b89
net: usbnet: fix potential deadlock on 32bit hosts
...
Marek reported a LOCKDEP issue occurring on 32bit host,
that we tracked down to the fact that usbnet could either
run from soft or hard irqs.
This patch adds u64_stats_update_begin_irqsave() and
u64_stats_update_end_irqrestore() helpers to solve this case.
[ 17.768040] ================================
[ 17.772239] WARNING: inconsistent lock state
[ 17.776511] 4.16.0-rc3-next-20180227-00007-g876c53a7493c #453 Not tainted
[ 17.783329] --------------------------------
[ 17.787580] inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage.
[ 17.793607] swapper/0/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
[ 17.798751] (&syncp->seq#5){?.-.}, at: [<9b22e5f0>]
asix_rx_fixup_internal+0x188/0x288
[ 17.806790] {IN-HARDIRQ-W} state was registered at:
[ 17.811677] tx_complete+0x100/0x208
[ 17.815319] __usb_hcd_giveback_urb+0x60/0xf0
[ 17.819770] xhci_giveback_urb_in_irq+0xa8/0x240
[ 17.824469] xhci_td_cleanup+0xf4/0x16c
[ 17.828367] xhci_irq+0xe74/0x2240
[ 17.831827] usb_hcd_irq+0x24/0x38
[ 17.835343] __handle_irq_event_percpu+0x98/0x510
[ 17.840111] handle_irq_event_percpu+0x1c/0x58
[ 17.844623] handle_irq_event+0x38/0x5c
[ 17.848519] handle_fasteoi_irq+0xa4/0x138
[ 17.852681] generic_handle_irq+0x18/0x28
[ 17.856760] __handle_domain_irq+0x6c/0xe4
[ 17.860941] gic_handle_irq+0x54/0xa0
[ 17.864666] __irq_svc+0x70/0xb0
[ 17.867964] arch_cpu_idle+0x20/0x3c
[ 17.871578] arch_cpu_idle+0x20/0x3c
[ 17.875190] do_idle+0x144/0x218
[ 17.878468] cpu_startup_entry+0x18/0x1c
[ 17.882454] start_kernel+0x394/0x400
[ 17.886177] irq event stamp: 161912
[ 17.889616] hardirqs last enabled at (161912): [<7bedfacf>]
__netdev_alloc_skb+0xcc/0x140
[ 17.897893] hardirqs last disabled at (161911): [<d58261d0>]
__netdev_alloc_skb+0x94/0x140
[ 17.904903] exynos5-hsi2c 12ca0000.i2c: tx timeout
[ 17.906116] softirqs last enabled at (161904): [<387102ff>]
irq_enter+0x78/0x80
[ 17.906123] softirqs last disabled at (161905): [<cf4c628e>]
irq_exit+0x134/0x158
[ 17.925722].
[ 17.925722] other info that might help us debug this:
[ 17.933435] Possible unsafe locking scenario:
[ 17.933435].
[ 17.940331] CPU0
[ 17.942488] ----
[ 17.944894] lock(&syncp->seq#5);
[ 17.948274] <Interrupt>
[ 17.950847] lock(&syncp->seq#5);
[ 17.954386].
[ 17.954386] *** DEADLOCK ***
[ 17.954386].
[ 17.962422] no locks held by swapper/0/0.
Fixes: c8b5d129ee29 ("net: usbnet: support 64bit stats")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Greg Ungerer <gerg@linux-m68k.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-03-07 11:46:39 -05:00
..
2017-09-22 20:43:13 -07:00
2017-11-09 09:22:13 +09:00
2017-08-07 10:10:19 -07:00
2017-04-03 19:09:40 -07:00
2017-06-30 12:43:08 -04:00
2017-10-18 12:40:26 +01:00
2018-02-27 14:44:36 -05:00
2017-07-03 02:19:36 -07:00
2017-11-15 19:43:54 +09:00
2017-08-08 17:47:58 -07:00
2017-05-12 12:15:46 -04:00
2017-04-21 13:24:05 -04:00
2017-04-03 19:09:40 -07:00
2017-06-16 11:48:40 -04:00
2017-11-18 10:37:00 +09:00
2017-07-14 08:15:05 -07:00
2017-06-20 13:30:14 -04:00
2017-11-19 12:23:57 +09:00
2017-06-16 11:48:35 -04:00
2017-08-08 17:47:59 -07:00
2017-04-25 10:08:16 -04:00
2018-02-01 14:54:28 -05:00
2016-12-08 14:21:47 -05:00
2017-06-16 11:48:40 -04:00
2017-11-02 11:10:55 +01:00
2017-04-03 19:09:40 -07:00
2017-06-16 11:48:40 -04:00
2017-04-07 07:03:33 -07:00
2017-04-07 07:03:33 -07:00
2017-04-25 10:08:16 -04:00
2018-01-31 10:26:29 -05:00
2018-02-26 21:01:53 -05:00
2017-10-03 14:30:46 -07:00
2017-08-08 17:47:59 -07:00
2017-10-18 12:40:26 +01:00
2018-02-22 14:05:15 -05:00
2017-09-12 20:36:30 -07:00
2017-04-17 13:04:52 -04:00
2017-04-21 20:23:53 -07:00
2017-04-03 19:09:40 -07:00
2018-03-07 11:46:39 -05:00
2017-06-16 11:48:40 -04:00