ifconfig eth0 up 出错

ele01 2011-11-21 11:50:47
目前在做双网卡移植,有一个网卡是好的,能够ping通路由器,而另一个网卡加载后,ID读取正常,但是在启用该设备时,也就是ifconfig eth0 up的时候,出现了oops信息,信息如下:


[root@Real210 /]# ifconfig eth0 up
BUG: soft lockup - CPU#0 stuck for 61s! [ifconfig:1211]
Modules linked in:

Pid: 1211, comm: ifconfig
CPU: 0 Not tainted (2.6.32.9 #77)
PC is at __do_softirq+0x68/0x204
LR is at __do_softirq+0x50/0x204
pc : [<c006b778>] lr : [<c006b760>] psr: 20000113
sp : ea1f3cb0 ip : ea1f3cb0 fp : ea1f3cec
r10: 60000013 r9 : c068ce00 r8 : 00000001
r7 : 00000002 r6 : 00000000 r5 : 00000202 r4 : ea1f2000
r3 : c068ce00 r2 : ea1f3c98 r1 : 00000000 r0 : 00000000
Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
Control: 10c5387d Table: 4a1f8019 DAC: 00000015

PC: 0xc006b6f8:
b6f8 e24cb004 e92d4000 ebff1a89 e3a00c01 ebffbf70 e89da800 e1a0c00d e92ddff0
b718 e24cb004 e24dd014 e92d4000 ebff1a80 eb0648a0 e59f31cc e0833300 e3a00c01
b738 e5935040 ebffbf63 e1a0300d e3c34d7f e3a0300a e50b3030 eb064896 e3c4403f
b758 e50b0034 eb064893 e59f3198 e3a06000 e0833300 e5836040 f1080080 e59f9184
b778 e3150001 e0869009 0a00004a e59f3178 e1a08146 e59f2174 e2881012 e5947004
b798 e593c004 e7920101 e35c0000 e2800001 e7820101 0a000012 e2872001 e5842004
b7b8 e593a010 e35a0000 0a000006 e1a00009 e59f1130 e1a0e00f e59af000 e5ba3004
b7d8 e3530000 eafffff7 e5943004 e2433001 e5843004 e5943000 e3130002 0a000000

LR: 0xc006b6e0:
b6e0 e89da818 e3a00801 ebffbf78 e89da818 e1a0c00d e92dd800 e24cb004 e92d4000
b700 ebff1a89 e3a00c01 ebffbf70 e89da800 e1a0c00d e92ddff0 e24cb004 e24dd014
b720 e92d4000 ebff1a80 eb0648a0 e59f31cc e0833300 e3a00c01 e5935040 ebffbf63
b740 e1a0300d e3c34d7f e3a0300a e50b3030 eb064896 e3c4403f e50b0034 eb064893
b760 e59f3198 e3a06000 e0833300 e5836040 f1080080 e59f9184 e3150001 e0869009
b780 0a00004a e59f3178 e1a08146 e59f2174 e2881012 e5947004 e593c004 e7920101
b7a0 e35c0000 e2800001 e7820101 0a000012 e2872001 e5842004 e593a010 e35a0000
b7c0 0a000006 e1a00009 e59f1130 e1a0e00f e59af000 e5ba3004 e3530000 eafffff7

SP: 0xea1f3c30:
3c30 0000003d ea1f3d18 00000002 00000104 ea1f3c64 ea1f3c50 c003107c c00a07cc
3c50 ffffffff f4000000 ea1f3cec ea1f3c68 c0031b88 c003100c 00000000 00000000
3c70 ea1f3c98 c068ce00 ea1f2000 00000202 00000000 00000002 00000001 c068ce00
3c90 60000013 ea1f3cec ea1f3cb0 ea1f3cb0 c006b760 c006b778 20000113 ffffffff
3cb0 ea8a0000 00000001 00000000 0000000a ea1f3cdc 00000027 00000000 00000018
3cd0 00000002 00000001 ea1f2000 60000013 ea1f3cfc ea1f3cf0 c006b96c c006b71c
3cf0 ea1f3d14 ea1f3d00 c0031080 c006b920 ffffffff f4000000 ea1f3d74 ea1f3d18
3d10 c0031b88 c003100c c05df0f8 60000013 ea8a0000 00000000 60000013 ea1419c0

IP: 0xea1f3c30:
3c30 0000003d ....
FP: 0xea1f3c6c:
.....
R2: 0xea1f3c18:
.....
[<c0033bc0>] (show_regs+0x0/0x58) from [<c009e030>] (softlockup_tick+0x124/0x174
)
r4:ea1f3c68 r3:00000002
[<c009df0c>] (softlockup_tick+0x0/0x174) from [<c0073ec0>] (run_local_timers+0x2
4/0x28)
[<c0073e9c>] (run_local_timers+0x0/0x28) from [<c0073f04>] (update_process_times
+0x40/0x60)
[<c0073ec4>] (update_process_times+0x0/0x60) from [<c008d370>] (tick_sched_timer
+0x98/0xcc)
r6:271ebaad r5:ea1f3c68 r4:c05dd990 r3:20000113
[<c008d2d8>] (tick_sched_timer+0x0/0xcc) from [<c0083ae4>] (__run_hrtimer+0x150/
0x21c)
r7:ea1f3bb8 r6:c05dd3b0 r5:c05dd3f0 r4:c05dd990
[<c0083994>] (__run_hrtimer+0x0/0x21c) from [<c0083d58>] (hrtimer_interrupt+0x1a
8/0x220)
[<c0083bb0>] (hrtimer_interrupt+0x0/0x220) from [<c0041b5c>] (s5p_tick_timer_int
errupt+0x54/0x64)
[<c0041b08>] (s5p_tick_timer_interrupt+0x0/0x64) from [<c009e76c>] (handle_IRQ_e
vent+0xb0/0x1e4)
[<c009e6bc>] (handle_IRQ_event+0x0/0x1e4) from [<c00a0884>] (handle_level_irq+0x
c4/0x138)
[<c00a07c0>] (handle_level_irq+0x0/0x138) from [<c003107c>] (asm_do_IRQ+0x7c/0x9
8)
r7:00000104 r6:00000002 r5:ea1f3d18 r4:0000003d
[<c0031000>] (asm_do_IRQ+0x0/0x98) from [<c0031b88>] (__irq_svc+0x48/0xc0)
Exception stack(0xea1f3c68 to 0xea1f3cb0)
3c60: 00000000 00000000 ea1f3c98 c068ce00 ea1f2000 00000202
3c80: 00000000 00000002 00000001 c068ce00 60000013 ea1f3cec ea1f3cb0 ea1f3cb0
3ca0: c006b760 c006b778 20000113 ffffffff
r5:f4000000 r4:ffffffff
[<c006b710>] (__do_softirq+0x0/0x204) from [<c006b96c>] (irq_exit+0x58/0xac)
[<c006b914>] (irq_exit+0x0/0xac) from [<c0031080>] (asm_do_IRQ+0x80/0x98)
[<c0031000>] (asm_do_IRQ+0x0/0x98) from [<c0031b88>] (__irq_svc+0x48/0xc0)
Exception stack(0xea1f3d18 to 0xea1f3d60)
3d00: c05df0f8 60000013
3d20: ea8a0000 00000000 60000013 ea1419c0 00000027 c05df0f8 c05df0dc 00000000
3d40: 60000013 ea1f3d74 ea1f3d60 ea1f3d60 c041b37c c041b380 60000013 ffffffff
r5:f4000000 r4:ffffffff
[<c041b360>] (_spin_unlock_irqrestore+0x0/0x48) from [<c009f3cc>] (__setup_irq+0
x248/0x314)
r4:c05df0bc r3:00000000
[<c009f184>] (__setup_irq+0x0/0x314) from [<c009f628>] (request_threaded_irq+0x1
90/0x1e8)
[<c009f498>] (request_threaded_irq+0x0/0x1e8) from [<c02df670>] (dm9000_open+0x6
8/0xd4)
[<c02df608>] (dm9000_open+0x0/0xd4) from [<c0375e68>] (dev_open+0xc0/0x11c)
r6:00001002 r5:c04420f0 r4:ea937800
[<c0375da8>] (dev_open+0x0/0x11c) from [<c0375410>] (dev_change_flags+0x9c/0x16c
)
r5:00001043 r4:ea937800
[<c0375374>] (dev_change_flags+0x0/0x16c) from [<c03b7fa8>] (devinet_ioctl+0x398
/0x77c)
r7:00000001 r6:ea937800 r5:00000000 r4:00008914
[<c03b7c10>] (devinet_ioctl+0x0/0x77c) from [<c03b9674>] (inet_ioctl+0xe4/0x114)

[<c03b9590>] (inet_ioctl+0x0/0x114) from [<c0363174>] (sock_ioctl+0x204/0x254)
r4:00008914 r3:c04699e0
[<c0362f70>] (sock_ioctl+0x0/0x254) from [<c00f85fc>] (vfs_ioctl+0x3c/0x9c)
r6:bec12a88 r5:c0362f70 r4:ea1a5f00 r3:0000c000
[<c00f85c0>] (vfs_ioctl+0x0/0x9c) from [<c00f8cb4>] (do_vfs_ioctl+0x558/0x5a0)
r7:00000003 r6:e9403438 r5:ea1a5f00 r4:bec12a88
[<c00f875c>] (do_vfs_ioctl+0x0/0x5a0) from [<c00f8d44>] (sys_ioctl+0x48/0x6c)
r9:ea1f2000 r8:c00322ac r7:00000003 r6:00008914 r5:bec12a88
r4:ea1a5f00
[<c00f8cfc>] (sys_ioctl+0x0/0x6c) from [<c0032080>] (ret_fast_syscall+0x0/0x2c)
r7:00000036 r6:bec12c74 r5:00000004 r4:00096be7


有没有高手能给点思路? 驱动中我就只修改了寄存器读取的地址,这个是在resource中修改的,然后在platform_driver下中对应上,所以dm9000.c这个文件都没有很大的改动。

求助求助~~~~~~~~~

...全文
619 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
deep_pro 2011-11-21
  • 打赏
  • 举报
回复
问题出在dm9000_open ->request_irq 这里出了问题

首先要明确你这两块dm9000是各有各的中断号,还是共享中断
如果是分别各有中断号,在resource里修改即可

如果是共享中断,dm9000_open 原来的
if (request_irq(dev->irq, dm9000_interrupt, irqflags, dev->name, dev))
因为不知道你的版本 ,看是否有 irqflags |= IRQF_SHARED; 这句话,额米有则自己加

ele01 2011-11-21
  • 打赏
  • 举报
回复
好吧。。果然是这个中断线的问题,重新飞了一下就ok了。结贴。
ele01 2011-11-21
  • 打赏
  • 举报
回复
额 resource是我自己写的,所以不会有错的,里面各是各的中断号。刚检查了下open 里面的确已经是IRQF_SHARED了,现在grep的结果是就只有我用了IRQ7这个中断,刚看了下硬件连接,发现这个线竟然飞到别的地方去了,先改下硬件先。

估计也就是这个硬件上的问题了,晕。。。。
dongjiawei316 2011-11-21
  • 打赏
  • 举报
回复
dm9000 的驱动里默认的中断就是IRQF_SHARED的啊!你还是检查resource吧!
ele01 2011-11-21
  • 打赏
  • 举报
回复
hi deep_pro

中断用的是各自的,内核版本是2.6.32,平台是三星的s5pv210.

刚我把那个不能用的网卡的中断号修改成可以用的后,ifconfig命令正常,插入网线灯也会闪,说明的确是中断号的原因。但是奇怪的是
中断一个用的是 EINT_IRQ9
一个用的是 EINT_IRQ7

用EINT_IRQ7就会死掉,难道EINT_IRQ7 在其他的地方被别人给申请了?我grep一下先。
ele01 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 deep_pro 的回复:]
问题出在dm9000_open ->request_irq 这里出了问题

首先要明确你这两块dm9000是各有各的中断号,还是共享中断
如果是分别各有中断号,在resource里修改即可

如果是共享中断,dm9000_open 原来的
if (request_irq(dev->irq, dm9000_interrupt, irqflags, dev->name, dev))
因为……
[/Quote]


嘿嘿 感谢你的回复 马上去试试~~

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧