aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ibmveth.h
diff options
context:
space:
mode:
authorSantiago Leon <santil@us.ibm.com>2005-10-26 12:47:08 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-10-28 16:07:30 -0400
commite2adbcb480992de8a01acf9218e8bbd9b507fc6f (patch)
tree92465e753d0221c0c54862994735a7fe078200fa /drivers/net/ibmveth.h
parentb6d35182fe62e57d368062adcc880ca35119d88e (diff)
[PATCH] ibmveth fix buffer replenishing
This patch removes the allocation of RX skb's buffers from a workqueue to be called directly at RX processing time. This change was suggested by Dave Miller when the driver was starving the RX buffers and deadlocking under heavy traffic: > Allocating RX SKBs via tasklet is, IMHO, the worst way to > do it. It is no surprise that there are starvation cases. > > If tasklets or work queues get delayed in any way, you lose, > and it's very easy for a card to catch up with the driver RX'ing > packets very fast, no matter how aggressive you make the > replenishing. By the time you detect that you need to be > "more aggressive" it is already too late. > The only pseudo-reliable way is to allocate at RX processing time. > Signed-off-by: Santiago Leon <santil@us.ibm.com> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'drivers/net/ibmveth.h')
-rw-r--r--drivers/net/ibmveth.h4
1 files changed, 0 insertions, 4 deletions
diff --git a/drivers/net/ibmveth.h b/drivers/net/ibmveth.h
index a5d27a9cdf1f..a3ea02937d63 100644
--- a/drivers/net/ibmveth.h
+++ b/drivers/net/ibmveth.h
@@ -118,10 +118,6 @@ struct ibmveth_adapter {
118 dma_addr_t filter_list_dma; 118 dma_addr_t filter_list_dma;
119 struct ibmveth_buff_pool rx_buff_pool[IbmVethNumBufferPools]; 119 struct ibmveth_buff_pool rx_buff_pool[IbmVethNumBufferPools];
120 struct ibmveth_rx_q rx_queue; 120 struct ibmveth_rx_q rx_queue;
121 atomic_t not_replenishing;
122
123 /* helper tasks */
124 struct work_struct replenish_task;
125 121
126 /* adapter specific stats */ 122 /* adapter specific stats */
127 u64 replenish_task_cycles; 123 u64 replenish_task_cycles;