Re: [ 35/48] dummy: fix rcu_sched self-detected stalls

From: Ben Hutchings
Date: Mon Jul 09 2012 - 19:47:13 EST


On Mon, 2012-07-09 at 20:39 -0300, Herton Ronaldo Krzesinski wrote:
> On Mon, Jul 09, 2012 at 03:31:51PM +0100, Ben Hutchings wrote:
> > 3.2-stable review patch. If anyone has any objections, please let me know.
> >
> > ------------------
> >
> > From: Eric Dumazet <edumazet@xxxxxxxxxx>
> >
> > [ Upstream commit 16b0dc29c1af9df341428f4c49ada4f626258082 ]
> >
> > Trying to "modprobe dummy numdummies=30000" triggers :
> >
> > INFO: rcu_sched self-detected stall on CPU { 8} (t=60000 jiffies)
> >
> > After this splat, RTNL is locked and reboot is needed.
> >
> > We must call cond_resched() to avoid this, even holding RTNL.
> >
> > Signed-off-by: Eric Dumazet <edumazet@xxxxxxxxxx>
> > Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
> > Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx>
> > ---
> > drivers/net/dummy.c | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
> > index eeac9ca..87e4632 100644
> > --- a/drivers/net/dummy.c
> > +++ b/drivers/net/dummy.c
> > @@ -186,8 +186,10 @@ static int __init dummy_init_module(void)
> > rtnl_lock();
> > err = __rtnl_link_register(&dummy_link_ops);
> >
> > - for (i = 0; i < numdummies && !err; i++)
> > + for (i = 0; i < numdummies && !err; i++) {
> > err = dummy_init_one();
> > + cond_resched();
> > + }
>
> Hi, I got the following build error with this applied to 3.2, on i386
> and arm builds:
>
> linux-stable/drivers/net/dummy.c: In function 'dummy_init_module':
> linux-stable/drivers/net/dummy.c:191:3: error: implicit declaration of function 'cond_resched' [-Werror=implicit-function-declaration]
>
> This doesn't happen on mainline so far. Looking here on mainline, sched.h is
> implicitly included through <linux/netdevice.h> ->
> <net/netprio_cgroup.h> -> <linux/cgroup.h> -> <linux/sched.h>
>
> But on 3.2 this doesn't happen, and build fails on i386 and arm. On
> x86_64 it works though since sched.h is pulled from netdevice.h ->
> ethtool.h -> compat.h if CONFIG_COMPAT is enabled.

I built on x86_64...

> May be the best solution is for the patch backported to 3.2, to include
> <linux/sched.h> also.
[...]

Not sure. Really, it ought to be directly included from this file in
mainline as well rather than depending on that long chain of includes.
But it's not an important bug in mainline (yet) so perhaps we can treat
it as only required in stable.

Ben.

--
Ben Hutchings
The generation of random numbers is too important to be left to chance.
- Robert Coveyou

Attachment: signature.asc
Description: This is a digitally signed message part