linux/drivers
Michael Trimarchi dc1972d027 i2c: Fix stuck transaction on cpm-i2c driver
When a process tries to read/write a disconnected i2c device, it receives a signal (e.g. ctrl-c) and the kernel gets stuck.

BUG: soft lockup - CPU#0 stuck for 61s! [I2CEEpromTest:392]
NIP: c01628f8 LR: c01628f0 CTR: c00177cc
REGS: c39abd70 TRAP: 0901   Not tainted  (2.6.25.7-alcore)
MSR: 00009032 <EE,ME,IR,DR>  CR: 42042048  XER: 20000000
TASK = c3889bd0[392] 'I2CEEpromTest' THREAD: c39aa000
GPR00: 00009000 c39abe20 c3889bd0 c39075c8 c39abe28 00000001 00000000 00000001
GPR08: c3889bd0 c39075c8 00009032 c39abe34 00002437
NIP [c01628f8] cpm_i2c_xfer+0x5fc/0x6d0
LR [c01628f0] cpm_i2c_xfer+0x5f4/0x6d0
Call Trace:
[c39abe20] [c0162924] cpm_i2c_xfer+0x628/0x6d0 (unreliable)
[c39abe90] [c015f6a0] i2c_transfer+0x88/0xb4
[c39abeb0] [c0160164] i2c_master_recv+0x48/0x6c
[c39abed0] [c01618dc] i2cdev_read+0x50/0xe4
[c39abef0] [c0068b24] vfs_read+0xc4/0x108
[c39abf10] [c0068f4c] sys_read+0x4c/0x90
[c39abf40] [c000d348] ret_from_syscall+0x0/0x38
Instruction dump:
3bc00064 92610010 3bf201c8 92810014 3b61

This happen because though the wait_event_interruptible_timeout takes the
signals into account, the driver does not handle them.
We propose to change the wait_event_interruptible_timeout with
wait_event_timeout, leaving the signals to be handled in other points
on the upper layers.

Signed-off-by: Bruno Morelli <bruno@evidence.eu.com>
Signed-off-by: Michael Trimarchi <michael@evidence.eu.com>
Acked-by: Jochen Friedrich <jochen@scram.de>
[ben-linux@fluff.org: fix title for patch]
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
2009-06-22 01:43:32 +01:00
..
accessibility
acpi Merge branch 'acpica' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 2009-06-16 11:24:23 -07:00
amba
ata powerpc/5xxx: Add common mpc5xxx_get_bus_frequency() function 2009-06-17 00:30:22 -06:00
atm
auxdisplay
base Merge branch 'akpm' 2009-06-16 19:50:13 -07:00
block hd: stop defining MAJOR_NR 2009-06-18 09:56:20 +02:00
bluetooth Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2009-06-15 03:02:23 -07:00
cdrom block: Use accessor functions for queue limits 2009-05-22 23:22:54 +02:00
char Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2009-06-20 10:17:02 -07:00
clocksource Merge branches 'sh/pci-express-integration', 'sh/rsk-updates', 'sh/platform-updates' and 'sh/perf_counter' 2009-06-17 16:37:26 +09:00
connector trivial: Kconfig: .ko is normally not included in module names 2009-06-12 18:01:50 +02:00
cpufreq [CPUFREQ] Only set sampling_rate_max deprecated, sampling_rate_min is useful 2009-06-15 11:49:41 -04:00
cpuidle
crypto crypto: padlock-aes - work around Nano CPU errata in CBC mode 2009-06-18 19:31:09 +08:00
dca
dio
dma DMA: TXx9 Soc DMA Controller driver 2009-06-17 11:06:25 +01:00
edac edac: Kconfig: fix the meaning of EDAC abbreviation 2009-06-18 13:03:57 -07:00
eisa Merge branch 'akpm' 2009-06-16 19:50:13 -07:00
firewire Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6 2009-06-16 14:29:46 -07:00
firmware Pull for-2.6.31 into release 2009-06-17 09:35:24 -07:00
gpio gpio: driver for PrimeCell PL061 GPIO controller 2009-06-19 16:46:03 -07:00
gpu drm/i915: enable GEM on PAE. 2009-06-19 10:29:20 +10:00
hid Driver Core: usb: add nodename support for usb drivers. 2009-06-15 21:30:25 -07:00
hwmon Merge branch 'akpm' 2009-06-16 19:50:13 -07:00
i2c i2c: Fix stuck transaction on cpm-i2c driver 2009-06-22 01:43:32 +01:00
ide Merge branch 'for-2.6.31' of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6 2009-06-20 10:11:11 -07:00
idle i7300_idle: allow testing on i5000-series hardware w/o re-compile 2009-05-28 20:52:40 -04:00
ieee1394 Merge branch 'for-linus2' of git://git.kernel.org/pub/scm/linux/kernel/git/vegard/kmemcheck 2009-06-16 13:09:51 -07:00
ieee802154 ieee802154: fix kconfig bool/tristate muckup 2009-06-13 23:36:29 -07:00
infiniband infiniband: ehca: remove driver_data direct access of struct device 2009-06-15 21:30:27 -07:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2009-06-20 10:17:02 -07:00
isdn net: fix network drivers ndo_start_xmit() return values 2009-06-17 04:31:16 -07:00
leds
lguest Merge git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-lguest 2009-06-12 09:32:26 -07:00
macintosh Merge branch 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging 2009-06-16 11:29:17 -07:00
mca
md Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block 2009-06-19 17:43:04 -07:00
media soc-camera: unify i2c camera device platform data 2009-06-17 16:22:34 +09:00
memstick
message convert some DMA_nnBIT_MASK() callers 2009-06-19 16:46:06 -07:00
mfd Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2009-06-20 10:17:02 -07:00
misc gru: copyright fixes 2009-06-18 13:04:04 -07:00
mmc sdhci: remove needless double parenthesis 2009-06-21 21:01:00 +02:00
mtd Merge branch 'linux-next' of git://git.infradead.org/ubi-2.6 2009-06-17 09:48:30 -07:00
net Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2009-06-19 17:40:40 -07:00
nubus
of Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6 2009-06-15 09:40:05 -07:00
oprofile
parisc parisc: remove driver_data direct access of struct device 2009-06-15 21:30:28 -07:00
parport parport: remove driver_data direct access of struct device 2009-06-15 21:30:28 -07:00
pci Fix pci_claim_resource 2009-06-17 14:04:42 -07:00
pcmcia Merge branch 'akpm' 2009-06-16 19:50:13 -07:00
platform dell-laptop: fix rfkill conversion 2009-06-15 15:05:58 -04:00
pnp Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6 2009-06-12 18:09:18 -07:00
power
pps LinuxPPS: core support 2009-06-18 13:04:04 -07:00
ps3 drivers/ps3: Add missing annotations 2009-06-15 16:47:25 +10:00
rapidio rio: warn_unused_result warnings fix 2009-06-15 21:45:32 -05:00
regulator regulator/max1586: fix V3 gain calculation integer overflow 2009-06-15 11:18:27 +01:00
rtc rtc: make rtc_update_irq callable with irqs enabled 2009-06-19 16:46:05 -07:00
s390 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6 2009-06-18 14:07:15 -07:00
sbus openprom: Squelch useless GCC warning. 2009-06-16 04:56:57 -07:00
scsi Merge commit 'origin/master' into next 2009-06-18 11:16:55 +10:00
serial Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2009-06-19 17:40:40 -07:00
sh sh: intc: alloc_bootmem() -> kzalloc() conversion. 2009-06-12 01:34:12 +03:00
sn
spi spi_mpc8xxx: s/83xx/8xxx/g 2009-06-19 16:46:05 -07:00
ssb SSB: BCM47xx: Export ssb_watchdog_timer_set 2009-06-08 16:57:50 +01:00
staging Staging: comedi: fix build errors 2009-06-19 11:04:32 -07:00
tc
telephony
thermal thermal: remove driver_data direct access of struct device 2009-06-15 21:30:27 -07:00
uio
usb Merge commit 'origin/master' into next 2009-06-18 11:16:55 +10:00
uwb
video Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2009-06-19 17:40:40 -07:00
virtio virtio: enhance id_matching for virtio drivers 2009-06-12 22:16:40 +09:30
vlynq drivers: add support for the TI VLYNQ bus 2009-06-16 19:47:52 -07:00
w1 w1-gpio: add external pull-up enable callback 2009-06-18 13:03:58 -07:00
watchdog Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2009-06-19 17:40:40 -07:00
xen PM core: rename suspend and resume functions 2009-06-12 21:32:31 +02:00
zorro
Kconfig LinuxPPS: core support 2009-06-18 13:04:04 -07:00
Makefile LinuxPPS: core support 2009-06-18 13:04:04 -07:00