mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
x86, msr: execute on the correct CPU subset
Make rdmsr_on_cpus/wrmsr_on_cpus execute on the current CPU only if it is in the supplied bitmask. Signed-off-by: Borislav Petkov <borislav.petkov@amd.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
parent
d2ba8b211b
commit
bab9a3da93
@ -89,16 +89,13 @@ void rdmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs)
|
||||
rv.msrs = msrs;
|
||||
rv.msr_no = msr_no;
|
||||
|
||||
preempt_disable();
|
||||
/*
|
||||
* FIXME: handle the CPU we're executing on separately for now until
|
||||
* smp_call_function_many has been fixed to not skip it.
|
||||
*/
|
||||
this_cpu = raw_smp_processor_id();
|
||||
smp_call_function_single(this_cpu, __rdmsr_on_cpu, &rv, 1);
|
||||
this_cpu = get_cpu();
|
||||
|
||||
if (cpumask_test_cpu(this_cpu, mask))
|
||||
__rdmsr_on_cpu(&rv);
|
||||
|
||||
smp_call_function_many(mask, __rdmsr_on_cpu, &rv, 1);
|
||||
preempt_enable();
|
||||
put_cpu();
|
||||
}
|
||||
EXPORT_SYMBOL(rdmsr_on_cpus);
|
||||
|
||||
@ -121,16 +118,13 @@ void wrmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs)
|
||||
rv.msrs = msrs;
|
||||
rv.msr_no = msr_no;
|
||||
|
||||
preempt_disable();
|
||||
/*
|
||||
* FIXME: handle the CPU we're executing on separately for now until
|
||||
* smp_call_function_many has been fixed to not skip it.
|
||||
*/
|
||||
this_cpu = raw_smp_processor_id();
|
||||
smp_call_function_single(this_cpu, __wrmsr_on_cpu, &rv, 1);
|
||||
this_cpu = get_cpu();
|
||||
|
||||
if (cpumask_test_cpu(this_cpu, mask))
|
||||
__wrmsr_on_cpu(&rv);
|
||||
|
||||
smp_call_function_many(mask, __wrmsr_on_cpu, &rv, 1);
|
||||
preempt_enable();
|
||||
put_cpu();
|
||||
}
|
||||
EXPORT_SYMBOL(wrmsr_on_cpus);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user