作者musicguitar ()
看板LinuxDev
標題Re: [問題] 關於interrupt是否需要lock的問題
時間Sat Feb 20 18:49:14 2010
※ 引述《roylee17 (把我id還我阿......)》之銘言:
: ※ 引述《musicguitar ()》之銘言:
: : 想請問.
: : 如果使用一個share的interrupt.也就是除了我自己的裝置會觸發這個中斷
: : 其他裝置也會觸發.
: : (實際上這個是X86裡的IRQ9.ACPI interrupt,我需要知道GPE0 觸發訊號)
: : 我是否需要做spin lock或是semaphore去做lock的動作.
: 需要 lock 與否,是取決你要存取的資料是否共享
: 而不是因為 irq 是不是共用
: : 因為我在kernel 2.6.32使用這兩個lock都會出現kernel error(類似kernel bug)的訊息.
: : 我的ISR所做的事是去動作I2C.讀取device的暫存器.
: ^^^^^^^^^^^^^^^^^^
: 除了你的 ISR 外,有其他的 code flow 會存取這個暫存器嗎?
抱歉!!
剛剛確認一下我的程式.更新兩個訊息.
1. 我的kernel是2.6.31
2. ISR的動作
因為是透過SCI發出的中斷.
ISR中會做的事是讀取GPE暫存器.確認是否是我要擷取的interrup.
基本上.這個站存器只有我去讀取.如果是我的訊號.會將interrupt flag清掉.
沒有其他code flow會處裡這個暫存器了.
: 另外,ISR 中,不適用 semaphore
: 或是其他需要 process context 的同步機制
不好意思.semaphore跟spinlock印象已經有點久遠了!(好像還有mutex)
不太記得這兩個用法上的差異.什麼時候該用哪種.
我會再去查查資料.
可以請問.ISR為何不適用semaphore???
: spin lock 應該是沒問題的(需不需要是另外一回事)
初始化沒問題.我都有做到.
: 如果你的 lock 是自己建的,記得初始化
: 如果是 lock 系統中現有的某個 lock,
: 那要檢查一下整個 lock 的使用情況,
: 你有沒有 double lock/unlock
: error message 可以貼上來
error message要等我一下.手邊目前沒辦法得到!!
: : 另外.我曾在kernel 2.6.29中.semaphore不會出現error.只有spin lock會!
: : 所以我覺得奇怪.ISR中.到底需不需要再做lock的動作.
: : 因為我一lock就當機了!!!所以我現在是把lock都拿掉了!!
: : 不知道會不會出問題...
另外一個問題.在kernel 2.6.31中多出一個lock的方式.
DECLARE_RWSEM(isrlock);
down_write(&isrlock);
up_write(&isrlock);
不知跟semaphore有沒有差別?
我之前有用過mutex, spinlock,跟這個semaphore.
使用這三種都會當機!!!出現error!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.26.212
※ 編輯: musicguitar 來自: 61.231.26.212 (02/20 18:51)
※ 編輯: musicguitar 來自: 61.231.26.212 (02/20 18:54)
→ james732:semaphore會造成context switch, spin lock不會 02/20 19:00
→ james732:而ISR中,不應該發生context switch,所以不該用sem 02/20 19:01
→ richliu:你的 ISR 有沒有先 disable IRQ ? 02/21 16:37
→ musicguitar:對!!我忘記disable了.是否disable就不需要lock? 02/22 23:25
→ richliu:你是 SMP 就要 lock, 如果不是就可以不要 lock 02/25 18:28