Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S967647AbXEHCn7 (ORCPT ); Mon, 7 May 2007 22:43:59 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S967641AbXEHCnz (ORCPT ); Mon, 7 May 2007 22:43:55 -0400 Received: from fgwmail7.fujitsu.co.jp ([192.51.44.37]:43369 "EHLO fgwmail7.fujitsu.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S967619AbXEHCny (ORCPT ); Mon, 7 May 2007 22:43:54 -0400 Date: Tue, 08 May 2007 11:41:57 +0900 Message-ID: <877irkrq8a.wl%takeuchi_satoru@jp.fujitsu.com> From: Satoru Takeuchi To: Rusty Russell Cc: Satoru Takeuchi , Linux Kernel , Srivatsa Vaddagiri , Zwane Mwaikambo , Nathan Lynch , Joel Schopp , Ashok Raj , Heiko Carstens , Gautham R Shenoy Subject: Re: [BUG] cpu-hotplug: Can't offline the CPU with naughty realtime processes In-Reply-To: <1178545373.28438.7.camel@localhost.localdomain> References: <87bqgxrlky.wl%takeuchi_satoru@jp.fujitsu.com> <1178545373.28438.7.camel@localhost.localdomain> User-Agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (=?ISO-8859-4?Q?Shij=F2?=) APEL/10.6 Emacs/21.4 (i486-pc-linux-gnu) MULE/5.0 (SAKAKI) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2041 Lines: 57 At Mon, 07 May 2007 23:42:53 +1000, Rusty Russell wrote: > > On Mon, 2007-05-07 at 19:10 +0900, Satoru Takeuchi wrote: > > Hi, > > > > I found a bug on 2.6.21 cpu-hotplug code. > > > > When process A on CPU0 try to offline the CPU1 on which the process B, > > realtime process (its task->policy == SCHED_FIFO or SCHED_RR) running > > without sleep or yield, both CPU0 and CPU1 get hang. It's because of > > the following code on __stop_machine_run(). > > > > struct task_struct *__stop_machine_run(int (*fn)(void *), void *data, > > unsigned int cpu) > > { > > ... > > p = kthread_create(do_stop, &smdata, "kstopmachine"); > > if (!IS_ERR(p)) { > > kthread_bind(p, cpu); > > wake_up_process(p); > > wait_for_completion(&smdata.done); > > } > > ... > > } > > > > kstopmachine is created, bound to the CPU1, and woken up here, but > > this process can't start to run because reschedule doesn't occur on > > CPU1. Hence CPU0 also be able to run because it's waiting completion > > of CPU1's offline work. > > Yes, we should probably move the set_scheduler call in stop_machine > (where the thread up-prioritizes itself) to before wake_up_process(p), > to avoid this happening. > > Others have suggested we use the freezer; I've always distrusted that > code. It's much trickier than stop_machine(). > > I look forward to your patch! > Rusty. Thanks, I'll do. Maybe this work will take several days including test. BTW, how should I manage rt process having max priority as Gautham said? He said that it's OK unless such kernel thread exists. However, currently MAX_USER_RT_PRIORITY is equal to MAX_RT_PRIO, so user process also be able to cause this problem. Is Srivatsa's idea 2 acceptable? Or just apply "Shouldn't abuse highest rt proority" rule? Thanks, Satoru - 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/