--- /sys/src/9k/386/devether.c +++ /sys/src/9k/386/devether.c @@ -424,7 +424,7 @@ etherprobe(int cardno, int ctlrno) * interrupts for itself, e.g. HyperTransport MSI. */ if(ether->irq >= 0) - intrenable(ether->irq, ether->interrupt, ether, ether->tbdf, name); + ether->vector = intrenable(ether->irq, ether->interrupt, ether, ether->tbdf, name); i = sprint(buf, "#l%d: %s: ", ctlrno, cards[cardno].type); if(ether->mbps >= 1000) @@ -504,6 +504,8 @@ ethershutdown(void) ether = etherxx[i]; if(ether == nil) continue; + if(ether->irq >= 0) + intrdisable(ether->vector); if(ether->shutdown == nil) { print("#l%d: no shutdown function\n", i); continue; --- /sys/src/9k/k10/etherif.h +++ /sys/src/9k/k10/etherif.h @@ -33,6 +33,7 @@ struct Ether { void (*power)(Ether*, int); /* power on/off */ void (*shutdown)(Ether*); /* shutdown hardware before reboot */ void *ctlr; + void *vector; int scan[Ntypes]; /* base station scanning interval */ int nscan; /* number of base station scanners */