Hi,
atm I'm writing a kernel module for an embedded ARM device. This module uses IRQ9. If i remove the module, the kernel tells me that: ------------[ cut here ]------------ WARNING: at kernel/irq/manage.c:858 __free_irq+0x84/0x154() Trying to free already-free IRQ 9 Modules linked in: adc_demo_irq(P-) g_ether pegasus mii [<c0028794>] (unwind_backtrace+0x0/0xd0) from [<c003b504>] (warn_slowpath_common+0x48/0x60) [<c003b504>] (warn_slowpath_common+0x48/0x60) from [<c003b554>] (warn_slowpath_fmt+0x24/0x30) [<c003b554>] (warn_slowpath_fmt+0x24/0x30) from [<c005fa00>] (__free_irq+0x84/0x154) [<c005fa00>] (__free_irq+0x84/0x154) from [<c005fb0c>] (free_irq+0x3c/0x5c) [<c005fb0c>] (free_irq+0x3c/0x5c) from [<bf01e18c>] (cleanup_module+0x4c/0x60 [adc_demo_irq]) [<bf01e18c>] (cleanup_module+0x4c/0x60 [adc_demo_irq]) from [<c005b898>] (sys_delete_module+0x1c4/0x238) [<c005b898>] (sys_delete_module+0x1c4/0x238) from [<c0022dc0>] (ret_fast_syscall+0x0/0x28) ---[ end trace 60d7a16d878ac0b3 ]--- adc testing module removed ------------[ cut here ]------------ The message "adc testing module removed" comes from my module *after* free_irq() via printk, so the module exit routine works till the end. This is my code (only the IRQ related part): irqreturn_t adc_irq_handler(int irq, void *dev_id) { ... do someting ... return IRQ_HANDLED; } int init_module(void) { int32_t retval; ... retval = request_irq(ADC_IRQ, adc_irq_handler, IRQF_SHARED, "lpc313x adc irq", (void *)(adc_irq_handler)); ... return retval; } void cleanup_module(void) { ... free_irq(ADC_IRQ, NULL); /* remove interrupt handler */ ... return; } I hope anyone of you can help me with that problem. If you need more information, i'll send it Greetings, Nils |
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies