static void falcon_get_lock( void ) { unsigned long flags; if (IS_A_TT()) return; local_irq_save(flags); while( !in_interrupt() && falcon_got_lock && stdma_others_waiting() ) sleep_on( &falcon_fairness_wait ); while (!falcon_got_lock) { if (in_interrupt()) panic( "Falcon SCSI hasn't ST-DMA lock in interrupt" ); if (!falcon_trying_lock) { falcon_trying_lock = 1; stdma_lock(scsi_falcon_intr, NULL); falcon_got_lock = 1; falcon_trying_lock = 0; wake_up( &falcon_try_wait ); } else { sleep_on( &falcon_try_wait ); } } local_irq_restore(flags); if (!falcon_got_lock) panic("Falcon SCSI: someone stole the lock :-(\n"); }
static void falcon_get_lock( void ) { unsigned long oldflags; if (IS_A_TT()) return; save_flags(oldflags); cli(); while( intr_count == 0 && falcon_got_lock && stdma_others_waiting() ) sleep_on( &falcon_fairness_wait ); while (!falcon_got_lock) { if (intr_count > 0) panic( "Falcon SCSI hasn't ST-DMA lock in interrupt" ); if (!falcon_trying_lock) { falcon_trying_lock = 1; stdma_lock(scsi_falcon_intr, NULL); falcon_got_lock = 1; falcon_trying_lock = 0; wake_up( &falcon_try_wait ); } else { sleep_on( &falcon_try_wait ); } } restore_flags(oldflags); if (!falcon_got_lock) panic("Falcon SCSI: someone stole the lock :-(\n"); }