[PATCH] s390: fix build failure in con3215.c tty wakeup tasklet

From: Paul Gortmaker
Date: Tue Apr 17 2012 - 12:07:47 EST


Commit 86b26007a37d81e7aca242bb5b649473f8f81297 (tty-next)

"TTY: con3215, use tty from tty_port"

removed the tty struct from the raw struct, causing:

CC drivers/s390/char/con3215.o
drivers/s390/char/con3215.c: In function 'raw3215_wakeup':
drivers/s390/char/con3215.c:339:16: error: 'struct raw3215_info' has no member named 'tty'
make[2]: *** [drivers/s390/char/con3215.o] Error 1

We can't simply add a tty to the args of raw3215_wakeup since
it is registered as a tasklet. The flow is:

raw3215_irq
--> tty_port_tty_get
--> raw3215_next_io
--> tasklet_schedule
--> tty_kref_put

so it seems we'll need to do a get/put in the raw3215_wakeup
tasklet as well.

Cc: Jiri Slaby <jslaby@xxxxxxx>
Cc: Martin Schwidefsky <schwidefsky@xxxxxxxxxx>
Cc: Heiko Carstens <heiko.carstens@xxxxxxxxxx>
Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
Cc: linux390@xxxxxxxxxx
Cc: linux-s390@xxxxxxxxxxxxxxx
Signed-off-by: Paul Gortmaker <paul.gortmaker@xxxxxxxxxxxxx>

diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c
index e928e04..759c43c 100644
--- a/drivers/s390/char/con3215.c
+++ b/drivers/s390/char/con3215.c
@@ -336,7 +336,13 @@ static inline void raw3215_try_io(struct raw3215_info *raw)
static void raw3215_wakeup(unsigned long data)
{
struct raw3215_info *raw = (struct raw3215_info *) data;
- tty_wakeup(raw->tty);
+ struct tty_struct *tty = tty_port_tty_get(&raw->port);
+
+ if (tty == NULL)
+ return;
+
+ tty_wakeup(tty);
+ tty_kref_put(tty);
}

/*
--
1.7.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/