On Tue, 6 May 2014 12:29:24 +0200 Borislav Petkov <b...@alien8.de> wrote:
> Hi, > > so I'm getting sick'n'tired of all those bug reports of people pounding > cpu hotplug with stupid scripts. > > * We know cpu hotplug is fragile/buggy/crap/needs proper rewrite. > > * Stupid hotplugging script doesn't resemble any real use case - go use > a real benchmark/stress test to trigger bugs. > > So if we can't make pounders stop jerking off, let's make it > uninterestingly slow. Stupid patch below, it might be completely idiotic > to do it this way but at least starts the discussion about this being a > really annoying issue which needs some sort of dealing with. Hey, I'm one of those that jerk off to CPU hotplug stress test scripts! > > I dunno, we can make it configurable (which will probably defeat its > purpose partially), we can do some more fancy ratelimiting, per cpu, > whatever... we'll see. > > Opinions, flames? We were just bitching about this yesterday, but -rt related. As anything crap in mainline just becomes exponentially more crap in -rt. The CPU hotplug case becomes a mountain of crap that we just dig tunnels through to get by. A while ago Thomas had a proof of concept patch I believe that was suppose to pick up traction but unfortunately never went anywhere, even after being told it would. The real option is to rewrite cpu hotplug. -- Steve > > --- > diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c > index 006b1bc5297d..615c7af767ed 100644 > --- a/drivers/base/cpu.c > +++ b/drivers/base/cpu.c > @@ -40,6 +40,11 @@ static void change_cpu_under_node(struct cpu *cpu, > cpu->node_id = to_nid; > } > > +static void delay_hotplug(void) > +{ > + schedule_timeout_uninterruptible(msecs_to_jiffies(MSEC_PER_SEC)); > +} > + > static int __ref cpu_subsys_online(struct device *dev) > { > struct cpu *cpu = container_of(dev, struct cpu, dev); > @@ -47,6 +52,8 @@ static int __ref cpu_subsys_online(struct device *dev) > int from_nid, to_nid; > int ret; > > + delay_hotplug(); > + > from_nid = cpu_to_node(cpuid); > if (from_nid == NUMA_NO_NODE) > return -ENODEV; > @@ -65,6 +72,8 @@ static int __ref cpu_subsys_online(struct device *dev) > > static int cpu_subsys_offline(struct device *dev) > { > + delay_hotplug(); > + > return cpu_down(dev->id); > } > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/