|
@@ -179,23 +179,23 @@ static int softsynth_open(struct inode *inode, struct file *fp)
|
|
|
unsigned long flags;
|
|
|
/*if ((fp->f_flags & O_ACCMODE) != O_RDONLY) */
|
|
|
/* return -EPERM; */
|
|
|
- spk_lock(flags);
|
|
|
+ spin_lock_irqsave(&speakup_info.spinlock, flags);
|
|
|
if (synth_soft.alive) {
|
|
|
- spk_unlock(flags);
|
|
|
+ spin_unlock_irqrestore(&speakup_info.spinlock, flags);
|
|
|
return -EBUSY;
|
|
|
}
|
|
|
synth_soft.alive = 1;
|
|
|
- spk_unlock(flags);
|
|
|
+ spin_unlock_irqrestore(&speakup_info.spinlock, flags);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static int softsynth_close(struct inode *inode, struct file *fp)
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
- spk_lock(flags);
|
|
|
+ spin_lock_irqsave(&speakup_info.spinlock, flags);
|
|
|
synth_soft.alive = 0;
|
|
|
init_pos = 0;
|
|
|
- spk_unlock(flags);
|
|
|
+ spin_unlock_irqrestore(&speakup_info.spinlock, flags);
|
|
|
/* Make sure we let applications go before leaving */
|
|
|
speakup_start_ttys();
|
|
|
return 0;
|
|
@@ -212,12 +212,12 @@ static ssize_t softsynth_read(struct file *fp, char *buf, size_t count,
|
|
|
unsigned long flags;
|
|
|
DEFINE_WAIT(wait);
|
|
|
|
|
|
- spk_lock(flags);
|
|
|
+ spin_lock_irqsave(&speakup_info.spinlock, flags);
|
|
|
while (1) {
|
|
|
prepare_to_wait(&speakup_event, &wait, TASK_INTERRUPTIBLE);
|
|
|
if (!synth_buffer_empty() || speakup_info.flushing)
|
|
|
break;
|
|
|
- spk_unlock(flags);
|
|
|
+ spin_unlock_irqrestore(&speakup_info.spinlock, flags);
|
|
|
if (fp->f_flags & O_NONBLOCK) {
|
|
|
finish_wait(&speakup_event, &wait);
|
|
|
return -EAGAIN;
|
|
@@ -227,7 +227,7 @@ static ssize_t softsynth_read(struct file *fp, char *buf, size_t count,
|
|
|
return -ERESTARTSYS;
|
|
|
}
|
|
|
schedule();
|
|
|
- spk_lock(flags);
|
|
|
+ spin_lock_irqsave(&speakup_info.spinlock, flags);
|
|
|
}
|
|
|
finish_wait(&speakup_event, &wait);
|
|
|
|
|
@@ -244,16 +244,16 @@ static ssize_t softsynth_read(struct file *fp, char *buf, size_t count,
|
|
|
} else {
|
|
|
ch = synth_buffer_getc();
|
|
|
}
|
|
|
- spk_unlock(flags);
|
|
|
+ spin_unlock_irqrestore(&speakup_info.spinlock, flags);
|
|
|
if (copy_to_user(cp, &ch, 1))
|
|
|
return -EFAULT;
|
|
|
- spk_lock(flags);
|
|
|
+ spin_lock_irqsave(&speakup_info.spinlock, flags);
|
|
|
chars_sent++;
|
|
|
cp++;
|
|
|
}
|
|
|
*pos += chars_sent;
|
|
|
empty = synth_buffer_empty();
|
|
|
- spk_unlock(flags);
|
|
|
+ spin_unlock_irqrestore(&speakup_info.spinlock, flags);
|
|
|
if (empty) {
|
|
|
speakup_start_ttys();
|
|
|
*pos = 0;
|
|
@@ -285,10 +285,10 @@ static unsigned int softsynth_poll(struct file *fp,
|
|
|
int ret = 0;
|
|
|
poll_wait(fp, &speakup_event, wait);
|
|
|
|
|
|
- spk_lock(flags);
|
|
|
+ spin_lock_irqsave(&speakup_info.spinlock, flags);
|
|
|
if (!synth_buffer_empty() || speakup_info.flushing)
|
|
|
ret = POLLIN | POLLRDNORM;
|
|
|
- spk_unlock(flags);
|
|
|
+ spin_unlock_irqrestore(&speakup_info.spinlock, flags);
|
|
|
return ret;
|
|
|
}
|
|
|
|