]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/net/bnx2x/bnx2x_stats.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / drivers / net / bnx2x / bnx2x_stats.c
index 4733c835dad950a7ba8966a94d284752a345656a..3445ded6674f6482d6a6de7c8ad76c59d4a71ae1 100644 (file)
@@ -158,9 +158,14 @@ static void bnx2x_storm_stats_post(struct bnx2x *bp)
 
                spin_lock_bh(&bp->stats_lock);
 
+               if (bp->stats_pending) {
+                       spin_unlock_bh(&bp->stats_lock);
+                       return;
+               }
+
                ramrod_data.drv_counter = bp->stats_counter++;
                ramrod_data.collect_port = bp->port.pmf ? 1 : 0;
-               for_each_queue(bp, i)
+               for_each_eth_queue(bp, i)
                        ramrod_data.ctr_id_vector |= (1 << bp->fp[i].cl_id);
 
                rc = bnx2x_sp_post(bp, RAMROD_CMD_ID_COMMON_STAT_QUERY, 0,
@@ -766,7 +771,7 @@ static int bnx2x_storm_stats_update(struct bnx2x *bp)
        estats->no_buff_discard_hi = 0;
        estats->no_buff_discard_lo = 0;
 
-       for_each_queue(bp, i) {
+       for_each_eth_queue(bp, i) {
                struct bnx2x_fastpath *fp = &bp->fp[i];
                int cl_id = fp->cl_id;
                struct tstorm_per_client_stats *tclient =
@@ -996,7 +1001,7 @@ static void bnx2x_net_stats_update(struct bnx2x *bp)
        nstats->tx_bytes = bnx2x_hilo(&estats->total_bytes_transmitted_hi);
 
        tmp = estats->mac_discard;
-       for_each_queue(bp, i)
+       for_each_rx_queue(bp, i)
                tmp += le32_to_cpu(bp->fp[i].old_tclient.checksum_discard);
        nstats->rx_dropped = tmp;
 
@@ -1087,7 +1092,7 @@ static void bnx2x_stats_update(struct bnx2x *bp)
                       bp->dev->name,
                       estats->brb_drop_lo, estats->brb_truncate_lo);
 
-               for_each_queue(bp, i) {
+               for_each_eth_queue(bp, i) {
                        struct bnx2x_fastpath *fp = &bp->fp[i];
                        struct bnx2x_eth_q_stats *qstats = &fp->eth_q_stats;
 
@@ -1101,7 +1106,7 @@ static void bnx2x_stats_update(struct bnx2x *bp)
                               fp->rx_calls, fp->rx_pkt);
                }
 
-               for_each_queue(bp, i) {
+               for_each_eth_queue(bp, i) {
                        struct bnx2x_fastpath *fp = &bp->fp[i];
                        struct bnx2x_eth_q_stats *qstats = &fp->eth_q_stats;
                        struct netdev_queue *txq =
@@ -1234,14 +1239,14 @@ void bnx2x_stats_handle(struct bnx2x *bp, enum bnx2x_stats_event event)
        if (unlikely(bp->panic))
                return;
 
+       bnx2x_stats_stm[bp->stats_state][event].action(bp);
+
        /* Protect a state change flow */
        spin_lock_bh(&bp->stats_lock);
        state = bp->stats_state;
        bp->stats_state = bnx2x_stats_stm[state][event].next_state;
        spin_unlock_bh(&bp->stats_lock);
 
-       bnx2x_stats_stm[state][event].action(bp);
-
        if ((event != STATS_EVENT_UPDATE) || netif_msg_timer(bp))
                DP(BNX2X_MSG_STATS, "state %d -> event %d -> state %d\n",
                   state, event, bp->stats_state);
@@ -1381,7 +1386,8 @@ void bnx2x_stats_init(struct bnx2x *bp)
                memset(&fp->eth_q_stats, 0, sizeof(struct bnx2x_eth_q_stats));
        }
 
-       for_each_queue(bp, i) {
+       /* FW stats are currently collected for ETH clients only */
+       for_each_eth_queue(bp, i) {
                /* Set initial stats counter in the stats ramrod data to -1 */
                int cl_id = bp->fp[i].cl_id;