/* Local copy of hardware statistics */
        struct fbnic_hw_stats hw_stats;
+
+       /* Lock protecting access to hw_stats */
+       spinlock_t hw_stats_lock;
 };
 
 /* Reserve entry 0 in the MSI-X "others" array until we have filled all
 
 
 void fbnic_reset_hw_stats(struct fbnic_dev *fbd)
 {
+       spin_lock(&fbd->hw_stats_lock);
        fbnic_reset_rpc_stats(fbd, &fbd->hw_stats.rpc);
        fbnic_reset_pcie_stats_asic(fbd, &fbd->hw_stats.pcie);
+       spin_unlock(&fbd->hw_stats_lock);
 }
 
-void fbnic_get_hw_stats32(struct fbnic_dev *fbd)
+static void __fbnic_get_hw_stats32(struct fbnic_dev *fbd)
 {
        fbnic_get_rpc_stats32(fbd, &fbd->hw_stats.rpc);
 }
 
-void fbnic_get_hw_stats(struct fbnic_dev *fbd)
+void fbnic_get_hw_stats32(struct fbnic_dev *fbd)
 {
-       fbnic_get_hw_stats32(fbd);
+       spin_lock(&fbd->hw_stats_lock);
+       __fbnic_get_hw_stats32(fbd);
+       spin_unlock(&fbd->hw_stats_lock);
+}
 
+void fbnic_get_hw_stats(struct fbnic_dev *fbd)
+{
+       spin_lock(&fbd->hw_stats_lock);
+       __fbnic_get_hw_stats32(fbd);
        fbnic_get_pcie_stats_asic64(fbd, &fbd->hw_stats.pcie);
+       spin_unlock(&fbd->hw_stats_lock);
 }
 
 
        fbnic_devlink_register(fbd);
        fbnic_dbg_fbd_init(fbd);
+       spin_lock_init(&fbd->hw_stats_lock);
 
        /* Capture snapshot of hardware stats so netdev can calculate delta */
        fbnic_reset_hw_stats(fbd);