diff options
| author | Gautham R Shenoy <ego@in.ibm.com> | 2008-01-25 21:08:02 +0100 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-01-25 21:08:02 +0100 | 
| commit | 86ef5c9a8edd78e6bf92879f32329d89b2d55b5a (patch) | |
| tree | 7bf46885326a6fdbb0c3596855408e9a5634dd3a /arch/x86/kernel/microcode.c | |
| parent | d221938c049f4845da13c8593132595a6b9222a8 (diff) | |
| download | olio-linux-3.10-86ef5c9a8edd78e6bf92879f32329d89b2d55b5a.tar.xz olio-linux-3.10-86ef5c9a8edd78e6bf92879f32329d89b2d55b5a.zip  | |
cpu-hotplug: replace lock_cpu_hotplug() with get_online_cpus()
Replace all lock_cpu_hotplug/unlock_cpu_hotplug from the kernel and use
get_online_cpus and put_online_cpus instead as it highlights the
refcount semantics in these operations.
The new API guarantees protection against the cpu-hotplug operation, but
it doesn't guarantee serialized access to any of the local data
structures. Hence the changes needs to be reviewed.
In case of pseries_add_processor/pseries_remove_processor, use
cpu_maps_update_begin()/cpu_maps_update_done() as we're modifying the
cpu_present_map there.
Signed-off-by: Gautham R Shenoy <ego@in.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/microcode.c')
| -rw-r--r-- | arch/x86/kernel/microcode.c | 16 | 
1 files changed, 8 insertions, 8 deletions
diff --git a/arch/x86/kernel/microcode.c b/arch/x86/kernel/microcode.c index 09c315214a5..40cfd548871 100644 --- a/arch/x86/kernel/microcode.c +++ b/arch/x86/kernel/microcode.c @@ -436,7 +436,7 @@ static ssize_t microcode_write (struct file *file, const char __user *buf, size_  		return -EINVAL;  	} -	lock_cpu_hotplug(); +	get_online_cpus();  	mutex_lock(µcode_mutex);  	user_buffer = (void __user *) buf; @@ -447,7 +447,7 @@ static ssize_t microcode_write (struct file *file, const char __user *buf, size_  		ret = (ssize_t)len;  	mutex_unlock(µcode_mutex); -	unlock_cpu_hotplug(); +	put_online_cpus();  	return ret;  } @@ -658,14 +658,14 @@ static ssize_t reload_store(struct sys_device *dev, const char *buf, size_t sz)  		old = current->cpus_allowed; -		lock_cpu_hotplug(); +		get_online_cpus();  		set_cpus_allowed(current, cpumask_of_cpu(cpu));  		mutex_lock(µcode_mutex);  		if (uci->valid)  			err = cpu_request_microcode(cpu);  		mutex_unlock(µcode_mutex); -		unlock_cpu_hotplug(); +		put_online_cpus();  		set_cpus_allowed(current, old);  	}  	if (err) @@ -817,9 +817,9 @@ static int __init microcode_init (void)  		return PTR_ERR(microcode_pdev);  	} -	lock_cpu_hotplug(); +	get_online_cpus();  	error = sysdev_driver_register(&cpu_sysdev_class, &mc_sysdev_driver); -	unlock_cpu_hotplug(); +	put_online_cpus();  	if (error) {  		microcode_dev_exit();  		platform_device_unregister(microcode_pdev); @@ -839,9 +839,9 @@ static void __exit microcode_exit (void)  	unregister_hotcpu_notifier(&mc_cpu_notifier); -	lock_cpu_hotplug(); +	get_online_cpus();  	sysdev_driver_unregister(&cpu_sysdev_class, &mc_sysdev_driver); -	unlock_cpu_hotplug(); +	put_online_cpus();  	platform_device_unregister(microcode_pdev);  }  |