Date: Sat, 30 Nov 1996 20:36:56 -0700 From: "Mike Durian" <durian@plutotech.com> To: freebsd-hackers@freebsd.org Subject: LKM driver question / patch Message-ID: <199612010336.UAA09679@pluto.plutotech.com>
next in thread | raw e-mail | index | archive | help
First of all I have a patch for kern/kern_conf.c. Without this, you get a panic when you try to unload a driver module: *** kern_conf.c.orig Sat Nov 30 20:15:06 1996 --- kern_conf.c Sat Nov 30 19:00:58 1996 *************** *** 150,156 **** if (oldentry) { \ *oldentry = TTYPE[i]; \ } \ ! newentry->d_maj = i; \ /* replace with new */ \ TTYPE[i] = newentry; \ \ --- 150,157 ---- if (oldentry) { \ *oldentry = TTYPE[i]; \ } \ ! if (newentry != NULL) \ ! newentry->d_maj = i; \ /* replace with new */ \ TTYPE[i] = newentry; \ \ Second, I have a question on writing a lkm driver. What is the proper way to use ISA an lkm driver with interrupts? The existing drivers in sys/i386/isa don't use interrupt, or only use them in conjuction with other existing hardware. I've added the: INTRMASK register_intr INTREN code sequence as found in isa.c to my driver load routine, but register_intr fails with EBUSY because the interrupt is already assigned to isa_strayintr. Also, how should I unregister the interrupt when I unload the driver? I see code in isa.c that does: INTRDIS unregister_intr INTRUNMASK but it fails too (probably because it never got registered properly). In fact it ends up masking my SCSI interrupts and I get aborts and must reboot. Thanks, mike
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199612010336.UAA09679>