Re: Kernel oops with em28xx device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 2009-08-23 at 02:32 +0200, Fau wrote:
> Greetings,
> I have an USB TV adapter identified as Hauppauge WinTV HVR 900 (R2) (card=18)
> and I'm using Fedora 11 with linux kernel vanilla 2.6.30.5 (the last
> stable as writing).
> 
> Following the manual at http://www.linuxtv.org/wiki/index.php/Em28xx_devices
> i've extracted and copied xc3028-v27.fw in /lib/firware then i
> compiled (make/make install) a freshly cloned v4l-dvb
> 
> Now when the device is plugged there is a kernel oops, I'm missing
> something or is it a bug?
> In attachment the relevant part of dmesg,
> thank you in advance for any help,
> 
> --
> Fab

The oops was in i2c_master_send().  With my ancient kernel that code
looks like:

int i2c_master_send(struct i2c_client *client,const char *buf ,int count)
{       
        int ret;
        struct i2c_adapter *adap=client->adapter;
        struct i2c_msg msg;             
        
        msg.addr = client->addr;
        msg.flags = client->flags & I2C_M_TEN;
        msg.len = count;
        msg.buf = (char *)buf;
....


The code in your dump disassembles to this:

ffffffdf <.data>:
ffdf:	f0 83 e0 10          	lock and $0x10,%eax
ffe3:	83 c8 01             	or     $0x1,%eax
ffe6:	66 89 45 ee          	mov    %ax,-0x12(%ebp)
ffea:	89 f0                	mov    %esi,%eax
ffec:	e8 d7 f6 ff ff       	call   0xfffff6c8
fff1:	83 f8 01             	cmp    $0x1,%eax
fff4:	0f 45 d8             	cmovne %eax,%ebx
fff7:	83 c4 0c             	add    $0xc,%esp
fffa:	89 d8                	mov    %ebx,%eax
fffc:	5b                   	pop    %ebx
fffd:	5e                   	pop    %esi
fffe:	5d                   	pop    %ebp
ffff:	c3                   	ret    
   0:	55                   	push   %ebp           Beginning of i2c_master_send()
   1:	89 e5                	mov    %esp,%ebp
   3:	56                   	push   %esi
   4:	53                   	push   %ebx
   5:	89 cb                	mov    %ecx,%ebx
   7:	83 ec 0c             	sub    $0xc,%esp        struct i2c_msg msg;
   a:	66 8b 48 02          	mov    0x2(%eax),%cx    msg.addr = client->addr <------------ client %eax is NULL
   e:	8b 70 18             	mov    0x18(%eax),%esi	struct i2c_adapter *adap=client->adapter;
  11:	66 89 4d ec          	mov    %cx,-0x14(%ebp)
  15:	8b 00                	mov    (%eax),%eax      msg.flags = client->flags ...
  17:	b9 01 00 00 00       	mov    $0x1,%ecx
  1c:	89 55 f4             	mov    %edx,-0xc(%ebp)

So client is NULL when calling i2c_master_send().

[  232.702984] EIP: 0060:[<c1267324>] EFLAGS: 00010282 CPU: 0
[  232.702988] EIP is at i2c_master_send+0xa/0x43
[  232.702992] EAX: 00000000 EBX: 00000002 ECX: 00000002 EDX: f653bcfe

[  232.703006] Call Trace:
[  232.703006]  [<fa36af5e>] ? em28xx_write_regs+0x1a/0x4c [em28xx]
[  232.703006]  [<fa38313f>] ? tvp5150_write+0x47/0x6f [tvp5150]
[  232.703006]  [<fa38367e>] ? tvp5150_selmux+0x67/0xac [tvp5150]
[  232.703006]  [<fa3836c3>] ? tvp5150_s_routing+0x0/0x12 [tvp5150]
[  232.703006]  [<fa3836d1>] ? tvp5150_s_routing+0xe/0x12 [tvp5150]
[  232.703006]  [<fa36a8f7>] ? em28xx_wake_i2c+0x6b/0xaa [em28xx]
[  232.703006]  [<fa36a734>] ? em28xx_usb_probe+0x6a3/0x7fb [em28xx]
[  232.703006]  [<c123abed>] ? usb_probe_interface+0x110/0x156


I don't see how em28xx_write_regs() can possibly start an I2C
transaction, so it must start when em28xx_wake_i2c() calls

   v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
                        INPUT(dev->ctl_input)->vmux, 0, 0);

tvp5150_write() fetches the i2c_client pointer from the v4l2_subdev data
and it is NULL.  Which is odd, because tvp5150_probe() sets the client
data properly as evinced by this message:

	[  231.441378] tvp5150 1-005c: chip found @ 0xb8 (em28xx #0)

I find the apparent re-entrance into the tvp5150_s_routing function
above strange.

Well, I can see what's broken, but not why or how.  Time to turn on
tvp5150 debugging....


Regards,
Andy

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux