summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Knudsen <mk@cvs.openbsd.org>2010-10-20 20:34:20 +0000
committerMichael Knudsen <mk@cvs.openbsd.org>2010-10-20 20:34:20 +0000
commit9203a381ec3b797ba691eb3d0ec82e6dc5791679 (patch)
treecba259d1d3d870130eb3ce79d21383ce612c6146
parent0fffb28f6e8c9441afef22a29b46721b20442146 (diff)
Disestablish interrupts if attachment fails.
ok jakemsr
-rw-r--r--sys/dev/pci/ehci_pci.c8
-rw-r--r--sys/dev/pci/ohci_pci.c4
-rw-r--r--sys/dev/pci/uhci_pci.c3
3 files changed, 10 insertions, 5 deletions
diff --git a/sys/dev/pci/ehci_pci.c b/sys/dev/pci/ehci_pci.c
index 75260e780bd..0ea329aa567 100644
--- a/sys/dev/pci/ehci_pci.c
+++ b/sys/dev/pci/ehci_pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ehci_pci.c,v 1.21 2010/08/08 04:19:24 deraadt Exp $ */
+/* $OpenBSD: ehci_pci.c,v 1.22 2010/10/20 20:34:19 mk Exp $ */
/* $NetBSD: ehci_pci.c,v 1.15 2004/04/23 21:13:06 itojun Exp $ */
/*
@@ -186,7 +186,7 @@ ehci_pci_attach(struct device *parent, struct device *self, void *aux)
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, struct device *self, void *aux)
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, struct device *self, void *aux)
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);
diff --git a/sys/dev/pci/ohci_pci.c b/sys/dev/pci/ohci_pci.c
index dda8650d4d0..c99ffb9276d 100644
--- a/sys/dev/pci/ohci_pci.c
+++ b/sys/dev/pci/ohci_pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ohci_pci.c,v 1.36 2010/09/07 16:21:45 deraadt Exp $ */
+/* $OpenBSD: ohci_pci.c,v 1.37 2010/10/20 20:34:19 mk Exp $ */
/* $NetBSD: ohci_pci.c,v 1.23 2002/10/02 16:51:47 thorpej Exp $ */
/*
@@ -156,6 +156,7 @@ ohci_pci_attach(struct device *parent, struct device *self, void *aux)
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 *self)
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;
}
diff --git a/sys/dev/pci/uhci_pci.c b/sys/dev/pci/uhci_pci.c
index ae278764663..1ca8ec4b610 100644
--- a/sys/dev/pci/uhci_pci.c
+++ b/sys/dev/pci/uhci_pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uhci_pci.c,v 1.29 2010/06/29 22:14:57 mlarkin Exp $ */
+/* $OpenBSD: uhci_pci.c,v 1.30 2010/10/20 20:34:19 mk Exp $ */
/* $NetBSD: uhci_pci.c,v 1.24 2002/10/02 16:51:58 thorpej Exp $ */
/*
@@ -219,6 +219,7 @@ uhci_pci_attach_deferred(struct device *self)
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);
}