aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-08-05 19:23:45 -0400
committerDavid S. Miller <davem@davemloft.net>2014-08-05 19:23:45 -0400
commitff91a550bd5fdfae64135107a1e19e852bb1b9e1 (patch)
treeb98ac38ecf9bfd73f1af2d8901daf8e23f931342
parentf2294eb59d5c3efa51acb3f42a7a382e9353bdc7 (diff)
parentcd1560e2b60fc2fbfadb9200c366eb59fe04f10d (diff)
Merge branch 'qlcnic'
Rajesh Borundia says: ==================== qlcnic: Bug fixes The patch series contains following bug fixes. * Aggregating tx stats in adapter variable was resulting in increase of stats when user runs ifconfig command and no traffic is running. Instead aggregate tx stats in local variable and then assign it to adapter struct variable. * Set_driver_version was called after registering netdev which was resulting in a race between FLR in open handler and set_driver_version command as open handler can be called simulatneously on another cpu even if probe is not complete. So call this command before registering netdev. * dcbnl_ops should be initialized before registering netdev as they are referenced in open handler. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c2
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c18
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c10
3 files changed, 19 insertions, 11 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c
index 304e247bdf33..ffbae293cef5 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c
@@ -136,7 +136,7 @@ int qlcnic_82xx_issue_cmd(struct qlcnic_adapter *adapter,
136 rsp = qlcnic_poll_rsp(adapter); 136 rsp = qlcnic_poll_rsp(adapter);
137 137
138 if (rsp == QLCNIC_CDRP_RSP_TIMEOUT) { 138 if (rsp == QLCNIC_CDRP_RSP_TIMEOUT) {
139 dev_err(&pdev->dev, "card response timeout.\n"); 139 dev_err(&pdev->dev, "command timeout, response = 0x%x\n", rsp);
140 cmd->rsp.arg[0] = QLCNIC_RCODE_TIMEOUT; 140 cmd->rsp.arg[0] = QLCNIC_RCODE_TIMEOUT;
141 } else if (rsp == QLCNIC_CDRP_RSP_FAIL) { 141 } else if (rsp == QLCNIC_CDRP_RSP_FAIL) {
142 cmd->rsp.arg[0] = QLCRD32(adapter, QLCNIC_CDRP_ARG(1), &err); 142 cmd->rsp.arg[0] = QLCRD32(adapter, QLCNIC_CDRP_ARG(1), &err);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
index 1b7f3dbae289..141f116eb868 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
@@ -1290,17 +1290,25 @@ static u64 *qlcnic_fill_stats(u64 *data, void *stats, int type)
1290 1290
1291void qlcnic_update_stats(struct qlcnic_adapter *adapter) 1291void qlcnic_update_stats(struct qlcnic_adapter *adapter)
1292{ 1292{
1293 struct qlcnic_tx_queue_stats tx_stats;
1293 struct qlcnic_host_tx_ring *tx_ring; 1294 struct qlcnic_host_tx_ring *tx_ring;
1294 int ring; 1295 int ring;
1295 1296
1297 memset(&tx_stats, 0, sizeof(tx_stats));
1296 for (ring = 0; ring < adapter->drv_tx_rings; ring++) { 1298 for (ring = 0; ring < adapter->drv_tx_rings; ring++) {
1297 tx_ring = &adapter->tx_ring[ring]; 1299 tx_ring = &adapter->tx_ring[ring];
1298 adapter->stats.xmit_on += tx_ring->tx_stats.xmit_on; 1300 tx_stats.xmit_on += tx_ring->tx_stats.xmit_on;
1299 adapter->stats.xmit_off += tx_ring->tx_stats.xmit_off; 1301 tx_stats.xmit_off += tx_ring->tx_stats.xmit_off;
1300 adapter->stats.xmitcalled += tx_ring->tx_stats.xmit_called; 1302 tx_stats.xmit_called += tx_ring->tx_stats.xmit_called;
1301 adapter->stats.xmitfinished += tx_ring->tx_stats.xmit_finished; 1303 tx_stats.xmit_finished += tx_ring->tx_stats.xmit_finished;
1302 adapter->stats.txbytes += tx_ring->tx_stats.tx_bytes; 1304 tx_stats.tx_bytes += tx_ring->tx_stats.tx_bytes;
1303 } 1305 }
1306
1307 adapter->stats.xmit_on = tx_stats.xmit_on;
1308 adapter->stats.xmit_off = tx_stats.xmit_off;
1309 adapter->stats.xmitcalled = tx_stats.xmit_called;
1310 adapter->stats.xmitfinished = tx_stats.xmit_finished;
1311 adapter->stats.txbytes = tx_stats.tx_bytes;
1304} 1312}
1305 1313
1306static u64 *qlcnic_fill_tx_queue_stats(u64 *data, void *stats) 1314static u64 *qlcnic_fill_tx_queue_stats(u64 *data, void *stats)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index 4fc186713b66..3187bc0c471b 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -2323,14 +2323,14 @@ qlcnic_setup_netdev(struct qlcnic_adapter *adapter, struct net_device *netdev,
2323 if (err) 2323 if (err)
2324 return err; 2324 return err;
2325 2325
2326 qlcnic_dcb_init_dcbnl_ops(adapter->dcb);
2327
2326 err = register_netdev(netdev); 2328 err = register_netdev(netdev);
2327 if (err) { 2329 if (err) {
2328 dev_err(&pdev->dev, "failed to register net device\n"); 2330 dev_err(&pdev->dev, "failed to register net device\n");
2329 return err; 2331 return err;
2330 } 2332 }
2331 2333
2332 qlcnic_dcb_init_dcbnl_ops(adapter->dcb);
2333
2334 return 0; 2334 return 0;
2335} 2335}
2336 2336
@@ -2623,13 +2623,13 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2623 if (err) 2623 if (err)
2624 goto err_out_disable_mbx_intr; 2624 goto err_out_disable_mbx_intr;
2625 2625
2626 if (adapter->portnum == 0)
2627 qlcnic_set_drv_version(adapter);
2628
2626 err = qlcnic_setup_netdev(adapter, netdev, pci_using_dac); 2629 err = qlcnic_setup_netdev(adapter, netdev, pci_using_dac);
2627 if (err) 2630 if (err)
2628 goto err_out_disable_mbx_intr; 2631 goto err_out_disable_mbx_intr;
2629 2632
2630 if (adapter->portnum == 0)
2631 qlcnic_set_drv_version(adapter);
2632
2633 pci_set_drvdata(pdev, adapter); 2633 pci_set_drvdata(pdev, adapter);
2634 2634
2635 if (qlcnic_82xx_check(adapter)) 2635 if (qlcnic_82xx_check(adapter))