Kernel Monitor?

Robert Watson rwatson at FreeBSD.org
Mon Feb 14 06:50:27 PST 2005


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 at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
> 



More information about the freebsd-hackers mailing list