struct lio *lio;
 
        dev_dbg(&oct->pci_dev->dev, "Stopping network interfaces\n");
+       device_lock(&oct->pci_dev->dev);
+       if (oct->devlink) {
+               devlink_unregister(oct->devlink);
+               devlink_free(oct->devlink);
+               oct->devlink = NULL;
+       }
+       device_unlock(&oct->pci_dev->dev);
+
        if (!oct->ifcount) {
                dev_err(&oct->pci_dev->dev, "Init for Octeon was not completed\n");
                return 1;
        for (i = 0; i < oct->ifcount; i++)
                liquidio_destroy_nic_device(oct, i);
 
-       if (oct->devlink) {
-               devlink_unregister(oct->devlink);
-               devlink_free(oct->devlink);
-               oct->devlink = NULL;
-       }
-
        dev_dbg(&oct->pci_dev->dev, "Network interfaces stopped\n");
        return 0;
 }
                }
        }
 
+       device_lock(&octeon_dev->pci_dev->dev);
        devlink = devlink_alloc(&liquidio_devlink_ops,
                                sizeof(struct lio_devlink_priv),
                                &octeon_dev->pci_dev->dev);
        if (!devlink) {
+               device_unlock(&octeon_dev->pci_dev->dev);
                dev_err(&octeon_dev->pci_dev->dev, "devlink alloc failed\n");
                goto setup_nic_dev_free;
        }
        lio_devlink = devlink_priv(devlink);
        lio_devlink->oct = octeon_dev;
 
-       devlink_register(devlink);
        octeon_dev->devlink = devlink;
        octeon_dev->eswitch_mode = DEVLINK_ESWITCH_MODE_LEGACY;
+       devlink_register(devlink);
+       device_unlock(&octeon_dev->pci_dev->dev);
 
        return 0;