-BETA6 panic with xorp multicast routing daemon

Robert Watson rwatson at freebsd.org
Wed Sep 29 22:17:32 PDT 2004


On Thu, 30 Sep 2004, Dikshie wrote: 

> I got my -BETA6 panic when run xorp routing daemon.
> Panic: mutex Giant not owned at /usr/src/sys/netinet/ip_mroute.c:2672
> 
> I've included:
> options MROUTING
> options PIM
> for multicast purpose and:
> 
> options         KDB
> options         KDB_TRACE
> options         DDB                     #Enable the kernel debugger
> options         DDB_NUMSYM
> options         GDB
> 
> for debugging. but my box didnt save core to /var/crash.
> any suggestions ?

>From the nature of the panic, it sounds like you're running with
NET_WITH_GIANT, debug.mpsafenet=0 in loader.conf, or that the setting has
been forced by running with a kernel component that relies on Giant over
the network stack?

Try the attached patch, please. 

Robert N M Watson             FreeBSD Core Team, TrustedBSD Projects
robert at fledge.watson.org      Principal Research Scientist, McAfee Research

Index: ip_mroute.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_mroute.c,v
retrieving revision 1.108
diff -u -r1.108 ip_mroute.c
--- ip_mroute.c	27 Aug 2004 18:33:07 -0000	1.108
+++ ip_mroute.c	30 Sep 2004 05:00:17 -0000
@@ -598,20 +598,23 @@
 static void
 ip_mrouter_reset(void)
 {
+    int callout_flag;
+
     bzero((caddr_t)mfctable, sizeof(mfctable));
     bzero((caddr_t)nexpire, sizeof(nexpire));
 
     pim_assert = 0;
     mrt_api_config = 0;
 
-    callout_init(&expire_upcalls_ch, CALLOUT_MPSAFE);
+    callout_flag = debug_mpsafenet ? CALLOUT_MPSAFE : 0;
+    callout_init(&expire_upcalls_ch, callout_flag);
 
     bw_upcalls_n = 0;
     bzero((caddr_t)bw_meter_timers, sizeof(bw_meter_timers));
-    callout_init(&bw_upcalls_ch, CALLOUT_MPSAFE);
-    callout_init(&bw_meter_ch, CALLOUT_MPSAFE);
+    callout_init(&bw_upcalls_ch, callout_flag);
+    callout_init(&bw_meter_ch, callout_flag);
 
-    callout_init(&tbf_reprocess_ch, CALLOUT_MPSAFE);
+    callout_init(&tbf_reprocess_ch, callout_flag);
 }
 
 static struct mtx mrouter_mtx;		/* used to synch init/done work */



More information about the freebsd-current mailing list