lkml.org 
[lkml]   [1999]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subjectregister_irq()/free_irq() problem [Kernel 2.0.34/SCSI/AIC7xxx]
[Kernel 2.0.34/SCSI/AIC7xxx]

I have a problem with a SCSI driver (aic7xxx, but this may be a problem
related to the generic SCSI layer). I can install this module and use it.
It works perfectly. When I try to remove it (rmmod), I get the message
'Trying to free free IRQ...'. If then I 'cat /proc/interrupts', I get an
Oops.

The reason is (IMHO) that the IRQ gets registered in
aic7xxx.c:aic7xxx_register() with a dev_id parameter which corresponds to
the struct aic7xxx_host of the device (and, in particular, is not NULL).
When closing the device, the IRQ is tried to be freed, but this time by the
scsi layer in scsi.c:scsi_unregister_host(). This does free_irq(something,
NULL), which clearly fails (dev_id!=NULL). The module, however, cannot
notice this because free_irq does not return an error (void
free_irq(blabla)). It is removed from the kernel and the struct irqaction
remains in the kernel. If I 'cat /proc/interrupts', I get an Oops, because
irq_action[irq]->name points to a free page :-).

I did not find a patch so far. Does anyone have an idea?

Regards,
Thomas.

PS: Please 'CC' me, because I'm not subscribed to the mailing list...

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:52    [W:0.031 / U:0.296 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site