Disestablish interrupts if attach fails and bails out. Interrupts
appear to be disabled until we no longer bail out because of errors.
Is this right?
-m.
Index: ehci_pci.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/ehci_pci.c,v
retrieving revision 1.21
diff -u -p -r1.21 ehci_pci.c
--- ehci_pci.c 8 Aug 2010 04:19:24 -0000 1.21
+++ ehci_pci.c 8 Oct 2010 08:42:39 -0000
@@ -186,7 +186,7 @@ ehci_pci_attach(struct device *parent, s
case PCI_USBREV_1_1:
sc->sc.sc_bus.usbrev = USBREV_UNKNOWN;
printf("%s: pre-2.0 USB rev\n", devname);
- goto unmap_ret;
+ goto disestablish_ret;
case PCI_USBREV_2_0:
sc->sc.sc_bus.usbrev = USBREV_2_0;
break;
@@ -212,7 +212,7 @@ ehci_pci_attach(struct device *parent, s
r = ehci_init(&sc->sc);
if (r != USBD_NORMAL_COMPLETION) {
printf("%s: init failed, error=%d\n", devname, r);
- goto unmap_ret;
+ goto disestablish_ret;
}
sc->sc.sc_shutdownhook = shutdownhook_establish(ehci_pci_shutdown, sc);
@@ -224,6 +224,8 @@ ehci_pci_attach(struct device *parent, s
return;
+disestablish_ret:
+ pci_intr_disestablish(sc->sc_pc, sc->sc_ih);
unmap_ret:
bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size);
splx(s);
Index: ohci_pci.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/ohci_pci.c,v
retrieving revision 1.36
diff -u -p -r1.36 ohci_pci.c
--- ohci_pci.c 7 Sep 2010 16:21:45 -0000 1.36
+++ ohci_pci.c 8 Oct 2010 08:42:40 -0000
@@ -156,6 +156,7 @@ ohci_pci_attach(struct device *parent, s
if (ohci_checkrev(&sc->sc) != USBD_NORMAL_COMPLETION ||
ohci_handover(&sc->sc) != USBD_NORMAL_COMPLETION) {
bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size);
+ pci_intr_disestablish(sc->sc_pc, sc->sc_ih);
splx(s);
return;
}
@@ -186,6 +187,7 @@ ohci_pci_attach_deferred(struct device *
printf("%s: init failed, error=%d\n",
sc->sc.sc_bus.bdev.dv_xname, r);
bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size);
+ pci_intr_disestablish(sc->sc_pc, sc->sc_ih);
splx(s);
return;
}
Index: uhci_pci.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/uhci_pci.c,v
retrieving revision 1.29
diff -u -p -r1.29 uhci_pci.c
--- uhci_pci.c 29 Jun 2010 22:14:57 -0000 1.29
+++ uhci_pci.c 8 Oct 2010 08:42:40 -0000
@@ -219,6 +219,7 @@ uhci_pci_attach_deferred(struct device *
unmap_ret:
bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size);
+ pci_intr_disestablish(sc->sc_pc, sc->sc_ih);
splx(s);
}
--
The Librarian gave him the kind of look other people would reserve for
people who said things like `What's so bad about genocide?'
-- (Terry Pratchett, Guards! Guards!)