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

Commit 8227dce7 authored by Alex Nixon's avatar Alex Nixon Committed by Ingo Molnar
Browse files

x86: separate generic cpu disabling code from APIC writes in cpu_disable



It allows paravirt implementations of cpu_disable to share the
cpu_disable_common code, without having to take on board APIC
writes, which may not be appropriate.

Signed-off-by: default avatarAlex Nixon <alex.nixon@citrix.com>
Acked-by: default avatarJeremy Fitzhardinge <jeremy@goop.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent a21f5d88
Loading
Loading
Loading
Loading
+23 −17
Original line number Diff line number Diff line
@@ -1346,25 +1346,9 @@ static void __ref remove_cpu_from_maps(int cpu)
	numa_remove_cpu(cpu);
}

int native_cpu_disable(void)
void cpu_disable_common(void)
{
	int cpu = smp_processor_id();

	/*
	 * Perhaps use cpufreq to drop frequency, but that could go
	 * into generic code.
	 *
	 * We won't take down the boot processor on i386 due to some
	 * interrupts only being able to be serviced by the BSP.
	 * Especially so if we're not using an IOAPIC	-zwane
	 */
	if (cpu == 0)
		return -EBUSY;

	if (nmi_watchdog == NMI_LOCAL_APIC)
		stop_apic_nmi_watchdog(NULL);
	clear_local_APIC();

	/*
	 * HACK:
	 * Allow any queued timer interrupts to get serviced
@@ -1382,6 +1366,28 @@ int native_cpu_disable(void)
	remove_cpu_from_maps(cpu);
	unlock_vector_lock();
	fixup_irqs(cpu_online_map);
}

int native_cpu_disable(void)
{
	int cpu = smp_processor_id();

	/*
	 * Perhaps use cpufreq to drop frequency, but that could go
	 * into generic code.
	 *
	 * We won't take down the boot processor on i386 due to some
	 * interrupts only being able to be serviced by the BSP.
	 * Especially so if we're not using an IOAPIC	-zwane
	 */
	if (cpu == 0)
		return -EBUSY;

	if (nmi_watchdog == NMI_LOCAL_APIC)
		stop_apic_nmi_watchdog(NULL);
	clear_local_APIC();

	cpu_disable_common();
	return 0;
}

+1 −0
Original line number Diff line number Diff line
@@ -125,6 +125,7 @@ static inline void arch_send_call_function_ipi(cpumask_t mask)
	smp_ops.send_call_func_ipi(mask);
}

void cpu_disable_common(void);
void native_smp_prepare_boot_cpu(void);
void native_smp_prepare_cpus(unsigned int max_cpus);
void native_smp_cpus_done(unsigned int max_cpus);