NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/58027: ehci failed attach stops suspend/resume
> if (sc->sc_ih) {
> pci_intr_disestablish(sc->sc_pc, sc->sc_ih);
> + pci_intr_release(sc->sc_pc, sc->sc_pihp, 1);
> sc->sc_ih = NULL;
> }
This part seems wrong -- I think it should be a separate branch:
if (sc->sc_ih) {
pci_intr_disestablish(sc->sc_pc, sc->sc_ih);
sc->sc_ih = NULL;
}
if (sc->sc_pihp) {
pci_intr_release(sc->sc_pc, sc->sc_pihp, 1);
sc->sc_pihp = NULL;
}
and then we can delete some more redundant code in ehci_pci_attach's
pci_intr_establish_xname error branch.
> @@ -262,6 +263,7 @@ ehci_pci_attach(device_t parent, device_
> int err = ehci_init(&sc->sc);
> if (err) {
> aprint_error_dev(self, "init failed, error=%d\n", err);
> + ehci_release_ownership(&sc->sc, sc->sc_pc, sc->sc_tag);
> goto fail;
> }
> ...
> if (sc->sc.sc_size) {
> - ehci_release_ownership(&sc->sc, sc->sc_pc, sc->sc_tag);
> bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size);
> sc->sc.sc_size = 0;
> }
> ...
> @@ -302,27 +317,17 @@ ehci_pci_detach(device_t self, int flags
> ...
> - if (sc->sc.sc_size) {
> ehci_release_ownership(&sc->sc, sc->sc_pc, sc->sc_tag);
> - bus_space_unmap(sc->sc.iot, sc->sc.ioh, sc->sc.sc_size);
> - sc->sc.sc_size = 0;
> }
Why did the ehci_release_ownership part move? I think we should
generally have less logic in the `if (err) goto fail' branches
themselves, and more logic shared in the common cleanup path.
Home |
Main Index |
Thread Index |
Old Index