be2net: Disarm CQ and EQ to disable interrupt in Lancer
authorPadmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
Mon, 7 Mar 2011 03:09:17 +0000 (03:09 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 7 Mar 2011 23:26:58 +0000 (15:26 -0800)
For Lancer disable interrupts in close by disarming CQs and EQs.
Change the order of calls in be_close to achieve the correct result.

Signed-off-by: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
Signed-off-by: Subramanian Seetharaman <subbu.seetharaman@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/benet/be_main.c

index 68b9d17a0f1affed6773d13ed356136b92d3803f..a7fd833fe7d23a256899f434fa5c30fa5bbfabd2 100644 (file)
@@ -2088,6 +2088,18 @@ static int be_close(struct net_device *netdev)
        if (!lancer_chip(adapter))
                be_intr_set(adapter, false);
 
+       for_all_rx_queues(adapter, rxo, i)
+               napi_disable(&rxo->rx_eq.napi);
+
+       napi_disable(&tx_eq->napi);
+
+       if (lancer_chip(adapter)) {
+               be_cq_notify(adapter, adapter->tx_obj.cq.id, false, 0);
+               be_cq_notify(adapter, adapter->mcc_obj.cq.id, false, 0);
+               for_all_rx_queues(adapter, rxo, i)
+                        be_cq_notify(adapter, rxo->cq.id, false, 0);
+       }
+
        if (adapter->msix_enabled) {
                vec = be_msix_vec_get(adapter, tx_eq);
                synchronize_irq(vec);
@@ -2101,11 +2113,6 @@ static int be_close(struct net_device *netdev)
        }
        be_irq_unregister(adapter);
 
-       for_all_rx_queues(adapter, rxo, i)
-               napi_disable(&rxo->rx_eq.napi);
-
-       napi_disable(&tx_eq->napi);
-
        /* Wait for all pending tx completions to arrive so that
         * all tx skbs are freed.
         */