Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Feb 2005 14:49:09 +0000 (GMT)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Ashwin Chandra <ashcs@ucla.edu>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Kernel Monitor?
Message-ID:  <Pine.NEB.3.96L.1050214144730.48471T-100000@fledge.watson.org>
In-Reply-To: <000c01c5126f$354f81c0$58e243a4@ash>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 14 Feb 2005, Ashwin Chandra wrote:

> Im having issues with the following code running as a kernel thread.
> when i do the prinft (which i traced with kgdb) it crashes...but those
> two variables that i print out, are fine if i do comparisons or store
> them into variables...only printing them causes a panic. anyone have any
> ideas in what im doing wrong? 

Looks like you arne't acquiring the allproc_lock before walking the
process list, which means the process list could change while the code is
running.  That might be one source of a problem.  I think you also don't
need Giant there.  Also, you probably want to check that the process isn't
in the PRS_NEW state, otherwise it might not be fully initialized.

You don't mention what crash, btw -- is it a page fault?  If so, is the
faulting address close to 0 (NULL)?

Robert N M Watson


> static void     kernmon(void);
> static void     kernmon_thread(void);
> static void     kern_print(void);
> 
> static struct kproc_desc kernmon_kp = {
>         "kernmon",
>         kernmon_thread,
>         NULL
> };
> 
> SYSINIT(kernmon, SI_SUB_KERN_MON, SI_ORDER_FIRST, kproc_start, &kernmon_kp)
> 
> static void
> kernmon(void)
> {
>   kern_print();
> }
> 
> static void
> kernmon_thread(void)
> {
>   int nowake = 0;
>   for (;;) {
>     kernmon();
>     tsleep(&nowake, curthread->td_priority, "-", 7*hz);
> 
>   }
> }
> 
> static void
> kern_print(void)
> {
>   struct proc *p;
> 
>   FOREACH_PROC_IN_SYSTEM(p) {
>     mtx_lock(&Giant);
>     PROC_LOCK(p);
>     printf("%d %d\n", (int)p->p_stats->p_ru.ru_isrss, (int)p->p_stats->p_ru.ru_idrss);
>     PROC_UNLOCK(p);
>     mtx_unlock(&Giant);
>   }
> 
> 
> }
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1050214144730.48471T-100000>