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

Commit 3c999f14 authored by Yinghai Lu's avatar Yinghai Lu Committed by Ingo Molnar
Browse files

x86: check command line when CONFIG_X86_MPPARSE is not set, v2



if acpi=off, acpi=noirq and pci=noacpi, we need to disable apic.

Signed-off-by: default avatarYinghai Lu <yhlu.kernel@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: "Maciej W. Rozycki" <macro@linux-mips.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 88a6846c
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -1787,6 +1787,20 @@ static int __init parse_pci(char *arg)
}
early_param("pci", parse_pci);

int __init acpi_mps_check(void)
{
#if defined(CONFIG_X86_LOCAL_APIC) && !defined(CONFIG_X86_MPPARSE)
/* mptable code is not built-in*/
	if (acpi_disabled || acpi_noirq) {
		printk(KERN_WARNING "MPS support code is not built-in.\n"
		       "Using acpi=off or acpi=noirq or pci=noacpi "
		       "may have problem\n");
		return 1;
	}
#endif
	return 0;
}

#ifdef CONFIG_X86_IO_APIC
static int __init parse_acpi_skip_timer_override(char *arg)
{
+1 −1
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ unsigned long mp_lapic_addr;
 *
 * -1=force-disable, +1=force-enable
 */
static int enable_local_apic __initdata;
int enable_local_apic;

/* Local APIC timer verification ok */
static int local_apic_timer_verify_ok;
+4 −0
Original line number Diff line number Diff line
@@ -161,6 +161,10 @@ void __init setup_per_cpu_areas(void)
	char *ptr;
	int cpu;

	/* no processor from mptable or madt */
	if (!num_processors)
		num_processors = 1;

#ifdef CONFIG_HOTPLUG_CPU
	prefill_possible_map();
#else
+5 −0
Original line number Diff line number Diff line
@@ -677,6 +677,11 @@ void __init setup_arch(char **cmdline_p)

	parse_early_param();

	if (acpi_mps_check()){
		enable_local_apic = -1;
		clear_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC);
	}

	finish_e820_parsing();

	probe_roms();
+9 −0
Original line number Diff line number Diff line
@@ -302,6 +302,11 @@ void __init setup_arch(char **cmdline_p)

	parse_early_param();

	if (acpi_mps_check()) {
		disable_apic = 1;
		clear_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC);
	}

#ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT
	if (init_ohci1394_dma_early)
		init_ohci1394_dma_on_all_controllers();
@@ -723,6 +728,10 @@ static void __cpuinit early_identify_cpu(struct cpuinfo_x86 *c)
		cpu_devs[c->x86_vendor]->c_early_init(c);

	validate_pat_support(c);

	/* early_param could clear that, but recall get it set again */
	if (disable_apic)
		clear_cpu_cap(c, X86_FEATURE_APIC);
}

/*
Loading