svn commit: r198049 - head/sys/dev/bge

Bjoern A. Zeeb bz at FreeBSD.org
Tue Oct 13 20:22:13 UTC 2009


Author: bz
Date: Tue Oct 13 20:22:12 2009
New Revision: 198049
URL: http://svn.freebsd.org/changeset/base/198049

Log:
  Immediately after clearing a pending callout that didn't make it due
  to the lock we hold, disable interrupts, and announce to the firmware
  that we are shutting down. Especially do this before disabling blocks.
  
  This makes some types of machines with asf enabled no longer hang upon
  boot, when we start configuring the interface.
  
  PR:			i386/96382, kern/100410, kern/122252, kern/116328
  Reported by:		erwin
  Hardware provided by:	TDC A/S
  Reviewed by:		stas
  Tested by:		stas

Modified:
  head/sys/dev/bge/if_bge.c

Modified: head/sys/dev/bge/if_bge.c
==============================================================================
--- head/sys/dev/bge/if_bge.c	Tue Oct 13 20:21:17 2009	(r198048)
+++ head/sys/dev/bge/if_bge.c	Tue Oct 13 20:22:12 2009	(r198049)
@@ -4270,6 +4270,16 @@ bge_stop(struct bge_softc *sc)
 
 	callout_stop(&sc->bge_stat_ch);
 
+	/* Disable host interrupts. */
+	BGE_SETBIT(sc, BGE_PCI_MISC_CTL, BGE_PCIMISCCTL_MASK_PCI_INTR);
+	bge_writembx(sc, BGE_MBX_IRQ0_LO, 1);
+
+	/*
+	 * Tell firmware we're shutting down.
+	 */
+	bge_stop_fw(sc);
+	bge_sig_pre_reset(sc, BGE_RESET_STOP);
+
 	/*
 	 * Disable all of the receiver blocks.
 	 */
@@ -4309,16 +4319,6 @@ bge_stop(struct bge_softc *sc)
 		BGE_CLRBIT(sc, BGE_MARB_MODE, BGE_MARBMODE_ENABLE);
 	}
 
-	/* Disable host interrupts. */
-	BGE_SETBIT(sc, BGE_PCI_MISC_CTL, BGE_PCIMISCCTL_MASK_PCI_INTR);
-	bge_writembx(sc, BGE_MBX_IRQ0_LO, 1);
-
-	/*
-	 * Tell firmware we're shutting down.
-	 */
-
-	bge_stop_fw(sc);
-	bge_sig_pre_reset(sc, BGE_RESET_STOP);
 	bge_reset(sc);
 	bge_sig_legacy(sc, BGE_RESET_STOP);
 	bge_sig_post_reset(sc, BGE_RESET_STOP);


More information about the svn-src-all mailing list