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