#include <linux/netdevice.h>
 #include <linux/pci.h>
 #include <linux/io-64-nonatomic-hi-lo.h>
+#include <linux/semaphore.h>
 #include <net/xdp.h>
 
 #include "nfp_net_ctrl.h"
        struct timer_list reconfig_timer;
        u32 reconfig_in_progress_update;
 
-       struct mutex bar_lock;
+       struct semaphore bar_lock;
 
        u32 rx_coalesce_usecs;
        u32 rx_coalesce_max_frames;
 
 static inline void nn_ctrl_bar_lock(struct nfp_net *nn)
 {
-       mutex_lock(&nn->bar_lock);
+       down(&nn->bar_lock);
 }
 
 static inline void nn_ctrl_bar_unlock(struct nfp_net *nn)
 {
-       mutex_unlock(&nn->bar_lock);
+       up(&nn->bar_lock);
 }
 
 /* Globals */
 
 #include <linux/interrupt.h>
 #include <linux/ip.h>
 #include <linux/ipv6.h>
-#include <linux/lockdep.h>
 #include <linux/mm.h>
 #include <linux/overflow.h>
 #include <linux/page_ref.h>
 {
        int ret;
 
-       lockdep_assert_held(&nn->bar_lock);
-
        nfp_net_reconfig_sync_enter(nn);
 
        nfp_net_reconfig_start(nn, update);
        u32 mbox = nn->tlv_caps.mbox_off;
        int ret;
 
-       lockdep_assert_held(&nn->bar_lock);
        nn_writeq(nn, mbox + NFP_NET_CFG_MBOX_SIMPLE_CMD, mbox_cmd);
 
        ret = __nfp_net_reconfig(nn, NFP_NET_CFG_UPDATE_MBOX);
        nn->dp.txd_cnt = NFP_NET_TX_DESCS_DEFAULT;
        nn->dp.rxd_cnt = NFP_NET_RX_DESCS_DEFAULT;
 
-       mutex_init(&nn->bar_lock);
+       sema_init(&nn->bar_lock, 1);
 
        spin_lock_init(&nn->reconfig_lock);
        spin_lock_init(&nn->link_status_lock);
 {
        WARN_ON(timer_pending(&nn->reconfig_timer) || nn->reconfig_posted);
 
-       mutex_destroy(&nn->bar_lock);
-
        if (nn->dp.netdev)
                free_netdev(nn->dp.netdev);
        else