I'm working on a kernel module interrupt handler. I stripped the problem
down with a parallel port handler and get the following result:

initializing module
Badness in enable_irq at kernel/irq/manage.c:109
[] enable_irq+0x84/0xf0
[] initialize_module+0x5a/0x81 [parint_mod]
[] sys_init_module+0xcc/0x1e0
[] sys_munmap+0x48/0x70
[] sysenter_past_esp+0x54/0x79
cleaning up module

this is the stripped down module:
irqreturn_t interrupt_handler(int irq, void *dev_id, struct pt_regs *regs){

static int __init initialize_module(void){
int ret;

printk("initializing module\n");
ret = request_irq(PAR_PORT_INT, interrupt_handler, SA_INTERRUPT,
if (ret != 0) {
printk("init of irq handler ret: %d\n", ret);
return ret;

outb_p(0x10, BASEPORT+2);//set interrupt mode
outb_p(0, BASEPORT);//force interrupt
outb_p(255, BASEPORT);
outb_p(0, BASEPORT);

return 0;

The module loads perfect. In init_module I just toggle the interrupt line
and /proc/interrupts reflects the incrementing interrupts. However the
handler just crashes.
The system is an updated suse 10.0 kernel (2.6.13-15.11). Installed on a
suse 9.2 system it runs perfectly, so it's a real kernel problem.
Anybody familiar with this kernel problem?