kernel_optimize_test/drivers/tty/hvc
Peter Hurley 79c1faa451 tty: Remove tty_wait_until_sent_from_close()
tty_wait_until_sent_from_close() drops the tty lock while waiting
for the tty driver to finish sending previously accepted data (ie.,
data remaining in its write buffer and transmit fifo).

tty_wait_until_sent_from_close() was added by commit a57a7bf3fc
("TTY: define tty_wait_until_sent_from_close") to prevent the entire
tty subsystem from being unable to open new ttys while waiting for
one tty to close while output drained.

However, since commit 0911261d4c ("tty: Don't take tty_mutex for tty
count changes"), holding a tty lock while closing does not prevent other
ttys from being opened/closed/hung up, but only prevents lifetime event
changes for the tty under lock.

Holding the tty lock while waiting for output to drain does prevent
parallel non-blocking opens (O_NONBLOCK) from advancing or returning
while the tty lock is held. However, all parallel opens _already_
block even if the tty lock is dropped while closing and the parallel
open advances. Blocking in open has been in mainline since at least 2.6.29
(see tty_port_block_til_ready(); note the test for O_NONBLOCK is _after_
the wait while ASYNC_CLOSING).

IOW, before this patch a non-blocking open will sleep anyway for the
_entire_ duration of a parallel hardware shutdown, and when it wakes, the
error return will cause a release of its tty, and it will restart with
a fresh attempt to open. Similarly with a blocking open that is already
waiting; when it's woken, the hardware shutdown has already completed
to ASYNC_INITIALIZED is not set, which forces a release and restart as
well.

So, holding the tty lock across the _entire_ close (which is what this
patch does), even while waiting for output to drain, is equivalent to
the current outcome wrt parallel opens.

Cc: Alan Cox <alan@linux.intel.com>
Cc: David Laight <David.Laight@aculab.com>
CC: Arnd Bergmann <arnd@arndb.de>
CC: Karsten Keil <isdn@linux-pingi.de>
CC: linuxppc-dev@lists.ozlabs.org
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-10-17 21:11:29 -07:00
..
hvc_bfin_jtag.c
hvc_console.c tty: Remove tty_wait_until_sent_from_close() 2015-10-17 21:11:29 -07:00
hvc_console.h tty/hvc_console: Add DTR/RTS callback to handle HUPCL control 2013-07-24 15:21:13 -07:00
hvc_dcc.c hvc_dcc: don't ignore errors during initialization 2015-10-04 17:49:27 +01:00
hvc_irq.c TTY: irq: Remove IRQF_DISABLED 2011-09-22 16:08:57 -07:00
hvc_iucv.c kernel/params: constify struct kernel_param_ops uses 2015-05-28 11:32:10 +09:30
hvc_opal.c hvc: Convert to using interrupts instead of opal events 2015-05-22 15:14:38 +10:00
hvc_rtas.c drivers/tty/hvc: don't use module_init in non-modular hyp. console code 2014-02-07 08:40:54 -08:00
hvc_tile.c drivers/tty/hvc/hvc_tile.c: properly return -EAGAIN 2015-05-11 11:22:20 -04:00
hvc_udbg.c drivers/tty/hvc: don't use module_init in non-modular hyp. console code 2014-02-07 08:40:54 -08:00
hvc_vio.c powerpc: Remove powerpc specific cmd_line 2014-10-02 17:33:55 +10:00
hvc_xen.c hvc/xen: Further s/MFN/GFN clean-up 2015-09-08 18:03:53 +01:00
hvcs.c tty: Remove tty_wait_until_sent_from_close() 2015-10-17 21:11:29 -07:00
hvsi_lib.c tty-hvsi_lib: Deletion of an unnecessary check before the function call "tty_kref_put" 2014-11-26 19:35:49 -08:00
hvsi.c powerpc/hvsi: Fix endianness issues in the HVSI driver 2015-08-20 18:19:08 +10:00
Kconfig ARM64: TTY: hvc_dcc: Add support for ARM64 dcc 2015-10-04 17:49:27 +01:00
Makefile tty/hvc: remove celleb-only beat driver 2015-05-10 19:19:06 +02:00