linux_dsm_epyc7002/drivers/media/video/cx88
Matthias Schwarzott 0e8bac9791 V4L/DVB (9357): cx88-dvb: Fix Oops in case i2c bus failed to register
There already is an report at kernel bugzilla about this issue:
http://bugzilla.kernel.org/show_bug.cgi?id=9455

When enabling extra checks for the i2c-bus of cx88 based cards by
loading i2c_algo_bit with bit_test=1 this may trigger an oops
when loading cx88_dvb.

This is caused by the extra check code that detects that the
sda-line is stuck high and thus does not register the i2c-bus.

cx88-dvb however does not check if the i2c-bus is valid and just
uses core->i2c_adap to attach dvb frontend modules.
This leads to an oops at the first call to i2c_transfer:

$ modprobe i2c_algo_bit bit_test=1
$ modprobe cx8802

cx88/2: cx2388x MPEG-TS Driver Manager version 0.0.6 loaded
cx88[0]: quirk: PCIPCI_NATOMA -- set TBFX
cx88[0]: subsystem: 0070:9202, board: Hauppauge Nova-S-Plus DVB-S [card=37,autodetected], frontend(s): 1
cx88[0]: TV tuner type 4, Radio tuner type -1
cx88[0]: SDA stuck high!
cx88[0]: i2c register FAILED
input: cx88 IR (Hauppauge Nova-S-Plus  as /class/input/input5
cx88[0]/2: cx2388x 8802 Driver Manager
cx88-mpeg driver manager 0000:00:10.2: enabling device (0154 -> 0156)
cx88-mpeg driver manager 0000:00:10.2: PCI INT A -> Link[LNKD] -> GSI 9 (level, low) -> IRQ 9
cx88[0]/2: found at 0000:00:10.2, rev: 5, irq: 9, latency: 64, mmio: 0xfb000000
cx8802_probe() allocating 1 frontend(s)
cx88/2: cx2388x dvb driver version 0.0.6 loaded
cx88/2: registering cx8802 driver, type: dvb access: shared
cx88[0]/2: subsystem: 0070:9202, board: Hauppauge Nova-S-Plus DVB-S [card=37]
cx88[0]/2: cx2388x based DVB/ATSC card
BUG: unable to handle kernel NULL pointer dereference at 00000000
IP: [<e084d4ef>] :i2c_core:i2c_transfer+0x1f/0x80
*pde = 00000000
Modules linked in: cx88_dvb(+) cx8802 cx88xx ir_common i2c_algo_bit tveeprom videobuf_dvb btcx_risc
mga drm ipv6 fscpos eeprom nfsd exportfs stv0299 b2c2_flexcop_pci b2c2_flexcop cx24123 s5h1420 ves1x93
dvb_ttpci dvb_core saa7146_vv saa7146 videobuf_dma_sg videobuf_core videodev v4l1_compat ttpci_eeprom
lirc_serial lirc_dev usbhid rtc uhci_hcd 8139too i2c_piix4 i2c_core usbcore evdev
Pid: 4249, comm: modprobe Not tainted (2.6.27-gentoo #3)
EIP: 0060:[<e084d4ef>] EFLAGS: 00010296 CPU: 0
EIP is at i2c_transfer+0x1f/0x80 [i2c_core]
EAX: 00000000 EBX: ffffffa1 ECX: 00000002 EDX: d6c71e3c
ESI: d80cd050 EDI: d8093c00 EBP: d6c71e20 ESP: d6c71e0c
DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2008-11-11 08:11:21 -02:00
..
cx88-alsa.c v4l-dvb: remove legacy checks to allow support for kernels < 2.6.10 2008-07-20 07:17:52 -03:00
cx88-blackbird.c V4L/DVB (9327): v4l: use video_device.num instead of minor in video%d 2008-10-21 14:31:37 -02:00
cx88-cards.c V4L/DVB (9333): cx88: Not all boards that requires cx88-mpeg has frontends 2008-10-21 14:31:59 -02:00
cx88-core.c V4L/DVB (9262): cx88: Change spurious buffer message into a debug only message 2008-10-17 17:28:03 -03:00
cx88-dvb.c V4L/DVB (9357): cx88-dvb: Fix Oops in case i2c bus failed to register 2008-11-11 08:11:21 -02:00
cx88-i2c.c V4L/DVB (9332): cx88: initial fix for analogue only compilation 2008-10-21 14:31:55 -02:00
cx88-input.c V4L/DVB (9223): MFE: Fix a number of bugs and some tidying up 2008-10-17 17:23:15 -03:00
cx88-mpeg.c V4L/DVB (9333): cx88: Not all boards that requires cx88-mpeg has frontends 2008-10-21 14:31:59 -02:00
cx88-reg.h V4L/DVB (6066): cx88-alsa: Change order of interrupt enabling, fix spurious IRQs 2007-10-09 22:05:55 -03:00
cx88-tvaudio.c V4L/DVB (9269): cx88: add I2S-ADC tvaudio method 2008-10-17 17:29:14 -03:00
cx88-vbi.c V4L/DVB (7094): static memory 2008-04-24 13:42:20 -03:00
cx88-video.c V4L/DVB (9327): v4l: use video_device.num instead of minor in video%d 2008-10-21 14:31:37 -02:00
cx88-vp3054-i2c.c v4l-dvb: remove legacy checks to allow support for kernels < 2.6.10 2008-07-20 07:17:52 -03:00
cx88-vp3054-i2c.h V4L/DVB (5629): Cx88: VP3054 support can't be a module when cx88 is compiled in 2007-07-18 14:23:11 -03:00
cx88.h V4L/DVB (9269): cx88: add I2S-ADC tvaudio method 2008-10-17 17:29:14 -03:00
Kconfig V4L/DVB (9026): Add support for ST STV0288 demodulator and cards with it. 2008-10-12 09:37:07 -02:00
Makefile V4L/DVB(7767): Move tuners to common/tuners 2008-04-29 18:41:37 -03:00