On Tue, 2007-10-30 at 13:28 -0400, Jeff Dike wrote:
> +unsigned long get_wchan(struct task_struct *p)
> +{
> +     unsigned long stack_page, sp, ip, count = 0;

Perhaps instead of unsigned long?

bool skipped_ip;        //delayed initialization

> +
> +     if ((p == NULL) || (p == current) || (p->state == TASK_RUNNING))
> +             return 0;
> +
> +     stack_page = (unsigned long) task_stack_page(p);
> +     /* Bail if the process has no kernel stack for some reason */
> +     if (stack_page == 0)
> +             return 0;
> +
> +     sp = p->thread.switch_buf->JB_SP;
> +     /*
> +      * Bail if the stack pointer is below the bottom of the kernel
> +      * stack for some reason
> +      */
> +     if (sp < stack_page)
> +             return 0;
> +

        skipped_ip = false;

> +     while (sp < stack_page + THREAD_SIZE) {
> +             ip = *((unsigned long *) sp);
> +             if (kernel_text_address(ip) && !in_sched_functions(ip)) {
> +                     /*
> +                      * Skip one valid IP, which will be the low-level UML
> +                      * context switcher.
> +                      */
> +                     if (count++ == 1)
> +                             return ip;

                        if (skipped_ip)
                                return ip;
                        skipped_ip = true;
> 
> +             }
> +
> +             sp += sizeof(unsigned long);
> +     }



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

Reply via email to