看板 LinuxDev 關於我們 聯絡資訊
在 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
askacis:disable_irq()裡面有一個用來紀錄的flag,呼叫的時候會++ 05/05 18:25
askacis:enable_irq()會檢查是否為0,若否則--;如果為0會印 05/05 18:34
askacis:enable_irq(xx) unbalance的訊息,不曉得你有發生嗎? 05/05 18:35
eleghost:沒有印出unbalance ....的訊息. 05/05 18:36
eleghost:請問您是在那個平台發生的呢? 05/05 18:37
askacis:你可以去看一下你那個版本kernel對於enable_irq的實做 05/05 18:40
askacis:有些版本會限定那個flag值一定要為1才會開中斷,若大於1 05/05 18:41
askacis:會繼續--;換言之如果你呼叫disable_irq兩次,這時的flag=2 05/05 18:42
eleghost:請問enable_irq只會跟哪版kernel有關吧? 05/05 18:42
eleghost:跟用哪個cpu solution會有關嗎? 05/05 18:43
askacis:卻只呼叫一次enable_irq,自然中斷就不會開了~ 05/05 18:46
eleghost:我現在只在trace LXR的kernel, 3.0.8版 05/05 18:47
askacis:那你找找enable_irq()這個function是怎麼寫的就知道了 05/05 18:48
askacis:我直覺是flag值這個問題啦~你可以參考看看 05/05 18:49
eleghost:ok, 我會check. 05/05 18:50
askacis:我用kernel 2.6.21 for ARM,你可以看一下irq.c 05/05 19:32
askacis:打錯XD...應該是 kernel_source/kernel/irq/manage.c 05/05 19:34
askacis:整理一下用回文的好了,推文看起來真亂XD 05/05 19:43