summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qlogicpti.c
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2010-11-14 14:35:40 +0100
committerStefan Richter <stefanr@s5r6.in-berlin.de>2010-11-17 00:08:49 +0100
commitb2268830f5cf29d94b3e4a2af0b795a8f28776fe (patch)
treea52483756446f1e09dcd80b5243d899612cf5caa /drivers/scsi/qlogicpti.c
parent48553011cea504796e513350740781ac6745f556 (diff)
downloadlinux-b2268830f5cf29d94b3e4a2af0b795a8f28776fe.tar.bz2
firewire: net: throttle TX queue before running out of tlabels
This prevents firewire-net from submitting write requests in fast succession until failure due to all 64 transaction labels were used up for unfinished split transactions. The netif_stop/wake_queue API is used for this purpose. Without this stop/wake mechanism, datagrams were simply lost whenever the tlabel pool was exhausted. Plus, tlabel exhaustion by firewire-net also prevented other unrelated outbound transactions to be initiated. The chosen queue depth was checked by me to hit the maximum possible throughput with an OS X peer whose receive DMA is good enough to never reject requests due to busy inbound request FIFO. Current Linux peers show a mixed picture of -5%...+15% change in bandwidth; their current bottleneck are RCODE_BUSY situations (fewer or more, depending on TX queue depth) due to too small AR buffer in firewire-ohci. Maxim Levitsky tested this change with similar watermarks with a Linux peer and some pending firewire-ohci improvements that address the RCODE_BUSY problem and confirmed that these TX queue limits are good. Note: This removes some netif_wake_queue from reception code paths. They were apparently copy&paste artefacts from a nonsensical netif_wake_queue use in the older eth1394 driver. This belongs only into the transmit path. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Tested-by: Maxim Levitsky <maximlevitsky@gmail.com>
Diffstat (limited to 'drivers/scsi/qlogicpti.c')
0 files changed, 0 insertions, 0 deletions