diff options
Diffstat (limited to 'drivers/staging/speakup/devsynth.c')
| -rw-r--r-- | drivers/staging/speakup/devsynth.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/staging/speakup/devsynth.c b/drivers/staging/speakup/devsynth.c index 39dc586fc8b..71c728acf4c 100644 --- a/drivers/staging/speakup/devsynth.c +++ b/drivers/staging/speakup/devsynth.c @@ -13,31 +13,32 @@ static int misc_registered; static int dev_opened; -static ssize_t speakup_file_write(struct file *fp, const char *buffer, - size_t nbytes, loff_t *ppos) +static ssize_t speakup_file_write(struct file *fp, const char __user *buffer, + size_t nbytes, loff_t *ppos) { size_t count = nbytes; - const char *ptr = buffer; - int bytes; + const char __user *ptr = buffer; + size_t bytes; unsigned long flags; u_char buf[256]; + if (synth == NULL) return -ENODEV; while (count > 0) { - bytes = min_t(size_t, count, sizeof(buf)); + bytes = min(count, sizeof(buf)); if (copy_from_user(buf, ptr, bytes)) return -EFAULT; count -= bytes; ptr += bytes; - spk_lock(flags); + spin_lock_irqsave(&speakup_info.spinlock, flags); synth_write(buf, bytes); - spk_unlock(flags); + spin_unlock_irqrestore(&speakup_info.spinlock, flags); } return (ssize_t) nbytes; } -static ssize_t speakup_file_read(struct file *fp, char *buf, size_t nbytes, - loff_t *ppos) +static ssize_t speakup_file_read(struct file *fp, char __user *buf, + size_t nbytes, loff_t *ppos) { return 0; } |
