From 2f3a620dec7ce9b5166e849b8b47fb019f2bb59f Mon Sep 17 00:00:00 2001 From: Michael Neumann Date: Sat, 16 Oct 2010 12:14:26 +0200 Subject: [PATCH] x86_64: Make APIC_IO work again. pmap_init() still needs to setup the lapic pointer otherwise it results in a null pointer deref somewhere else. --- sys/platform/pc64/apic/mpapic.c | 7 +++++++ sys/platform/pc64/x86_64/pmap.c | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/sys/platform/pc64/apic/mpapic.c b/sys/platform/pc64/apic/mpapic.c index 884f2e12aa..da927e0a22 100644 --- a/sys/platform/pc64/apic/mpapic.c +++ b/sys/platform/pc64/apic/mpapic.c @@ -999,6 +999,11 @@ u_sleep(int count) /* spin */ ; } +/* + * XXX: Hack: Used by pmap_init + */ +vm_offset_t cpu_apic_addr; + void lapic_init(vm_offset_t lapic_addr) { @@ -1013,6 +1018,8 @@ lapic_init(vm_offset_t lapic_addr) pmap_get_pgeflag() | (lapic_addr & PG_FRAME)); #endif + cpu_apic_addr = lapic_addr; + kprintf("lapic: at 0x%08lx\n", lapic_addr); } diff --git a/sys/platform/pc64/x86_64/pmap.c b/sys/platform/pc64/x86_64/pmap.c index 4280352085..7b0d2bb46b 100644 --- a/sys/platform/pc64/x86_64/pmap.c +++ b/sys/platform/pc64/x86_64/pmap.c @@ -738,6 +738,11 @@ pmap_set_opt(void) #endif /* + * XXX: Hack. Required by pmap_init() + */ +extern vm_offset_t cpu_apic_addr; + +/* * Initialize the pmap module. * Called by vm_init, to initialize any structures that the pmap * system needs to map virtual memory. @@ -785,6 +790,12 @@ pmap_init(void) * Now it is safe to enable pv_table recording. */ pmap_initialized = TRUE; +#ifdef SMP + /* + * XXX: Hack + */ + lapic = pmap_mapdev_uncacheable(cpu_apic_addr, sizeof(struct LAPIC)); +#endif } /* -- 2.11.4.GIT