> -----Original Message----- > From: K. Y. Srinivasan [mailto:kys@xxxxxxxxxxxxx] > Sent: Sunday, June 21, 2015 7:56 PM > To: gregkh@xxxxxxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; > devel@xxxxxxxxxxxxxxxxxxxxxx; mingo@xxxxxxxxxx; peterz@xxxxxxxxxxxxx; > rafael.j.wysocki@xxxxxxxxx; tglx@xxxxxxxxxxxxx > Cc: Vitaly Kuznetsov; KY Srinivasan > Subject: [PATCH 1/1] cpu-hotplug: export > cpu_hotplug_enable/cpu_hotplug_disable > > From: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> > > Loaded Hyper-V module will use these functions to disable CPU > hotplug under certain circumstances. Convert cpu_hotplug_disabled > to a counter (protected by cpu_add_remove_lock) to support e.g. > disable -> disable -> enable call sequences. Greg is willing to take this patch through his tree if gets an ack. Please provide your feedback. Regards, K. Y > > Signed-off-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> > Signed-off-by: K. Y. Srinivasan <kys@xxxxxxxxxxxxx> > --- > Documentation/power/suspend-and-cpuhotplug.txt | 6 +++--- > kernel/cpu.c | 13 ++++++++----- > 2 files changed, 11 insertions(+), 8 deletions(-) > > diff --git a/Documentation/power/suspend-and-cpuhotplug.txt > b/Documentation/power/suspend-and-cpuhotplug.txt > index 2850df3..2fc9095 100644 > --- a/Documentation/power/suspend-and-cpuhotplug.txt > +++ b/Documentation/power/suspend-and-cpuhotplug.txt > @@ -72,7 +72,7 @@ More details follow: > | > v > Disable regular cpu hotplug > - by setting cpu_hotplug_disabled=1 > + by increasing cpu_hotplug_disabled > | > v > Release cpu_add_remove_lock > @@ -89,7 +89,7 @@ Resuming back is likewise, with the counterparts being > (in the order of > execution during resume): > * enable_nonboot_cpus() which involves: > | Acquire cpu_add_remove_lock > - | Reset cpu_hotplug_disabled to 0, thereby enabling regular cpu hotplug > + | Decrease cpu_hotplug_disabled, thereby enabling regular cpu hotplug > | Call _cpu_up() [for all those cpus in the frozen_cpus mask, in a loop] > | Release cpu_add_remove_lock > v > @@ -120,7 +120,7 @@ after the entire cycle is complete (i.e., suspend + > resume). > Acquire cpu_add_remove_lock > | > v > - If cpu_hotplug_disabled is 1 > + If cpu_hotplug_disabled > 0 > return gracefully > | > | > diff --git a/kernel/cpu.c b/kernel/cpu.c > index 94bbe46..8f35ee6 100644 > --- a/kernel/cpu.c > +++ b/kernel/cpu.c > @@ -190,17 +190,19 @@ void cpu_hotplug_done(void) > void cpu_hotplug_disable(void) > { > cpu_maps_update_begin(); > - cpu_hotplug_disabled = 1; > + cpu_hotplug_disabled++; > cpu_maps_update_done(); > } > +EXPORT_SYMBOL_GPL(cpu_hotplug_disable); > > void cpu_hotplug_enable(void) > { > cpu_maps_update_begin(); > - cpu_hotplug_disabled = 0; > + if (cpu_hotplug_disabled) > + cpu_hotplug_disabled--; > cpu_maps_update_done(); > } > - > +EXPORT_SYMBOL_GPL(cpu_hotplug_enable); > #endif /* CONFIG_HOTPLUG_CPU */ > > /* Need to know about CPUs going up/down? */ > @@ -600,7 +602,7 @@ int disable_nonboot_cpus(void) > if (!error) { > BUG_ON(num_online_cpus() > 1); > /* Make sure the CPUs won't be enabled by someone else > */ > - cpu_hotplug_disabled = 1; > + cpu_hotplug_disabled++; > } else { > pr_err("Non-boot CPUs are not disabled\n"); > } > @@ -622,7 +624,8 @@ void __ref enable_nonboot_cpus(void) > > /* Allow everyone to use the CPU hotplug again */ > cpu_maps_update_begin(); > - cpu_hotplug_disabled = 0; > + if (cpu_hotplug_disabled) > + cpu_hotplug_disabled--; > if (cpumask_empty(frozen_cpus)) > goto out; > > -- > 1.7.4.1 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel