Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756177AbXJ3RlR (ORCPT ); Tue, 30 Oct 2007 13:41:17 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752300AbXJ3RlF (ORCPT ); Tue, 30 Oct 2007 13:41:05 -0400 Received: from DSL022.labridge.com ([206.117.136.22]:2604 "EHLO perches.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751549AbXJ3RlE (ORCPT ); Tue, 30 Oct 2007 13:41:04 -0400 Subject: Re: [PATCH 3/4] UML - Implement get_wchan From: Joe Perches To: Jeff Dike Cc: Andrew Morton , LKML , uml-devel In-Reply-To: <20071030172849.GA8367@c2.user-mode-linux.org> References: <20071030172849.GA8367@c2.user-mode-linux.org> Content-Type: text/plain Date: Tue, 30 Oct 2007 10:40:46 -0700 Message-Id: <1193766046.24844.19.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.12.0-2mdv2008.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1353 Lines: 54 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/