Commit e85753c
usbnet: fix crash due to missing BQL accounting after resume
In commit 7ff14c5 ("usbnet: Add support for Byte Queue Limits
(BQL)"), it was missed that usbnet_resume() enqueues SKBs using
__skb_queue_tail() without reporting them to BQL. As a result, the next
call to netdev_completed_queue() triggers a BUG_ON() in dql_completed(),
since the SKBs queued during resume were never accounted for.
This patch fixes the issue by adding a corresponding netdev_sent_queue()
call in usbnet_resume() when SKBs are queued after suspend. Because
dev->txq.lock is held at this point, no concurrent calls to
netdev_sent_queue() from usbnet_start_xmit() can occur.
The crash can be reproduced by generating network traffic
(e.g. iperf3 -c ... -t 0), suspending the system, and then waking it up
(e.g. rtcwake -m mem -s 5).
When testing USB2 Android tethering, the system crashed within three
suspend/resume cycles without this patch. With the patch applied, no
crashes were observed after 90 cycles.
Reported-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Tested-by: Simon Schippers <simon.schippers@tu-dortmund.de>
Signed-off-by: Simon Schippers <simon.schippers@tu-dortmund.de>1 parent be5ccf5 commit e85753c
1 file changed
+1
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1984 | 1984 | | |
1985 | 1985 | | |
1986 | 1986 | | |
| 1987 | + | |
1987 | 1988 | | |
1988 | 1989 | | |
1989 | 1990 | | |
| |||
0 commit comments