Apply by doing:
	cd /usr/src
	patch -p0 < 004_arc.patch

And then rebuild your kernel.

Index: sys/dev/pci/arc.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/arc.c,v
retrieving revision 1.48
retrieving revision 1.48.2.1
diff -u -p -r1.48 -r1.48.2.1
--- sys/dev/pci/arc.c	28 Aug 2006 05:36:00 -0000	1.48
+++ sys/dev/pci/arc.c	2 Nov 2006 01:52:08 -0000	1.48.2.1
@@ -350,6 +350,7 @@ struct arc_fw_sysinfo {
 int			arc_match(struct device *, void *, void *);
 void			arc_attach(struct device *, struct device *, void *);
 int			arc_detach(struct device *, int);
+void			arc_shutdown(void *);
 int			arc_intr(void *);
 
 struct arc_ccb;
@@ -369,6 +370,8 @@ struct arc_softc {
 
 	void			*sc_ih;
 
+	void			*sc_shutdownhook;
+
 	int			sc_req_count;
 
 	struct arc_dmamem	*sc_requests;
@@ -517,6 +520,10 @@ arc_attach(struct device *parent, struct
 		return;
 	}
 
+	sc->sc_shutdownhook = shutdownhook_establish(arc_shutdown, sc);
+	if (sc->sc_shutdownhook == NULL)
+		panic("unable to establish arc powerhook");
+
 	sc->sc_link.device = &arc_dev;
 	sc->sc_link.adapter = &arc_switch;
 	sc->sc_link.adapter_softc = sc;
@@ -544,6 +551,8 @@ arc_detach(struct device *self, int flag
 {
 	struct arc_softc		*sc = (struct arc_softc *)self;
 
+	shutdownhook_disestablish(sc->sc_shutdownhook);
+
 	if (arc_msg0(sc, ARC_REG_INB_MSG0_STOP_BGRB) != 0)
 		printf("%s: timeout waiting to stop bg rebuild\n");
 
@@ -551,6 +560,18 @@ arc_detach(struct device *self, int flag
 		printf("%s: timeout waiting to flush cache\n");
 
 	return (0);
+}
+
+void
+arc_shutdown(void *xsc)
+{
+	struct arc_softc		*sc = xsc;
+
+	if (arc_msg0(sc, ARC_REG_INB_MSG0_STOP_BGRB) != 0)
+		printf("%s: timeout waiting to stop bg rebuild\n");
+
+	if (arc_msg0(sc, ARC_REG_INB_MSG0_FLUSH_CACHE) != 0)
+		printf("%s: timeout waiting to flush cache\n");
 }
 
 int
