OSDN Git Service

Merge tag 'v4.4.214' into 10
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / drivers / char / ttyprintk.c
index a15ce4e..e265bac 100644 (file)
 #include <linux/serial.h>
 #include <linux/tty.h>
 #include <linux/module.h>
+#include <linux/spinlock.h>
 
 struct ttyprintk_port {
        struct tty_port port;
-       struct mutex port_write_mutex;
+       spinlock_t spinlock;
 };
 
 static struct ttyprintk_port tpk_port;
@@ -107,11 +108,12 @@ static int tpk_open(struct tty_struct *tty, struct file *filp)
 static void tpk_close(struct tty_struct *tty, struct file *filp)
 {
        struct ttyprintk_port *tpkp = tty->driver_data;
+       unsigned long flags;
 
-       mutex_lock(&tpkp->port_write_mutex);
+       spin_lock_irqsave(&tpkp->spinlock, flags);
        /* flush tpk_printk buffer */
        tpk_printk(NULL, 0);
-       mutex_unlock(&tpkp->port_write_mutex);
+       spin_unlock_irqrestore(&tpkp->spinlock, flags);
 
        tty_port_close(&tpkp->port, tty, filp);
 }
@@ -123,13 +125,14 @@ static int tpk_write(struct tty_struct *tty,
                const unsigned char *buf, int count)
 {
        struct ttyprintk_port *tpkp = tty->driver_data;
+       unsigned long flags;
        int ret;
 
 
        /* exclusive use of tpk_printk within this tty */
-       mutex_lock(&tpkp->port_write_mutex);
+       spin_lock_irqsave(&tpkp->spinlock, flags);
        ret = tpk_printk(buf, count);
-       mutex_unlock(&tpkp->port_write_mutex);
+       spin_unlock_irqrestore(&tpkp->spinlock, flags);
 
        return ret;
 }
@@ -179,7 +182,7 @@ static int __init ttyprintk_init(void)
 {
        int ret = -ENOMEM;
 
-       mutex_init(&tpk_port.port_write_mutex);
+       spin_lock_init(&tpk_port.spinlock);
 
        ttyprintk_driver = tty_alloc_driver(1,
                        TTY_DRIVER_RESET_TERMIOS |