LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3445|回复: 3

request_irq的一个问题

[复制链接]
发表于 2005-9-19 21:30:11 | 显示全部楼层 |阅读模式
我将2.6.12一直到一块powerpc 405的板子上,但在启动串口终端时出错了。
irq 20: nobody cared!
Call trace:
[a0005d98] dump_stack+0x18/0x28
[a0033b58] __report_bad_irq+0x34/0xac
[a0033ca0] note_interrupt+0x98/0xd4
[a0033694] __do_IRQ+0x138/0x13c
[a0004638] do_IRQ+0x50/0x98
[a0003448] ret_from_except+0x0/0x18
[a003394c] setup_irq+0xf4/0x120
[a0033af4] request_irq+0x98/0xc8
[a00eb010] serial_link_irq_chain+0xc0/0xdc
[a00eb4d4] serial8250_startup+0x1dc/0x344
[a00e66f0] uart_startup+0xb8/0x1b0
[a00e8960] uart_open+0xfc/0x18c
[a00d3918] tty_open+0x24c/0x340
[a005dbe0] chrdev_open+0xb8/0x13c
[a0052650] dentry_open+0x128/0x1d8
handlers:
[<a00eadcc>] (serial8250_interrupt+0x0/0xfc)

我跟踪了一下,发现这个错误的发生是因为在极短的时间内(可能不到一秒),serial8250_interrupt被调用了10万次,而且这10万次serial8250_interrupt的返回都不是IRQ_HANDLED,现在还不知道为什么会产生这么一个天文数字的中断。

  1. /* drivers/serial/8250.c */
  2. ret = request_irq(up->port.irq, serial8250_interrupt,
  3.                                   irq_flags, "serial", i);

复制代码

我想问的是request_irq注册的中断,是不是一定要有对应硬中断信号过来,对应的中断调用函数才会被执行(比如serial8250_interrupt),当然前提是除了request_irq()其他地方都没有调用serial8250_interrupt。
发表于 2005-9-22 12:31:44 | 显示全部楼层
理论上,中断处理函数只在中断到来时调用
回复 支持 反对

使用道具 举报

发表于 2005-10-10 18:13:33 | 显示全部楼层
如果中断信号线是共享的话,就不是那么回事了
回复 支持 反对

使用道具 举报

发表于 2006-7-3 18:30:45 | 显示全部楼层
查查/proc/interrupts,看看是不是共享了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表