作者eleghost (eleghost)
看板LinuxDev
标题[问题] enable_irq / disable balance.
时间Sat May 5 17:08:33 2012
在 arm 平台环境.
请问 enable_irq / disable_irq是否一定要平衡?
意思是说如果disable_irq一次, 可用enable_irq
重新唤起irq.
但如果今日调用disable_irq两次, 但只enable_irq一次
则无法唤起. 一定要在调用一次enable_irq才能使
irq工作.
这是kernel设定吗? 可以改变吗? thanks.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.47.118.40
1F:推 askacis:disable_irq()里面有一个用来纪录的flag,呼叫的时候会++ 05/05 18:25
2F:→ askacis:enable_irq()会检查是否为0,若否则--;如果为0会印 05/05 18:34
3F:→ askacis:enable_irq(xx) unbalance的讯息,不晓得你有发生吗? 05/05 18:35
4F:→ eleghost:没有印出unbalance ....的讯息. 05/05 18:36
5F:→ eleghost:请问您是在那个平台发生的呢? 05/05 18:37
6F:→ askacis:你可以去看一下你那个版本kernel对於enable_irq的实做 05/05 18:40
7F:→ askacis:有些版本会限定那个flag值一定要为1才会开中断,若大於1 05/05 18:41
8F:→ askacis:会继续--;换言之如果你呼叫disable_irq两次,这时的flag=2 05/05 18:42
9F:→ eleghost:请问enable_irq只会跟哪版kernel有关吧? 05/05 18:42
10F:→ eleghost:跟用哪个cpu solution会有关吗? 05/05 18:43
11F:→ askacis:却只呼叫一次enable_irq,自然中断就不会开了~ 05/05 18:46
12F:→ eleghost:我现在只在trace LXR的kernel, 3.0.8版 05/05 18:47
13F:推 askacis:那你找找enable_irq()这个function是怎麽写的就知道了 05/05 18:48
14F:→ askacis:我直觉是flag值这个问题啦~你可以参考看看 05/05 18:49
15F:→ eleghost:ok, 我会check. 05/05 18:50
16F:推 askacis:我用kernel 2.6.21 for ARM,你可以看一下irq.c 05/05 19:32
17F:→ askacis:打错XD...应该是 kernel_source/kernel/irq/manage.c 05/05 19:34
18F:→ askacis:整理一下用回文的好了,推文看起来真乱XD 05/05 19:43