Date: Thu, 15 Dec 2011 17:54:24 +0000 (UTC) From: Alan Cox <alc@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r228535 - head/sys/i386/i386 Message-ID: <201112151754.pBFHsOGL060922@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: alc Date: Thu Dec 15 17:54:23 2011 New Revision: 228535 URL: http://svn.freebsd.org/changeset/base/228535 Log: Simplify the implementation of the identity mapping in start_all_aps(). Since mpboot.s enables processor support for PG_PS before enabling paging, there is no reason that the identity must use 4 KB page mappings. Discussed with: jhb Modified: head/sys/i386/i386/locore.s head/sys/i386/i386/mp_machdep.c Modified: head/sys/i386/i386/locore.s ============================================================================== --- head/sys/i386/i386/locore.s Thu Dec 15 16:39:48 2011 (r228534) +++ head/sys/i386/i386/locore.s Thu Dec 15 17:54:23 2011 (r228535) @@ -775,8 +775,7 @@ no_kernend: * if we've enabled PSE above, we'll just switch the corresponding kernel * PDEs before we turn on paging. * - * XXX: We waste some pages here in the PSE case! DON'T BLINDLY REMOVE - * THIS! SMP needs the page table to be there to map the kernel P==V. + * XXX: We waste some pages here in the PSE case! */ xorl %eax, %eax movl R(KERNend),%ecx Modified: head/sys/i386/i386/mp_machdep.c ============================================================================== --- head/sys/i386/i386/mp_machdep.c Thu Dec 15 16:39:48 2011 (r228534) +++ head/sys/i386/i386/mp_machdep.c Thu Dec 15 17:54:23 2011 (r228535) @@ -145,9 +145,6 @@ static int bootAP; void *bootstacks[MAXCPU]; static void *dpcpu; -/* Hotwire a 0->4MB V==P mapping */ -extern pt_entry_t *KPTphys; - struct pcb stoppcbs[MAXCPU]; /* Variables needed for SMP tlb shootdown. */ @@ -931,7 +928,6 @@ start_all_aps(void) #ifndef PC98 u_char mpbiosreason; #endif - uintptr_t kptbase; u_int32_t mpbioswarmvec; int apic_id, cpu, i; @@ -949,11 +945,8 @@ start_all_aps(void) /* set up temporary P==V mapping for AP boot */ /* XXX this is a hack, we should boot the AP on its own stack/PTD */ - - kptbase = (uintptr_t)(void *)KPTphys; for (i = TMPMAP_START; i < NKPT; i++) - PTD[i] = (pd_entry_t)(PG_V | PG_RW | - ((kptbase + i * PAGE_SIZE) & PG_FRAME)); + PTD[i] = PTD[KPTDI + i]; invltlb(); /* start each AP */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201112151754.pBFHsOGL060922>