lkml.org 
[lkml]   [2007]   [Oct]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH 3/4] UML - Implement get_wchan
From
Date
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);
> + }


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2007-10-30 18:43    [W:0.043 / U:0.364 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site