Hi,
I wanted to know the correct behaviour of usb_reset_device() and tried to
use it in usbmouse.c through an ioctl and it results in oops (oops message
attached in the mail). Kernel is 2.4.18-4.
On analyzing the oops message, the assembly code coming is :
000011c0 <usb_submit_urb>:
11c0: 8b 54 24 04 mov 0x4(%esp,1),%edx
11c4: 85 d2 test %edx,%edx
11c6: 74 1e je 11e6 <usb_submit_urb+0x26>
11c8: 8b 42 14 mov 0x14(%edx),%eax
11cb: 85 c0 test %eax,%eax
11cd: 74 17 je 11e6 <usb_submit_urb+0x26>
11cf: 8b 80 bc 00 00 00 mov 0xbc(%eax),%eax
11d5: 85 c0 test %eax,%eax
11d7: 74 0d je 11e6 <usb_submit_urb+0x26>
11d9: 8b 40 18 mov 0x18(%eax),%eax
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11dc: 85 c0 test %eax,%eax
11de: 74 06 je 11e6 <usb_submit_urb+0x26>
The corresponding source code of usb_submit_urb() :
int usb_submit_urb(urb_t *urb)
{
if (urb && urb->dev && urb->dev->bus && urb->dev->bus->op)
^^^^^^^^^^^^^^^^^^
return urb->dev->bus->op->submit_urb(urb);
else
return -ENODEV;
}
It seems that the usb_bus structure is getting corrupted somewhere and
while accesing the 'op' member, it results in segmentation violation.
Is it a known problem or should it be debugged further? Has anyone used
usb_reset_device()?
Thanks,
Manoj
Unable to handle kernel paging request at virtual address 3d4c5664
printing eip:
c01fbc09
*pde = 00000000
Oops: 0000
CPU: 0
EIP: 0010:[<c01fbc09>] Not tainted
EFLAGS: 00010202
EIP is at (2.4.18-b-2.0)
eax: 3d4c564c ebx: c11f6a00 ecx: c60abe98 edx: c774ae80
esi: 0000012c edi: c60abe94 ebp: c60aa000 esp: c60abe88
ds: 0018 es: 0018 ss: 0018
Process a.out (pid: 916, stackpage=c60ab000)
Stack: c01fbcf2 c774ae80 c60abea4 00000000 c60abeac c60abeac 00000000 00000000
c60aa000 c60abe98 c60abe98 c11f6a00 84000000 c656aa80 00000000 c01fbe59
c774ae80 0000012c c60abed4 00000246 00000000 c656aa80 0000012c c11f6a00
Call Trace: [<c01fbcf2>]
[<c01fbe59>]
[<c01fbef4>]
[<c01fcd21>]
[<c01ff956>]
[<c0126457>]
[<c013578d>]
[<c811259a>]
[<c0142b77>]
[<c0108903>]
Code: 8b 40 18 85 c0 74 06 52 ff 50 0c 5a c3 b8 ed ff ff ff c3 8d
<7>hub.c: port 1, portstatus 303, change 0, 1.5 Mb/s
hub.c: port 1, portstatus 303, change 0, 1.5 Mb/s
hub.c: port 1, portstatus 303, change 0, 1.5 Mb/s
hub.c: port 1, portstatus 303, change 0, 1.5 Mb/s