linux/drivers/tty
Semen Protsenko 66cf1d8473 serial: omap: Fix error handling in probe
There is pm_qos_add_request() being executed on serial_omap_probe(),
which stores "&up->pm_qos_request" from omap-serial driver to
"pm_qos_array[PM_QOS_CPU_DMA_LATENCY]->constraints". If
serial_omap_probe() fails after pm_qos_add_request() (e.g. on
uart_add_one_port() call), pm_qos_array still keeping pm_qos_request
struct from omap-serial driver, which is not valid anymore (since driver
failed). This leads further to kernel crash on pm_qos_update_target(),
executing from some completely different driver.

We were observing this while trying to run audio playback while having
one of omap-serial driver instances failed on uart_add_one_port() call:
    Unable to handle kernel paging request at virtual address fffffffc
    Backtrace:
    (plist_add) from (pm_qos_update_target)
    (pm_qos_update_target) from (pm_qos_add_request)
    (pm_qos_add_request) from (snd_pcm_hw_params)
    (snd_pcm_hw_params) from (snd_pcm_common_ioctl1)
    (snd_pcm_common_ioctl1) from (snd_pcm_playback_ioctl1)
    (snd_pcm_playback_ioctl1) from (snd_pcm_playback_ioctl)
    (snd_pcm_playback_ioctl) from (do_vfs_ioctl)
    (do_vfs_ioctl) from (SyS_ioctl)
    (SyS_ioctl) from (ret_fast_syscall)

This patch adds pm_qos_remove_request() on fail path in
serial_omap_probe() in order to fix this issue. While at it, free the
wakeup settings on fail path as well, just like it's done in
serial_omap_remove().

Signed-off-by: Semen Protsenko <semen.protsenko@globallogic.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-05-08 14:20:50 +02:00
..
hvc tty/hvc_opal: constify of_device_id array 2015-03-26 22:49:10 +01:00
ipwireless Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2015-04-14 09:50:27 -07:00
serial serial: omap: Fix error handling in probe 2015-05-08 14:20:50 +02:00
vt tty: Use static attribute groups for sysfs entries 2015-03-26 16:10:10 +01:00
amiserial.c TTY: fix misspelling of current function in string 2015-01-09 14:38:15 -08:00
bfin_jtag_comm.c TTY: bfin_jtag_comm: remove incorrect wait_until_sent operation 2015-03-07 03:44:14 +01:00
cyclades.c
ehv_bytechan.c tty: remove unused variable sprop 2015-02-03 15:52:13 -08:00
goldfish.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2015-04-14 09:50:27 -07:00
isicom.c tty/isicom: fix big-endian compile warning 2015-02-02 10:11:25 -08:00
Kconfig ttyFDC: Implement KGDB IO operations. 2015-03-31 12:04:13 +02:00
Makefile TTY: Add MIPS EJTAG Fast Debug Channel TTY driver 2015-03-31 12:04:12 +02:00
metag_da.c
mips_ejtag_fdc.c ttyFDC: Implement KGDB IO operations. 2015-03-31 12:04:13 +02:00
moxa.c
moxa.h
mxser.c
mxser.h
n_gsm.c n_gsm: Drop unneeded cast on netdev_priv 2015-04-10 14:43:48 +02:00
n_hdlc.c
n_r3964.c
n_tracerouter.c
n_tracesink.c
n_tracesink.h
n_tty.c n_tty: Fix signal handling flushes 2015-02-02 10:11:27 -08:00
nozomi.c
pty.c n_tty: Fix signal handling flushes 2015-02-02 10:11:27 -08:00
rocket_int.h
rocket.c TTY: fix misspelling of current function in string 2015-01-09 14:38:15 -08:00
rocket.h
synclink_gt.c
synclink.c
synclinkmp.c
sysrq.c workqueue: dump workqueues on sysrq-t 2015-03-09 09:22:28 -04:00
tty_audit.c
tty_buffer.c pty: Fix buffer flush deadlock 2015-02-02 10:11:27 -08:00
tty_io.c tty: clean up the tty time logic a bit 2015-03-26 23:10:27 +01:00
tty_ioctl.c tty: Re-add external interface for tty_set_termios() 2015-04-28 14:26:20 +02:00
tty_ldisc.c
tty_ldsem.c
tty_mutex.c tty: Make lock subclasses available for other tty locks 2015-02-02 10:11:27 -08:00
tty_port.c