作者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