+ -
当前位置:首页 → 问答吧 → request_irq的一个问题

request_irq的一个问题

时间:2005-09-20

来源:互联网

我将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,现在还不知道为什么会产生这么一个天文数字的中断。
代码:
/* drivers/serial/8250.c */
ret = request_irq(up->port.irq, serial8250_interrupt,
 irq_flags, "serial", i);
我想问的是request_irq注册的中断,是不是一定要有对应硬中断信号过来,对应的中断调用函数才会被执行(比如serial8250_interrupt),当然前提是除了request_irq()其他地方都没有调用serial8250_interrupt。

作者: guoys   发布时间: 2005-09-20

理论上,中断处理函数只在中断到来时调用

作者: rickxbx   发布时间: 2005-09-22

如果中断信号线是共享的话,就不是那么回事了

作者: bolunjia   发布时间: 2005-10-10

查查/proc/interrupts,看看是不是共享了

作者: mittermieier   发布时间: 2006-07-03

热门下载

更多