Skip to content

Commit

Permalink
x86, msr: execute on the correct CPU subset
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Borislav Petkov authored and H. Peter Anvin committed Aug 3, 2009
1 parent d2ba8b2 commit bab9a3d
Showing 1 changed file with 10 additions and 16 deletions.
26 changes: 10 additions & 16 deletions arch/x86/lib/msr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -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);

Expand Down

0 comments on commit bab9a3d

Please sign in to comment.