Hi, I am working on donut/2.6.29 kernel release and getting the following crash while disconnecting the data call.
<6>[ 253.744488] rmnet_stop() <0>[ 262.856377] BUG: spinlock lockup on CPU#0, er.ServerThread/1006, cc9f7b04 <4>[ 262.856443] [<c003015c>] (dump_stack+0x0/0x14) from [<c017f1ec>] (_raw_spin_lock+0xf4/0x130) <4>[ 262.856605] [<c017f0f8>] (_raw_spin_lock+0x0/0x130) from [<c0302874>] (_spin_lock_bh+0x54/0x5c) <4>[ 262.856742] [<c0302820>] (_spin_lock_bh+0x0/0x5c) from [<c029dda8>] (inet_unhash+0x68/0xac) <4>[ 262.856872] r5:cc9f7b04 r4:cbb9e5c0 <4>[ 262.856935] [<c029dd40>] (inet_unhash+0x0/0xac) from [<c02a0c60>] (tcp_set_state+0xe8/0x170) <4>[ 262.857063] r5:cbb9e5c0 r4:cbcf0000 <4>[ 262.857125] [<c02a0b78>] (tcp_set_state+0x0/0x170) from [<c02a0d34>] (tcp_done+0x4c/0x8c) <4>[ 262.857247] r7:c08ffb04 r6:000006f7 r5:cbb9e5c8 r4:cbb9e5c0 <4>[ 262.857350] [<c02a0ce8>] (tcp_done+0x0/0x8c) from [<c02b2344>] (tcp_v4_nuke_addr+0x8c/0xd0) <4>[ 262.857472] r4:cbb9e5c0 <4>[ 262.857513] [<c02b22b8>] (tcp_v4_nuke_addr+0x0/0xd0) from [<c02be234>] (devinet_ioctl+0x6d8/0x788) <4>[ 262.857655] [<c02bdb5c>] (devinet_ioctl+0x0/0x788) from [<c02becb0>] (inet_ioctl+0xcc/0xfc) <4>[ 262.857782] [<c02bebe4>] (inet_ioctl+0x0/0xfc) from [<c026e2fc>] (sock_ioctl+0x1e8/0x248) <4>[ 262.857935] [<c026e114>] (sock_ioctl+0x0/0x248) from [<c00e1800>] (vfs_ioctl+0x38/0x98) <4>[ 262.858075] r6:45583d4c r5:00008939 r4:c91f8c80 <4>[ 262.858158] [<c00e17c8>] (vfs_ioctl+0x0/0x98) from [<c00e1e6c>] (do_vfs_ioctl+0x514/0x568) <4>[ 262.858283] r6:45583d4c r5:cc247120 r4:c91f8c80 <4>[ 262.858368] [<c00e1958>] (do_vfs_ioctl+0x0/0x568) from [<c00e1f00>] (sys_ioctl+0x40/0x64) <4>[ 262.858492] r9:cbcf0000 r8:c002bfa8 r7:c91f8c80 r6:00008939 r5:45583d4c <4>[ 262.858607] r4:00000045 <4>[ 262.858650] [<c00e1ec0>] (sys_ioctl+0x0/0x64) from [<c002be00>] (ret_fast_syscall+0x0/0x2c) <4>[ 262.858773] r7:00000036 r6:45583d4c r5:45583d5c r4:adb040c8 Following is my analysis :- While disabling the data call, android frameworks calls the function ifc_reset_connections() i.e SIOCKILLADDR ioctl. The crash occurs while processing the SIOCKILLADDR ioctl in kernel because it tries to take the same lock two times without releasing the earlier, one at tcp_v4_nuke_addr() and second at inet_unhash() function (when sk_state != TCP_LISTEN). This seems to be spin lock recursion problem. There are changes done in the locking mechanism as part of the 2.6.29. earlier it used to take the read/write lock in 2.6.27 but those are replaced by spin locks in 2.6.29. tcp_v4_nuke_addr() function in the kernel/net/ipv4/tcp_ipv4.c inet_unhash function in the kernel/net/ipv4/inet_hashtables.c I have printed the lock address at both of the above function. <6>[ 92.246526] rmnet_stop() <0>[ 92.301602] ----- in tcp_v4_nuke_addr, lock=CBE12658 <0>[ 92.301602] ----- in inet_unhash, lock=CBE12658 It seems to be bug in the 2.6.29 kernel implementation of SIOCKILLADDR ioctl. Does someone aware of this issue? Thanks, -Shirish --~--~---------~--~----~------------~-------~--~----~ unsubscribe: android-kernel+unsubscr...@googlegroups.com website: http://groups.google.com/group/android-kernel -~----------~----~----~----~------~----~------~--~---