tty: improve behaviour of O_NDELAY
authorAlan Cox <alan@linux.intel.com>
Fri, 17 Aug 2018 09:44:49 +0000 (10:44 +0100)
committerAlan Cox <alan@linux.intel.com>
Fri, 17 Aug 2018 09:44:49 +0000 (10:44 +0100)
We want to bale out on a polled output port on a reschedule not just sit
assuming the bits will go out shortly

Kernel/tty.c

index 169cd5e..eba4444 100644 (file)
@@ -512,12 +512,14 @@ uint8_t tty_putc_maywait(uint8_t minor, unsigned char c, uint8_t flag)
                                udata.u_error = EINTR;
                                return 1;
                        }
-                       if (t == TTY_READY_LATER && flag) {
-                               udata.u_error = EAGAIN;
-                               return 1;
-                       }
                        if (t != TTY_READY_SOON || need_reschedule()){
-                               irqflags_t irq = di();
+                               irqflags_t irq;
+
+                               if (flag) {
+                                       udata.u_error = EAGAIN;
+                                       return 1;
+                               }
+                               irq = di();
                                tty_sleeping(minor);
                                psleep(&ttydata[minor]);
                                irqrestore(irq);