- /* prevent double enter via rawmidi->event callback */
- if (atomic_dec_and_test(&mpu->tx_loop)) {
- local_irq_save(flags);
- if (spin_trylock(&mpu->output_lock)) {
- snd_mpu401_uart_output_write(mpu);
- spin_unlock(&mpu->output_lock);
- }
- local_irq_restore(flags);
- }
- atomic_inc(&mpu->tx_loop);
+ spin_lock_irqsave(&mpu->output_lock, flags);
+ snd_mpu401_uart_output_write(mpu);
+ spin_unlock_irqrestore(&mpu->output_lock, flags);