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

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

x86: let setup_arch call init_apic_mappings for 32bit



instead of calling it from trap_init()

also move init ioapic mapping out of apic_32.c

so 32 bit do same as 64 bit

Signed-off-by: default avatarYinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent ab67715c
Loading
Loading
Loading
Loading
+0 −30
Original line number Diff line number Diff line
@@ -1197,36 +1197,6 @@ void __init init_apic_mappings(void)
	if (boot_cpu_physical_apicid == -1U)
		boot_cpu_physical_apicid = GET_APIC_ID(read_apic_id());

#ifdef CONFIG_X86_IO_APIC
	{
		unsigned long ioapic_phys, idx = FIX_IO_APIC_BASE_0;
		int i;

		for (i = 0; i < nr_ioapics; i++) {
			if (smp_found_config) {
				ioapic_phys = mp_ioapics[i].mp_apicaddr;
				if (!ioapic_phys) {
					printk(KERN_ERR
					       "WARNING: bogus zero IO-APIC "
					       "address found in MPTABLE, "
					       "disabling IO/APIC support!\n");
					smp_found_config = 0;
					skip_ioapic_setup = 1;
					goto fake_ioapic_page;
				}
			} else {
fake_ioapic_page:
				ioapic_phys = (unsigned long)
					      alloc_bootmem_pages(PAGE_SIZE);
				ioapic_phys = __pa(ioapic_phys);
			}
			set_fixmap_nocache(idx, ioapic_phys);
			printk(KERN_DEBUG "mapped IOAPIC to %08lx (%08lx)\n",
			       __fix_to_virt(idx), ioapic_phys);
			idx++;
		}
	}
#endif
}

/*
+32 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/sched.h>
#include <linux/bootmem.h>
#include <linux/mc146818rtc.h>
#include <linux/compiler.h>
#include <linux/acpi.h>
@@ -2852,3 +2853,34 @@ static int __init parse_noapic(char *arg)
	return 0;
}
early_param("noapic", parse_noapic);

void __init ioapic_init_mappings(void)
{
	unsigned long ioapic_phys, idx = FIX_IO_APIC_BASE_0;
	int i;

	for (i = 0; i < nr_ioapics; i++) {
		if (smp_found_config) {
			ioapic_phys = mp_ioapics[i].mp_apicaddr;
			if (!ioapic_phys) {
				printk(KERN_ERR
				       "WARNING: bogus zero IO-APIC "
				       "address found in MPTABLE, "
				       "disabling IO/APIC support!\n");
				smp_found_config = 0;
				skip_ioapic_setup = 1;
				goto fake_ioapic_page;
			}
		} else {
fake_ioapic_page:
			ioapic_phys = (unsigned long)
				      alloc_bootmem_pages(PAGE_SIZE);
			ioapic_phys = __pa(ioapic_phys);
		}
		set_fixmap_nocache(idx, ioapic_phys);
		printk(KERN_DEBUG "mapped IOAPIC to %08lx (%08lx)\n",
		       __fix_to_virt(idx), ioapic_phys);
		idx++;
	}
}
+2 −4
Original line number Diff line number Diff line
@@ -766,16 +766,14 @@ void __init setup_arch(char **cmdline_p)
		get_smp_config();
#endif

#ifdef CONFIG_X86_64
	init_apic_mappings();
	ioapic_init_mappings();
#else
# if defined(CONFIG_SMP) && defined(CONFIG_X86_PC)

#if defined(CONFIG_SMP) && defined(CONFIG_X86_PC) && defined(CONFIG_X86_32)
	if (def_to_bigsmp)
		printk(KERN_WARNING "More than 8 CPUs detected and "
			"CONFIG_X86_PC cannot handle it.\nUse "
			"CONFIG_X86_GENERICARCH or CONFIG_X86_BIGSMP.\n");
# endif
#endif
	kvm_guest_init();

+0 −4
Original line number Diff line number Diff line
@@ -1198,10 +1198,6 @@ void __init trap_init(void)
	early_iounmap(p, 4);
#endif

#ifdef CONFIG_X86_LOCAL_APIC
	init_apic_mappings();
#endif
	set_trap_gate(0,  &divide_error);
	set_intr_gate(1,  &debug);
	set_intr_gate(2,  &nmi);
	set_system_intr_gate(3, &int3); /* int3/4 can be called from all */
+1 −0
Original line number Diff line number Diff line
@@ -135,6 +135,7 @@ extern int apic_is_clustered_box(void);
#else /* !CONFIG_X86_LOCAL_APIC */
static inline void lapic_shutdown(void) { }
#define local_apic_timer_c2_ok		1
static inline void init_apic_mappings(void) { }

#endif /* !CONFIG_X86_LOCAL_APIC */

Loading