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

[ Available lists | Index of svn-src-head | Month of Oct 2009 | Week of 13 Oct 2009 | Raw email | View thread | Wrap long lines | Reply | Tag ]
From
Bjoern A. Zeeb <bz@FreeBSD.org>
Date
13 Oct 2009 20:22:12
Subject
svn commit: r198049 - head/sys/dev/bge
Message-ID
200910132022.n9DKMCsE015462@svn.freebsd.org


[ Hide this part ]
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);


Elapsed time: 0.073 seconds