@@ -1830,6 +1830,7 @@ struct bnx2x {
int fp_array_size;
u32 dump_preset_idx;
+ atomic_t stats_started;
};
/* Tx queues may be less or equal to Rx queues */
@@ -11524,6 +11524,7 @@ static int bnx2x_init_bp(struct bnx2x *bp)
mutex_init(&bp->port.phy_mutex);
mutex_init(&bp->fw_mb_mutex);
spin_lock_init(&bp->stats_lock);
+ atomic_set(&bp->stats_started, 0);
INIT_DELAYED_WORK(&bp->sp_task, bnx2x_sp_task);
INIT_DELAYED_WORK(&bp->sp_rtnl_task, bnx2x_sp_rtnl_task);
@@ -534,6 +534,8 @@ static void bnx2x_stats_start(struct bnx2x *bp)
bnx2x_hw_stats_post(bp);
bnx2x_storm_stats_post(bp);
+
+ atomic_set(&bp->stats_started, 1);
}
static void bnx2x_stats_pmf_start(struct bnx2x *bp)
@@ -1227,7 +1229,7 @@ static void bnx2x_stats_update(struct bnx2x *bp)
{
u32 *stats_comp = bnx2x_sp(bp, stats_comp);
- if (bnx2x_edebug_stats_stopped(bp))
+ if (bnx2x_edebug_stats_stopped(bp) || !atomic_read(&bp->stats_started))
return;
if (IS_PF(bp)) {
@@ -1332,6 +1334,8 @@ static void bnx2x_stats_stop(struct bnx2x *bp)
{
int update = 0;
+ atomic_set(&bp->stats_started, 0);
+
bnx2x_stats_comp(bp);
if (bp->port.pmf)