diff options
Diffstat (limited to 'drivers/s390/char/sclp_vt220.c')
-rw-r--r-- | drivers/s390/char/sclp_vt220.c | 13 |
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 | */ |
384 | static int | 384 | static 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, | |||
450 | static int | 449 | static int |
451 | sclp_vt220_write(struct tty_struct *tty, const unsigned char *buf, int count) | 450 | sclp_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) | |||
529 | static void | 528 | static void |
530 | sclp_vt220_put_char(struct tty_struct *tty, unsigned char ch) | 529 | sclp_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); | |||
746 | static void | 745 | static void |
747 | sclp_vt220_con_write(struct console *con, const char *buf, unsigned int count) | 746 | sclp_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 | ||
752 | static struct tty_driver * | 751 | static struct tty_driver * |