From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1762929AbYDVTTp (ORCPT ); Tue, 22 Apr 2008 15:19:45 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753443AbYDVTTg (ORCPT ); Tue, 22 Apr 2008 15:19:36 -0400 Received: from wr-out-0506.google.com ([64.233.184.225]:17147 "EHLO wr-out-0506.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752012AbYDVTTf (ORCPT ); Tue, 22 Apr 2008 15:19:35 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=UnQE1B4yJiRHD6V4DhRcZJ//fOvNZ8bOHe1pQ1wnMnntyD83PIam47LjNWBQm6/XeThOtDxeg/p+V5u4B53ivmheK/AzaCo+bX5oGV5bfmuhXY8NwRSX3QOeeuhIhYSQ3z562ZOVM0YAsisuofPwOhNcUMutOlsxac+QMRwCYrE= Message-ID: Date: Tue, 22 Apr 2008 15:19:33 -0400 From: "Dan Upton" To: "Dmitry Adamushko" Subject: Re: migration thread and active_load_balance Cc: linux-kernel@vger.kernel.org In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Apr 21, 2008 at 4:39 PM, Dmitry Adamushko wrote: > On 21/04/2008, Dan Upton wrote: > > On Mon, Apr 21, 2008 at 7:03 AM, Dmitry Adamushko > > > > wrote: > > > > > On 21/04/2008, Dan Upton wrote: > > > > [ ... ] > > > > > > > > > > > kernel BUG at kernel/sched.c:2103 > > > > > > and what's this line in your patched sched.c? > > > > > > is it -- BUG_ON(!irqs_disabled()); ? > > > > > > anything in your unposted code (e.g. find_coolest_cpu()) that might > > > re-enable the interrupts before __migration_task() is called? > > > > > > If you post your modifications as a patch > > > (Documentation/applying-patches.txt) that contains _all_ relevant > > > modifications, it'd be easier to guess what's wrong. > > > > > > Yes, that's the line. I don't recall ever reenabling interrupts, > > migration_thread() -> find_coolest_cpu() -> get_temperature() -> > rdmsr_on_cpu() -> [ if your configuration is SMP ] -> > smp_call_function_single() -> > > (arch/x86/kernel/smpcommon.c) > ... > if (cpu == me) { > local_irq_disable(); > func(info); > local_irq_enable(); <----------- REENABLES the interrupts > put_cpu(); > return 0; > } > ... > > as a result, __migrate_task() -> double_rq_lock() -> BUG_ON(!irqs_disabled()) > gives you an "oops". > Ah, how about that. Thanks, I at least fixed the oops by caching return values from get_temperature() and then using those instead of calling rdmsr_on_cpu when calling from migration_thread(). Everything works up to the point of uncommenting the new call to active_load_balance, which again yields a deadlock. (Man, I love working in the scheduler...) Anyway, I'll keep trying to debug that on my own again, but did anybody notice anything I'm doing that might lead to deadlock? -dan