forked from Minki/linux
dc1972d027
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> |
||
---|---|---|
.. | ||
i2c-acorn.c | ||
i2c-ali15x3.c | ||
i2c-ali1535.c | ||
i2c-ali1563.c | ||
i2c-amd756-s4882.c | ||
i2c-amd756.c | ||
i2c-amd8111.c | ||
i2c-at91.c | ||
i2c-au1550.c | ||
i2c-bfin-twi.c | ||
i2c-cpm.c | ||
i2c-davinci.c | ||
i2c-elektor.c | ||
i2c-gpio.c | ||
i2c-highlander.c | ||
i2c-hydra.c | ||
i2c-i801.c | ||
i2c-ibm_iic.c | ||
i2c-ibm_iic.h | ||
i2c-imx.c | ||
i2c-iop3xx.c | ||
i2c-iop3xx.h | ||
i2c-isch.c | ||
i2c-ixp2000.c | ||
i2c-mpc.c | ||
i2c-mv64xxx.c | ||
i2c-nforce2-s4985.c | ||
i2c-nforce2.c | ||
i2c-ocores.c | ||
i2c-omap.c | ||
i2c-parport-light.c | ||
i2c-parport.c | ||
i2c-parport.h | ||
i2c-pasemi.c | ||
i2c-pca-isa.c | ||
i2c-pca-platform.c | ||
i2c-piix4.c | ||
i2c-pmcmsp.c | ||
i2c-pnx.c | ||
i2c-powermac.c | ||
i2c-pxa.c | ||
i2c-s3c2410.c | ||
i2c-s6000.c | ||
i2c-s6000.h | ||
i2c-sh7760.c | ||
i2c-sh_mobile.c | ||
i2c-sibyte.c | ||
i2c-simtec.c | ||
i2c-sis96x.c | ||
i2c-sis630.c | ||
i2c-sis5595.c | ||
i2c-stu300.c | ||
i2c-stub.c | ||
i2c-taos-evm.c | ||
i2c-tiny-usb.c | ||
i2c-versatile.c | ||
i2c-via.c | ||
i2c-viapro.c | ||
i2c-voodoo3.c | ||
Kconfig | ||
Makefile | ||
scx200_acb.c | ||
scx200_i2c.c |