master/module.c
changeset 1189 acc6430bfb32
parent 1029 61ffe5f22306
child 1209 8be462afb7f4
child 1648 3e46fbb7eb1d
equal deleted inserted replaced
1188:3b4e82d9904b 1189:acc6430bfb32
   471         EC_ERR("Invalid master index %u.\n", master_index);
   471         EC_ERR("Invalid master index %u.\n", master_index);
   472         goto out_return;
   472         goto out_return;
   473     }
   473     }
   474     master = &masters[master_index];
   474     master = &masters[master_index];
   475 
   475 
   476     down(&master_sem);
   476     if (down_interruptible(&master_sem))
       
   477         goto out_return;
       
   478 
   477     if (master->reserved) {
   479     if (master->reserved) {
   478         up(&master_sem);
   480         up(&master_sem);
   479         EC_ERR("Master %u is already in use!\n", master_index);
   481         EC_ERR("Master %u is already in use!\n", master_index);
   480         goto out_return;
   482         goto out_return;
   481     }
   483     }
   482     master->reserved = 1;
   484     master->reserved = 1;
   483     up(&master_sem);
   485     up(&master_sem);
   484 
   486 
   485     down(&master->device_sem);
   487     if (down_interruptible(&master->device_sem))
       
   488         goto out_release;
   486     
   489     
   487     if (master->phase != EC_IDLE) {
   490     if (master->phase != EC_IDLE) {
   488         up(&master->device_sem);
   491         up(&master->device_sem);
   489         EC_ERR("Master %u still waiting for devices!\n", master_index);
   492         EC_ERR("Master %u still waiting for devices!\n", master_index);
   490         goto out_release;
   493         goto out_release;