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