Hi Nils,<br><br>&gt;&gt;void cleanup_module(void) {
    <br> &gt;&gt;   ...
    <br>
      &gt;&gt;  free_irq(ADC_IRQ, NULL);        /* remove interrupt handler */
    <br>
      &gt;&gt;  ...
    <br> 
    &gt;&gt;   return;
    <br>
    &gt;&gt;}
    <br><br>You should not pass NULL here. It should be the unique cookie that you passed in request_irq (adc_irq_handler in your case) since you have used IRQF_SHARED which means you want to share your interrupt line. Also check whether you really want to share your interrupt line and also if you want to use &quot;(void *)(adc_irq_handler)&quot; as the unique identification.<br>
<br>HTH!<br><br>Regards<br>Mayur<br><br><div class="gmail_quote">On Tue, Feb 7, 2012 at 7:45 PM, nils.stec <span dir="ltr">&lt;<a href="mailto:nils.stec@googlemail.com">nils.stec@googlemail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

  

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

<br>_______________________________________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
<a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
<br></blockquote></div><br>