int i;
 
        memset(&vstats, 0, sizeof(vstats));
-       mutex_lock(&adapter->stats_lock);
+       spin_lock(&adapter->stats_lock);
        adapter->rn_ops->ndo_get_stats64(netdev, &vstats.netstats);
+       spin_unlock(&adapter->stats_lock);
        for (i = 0; i < VNIC_STATS_LEN; i++) {
                char *p = (char *)&vstats + vnic_gstrings_stats[i].stat_offset;
 
                data[i] = (vnic_gstrings_stats[i].sizeof_stat ==
                           sizeof(u64)) ? *(u64 *)p : *(u32 *)p;
        }
-       mutex_unlock(&adapter->stats_lock);
 }
 
 /* vnic_get_strings - get strings */
 
        struct mutex mactbl_lock;
 
        /* Lock used to protect access to vnic counters */
-       struct mutex stats_lock;
+       spinlock_t stats_lock;
 
        u8 flow_tbl[OPA_VNIC_FLOW_TBL_SIZE];
 
 
        struct opa_vnic_stats vstats;
 
        memset(&vstats, 0, sizeof(vstats));
-       mutex_lock(&adapter->stats_lock);
+       spin_lock(&adapter->stats_lock);
        adapter->rn_ops->ndo_get_stats64(netdev, &vstats.netstats);
-       mutex_unlock(&adapter->stats_lock);
+       spin_unlock(&adapter->stats_lock);
        memcpy(stats, &vstats.netstats, sizeof(*stats));
 }
 
        netdev->hard_header_len += OPA_VNIC_SKB_HEADROOM;
        mutex_init(&adapter->lock);
        mutex_init(&adapter->mactbl_lock);
-       mutex_init(&adapter->stats_lock);
+       spin_lock_init(&adapter->stats_lock);
 
        SET_NETDEV_DEV(netdev, ibdev->dev.parent);
 
 netdev_err:
        mutex_destroy(&adapter->lock);
        mutex_destroy(&adapter->mactbl_lock);
-       mutex_destroy(&adapter->stats_lock);
        kfree(adapter);
 adapter_err:
        ibdev->free_rdma_netdev(netdev);
        opa_vnic_release_mac_tbl(adapter);
        mutex_destroy(&adapter->lock);
        mutex_destroy(&adapter->mactbl_lock);
-       mutex_destroy(&adapter->stats_lock);
        kfree(adapter);
        ibdev->free_rdma_netdev(netdev);
 }
 
        u64 *src;
 
        memset(&vstats, 0, sizeof(vstats));
-       mutex_lock(&adapter->stats_lock);
+       spin_lock(&adapter->stats_lock);
        adapter->rn_ops->ndo_get_stats64(adapter->netdev, &vstats.netstats);
-       mutex_unlock(&adapter->stats_lock);
+       spin_unlock(&adapter->stats_lock);
 
        cntrs->vp_instance = cpu_to_be16(adapter->vport_num);
        cntrs->vesw_id = cpu_to_be16(adapter->info.vesw.vesw_id);
        struct opa_vnic_stats vstats;
 
        memset(&vstats, 0, sizeof(vstats));
-       mutex_lock(&adapter->stats_lock);
+       spin_lock(&adapter->stats_lock);
        adapter->rn_ops->ndo_get_stats64(adapter->netdev, &vstats.netstats);
-       mutex_unlock(&adapter->stats_lock);
+       spin_unlock(&adapter->stats_lock);
 
        cntrs->vp_instance = cpu_to_be16(adapter->vport_num);
        cntrs->vesw_id = cpu_to_be16(adapter->info.vesw.vesw_id);