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
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel