Messages in this thread | | | Date | Sat, 05 Nov 2011 16:31:32 +0530 | From | "Srivatsa S. Bhat" <> | Subject | Re: [PATCH 7/9] x86/topology.c: Support functions for BSP online/offline |
| |
On 11/05/2011 03:33 AM, Fenghua Yu wrote: > From: Fenghua Yu <fenghua.yu@intel.com> > > By default, BSP can't be hotpluggable because bsp_hotpluggable is 0. Kernel > parameter bsp_hotplug can enable BSP hotplug feature. > > arch_cpu_maps_update_begin() and arch_cpu_maps_update_done() locks/unlocks > pm_mutex. This solves cpu maps race condition between BSP online check during > hibernate/suspend and BSP online/offline operations. > > arch_state_check() checks if BSP is still the first online CPU. > > Signed-off-by: Fenghua Yu <fenghua.yu@intel.com> > --- > arch/x86/kernel/topology.c | 44 +++++++++++++++++++++++++++++++++++++------- > 1 files changed, 37 insertions(+), 7 deletions(-) > > diff --git a/arch/x86/kernel/topology.c b/arch/x86/kernel/topology.c > index 8927486..287d7b6 100644 > --- a/arch/x86/kernel/topology.c > +++ b/arch/x86/kernel/topology.c > @@ -29,23 +29,53 @@ > #include <linux/mmzone.h> > #include <linux/init.h> > #include <linux/smp.h> > +#include <linux/suspend.h> > #include <asm/cpu.h> > > static DEFINE_PER_CPU(struct x86_cpu, cpu_devices); > > #ifdef CONFIG_HOTPLUG_CPU > + > +static int bsp_hotpluggable; > + > +static int __init enable_bsp_hotplug(char *str) > +{ > + bsp_hotpluggable = 1; > + return 0; > +} > + > +__setup("bsp_hotplug", enable_bsp_hotplug); > + > +void arch_cpu_maps_update_begin(void) > +{ > + lock_system_sleep(); > +} > + > +void arch_cpu_maps_update_done(void) > +{ > + unlock_system_sleep(); > +} > + > +int arch_state_check(void) > +{ > + if (cpumask_first(cpu_online_mask) != 0) { > + printk(KERN_WARNING "No CPU0.\n");
How about a better warning, perhaps like "CPU0 is offline" or something like that?
> + return -ENODEV; > + } > + > + return 0; > +} > + > int __ref arch_register_cpu(int num) > { > /* > - * CPU0 cannot be offlined due to several > - * restrictions and assumptions in kernel. This basically > - * doesn't add a control file, one cannot attempt to offline > - * BSP. > + * Suspend/resume depends on BSP. PIC interrupts depend on BSP. > * > - * Also certain PCI quirks require not to enable hotplug control > - * for all CPU's. > + * If the BSP depencies are under control, tell kernel to > + * enable BSP hotplug. This basically adds a control file and > + * one can attempt to offline BSP. > */ > - if (num) > + if (num || bsp_hotpluggable) > per_cpu(cpu_devices, num).cpu.hotpluggable = 1; > > return register_cpu(&per_cpu(cpu_devices, num).cpu, num);
Thanks, Srivatsa S. Bhat
| |