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

Commit 5f1f935c authored by Avi Kivity's avatar Avi Kivity Committed by Thomas Gleixner
Browse files

i386: simplify smp_call_function_single() call sequence in msr-on-cpu



smp_call_function_single() now knows how to call the function on the
current cpu.

[ tglx: arch/x86 adaptation ]

Cc: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 4a40cb1e
Loading
Loading
Loading
Loading
+22 −40
Original line number Diff line number Diff line
@@ -26,27 +26,18 @@ static void __rdmsr_safe_on_cpu(void *info)
static int _rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h, int safe)
{
	int err = 0;
	preempt_disable();
	if (smp_processor_id() == cpu)
		if (safe)
			err = rdmsr_safe(msr_no, l, h);
		else
			rdmsr(msr_no, *l, *h);
	else {
	struct msr_info rv;

	rv.msr_no = msr_no;
	if (safe) {
			smp_call_function_single(cpu, __rdmsr_safe_on_cpu,
						 &rv, 0, 1);
		smp_call_function_single(cpu, __rdmsr_safe_on_cpu, &rv, 0, 1);
		err = rv.err;
	} else {
		smp_call_function_single(cpu, __rdmsr_on_cpu, &rv, 0, 1);
	}
	*l = rv.l;
	*h = rv.h;
	}
	preempt_enable();

	return err;
}

@@ -67,27 +58,18 @@ static void __wrmsr_safe_on_cpu(void *info)
static int _wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h, int safe)
{
	int err = 0;
	preempt_disable();
	if (smp_processor_id() == cpu)
		if (safe)
			err = wrmsr_safe(msr_no, l, h);
		else
			wrmsr(msr_no, l, h);
	else {
	struct msr_info rv;

	rv.msr_no = msr_no;
	rv.l = l;
	rv.h = h;
	if (safe) {
			smp_call_function_single(cpu, __wrmsr_safe_on_cpu,
						 &rv, 0, 1);
		smp_call_function_single(cpu, __wrmsr_safe_on_cpu, &rv, 0, 1);
		err = rv.err;
	} else {
		smp_call_function_single(cpu, __wrmsr_on_cpu, &rv, 0, 1);
	}
	}
	preempt_enable();

	return err;
}