Dave Young
f278a2f7bb
tty: Fix regressions caused by commit b50989dc
...
The following commit made console open fails while booting:
commit b50989dc44
Author: Alan Cox <alan@linux.intel.com>
Date: Sat Sep 19 13:13:22 2009 -0700
tty: make the kref destructor occur asynchronously
Due to tty release routines run in a workqueue now, error like the
following will be reported while booting:
INIT open /dev/console Input/output error
It also causes hibernation regression to appear as reported at
http://bugzilla.kernel.org/show_bug.cgi?id=14229
The reason is that now there's latency issue with closing, but when
we open a "closing not finished" tty, -EIO will be returned.
Fix it as per the following Alan's suggestion:
Fun but it's actually not a bug and the fix is wrong in itself as
the port may be closing but not yet being destructed, in which case
it seems to do the wrong thing. Opening a tty that is closing (and
could be closing for long periods) is supposed to return -EIO.
I suspect a better way to deal with this and keep the old console
timing is to split tty->shutdown into two functions.
tty->shutdown() - called synchronously just before we dump the tty
onto the waitqueue for destruction
tty->cleanup() - called when the destructor runs.
We would then do the shutdown part which can occur in IRQ context
fine, before queueing the rest of the release (from tty->magic = 0
... the end) to occur asynchronously
The USB update in -next would then need a call like
if (tty->cleanup)
tty->cleanup(tty);
at the top of the async function and the USB shutdown to be split
between shutdown and cleanup as the USB resource cleanup and final
tidy cannot occur synchronously as it needs to sleep.
In other words the logic becomes
final kref put
make object unfindable
async
clean it up
Signed-off-by: Dave Young <hidave.darkstar@gmail.com>
[ rjw: Rebased on top of 2.6.31-git, reworked the changelog. ]
Signed-off-by: "Rafael J. Wysocki" <rjw@sisk.pl>
[ Changed serial naming to match new rules, dropped tty_shutdown as per
comments from Alan Stern - Linus ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-09-27 13:35:16 -07:00
..
agp
const: mark struct vm_struct_operations
2009-09-27 11:39:25 -07:00
hw_random
virtio: add virtio IDs file
2009-09-23 22:26:32 +09:30
ip2
tty: rewrite the ldisc locking
2009-06-11 08:51:01 -07:00
ipmi
trivial: add __init macro/ fix of __exit macro location in ipmi_poweroff.c
2009-09-21 15:14:58 +02:00
mwave
mwave: fix read buffer overflow
2009-09-24 07:21:03 -07:00
pcmcia
pcmcia: fix read buffer overflow
2009-09-22 07:17:42 -07:00
rio
drivers/char/rio/rioctrl.c: off by one error in rioctrl.c
2009-09-24 07:21:03 -07:00
tpm
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6
2009-09-23 15:18:57 -07:00
xilinx_hwicap
.gitignore
amiserial.c
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
apm-emulation.c
applicom.c
applicom: Auto-load applicom module when device opened.
2009-04-06 14:36:30 -07:00
applicom.h
bfin-otp.c
bfin-otp: add writing support
2009-09-24 07:21:03 -07:00
bfin_jtag_comm.c
bfin_jtag_comm: clean up printk usage
2009-06-22 11:32:23 -07:00
briq_panel.c
bsr.c
powerpc/BSR: Fix BSR to allow mmap of small BSR on 64k kernel
2009-06-26 14:37:26 +10:00
cd1865.h
ChangeLog
consolemap.c
cp437.uni
cs5535_gpio.c
cyclades.c
serial: move delta_msr_wait into the tty_port
2009-09-19 13:13:31 -07:00
defkeymap.c_shipped
defkeymap.map
digi1.h
digiFep1.h
digiPCI.h
ds1302.c
ds1620.c
dsp56k.c
dtlk.c
dtlk: off by one in {read,write}_tts()
2009-06-19 16:46:06 -07:00
efirtc.c
epca.c
trivial: remove unnecessary semicolons
2009-09-21 15:14:58 +02:00
epca.h
epcaconfig.h
esp.c
serial: move delta_msr_wait into the tty_port
2009-09-19 13:13:31 -07:00
generic_nvram.c
powerpc/nvram: Enable use Generic NVRAM driver for different size chips
2009-09-11 16:02:11 +10:00
generic_serial.c
genrtc.c
hangcheck-timer.c
hpet.c
hpet: hpet driver periodic timer setup bug fixes
2009-09-24 07:21:03 -07:00
hvc_beat.c
hvc_console.c
hvc_console: Provide (un)locked version for hvc_resize()
2009-09-24 15:12:47 +10:00
hvc_console.h
hvc_console: Provide (un)locked version for hvc_resize()
2009-09-24 15:12:47 +10:00
hvc_irq.c
hvc_iseries.c
drivers/hvc: Add missing __devexit_p()
2009-06-16 14:15:44 +10:00
hvc_iucv.c
hvc_console: Provide (un)locked version for hvc_resize()
2009-09-24 15:12:47 +10:00
hvc_rtas.c
hvc_udbg.c
hvc_vio.c
hvc_console: Add __init and __exit to hvc_vio
2009-08-28 14:24:11 +10:00
hvc_xen.c
hvcs.c
Merge commit 'origin/master' into next
2009-06-18 11:16:55 +10:00
hvsi.c
powerpc/hvsi: Avoid calculating possibly-invalid address
2009-08-20 10:29:28 +10:00
i8k.c
isicom.c
isicom: split the open method for the isicom device
2009-09-19 13:13:27 -07:00
istallion.c
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
Kconfig
drivers/char/uv_mmtimer.c: add memory mapped RTC driver for UV
2009-09-24 07:21:03 -07:00
keyboard.c
Input: keyboard - remove warning about raw mode not supported
2009-04-20 21:21:24 -07:00
lp.c
Makefile
drivers/char/uv_mmtimer.c: add memory mapped RTC driver for UV
2009-09-24 07:21:03 -07:00
mbcs.c
[IA64] mbcs: fix printk format warnings
2009-09-15 08:42:00 -07:00
mbcs.h
mem.c
const: mark struct vm_struct_operations
2009-09-27 11:39:25 -07:00
misc.c
seq_file: constify seq_operations
2009-09-23 07:39:29 -07:00
mmtimer.c
moxa.c
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
moxa.h
mspec.c
const: mark struct vm_struct_operations
2009-09-27 11:39:25 -07:00
mxser.c
tty: Char: mxser, use THRE for ASPP_OQUEUE ioctl
2009-09-19 13:13:38 -07:00
mxser.h
n_hdlc.c
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
n_r3964.c
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
n_tty.c
n_tty: move echoctl check and clean up logic
2009-09-19 13:13:34 -07:00
nozomi.c
tty: fix chars_in_buffers
2009-07-20 16:38:43 -07:00
nsc_gpio.c
nvram.c
nwbutton.c
nwbutton.h
nwflash.c
pc8736x_gpio.c
ppdev.c
ppdev: reduce kernel log spam
2009-06-18 13:03:54 -07:00
ps3flash.c
ps3flash: Always read chunks of 256 KiB, and cache them
2009-06-15 16:47:27 +10:00
pty.c
pty_write: don't do a tty_wakeup() when the buffers are full
2009-09-18 07:05:58 -07:00
random.c
sysctl: remove "struct file *" argument of ->proc_handler
2009-09-24 07:21:04 -07:00
raw.c
Driver-Core: extend devnode callbacks to provide permissions
2009-09-19 12:50:38 -07:00
riscom8.c
tty: riscom8, fix tty refcnt
2009-09-19 13:13:37 -07:00
riscom8.h
riscom8_reg.h
rocket.c
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
rocket.h
rocket_int.h
rtc.c
scc.h
m68k: atari - Rename "mfp" to "st_mfp"
2009-02-22 09:23:02 -08:00
scx200_gpio.c
selection.c
tty: rewrite the ldisc locking
2009-06-11 08:51:01 -07:00
ser_a2232.c
ser_a2232.h
ser_a2232fw.ax
ser_a2232fw.h
serial167.c
cleanup console_print()
2009-09-14 17:41:42 -07:00
snsc.c
snsc.h
snsc_event.c
sonypi.c
Rationalize fasync return values
2009-03-16 08:34:35 -06:00
specialix.c
specialix.c: convert nested spin_lock_irqsave to spin_lock
2009-07-20 16:38:43 -07:00
specialix_io8.h
stallion.c
tty: Add carrier processing on close to the tty_port core
2009-06-11 08:50:56 -07:00
sx.c
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
sx.h
sxboards.h
sxwindow.h
synclink.c
hdlc: convert to netdev_tx_t
2009-09-01 01:13:31 -07:00
synclink_gt.c
hdlc: convert to netdev_tx_t
2009-09-01 01:13:31 -07:00
synclinkmp.c
hdlc: convert to netdev_tx_t
2009-09-01 01:13:31 -07:00
sysrq.c
perf: Do the big rename: Performance Counters -> Performance Events
2009-09-21 14:28:04 +02:00
tb0219.c
Update Yoichi Yuasa's e-mail address
2009-07-03 15:45:29 +01:00
tlclk.c
toshiba.c
tty_audit.c
tty: remove buffer special casing
2009-06-11 08:51:02 -07:00
tty_buffer.c
pty: avoid forcing 'low_latency' tty flag
2009-07-29 12:15:56 -07:00
tty_io.c
tty: Fix regressions caused by commit b50989dc
2009-09-27 13:35:16 -07:00
tty_ioctl.c
tty: vt: use printk_once
2009-09-19 13:13:35 -07:00
tty_ldisc.c
tty-ldisc: get rid of tty_ldisc_try_get() helper function
2009-09-19 13:13:10 -07:00
tty_port.c
TTY: fix typos
2009-09-19 13:13:36 -07:00
uv_mmtimer.c
drivers/char/uv_mmtimer.c: add memory mapped RTC driver for UV
2009-09-24 07:21:03 -07:00
vc_screen.c
vc: create vcs(a) devices for consoles
2009-07-20 16:38:43 -07:00
viotape.c
tape: beyond ARRAY_SIZE of viocd_diskinfo
2009-06-02 10:32:34 +10:00
virtio_console.c
virtio: add virtio IDs file
2009-09-23 22:26:32 +09:30
vme_scc.c
vt.c
tty: vt: use printk_once
2009-09-19 13:13:35 -07:00
vt_ioctl.c
tty: Power: fix suspend vt regression
2009-09-19 13:13:35 -07:00