mirror of
https://github.com/torvalds/linux.git
synced 2026-10-28 17:55:02 +01:00
When the driver is handed a burst of packets, the doorbell is deferred
until the end. If the last packet has a huge number of frags, but fails
to linearize, the doorbell will not be written adding latency on TX for
any packets in the ring and holding their DMA mappings until the next
TX. Note that the queue is not stopped, so this issue would delay
pending BDs until the next TX.
This issue was discovered by Sashiko and reading the code verifies that,
while unlikely, it is possible.
Fix this by jumping to tx_free, which replicates the same pre-existing
logic but also writes the doorbell.
Fixes:
|
||
|---|---|---|
| .. | ||
| asp2 | ||
| bnge | ||
| bnx2x | ||
| bnxt | ||
| genet | ||
| b44.c | ||
| b44.h | ||
| bcm63xx_enet.c | ||
| bcm63xx_enet.h | ||
| bcm4908_enet.c | ||
| bcm4908_enet.h | ||
| bcmsysport.c | ||
| bcmsysport.h | ||
| bgmac-bcma-mdio.c | ||
| bgmac-bcma.c | ||
| bgmac-platform.c | ||
| bgmac.c | ||
| bgmac.h | ||
| bnx2_fw.h | ||
| bnx2.c | ||
| bnx2.h | ||
| cnic_defs.h | ||
| cnic_if.h | ||
| cnic.c | ||
| cnic.h | ||
| Kconfig | ||
| Makefile | ||
| sb1250-mac.c | ||
| tg3.c | ||
| tg3.h | ||
| unimac.h | ||