diff options
author | Sathya Perla <sathyap@serverengines.com> | 2009-06-10 02:23:50 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-06-11 02:47:19 -0700 |
commit | 934037bc2ed29a94bbde72aa6a2e66bdc5861b98 (patch) | |
tree | 45104a213708003c341a3b10d3c9cb9b4503adea /drivers/net/benet | |
parent | a7a0ef31def6b6badd94fc96c8f17c2e18d91513 (diff) | |
download | op-kernel-dev-934037bc2ed29a94bbde72aa6a2e66bdc5861b98.zip op-kernel-dev-934037bc2ed29a94bbde72aa6a2e66bdc5861b98.tar.gz |
be2net: Fix be_tx_q_clean() being called on freed queues
In the tx queue destroy path, be_tx_q_clean() is currently called after the tx queues are freed; it must be called before.
Signed-off-by: Sathya Perla <sathyap@serverengines.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/benet')
-rw-r--r-- | drivers/net/benet/be_main.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c index 86f70af..66bb568 100644 --- a/drivers/net/benet/be_main.c +++ b/drivers/net/benet/be_main.c @@ -1056,8 +1056,13 @@ static void be_tx_queues_destroy(struct be_adapter *adapter) struct be_queue_info *q; q = &adapter->tx_obj.q; - if (q->created) + if (q->created) { be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_TXQ); + + /* No more tx completions can be rcvd now; clean up if there + * are any pending completions or pending tx requests */ + be_tx_q_clean(adapter); + } be_queue_free(adapter, q); q = &adapter->tx_obj.cq; @@ -1065,10 +1070,6 @@ static void be_tx_queues_destroy(struct be_adapter *adapter) be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_CQ); be_queue_free(adapter, q); - /* No more tx completions can be rcvd now; clean up if there are - * any pending completions or pending tx requests */ - be_tx_q_clean(adapter); - q = &adapter->tx_eq.q; if (q->created) be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_EQ); |