static void snd_mtpav_output_timer(unsigned long data)
{
+ unsigned long flags;
mtpav_t *chip = (mtpav_t *)data;
int p;
- spin_lock(&chip->spinlock);
+ spin_lock_irqsave(&chip->spinlock, flags);
/* reprogram timer */
chip->timer.expires = 1 + jiffies;
add_timer(&chip->timer);
if ((portp->mode & MTPAV_MODE_OUTPUT_TRIGGERED) && portp->output)
snd_mtpav_output_port_write(portp, portp->output);
}
- spin_unlock(&chip->spinlock);
+ spin_unlock_irqrestore(&chip->spinlock, flags);
}
/* spinlock held! */
portp = &mcrd->ports[mcrd->inmidiport];
if (portp->mode & MTPAV_MODE_INPUT_TRIGGERED) {
- spin_unlock(&mcrd->spinlock);
snd_rawmidi_receive(portp->input, &inbyte, 1);
- spin_lock(&mcrd->spinlock);
}
}