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