}
 
 out_update:
+       mutex_lock(&ehea_fw_handles.lock);
        kfree(ehea_fw_handles.arr);
        ehea_fw_handles.arr = arr;
        ehea_fw_handles.num_entries = i;
+       mutex_unlock(&ehea_fw_handles.lock);
 }
 
 static void ehea_update_bcmc_registrations(void)
        }
 
 out_update:
+       spin_lock(&ehea_bcmc_regs.lock);
        kfree(ehea_bcmc_regs.arr);
        ehea_bcmc_regs.arr = arr;
        ehea_bcmc_regs.num_entries = i;
+       spin_unlock(&ehea_bcmc_regs.lock);
 }
 
 static struct net_device_stats *ehea_get_stats(struct net_device *dev)
 
        memcpy(dev->dev_addr, mac_addr->sa_data, dev->addr_len);
 
-       spin_lock(&ehea_bcmc_regs.lock);
-
        /* Deregister old MAC in pHYP */
        if (port->state == EHEA_PORT_UP) {
                ret = ehea_broadcast_reg_helper(port, H_DEREG_BCMC);
 
 out_upregs:
        ehea_update_bcmc_registrations();
-       spin_unlock(&ehea_bcmc_regs.lock);
 out_free:
        kfree(cb0);
 out:
        }
        ehea_promiscuous(dev, 0);
 
-       spin_lock(&ehea_bcmc_regs.lock);
-
        if (dev->flags & IFF_ALLMULTI) {
                ehea_allmulti(dev, 1);
                goto out;
        }
 out:
        ehea_update_bcmc_registrations();
-       spin_unlock(&ehea_bcmc_regs.lock);
        return;
 }
 
        if (port->state == EHEA_PORT_UP)
                return 0;
 
-       mutex_lock(&ehea_fw_handles.lock);
-
        ret = ehea_port_res_setup(port, port->num_def_qps,
                                  port->num_add_tx_qps);
        if (ret) {
                }
        }
 
-       spin_lock(&ehea_bcmc_regs.lock);
-
        ret = ehea_broadcast_reg_helper(port, H_REG_BCMC);
        if (ret) {
                ret = -EIO;
                ehea_info("Failed starting %s. ret=%i", dev->name, ret);
 
        ehea_update_bcmc_registrations();
-       spin_unlock(&ehea_bcmc_regs.lock);
 
        ehea_update_firmware_handles();
-       mutex_unlock(&ehea_fw_handles.lock);
 
        return ret;
 }
        if (port->state == EHEA_PORT_DOWN)
                return 0;
 
-       mutex_lock(&ehea_fw_handles.lock);
-
-       spin_lock(&ehea_bcmc_regs.lock);
        ehea_drop_multicast_list(dev);
        ehea_broadcast_reg_helper(port, H_DEREG_BCMC);
 
        port->state = EHEA_PORT_DOWN;
 
        ehea_update_bcmc_registrations();
-       spin_unlock(&ehea_bcmc_regs.lock);
 
        ret = ehea_clean_all_portres(port);
        if (ret)
                          dev->name, ret);
 
        ehea_update_firmware_handles();
-       mutex_unlock(&ehea_fw_handles.lock);
 
        return ret;
 }
                ehea_error("Invalid ibmebus device probed");
                return -EINVAL;
        }
-       mutex_lock(&ehea_fw_handles.lock);
 
        adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
        if (!adapter) {
 
 out:
        ehea_update_firmware_handles();
-       mutex_unlock(&ehea_fw_handles.lock);
        return ret;
 }
 
 
        flush_scheduled_work();
 
-       mutex_lock(&ehea_fw_handles.lock);
-
        ibmebus_free_irq(adapter->neq->attr.ist1, adapter);
        tasklet_kill(&adapter->neq_tasklet);
 
        kfree(adapter);
 
        ehea_update_firmware_handles();
-       mutex_unlock(&ehea_fw_handles.lock);
 
        return 0;
 }