netdev: ehea: locking order correction
[safe/jmp/linux-2.6] / drivers / net / ehea / ehea_main.c
index a3b3b16..0cfc7e2 100644 (file)
@@ -2453,7 +2453,7 @@ static int ehea_up(struct net_device *dev)
        if (port->state == EHEA_PORT_UP)
                return 0;
 
-       down(&ehea_fw_handles.lock);
+       mutex_lock(&ehea_fw_handles.lock);
 
        ret = ehea_port_res_setup(port, port->num_def_qps,
                                  port->num_add_tx_qps);
@@ -2517,7 +2517,7 @@ out:
        up(&ehea_bcmc_regs.lock);
 
        ehea_update_firmware_handles();
-       up(&ehea_fw_handles.lock);
+       mutex_unlock(&ehea_fw_handles.lock);
 
        return ret;
 }
@@ -2567,14 +2567,14 @@ static int ehea_down(struct net_device *dev)
        if (port->state == EHEA_PORT_DOWN)
                return 0;
 
+       mutex_lock(&ehea_fw_handles.lock);
+
        down(&ehea_bcmc_regs.lock);
        ehea_drop_multicast_list(dev);
        ehea_broadcast_reg_helper(port, H_DEREG_BCMC);
 
        ehea_free_interrupts(dev);
 
-       down(&ehea_fw_handles.lock);
-
        port->state = EHEA_PORT_DOWN;
 
        ehea_update_bcmc_registrations();
@@ -2586,7 +2586,7 @@ static int ehea_down(struct net_device *dev)
                          dev->name, ret);
 
        ehea_update_firmware_handles();
-       up(&ehea_fw_handles.lock);
+       mutex_unlock(&ehea_fw_handles.lock);
 
        return ret;
 }
@@ -3343,7 +3343,7 @@ static int __devinit ehea_probe_adapter(struct of_device *dev,
                ehea_error("Invalid ibmebus device probed");
                return -EINVAL;
        }
-       down(&ehea_fw_handles.lock);
+       mutex_lock(&ehea_fw_handles.lock);
 
        adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
        if (!adapter) {
@@ -3427,7 +3427,7 @@ out_free_ad:
 
 out:
        ehea_update_firmware_handles();
-       up(&ehea_fw_handles.lock);
+       mutex_unlock(&ehea_fw_handles.lock);
        return ret;
 }
 
@@ -3446,7 +3446,7 @@ static int __devexit ehea_remove(struct of_device *dev)
 
        flush_scheduled_work();
 
-       down(&ehea_fw_handles.lock);
+       mutex_lock(&ehea_fw_handles.lock);
 
        ibmebus_free_irq(adapter->neq->attr.ist1, adapter);
        tasklet_kill(&adapter->neq_tasklet);
@@ -3457,7 +3457,7 @@ static int __devexit ehea_remove(struct of_device *dev)
        kfree(adapter);
 
        ehea_update_firmware_handles();
-       up(&ehea_fw_handles.lock);
+       mutex_unlock(&ehea_fw_handles.lock);
 
        return 0;
 }
@@ -3544,7 +3544,7 @@ int __init ehea_module_init(void)
        memset(&ehea_fw_handles, 0, sizeof(ehea_fw_handles));
        memset(&ehea_bcmc_regs, 0, sizeof(ehea_bcmc_regs));
 
-       sema_init(&ehea_fw_handles.lock, 1);
+       mutex_init(&ehea_fw_handles.lock);
        sema_init(&ehea_bcmc_regs.lock, 1);
 
        ret = check_module_parm();