diff options
author | Divy Le Ray <divy@chelsio.com> | 2007-12-18 05:47:41 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-29 02:07:22 +0300 |
commit | bc4b6b52691bae42b1eec3eb86ab4c718387d9f0 (patch) | |
tree | 2554bd6d43828c99a5258997484bbdc5298ea0e7 /drivers/net/cxgb3 | |
parent | b881955b7d045e7486e9af08398242aeb7199f67 (diff) | |
download | linux-bc4b6b52691bae42b1eec3eb86ab4c718387d9f0.tar.xz |
cxgb3 - Fix EEH, missing softirq blocking
set_pci_drvdata() stores a pointer to the adapter,
not the net device.
Add missing softirq blocking in t3_mgmt_tx.
Signed-off-by: Divy Le Ray <divy@chelsio.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/cxgb3')
-rw-r--r-- | drivers/net/cxgb3/cxgb3_main.c | 14 | ||||
-rw-r--r-- | drivers/net/cxgb3/sge.c | 7 |
2 files changed, 10 insertions, 11 deletions
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c index d1aa7779796e..0e3dcbff002d 100644 --- a/drivers/net/cxgb3/cxgb3_main.c +++ b/drivers/net/cxgb3/cxgb3_main.c @@ -2408,9 +2408,7 @@ void t3_fatal_err(struct adapter *adapter) static pci_ers_result_t t3_io_error_detected(struct pci_dev *pdev, pci_channel_state_t state) { - struct net_device *dev = pci_get_drvdata(pdev); - struct port_info *pi = netdev_priv(dev); - struct adapter *adapter = pi->adapter; + struct adapter *adapter = pci_get_drvdata(pdev); int i; /* Stop all ports */ @@ -2444,9 +2442,7 @@ static pci_ers_result_t t3_io_error_detected(struct pci_dev *pdev, */ static pci_ers_result_t t3_io_slot_reset(struct pci_dev *pdev) { - struct net_device *dev = pci_get_drvdata(pdev); - struct port_info *pi = netdev_priv(dev); - struct adapter *adapter = pi->adapter; + struct adapter *adapter = pci_get_drvdata(pdev); if (pci_enable_device(pdev)) { dev_err(&pdev->dev, @@ -2469,9 +2465,7 @@ static pci_ers_result_t t3_io_slot_reset(struct pci_dev *pdev) */ static void t3_io_resume(struct pci_dev *pdev) { - struct net_device *dev = pci_get_drvdata(pdev); - struct port_info *pi = netdev_priv(dev); - struct adapter *adapter = pi->adapter; + struct adapter *adapter = pci_get_drvdata(pdev); int i; /* Restart the ports */ @@ -2491,7 +2485,7 @@ static void t3_io_resume(struct pci_dev *pdev) if (is_offload(adapter)) { __set_bit(OFFLOAD_DEVMAP_BIT, &adapter->registered_device_map); - if (offload_open(dev)) + if (offload_open(adapter->port[0])) printk(KERN_WARNING "Could not bring back offload capabilities\n"); } diff --git a/drivers/net/cxgb3/sge.c b/drivers/net/cxgb3/sge.c index cef153d1d32c..6367cee0d66a 100644 --- a/drivers/net/cxgb3/sge.c +++ b/drivers/net/cxgb3/sge.c @@ -1364,7 +1364,12 @@ static void restart_ctrlq(unsigned long data) */ int t3_mgmt_tx(struct adapter *adap, struct sk_buff *skb) { - return ctrl_xmit(adap, &adap->sge.qs[0].txq[TXQ_CTRL], skb); + int ret; + local_bh_disable(); + ret = ctrl_xmit(adap, &adap->sge.qs[0].txq[TXQ_CTRL], skb); + local_bh_enable(); + + return ret; } /** |