[問題] request_irq的flag細節

看板LinuxDev作者 (有信心)時間8年前 (2016/06/21 20:08), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串1/1
我想請問一下關於 request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) 裡面的一些細節。 現在問題是我原本的device driver是使用request_threaded_irq 但是現在因為某些原因必須改成 request_irq 那這樣我原本的flag是 request_threaded_irq(i2c->irq, NULL, abc_irq_handler,IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT, "abc", abc); 就可以直接改成下面這樣嗎? request_irq(i2c->irq,abc_irq_handler,RQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT, "abc", abc); 主要有幾個問題? 1. 上面的改法正確嗎? 2. flag裡面有一個IRQF_SHARED, 這個是什麼狀況下用的? (看英文解釋沒什麼FU) 3. 我在網路上看到sample code request_irq(button_irqs[i].irq, buttons_interrupt, IRQF_DISABLED | IRQF_TRIGGER_RISING, button_irqs[i].name, NULL); 為什麼flag裡面要帶一個"IRQF_DISABLED" ? 這個有什麼用意嗎? thanks -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.205.229 ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1466510887.A.2EF.html

06/30 23:14, , 1F
SHARED 就是很多個裝置共用一個 IRQ
06/30 23:14, 1F

07/15 20:42, , 2F
1. 如果是 request_threaded_irq(irq, handler, NULL,...
07/15 20:42, 2F

07/15 20:43, , 3F
那改成 request_irq(irq, handler, ... 就沒錯.
07/15 20:43, 3F

07/15 21:01, , 4F
3. IRQF_DISABLED 查了一下, 似乎在 2.6.35 後就失去效用了?
07/15 21:01, 4F

07/15 21:02, , 5F
原來用途是設定 irq handler 處理時要 disable irq.
07/15 21:02, 5F

07/15 21:13, , 6F
整個 handle 期間都 disable 太久, handler 自行處理即可.
07/15 21:13, 6F

07/15 21:14, , 7F
然後 IRQF_DISABLED 從 4.1 起, 完全拿光光了.
07/15 21:14, 7F
文章代碼(AID): #1NQIudBl (LinuxDev)
文章代碼(AID): #1NQIudBl (LinuxDev)