※ 引述《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 會存取這個暫存器嗎?
另外,ISR 中,不適用 semaphore
或是其他需要 process context 的同步機制
spin lock 應該是沒問題的(需不需要是另外一回事)
如果你的 lock 是自己建的,記得初始化
如果是 lock 系統中現有的某個 lock,
那要檢查一下整個 lock 的使用情況,
你有沒有 double lock/unlock
error message 可以貼上來
: 另外.我曾在kernel 2.6.29中.semaphore不會出現error.只有spin lock會!
: 所以我覺得奇怪.ISR中.到底需不需要再做lock的動作.
: 因為我一lock就當機了!!!所以我現在是把lock都拿掉了!!
: 不知道會不會出問題...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.145.90