tty_wakeup is safe to be called from all contexts. No need to schedule
a tasklet for that. Let us call it directly like in other drivers.

And delete the tasklet completely.

Signed-off-by: Jiri Slaby <jsl...@suse.cz>
Cc: Martin Schwidefsky <schwidef...@de.ibm.com>
Cc: Heiko Carstens <heiko.carst...@de.ibm.com>
Cc: linux...@de.ibm.com
Cc: linux-s...@vger.kernel.org
---
 drivers/s390/char/con3215.c | 20 +-------------------
 1 file changed, 1 insertion(+), 19 deletions(-)

diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c
index 671efee612af..5923a1f133ef 100644
--- a/drivers/s390/char/con3215.c
+++ b/drivers/s390/char/con3215.c
@@ -85,7 +85,6 @@ struct raw3215_info {
        int written;                  /* number of bytes in write requests */
        struct raw3215_req *queued_read; /* pointer to queued read requests */
        struct raw3215_req *queued_write;/* pointer to queued write requests */
-       struct tasklet_struct tlet;   /* tasklet to invoke tty_wakeup */
        wait_queue_head_t empty_wait; /* wait queue for flushing */
        struct timer_list timer;      /* timer for delayed output */
        int line_pos;                 /* position on the line (for tabs) */
@@ -329,21 +328,6 @@ static inline void raw3215_try_io(struct raw3215_info *raw)
        }
 }
 
-/*
- * Call tty_wakeup from tasklet context
- */
-static void raw3215_wakeup(unsigned long data)
-{
-       struct raw3215_info *raw = (struct raw3215_info *) data;
-       struct tty_struct *tty;
-
-       tty = tty_port_tty_get(&raw->port);
-       if (tty) {
-               tty_wakeup(tty);
-               tty_kref_put(tty);
-       }
-}
-
 /*
  * Try to start the next IO and wake up processes waiting on the tty.
  */
@@ -352,7 +336,7 @@ static void raw3215_next_io(struct raw3215_info *raw, 
struct tty_struct *tty)
        raw3215_mk_write_req(raw);
        raw3215_try_io(raw);
        if (tty && RAW3215_BUFFER_SIZE - raw->count >= RAW3215_MIN_SPACE)
-               tasklet_schedule(&raw->tlet);
+               tty_wakeup(tty);
 }
 
 /*
@@ -644,7 +628,6 @@ static struct raw3215_info *raw3215_alloc_info(void)
 
        timer_setup(&info->timer, raw3215_timeout, 0);
        init_waitqueue_head(&info->empty_wait);
-       tasklet_init(&info->tlet, raw3215_wakeup, (unsigned long)info);
        tty_port_init(&info->port);
 
        return info;
@@ -936,7 +919,6 @@ static void tty3215_close(struct tty_struct *tty, struct 
file * filp)
        tty->closing = 1;
        /* Shutdown the terminal */
        raw3215_shutdown(raw);
-       tasklet_kill(&raw->tlet);
        tty->closing = 0;
        tty_port_tty_set(&raw->port, NULL);
 }
-- 
2.30.1

Reply via email to