作者jack58 (有信心)
看板LinuxDev
标题[问题] request_irq的flag细节
时间Tue Jun 21 20:08:03 2016
我想请问一下关於
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://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1466510887.A.2EF.html
1F:→ wens: SHARED 就是很多个装置共用一个 IRQ 06/30 23:14
2F:推 yvb: 1. 如果是 request_threaded_irq(irq, handler, NULL,... 07/15 20:42
3F:→ yvb: 那改成 request_irq(irq, handler, ... 就没错. 07/15 20:43
4F:→ yvb: 3. IRQF_DISABLED 查了一下, 似乎在 2.6.35 後就失去效用了? 07/15 21:01
5F:→ yvb: 原来用途是设定 irq handler 处理时要 disable irq. 07/15 21:02
6F:→ yvb: 整个 handle 期间都 disable 太久, handler 自行处理即可. 07/15 21:13
7F:→ yvb: 然後 IRQF_DISABLED 从 4.1 起, 完全拿光光了. 07/15 21:14