Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bab9a3da authored by Borislav Petkov's avatar Borislav Petkov Committed by H. Peter Anvin
Browse files

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: default avatarBorislav Petkov <borislav.petkov@amd.com>
Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
parent d2ba8b21
Loading
Loading
Loading
Loading
+10 −16
Original line number Diff line number Diff line
@@ -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);