diff options
author | Santiago Leon <santil@us.ibm.com> | 2005-10-26 12:47:08 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-10-28 16:07:30 -0400 |
commit | e2adbcb480992de8a01acf9218e8bbd9b507fc6f (patch) | |
tree | 92465e753d0221c0c54862994735a7fe078200fa /drivers/net/ibmveth.h | |
parent | b6d35182fe62e57d368062adcc880ca35119d88e (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.h | 4 |
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; |