続々々 attach

まあ、こんなもんかな。

Index: ld_sdmmc.c
===================================================================
RCS file: /cvs/cvsroot/src/sys/dev/sdmmc/ld_sdmmc.c,v
retrieving revision 1.2
diff -u -r1.2 ld_sdmmc.c
--- ld_sdmmc.c	6 May 2009 08:20:49 -0000	1.2
+++ ld_sdmmc.c	28 May 2009 03:42:58 -0000
@@ -43,6 +43,7 @@
 #include <sys/endian.h>
 #include <sys/dkio.h>
 #include <sys/disk.h>
+#include <sys/kthread.h>
 #if NRND > 0
 #include <sys/rnd.h>
 #endif
@@ -84,6 +85,7 @@
 static int ld_sdmmc_dump(struct ld_softc *, void *, int, int);
 static int ld_sdmmc_start(struct ld_softc *, struct buf *);
 
+static void ld_sdmmc_doattach(void *);
 static void ld_sdmmc_dobio(void *);
 static void ld_sdmmc_timeout(void *);
 
@@ -109,6 +111,7 @@
 	struct ld_sdmmc_softc *sc = device_private(self);
 	struct sdmmc_attach_args *sa = aux;
 	struct ld_softc *ld = &sc->sc_ld;
+	struct lwp *lwp;
 
 	ld->sc_dv = self;
 
@@ -128,7 +131,25 @@
 	ld->sc_dump = ld_sdmmc_dump;
 	ld->sc_start = ld_sdmmc_start;
 
+	/*
+	 * It is avoided that the error occurs when the card attaches it, 
+	 * when wedge is supported.
+	 */
+	if (kthread_create(PRI_NONE, KTHREAD_MPSAFE, NULL,
+	    ld_sdmmc_doattach, sc, &lwp, "%sattach", device_xname(self))) {
+		aprint_error_dev(self, "couldn't create thread\n");
+	}
+}
+
+/*ARGSUSED*/
+static void
+ld_sdmmc_doattach(void *arg)
+{
+	struct ld_sdmmc_softc *sc = (struct ld_sdmmc_softc *)arg;
+	struct ld_softc *ld = &sc->sc_ld;
+
 	ldattach(ld);
+	kthread_exit(0);
 }
 
 static int