Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a2f5bfcf authored by Hannes Reinecke's avatar Hannes Reinecke Committed by James Bottomley
Browse files

[SCSI] aic7xxx: leaves timer running on init failure



aic79xx leaves timers inserted when ahd_init() (which inserts
two timers at its very end) succeeds but ahd_pci_map_int()
fails. In this case ahd->init_level gets incremented to 5 only
when that function succeeds, but ahd_free() calls ahd_shutdown()
only when ahd->init_level == 5, and ahd_shutdown() is where the
timers get removed. Since the freeing of the IRQ is not controlled
by ahd->init_level, we should increment init_level prior to
calling ahd_pci_map_int().

Reported-by: default avatarJan Beulich <jbeulich@novell.com>
Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent c59c6149
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -377,14 +377,12 @@ ahd_pci_config(struct ahd_softc *ahd, const struct ahd_pci_identity *entry)
	error = ahd_init(ahd);
	if (error != 0)
		return (error);
	ahd->init_level++;

	/*
	 * Allow interrupts now that we are completely setup.
	 */
	error = ahd_pci_map_int(ahd);
	if (!error)
		ahd->init_level++;
	return error;
	return ahd_pci_map_int(ahd);
}

#ifdef CONFIG_PM
+2 −6
Original line number Diff line number Diff line
@@ -960,16 +960,12 @@ ahc_pci_config(struct ahc_softc *ahc, const struct ahc_pci_identity *entry)
	error = ahc_init(ahc);
	if (error != 0)
		return (error);
	ahc->init_level++;

	/*
	 * Allow interrupts now that we are completely setup.
	 */
	error = ahc_pci_map_int(ahc);
	if (error != 0)
		return (error);

	ahc->init_level++;
	return (0);
	return ahc_pci_map_int(ahc);
}

/*