From patchwork Thu Jul 9 00:01:14 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Torvalds X-Patchwork-Id: 29617 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@bilbo.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from ozlabs.org (ozlabs.org [203.10.76.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx.ozlabs.org", Issuer "CA Cert Signing Authority" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id 191DEB7094 for ; Thu, 9 Jul 2009 10:03:15 +1000 (EST) Received: by ozlabs.org (Postfix) id 0812DDDDE7; Thu, 9 Jul 2009 10:03:15 +1000 (EST) Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 94AB5DDDE6 for ; Thu, 9 Jul 2009 10:03:14 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757422AbZGIADD (ORCPT ); Wed, 8 Jul 2009 20:03:03 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756665AbZGIADC (ORCPT ); Wed, 8 Jul 2009 20:03:02 -0400 Received: from smtp1.linux-foundation.org ([140.211.169.13]:52399 "EHLO smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756513AbZGIADA (ORCPT ); Wed, 8 Jul 2009 20:03:00 -0400 Received: from imap1.linux-foundation.org (imap1.linux-foundation.org [140.211.169.55]) by smtp1.linux-foundation.org (8.14.2/8.13.5/Debian-3ubuntu1.1) with ESMTP id n6901FGg012577 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 8 Jul 2009 17:01:17 -0700 Received: from localhost (localhost [127.0.0.1]) by imap1.linux-foundation.org (8.13.5.20060308/8.13.5/Debian-3ubuntu1.1) with ESMTP id n6901EEQ001734; Wed, 8 Jul 2009 17:01:14 -0700 Date: Wed, 8 Jul 2009 17:01:14 -0700 (PDT) From: Linus Torvalds X-X-Sender: torvalds@localhost.localdomain To: Anton Vorontsov cc: Andrew Morton , a.p.zijlstra@chello.nl, oleg@redhat.com, mingo@elte.hu, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Subject: Re: [PATCH] netpoll: Fix carrier detection for drivers that are using phylib In-Reply-To: <20090708222003.GA12318@oksana.dev.rtsoft.ru> Message-ID: References: <20090707235812.GA12824@oksana.dev.rtsoft.ru> <20090708005000.GA12380@redhat.com> <1247034263.9777.24.camel@twins> <20090708141024.f8b581c5.akpm@linux-foundation.org> <20090708213331.GA9346@oksana.dev.rtsoft.ru> <20090708144744.5555b88d.akpm@linux-foundation.org> <20090708222003.GA12318@oksana.dev.rtsoft.ru> User-Agent: Alpine 2.01 (LFD 1184 2008-12-16) MIME-Version: 1.0 X-Spam-Status: No, hits=-5.466 required=5 tests=AWL, BAYES_00, OSDL_HEADER_SUBJECT_BRACKETED, PATCH_SUBJECT_OSDL X-Spam-Checker-Version: SpamAssassin 3.2.4-osdl_revision__1.47__ X-MIMEDefang-Filter: lf$Revision: 1.188 $ X-Scanned-By: MIMEDefang 2.63 on 140.211.169.13 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Thu, 9 Jul 2009, Anton Vorontsov wrote: > > The netpoll code is using msleep() just a few lines below cond_resched(), > so we won't make things worse. ;-) Yeah. That function is definitely sleeping. It does things like kmalloc(GFP_KERNEL), rtnl_lock() and synchronize_rcu() etc too, so an added msleep() is the least of our problems. Afaik, it's called from a bog-standard "module_init()", which happens late enough that everything works. In fact, I wonder if we should set SYSTEM_RUNNING much earlier - _before_ doing the whole "do_initcalls()". By then we've set up all the core stuff and enabled interrupts, so we really _are_ running. We just don't necessarily have drivers, filesystems etc loaded yet. But anything that happens late enough to be an initcall should be largely considered to be during "normal code". (The "early_initcall" cases are special - those really do happen pretty early). So ACK on Anton's patch, but I wonder if we _also_ should do the following? Looking at the people looking at SYSTEM_RUNNING, I do note some odd cases. Why the heck does kernel/perf_counter.c do it, for example? Linus --- init/main.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/init/main.c b/init/main.c index 2c5ade7..f10d9cd 100644 --- a/init/main.c +++ b/init/main.c @@ -788,6 +788,7 @@ static void __init do_initcalls(void) { initcall_t *call; + system_state = SYSTEM_RUNNING; for (call = __early_initcall_end; call < __initcall_end; call++) do_one_initcall(*call); @@ -839,7 +840,6 @@ static noinline int init_post(void) free_initmem(); unlock_kernel(); mark_rodata_ro(); - system_state = SYSTEM_RUNNING; numa_default_policy(); if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)