aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/char/sclp_vt220.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/char/sclp_vt220.c')
-rw-r--r--drivers/s390/char/sclp_vt220.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c
index f7b258dfd52c..ed507594e62b 100644
--- a/drivers/s390/char/sclp_vt220.c
+++ b/drivers/s390/char/sclp_vt220.c
@@ -383,7 +383,7 @@ sclp_vt220_timeout(unsigned long data)
383 */ 383 */
384static int 384static int
385__sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, 385__sclp_vt220_write(const unsigned char *buf, int count, int do_schedule,
386 int convertlf) 386 int convertlf, int may_schedule)
387{ 387{
388 unsigned long flags; 388 unsigned long flags;
389 void *page; 389 void *page;
@@ -398,9 +398,8 @@ __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule,
398 /* Create a sclp output buffer if none exists yet */ 398 /* Create a sclp output buffer if none exists yet */
399 if (sclp_vt220_current_request == NULL) { 399 if (sclp_vt220_current_request == NULL) {
400 while (list_empty(&sclp_vt220_empty)) { 400 while (list_empty(&sclp_vt220_empty)) {
401 spin_unlock_irqrestore(&sclp_vt220_lock, 401 spin_unlock_irqrestore(&sclp_vt220_lock, flags);
402 flags); 402 if (in_interrupt() || !may_schedule)
403 if (in_atomic())
404 sclp_sync_wait(); 403 sclp_sync_wait();
405 else 404 else
406 wait_event(sclp_vt220_waitq, 405 wait_event(sclp_vt220_waitq,
@@ -450,7 +449,7 @@ __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule,
450static int 449static int
451sclp_vt220_write(struct tty_struct *tty, const unsigned char *buf, int count) 450sclp_vt220_write(struct tty_struct *tty, const unsigned char *buf, int count)
452{ 451{
453 return __sclp_vt220_write(buf, count, 1, 0); 452 return __sclp_vt220_write(buf, count, 1, 0, 1);
454} 453}
455 454
456#define SCLP_VT220_SESSION_ENDED 0x01 455#define SCLP_VT220_SESSION_ENDED 0x01
@@ -529,7 +528,7 @@ sclp_vt220_close(struct tty_struct *tty, struct file *filp)
529static void 528static void
530sclp_vt220_put_char(struct tty_struct *tty, unsigned char ch) 529sclp_vt220_put_char(struct tty_struct *tty, unsigned char ch)
531{ 530{
532 __sclp_vt220_write(&ch, 1, 0, 0); 531 __sclp_vt220_write(&ch, 1, 0, 0, 1);
533} 532}
534 533
535/* 534/*
@@ -746,7 +745,7 @@ __initcall(sclp_vt220_tty_init);
746static void 745static void
747sclp_vt220_con_write(struct console *con, const char *buf, unsigned int count) 746sclp_vt220_con_write(struct console *con, const char *buf, unsigned int count)
748{ 747{
749 __sclp_vt220_write((const unsigned char *) buf, count, 1, 1); 748 __sclp_vt220_write((const unsigned char *) buf, count, 1, 1, 0);
750} 749}
751 750
752static struct tty_driver * 751static struct tty_driver *