Messages in this thread | | | Date | Fri, 23 Nov 2012 13:53:33 +0000 | From | Alan Cox <> | Subject | Re: [PATCH v2] tty: Add driver unthrottle in ioctl(...,TCFLSH,..). |
| |
On Fri, 23 Nov 2012 03:02:56 +0400 Ilya Zykov <ilya@ilyx.ru> wrote:
> Regression 'tty: fix "IRQ45: nobody cared"' > Regression commit 7b292b4bf9a9d6098440d85616d6ca4c608b8304 > > Function reset_buffer_flags() also invoked during the ioctl(...,TCFLSH,..). > At the time of request we can have full buffers and throttled driver too. > If we don't unthrottle driver, we can get forever throttled driver, because, > after request, we will have empty buffers and throttled driver and > there is no place to unthrottle driver. > It simple reproduce with "pty" pair then one side sleep on tty->write_wait, > and other side do ioctl(...,TCFLSH,..). Then there is no place to do writers wake up. > > About 'tty: fix "IRQ45: nobody cared"': > We don't call tty_unthrottle() if release last filp - ('tty->count == 0') > In other case it must be safely. > > Unfortunately, many drivers indirectly invoke tty_unthrottle() before TTY LAYER > decremented (tty->count). > This Patch help us catch bugs in tty's drivers and invoke tty_unthrottle() > in right moment only.
This isn't really what I meant by fixing the problem. Simply declaring the known universe to disagree with your view and adding a WARN isn't a fix.
Alan
| |