[英]Problem with IRQ handler: Flags mismatch irq
我正在使用線程 irq 實現一個中斷處理模塊。 我正面臨這個錯誤:
1983.150961] Shut down eMMC app module init.
[ 1983.151115] genirq: Flags mismatch irq 49. 00000004 (eMMC_power_shutdown_irq_
handler) vs. 00000004 (xuartps)
fio@uz3cg-dgw:~$ (edited)
我選擇的標志是 #define IRQF_TRIGGER_HIGH 0x00000004 並在這種情況下分配給 IRQ 編號 49。
這是我的代碼:
static int __init shutdownemmc_module_init(void)
{
printk("Shut down eMMC app module init. ");
if (request_threaded_irq( IRQ_NO, //IRQ number
(void *) emmc_irq_handler, //IRQ handler (Top half)
emmc_interrupt_thread_fn, //IRQ Thread handler (Bottom half).When the handler function returns IRQ_WAKE_THREAD
IRQF_TRIGGER_HIGH, //Handler will be called in raising edge
"eMMC_power_shutdown_irq_handler", //used to identify the device name using this IRQ
(void *)(emmc_irq_handler))) //device id for shared IRQ
{
pr_err("Cannot register IRQ ");
pr_err(" EIO %d , EINVAL %d\n", EIO, EINVAL);
return 0;
}
pr_info("Interrupt handler...Done!!!\n");
return 0;
}
有人可以解釋什么是 Flags mismatch irq 問題以及我如何解決這個問題? 謝謝你,安
這是因為“xuartps”已經請求了IRQ號並且沒有請求共享它。
摘自“kernel/irq/manage.c”中的__setup_irq()
:
/*
* If nobody did set the configuration before, inherit
* the one provided by the requester.
*/
if (irqd_trigger_type_was_set(&desc->irq_data)) {
oldtype = irqd_get_trigger_type(&desc->irq_data);
} else {
oldtype = new->flags & IRQF_TRIGGER_MASK;
irqd_set_trigger_type(&desc->irq_data, oldtype);
}
if (!((old->flags & new->flags) & IRQF_SHARED) ||
(oldtype != (new->flags & IRQF_TRIGGER_MASK)) ||
((old->flags ^ new->flags) & IRQF_ONESHOT))
goto mismatch;
在上面, old
是由“xuartps”設置的現有處理程序。 new
是由您的代碼設置的新處理程序。 為了共享 IRQ,上述條件之一是舊處理程序和新處理程序都需要使用IRQF_SHARED
標志請求 IRQ。 但是,如果底層中斷應該是可共享的,驅動程序應該只設置IRQF_SHARED
; 例如:所有 PCI 中斷都是可共享的,並且 PCI 設備的驅動程序應該請求設置了IRQF_SHARED
中斷。
mismatch:
if (!(new->flags & IRQF_PROBE_SHARED)) {
pr_err("Flags mismatch irq %d. %08x (%s) vs. %08x (%s)\n",
irq, new->flags, new->name, old->flags, old->name);
#ifdef CONFIG_DEBUG_SHIRQ
dump_stack();
#endif
}
ret = -EBUSY;
以上是將“Flags mismatch”消息打印到內核日志的位置。
如果您不希望 IRQ 已經被請求,請檢查您請求的 IRQ 是否正確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.