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: Yinghai Lu <yhlu.kernel@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@@ -1197,36 +1197,6 @@ void __init init_apic_mappings(void)
|
|||||||
if (boot_cpu_physical_apicid == -1U)
|
if (boot_cpu_physical_apicid == -1U)
|
||||||
boot_cpu_physical_apicid = GET_APIC_ID(read_apic_id());
|
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
#include <linux/bootmem.h>
|
||||||
#include <linux/mc146818rtc.h>
|
#include <linux/mc146818rtc.h>
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <linux/acpi.h>
|
#include <linux/acpi.h>
|
||||||
@@ -2852,3 +2853,34 @@ static int __init parse_noapic(char *arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
early_param("noapic", parse_noapic);
|
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++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -766,16 +766,14 @@ void __init setup_arch(char **cmdline_p)
|
|||||||
get_smp_config();
|
get_smp_config();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
|
||||||
init_apic_mappings();
|
init_apic_mappings();
|
||||||
ioapic_init_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)
|
if (def_to_bigsmp)
|
||||||
printk(KERN_WARNING "More than 8 CPUs detected and "
|
printk(KERN_WARNING "More than 8 CPUs detected and "
|
||||||
"CONFIG_X86_PC cannot handle it.\nUse "
|
"CONFIG_X86_PC cannot handle it.\nUse "
|
||||||
"CONFIG_X86_GENERICARCH or CONFIG_X86_BIGSMP.\n");
|
"CONFIG_X86_GENERICARCH or CONFIG_X86_BIGSMP.\n");
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
kvm_guest_init();
|
kvm_guest_init();
|
||||||
|
|
||||||
|
@@ -1198,10 +1198,6 @@ void __init trap_init(void)
|
|||||||
early_iounmap(p, 4);
|
early_iounmap(p, 4);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_X86_LOCAL_APIC
|
|
||||||
init_apic_mappings();
|
|
||||||
#endif
|
|
||||||
set_trap_gate(0, ÷_error);
|
|
||||||
set_intr_gate(1, &debug);
|
set_intr_gate(1, &debug);
|
||||||
set_intr_gate(2, &nmi);
|
set_intr_gate(2, &nmi);
|
||||||
set_system_intr_gate(3, &int3); /* int3/4 can be called from all */
|
set_system_intr_gate(3, &int3); /* int3/4 can be called from all */
|
||||||
|
@@ -135,6 +135,7 @@ extern int apic_is_clustered_box(void);
|
|||||||
#else /* !CONFIG_X86_LOCAL_APIC */
|
#else /* !CONFIG_X86_LOCAL_APIC */
|
||||||
static inline void lapic_shutdown(void) { }
|
static inline void lapic_shutdown(void) { }
|
||||||
#define local_apic_timer_c2_ok 1
|
#define local_apic_timer_c2_ok 1
|
||||||
|
static inline void init_apic_mappings(void) { }
|
||||||
|
|
||||||
#endif /* !CONFIG_X86_LOCAL_APIC */
|
#endif /* !CONFIG_X86_LOCAL_APIC */
|
||||||
|
|
||||||
|
@@ -186,6 +186,7 @@ extern void ioapic_init_mappings(void);
|
|||||||
#else /* !CONFIG_X86_IO_APIC */
|
#else /* !CONFIG_X86_IO_APIC */
|
||||||
#define io_apic_assign_pci_irqs 0
|
#define io_apic_assign_pci_irqs 0
|
||||||
static const int timer_through_8259 = 0;
|
static const int timer_through_8259 = 0;
|
||||||
|
static inline void ioapic_init_mappings(void) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user