From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: Matt Mackall <mpm@selenic.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Anton Vorontsov <avorontsov@ru.mvista.com>,
Andrew Morton <akpm@linux-foundation.org>,
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
Date: Thu, 09 Jul 2009 15:46:46 +0200 [thread overview]
Message-ID: <1247147206.7439.2.camel@twins> (raw)
In-Reply-To: <1247145977.21295.899.camel@calx>
On Thu, 2009-07-09 at 08:26 -0500, Matt Mackall wrote:
> On Wed, 2009-07-08 at 17:01 -0700, Linus Torvalds wrote:
> >
> > 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()".
>
> Well there are two ways of consistently defining SYSTEM_RUNNING:
>
> a) define it with reference to the well-understood notion of booting vs
> running and don't switch it until handing off to init
This makes the most sense IMHO.
> b) define it with reference to its usage by an arbitrary user like
> cond_resched()
>
> In the latter case, we obviously need to move it to the earliest point
> that scheduling is possible. But there are a number of things like
>
> http://lxr.linux.no/linux+v2.6.30/kernel/printk.c#L228
>
> that assume the definition is actually (a). We're currently within a
> couple lines of a strict definition of (a) already, so I actually think
> cond_resched() is just wrong (and we already know it broke a
> previously-working user). It should perhaps be using another private
> flag that gets set as soon as scheduling is up and running.
Right as mentioned before in this thread, we grew scheduler_running a
while back which could be used for this.
> But I'd actually go further and say that it's unfortunate to be checking
> extra flags in such an important inline, especially since the check is
> false for all but the first couple seconds of run time. Seems like we
> could avoid adding an extra check by artificially elevating the preempt
> count in early boot (or at compile time) then dropping it when
> scheduling becomes available.
Calling cond_resched() and co when !preemptable is an error so this
wouldn't actually work.
next prev parent reply other threads:[~2009-07-09 13:47 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-07 23:58 [PATCH/RFC] sched: Remove SYSTEM_RUNNING checks from cond_resched*() Anton Vorontsov
2009-07-08 0:50 ` Oleg Nesterov
2009-07-08 6:24 ` Peter Zijlstra
2009-07-08 12:03 ` Anton Vorontsov
2009-07-08 12:12 ` Peter Zijlstra
2009-07-08 12:55 ` Anton Vorontsov
2009-07-08 12:58 ` Peter Zijlstra
2009-07-08 20:45 ` [PATCH] sched: Make cond_resched*() available earlier Anton Vorontsov
2009-07-08 16:12 ` [PATCH/RFC] sched: Remove SYSTEM_RUNNING checks from cond_resched*() Linus Torvalds
2009-07-08 21:10 ` Andrew Morton
2009-07-08 21:33 ` Anton Vorontsov
2009-07-08 21:47 ` Andrew Morton
2009-07-08 22:20 ` [PATCH] netpoll: Fix carrier detection for drivers that are using phylib Anton Vorontsov
2009-07-09 0:01 ` Linus Torvalds
2009-07-09 3:08 ` David Miller
2009-07-09 7:56 ` Peter Zijlstra
2009-07-09 12:56 ` Matt Mackall
2009-07-09 13:26 ` Matt Mackall
2009-07-09 13:46 ` Peter Zijlstra [this message]
2009-07-09 14:18 ` Matt Mackall
2009-07-09 14:31 ` Peter Zijlstra
2009-07-09 14:43 ` Matt Mackall
2009-07-09 14:51 ` Peter Zijlstra
2009-07-09 15:06 ` Matt Mackall
2009-07-09 17:29 ` Linus Torvalds
2009-07-09 12:52 ` Matt Mackall
2009-07-09 23:20 ` [PATCH/RFC] sched: Remove SYSTEM_RUNNING checks from cond_resched*() Pavel Machek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1247147206.7439.2.camel@twins \
--to=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=avorontsov@ru.mvista.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mpm@selenic.com \
--cc=netdev@vger.kernel.org \
--cc=oleg@redhat.com \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.