DragonFly BSD
DragonFly bugs List (threaded) for 2005-12
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: panic with HEAD


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Fri, 16 Dec 2005 13:09:21 -0800 (PST)

    Ok Steve, update your kernel sources again just to sync up the patch
    I committed to if_wi (which is the same one you already have), and 
    then try this patch on top of that.

    The issue is that the cardbus code's handling of BUS_SETUP_INTR ignores
    the serializer passed into it from IF_WI.  I think this will deal with
    the case properly but I can't test it.

						-Matt

Index: bus/pccard/pccard.c
===================================================================
RCS file: /cvs/src/sys/bus/pccard/pccard.c,v
retrieving revision 1.14
diff -u -r1.14 pccard.c
--- bus/pccard/pccard.c	27 Jun 2005 02:27:10 -0000	1.14
+++ bus/pccard/pccard.c	16 Dec 2005 20:58:17 -0000
@@ -1222,7 +1222,7 @@
 	if (func->intr_handler != NULL)
 		panic("Only one interrupt handler per function allowed");
 	err = bus_generic_setup_intr(dev, child, irq, flags, pccard_intr,
-				     func, cookiep, NULL);
+				     func, cookiep, serializer);
 	if (err != 0)
 		return (err);
 	func->intr_handler = intr;
Index: dev/pccard/pccbb/pccbb.c
===================================================================
RCS file: /cvs/src/sys/dev/pccard/pccbb/pccbb.c,v
retrieving revision 1.11
diff -u -r1.11 pccbb.c
--- dev/pccard/pccbb/pccbb.c	12 Oct 2005 17:35:54 -0000	1.11
+++ dev/pccard/pccbb/pccbb.c	16 Dec 2005 21:03:41 -0000
@@ -803,6 +803,7 @@
 	*cookiep = ih;
 	ih->intr = intr;
 	ih->arg = arg;
+	ih->serializer = serializer;
 	KKASSERT(serializer == NULL);	/* not yet supported */
 	STAILQ_INSERT_TAIL(&sc->intr_handlers, ih, entries);
 	/*
@@ -1057,7 +1058,13 @@
 	}
 	if (sc->flags & CBB_CARD_OK) {
 		STAILQ_FOREACH(ih, &sc->intr_handlers, entries) {
-			(*ih->intr)(ih->arg);
+			if (ih->serializer) {
+				lwkt_serialize_handler_call(ih->serializer,
+						(inthand2_t)ih->intr, ih->arg,
+						NULL);
+			} else {
+				(*ih->intr)(ih->arg);
+			}
 		}
 		
 	}
Index: dev/pccard/pccbb/pccbbvar.h
===================================================================
RCS file: /cvs/src/sys/dev/pccard/pccbb/pccbbvar.h,v
retrieving revision 1.1
diff -u -r1.1 pccbbvar.h
--- dev/pccard/pccbb/pccbbvar.h	10 Feb 2004 07:55:47 -0000	1.1
+++ dev/pccard/pccbb/pccbbvar.h	16 Dec 2005 21:01:05 -0000
@@ -36,6 +36,7 @@
 struct cbb_intrhand {
 	driver_intr_t *intr;
 	void	*arg;
+	struct lwkt_serialize *serializer;
 	STAILQ_ENTRY(cbb_intrhand) entries;
 };
 



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]