linux/drivers/i2c/busses
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
..
i2c-acorn.c [ARM] acorn,ebsa110,footbridge,integrator,sa1100: Convert asm/io.h to linux/io.h 2009-03-25 10:21:35 +00:00
i2c-ali15x3.c i2c: Timeouts off by 1 2009-05-05 08:39:24 +02:00
i2c-ali1535.c i2c: Timeouts off by 1 2009-05-05 08:39:24 +02:00
i2c-ali1563.c i2c: Delete many unused adapter IDs 2009-01-26 21:19:52 +01:00
i2c-amd756-s4882.c i2c: Use snprintf to set adapter names 2009-01-07 14:29:18 +01:00
i2c-amd756.c i2c: Timeouts off by 1 2009-05-05 08:39:24 +02:00
i2c-amd8111.c i2c: Timeouts reach -1 2009-02-24 19:19:48 +01:00
i2c-at91.c i2c: Use resource_size macro 2009-06-16 22:42:16 +01:00
i2c-au1550.c i2c: Use resource_size macro 2009-06-16 22:42:16 +01:00
i2c-bfin-twi.c i2c: Use resource_size macro 2009-06-16 22:42:16 +01:00
i2c-cpm.c i2c: Fix stuck transaction on cpm-i2c driver 2009-06-22 01:43:32 +01:00
i2c-davinci.c i2c-davinci: Fix timeout handling 2009-03-28 21:34:43 +01:00
i2c-elektor.c i2c: Delete many unused adapter IDs 2009-01-26 21:19:52 +01:00
i2c-gpio.c i2c: i2c_gpio: keep probe resident for hotplugged devices. 2008-07-28 12:40:44 +01:00
i2c-highlander.c i2c: Use resource_size macro 2009-06-16 22:42:16 +01:00
i2c-hydra.c i2c: Delete many unused adapter IDs 2009-01-26 21:19:52 +01:00
i2c-i801.c i2c: Timeouts off by 1 2009-05-05 08:39:24 +02:00
i2c-ibm_iic.c i2c: Fix confusing i2c-ibm_iic message 2009-06-04 08:59:24 -04:00
i2c-ibm_iic.h i2c-ibm_iic: Whitespace cleanup 2008-01-27 18:14:45 +01:00
i2c-imx.c i2c: imx: Make disable_delay a per-device variable 2009-04-07 10:23:34 +01:00
i2c-iop3xx.c i2c: Adapter timeout is in jiffies 2009-03-28 21:34:43 +01:00
i2c-iop3xx.h
i2c-isch.c i2c: Timeouts off by 1 2009-05-05 08:39:24 +02:00
i2c-ixp2000.c i2c: Make sure i2c_algo_bit_data.timeout is HZ-independent 2009-02-24 19:19:49 +01:00
i2c-mpc.c powerpc/5xxx: Add common mpc5xxx_get_bus_frequency() function 2009-06-17 00:30:22 -06:00
i2c-mv64xxx.c i2c: Use resource_size macro 2009-06-16 22:42:16 +01:00
i2c-nforce2-s4985.c i2c: Fix oops on bus multiplexer driver loading 2008-08-10 22:56:15 +02:00
i2c-nforce2.c i2c: Timeouts off by 1 2009-05-05 08:39:24 +02:00
i2c-ocores.c i2c: Use resource_size macro 2009-06-16 22:42:16 +01:00
i2c-omap.c i2c-omap: Fix build breaking typo cpu_is_omap_2430 2009-06-22 01:43:32 +01:00
i2c-parport-light.c i2c: Delete many unused adapter IDs 2009-01-26 21:19:52 +01:00
i2c-parport.c i2c: Delete many unused adapter IDs 2009-01-26 21:19:52 +01:00
i2c-parport.h i2c-parport: Add support for One For All remote JP1 interface 2007-02-13 22:09:02 +01:00
i2c-pasemi.c i2c: Let bus drivers add SPD to their class 2008-07-14 22:38:29 +02:00
i2c-pca-isa.c i2c-algo-pca: Use timeout for checking the state machine 2009-03-28 21:34:45 +01:00
i2c-pca-platform.c i2c: Use resource_size macro 2009-06-16 22:42:16 +01:00
i2c-piix4.c i2c-piix4: Add support for the Broadcom HT1100 chipset 2009-03-28 21:34:46 +01:00
i2c-pmcmsp.c i2c: Use resource_size macro 2009-06-16 22:42:16 +01:00
i2c-pnx.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
i2c-powermac.c i2c: Add missing KERN_* constants to printks 2009-03-28 21:34:42 +01:00
i2c-pxa.c i2c: Use resource_size macro 2009-06-16 22:42:16 +01:00
i2c-s3c2410.c i2c-s3c2410: use resource_size() 2009-06-16 22:42:16 +01:00
i2c-s6000.c i2c: xtensa s6000 i2c driver 2009-04-07 10:23:34 +01:00
i2c-s6000.h i2c: xtensa s6000 i2c driver 2009-04-07 10:23:34 +01:00
i2c-sh7760.c sh: clkfwk: module_clk -> peripheral_clk rename. 2009-05-13 16:59:40 +09:00
i2c-sh_mobile.c i2c: Get rid of remaining bus_id access 2009-01-07 14:29:16 +01:00
i2c-sibyte.c i2c: Delete many unused adapter IDs 2009-01-26 21:19:52 +01:00
i2c-simtec.c i2c: Fix platform driver hotplug/coldplug 2008-04-22 22:16:49 +02:00
i2c-sis96x.c i2c: Timeouts off by 1 2009-05-05 08:39:24 +02:00
i2c-sis630.c i2c: Timeouts off by 1 2009-05-05 08:39:24 +02:00
i2c-sis5595.c i2c: Timeouts off by 1 2009-05-05 08:39:24 +02:00
i2c-stu300.c i2c: ST DDC I2C U300 bus driver v3 2009-06-16 22:42:16 +01:00
i2c-stub.c i2c: Let bus drivers add SPD to their class 2008-07-14 22:38:29 +02:00
i2c-taos-evm.c i2c: Consistently reject unsupported transactions 2008-07-14 22:38:25 +02:00
i2c-tiny-usb.c i2c-tiny-usb: New VID/PID pair 2008-04-11 12:07:05 +02:00
i2c-versatile.c i2c: Use resource_size macro 2009-06-16 22:42:16 +01:00
i2c-via.c i2c: Delete many unused adapter IDs 2009-01-26 21:19:52 +01:00
i2c-viapro.c i2c-viapro: Add new PCI device ID for VX855 2009-06-15 18:01:49 +02:00
i2c-voodoo3.c i2c: Do not probe for TV chips on Voodoo3 adapters 2009-06-15 18:01:48 +02:00
Kconfig i2c-stu300: Make driver depend on MACH_U300 2009-06-16 22:42:17 +01:00
Makefile i2c: ST DDC I2C U300 bus driver v3 2009-06-16 22:42:16 +01:00
scx200_acb.c i2c: Delete many unused adapter IDs 2009-01-26 21:19:52 +01:00
scx200_i2c.c i2c: Make sure i2c_algo_bit_data.timeout is HZ-independent 2009-02-24 19:19:49 +01:00