Date: Tue, 30 Sep 2003 15:52:21 -0700 (PDT) From: Peter Wemm <peter@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 38929 for review Message-ID: <200309302252.h8UMqL41029438@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=38929 Change 38929 by peter@peter_hammer on 2003/09/30 15:51:24 I'm not going to do a P==V hack for amd64, I'll use a custom page table tree for boot and reclaim the pages. Start killing the vile SMPpt[] and SMP_prvspace nastiness. Affected files ... .. //depot/projects/hammer/sys/amd64/amd64/mp_machdep.c#11 edit Differences ... ==== //depot/projects/hammer/sys/amd64/amd64/mp_machdep.c#11 (text+ko) ==== @@ -435,14 +435,6 @@ outb(CMOS_REG, BIOS_RESET); mpbiosreason = inb(CMOS_DATA); - /* 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 = 0; i < NKPT; i++) - PTD[i] = (pd_entry_t)(PG_V | PG_RW | - ((kptbase + i * PAGE_SIZE) & PG_FRAME)); - invltlb(); - /* start each AP */ for (cpu = 0, apic_id = 0; apic_id < MAXCPU; apic_id++) { if (!cpu_info[apic_id].cpu_present || @@ -450,20 +442,11 @@ continue; cpu++; - /* first page of AP's private space */ - pg = cpu * amd64_btop(sizeof(struct privatespace)); - /* allocate a new private data page */ pc = (struct pcpu *)kmem_alloc(kernel_map, PAGE_SIZE); - /* wire it into the private page table page */ - SMPpt[pg] = (pt_entry_t)(PG_V | PG_RW | vtophys(pc)); - /* allocate and set up an idle stack data page */ - stack = (char *)kmem_alloc(kernel_map, KSTACK_PAGES * PAGE_SIZE); /* XXXKSE */ - for (i = 0; i < KSTACK_PAGES; i++) - SMPpt[pg + 1 + i] = (pt_entry_t) - (PG_V | PG_RW | vtophys(PAGE_SIZE * i + stack)); + stack = (char *)kmem_alloc(kernel_map, KSTACK_PAGES * PAGE_SIZE); /* prime data page for it to use */ pcpu_init(pc, cpu, sizeof(struct pcpu)); @@ -831,9 +814,6 @@ while (!aps_ready) ia32_pause(); - /* BSP may have changed PTD while we were waiting */ - invltlb(); - /* set up CPU registers and state */ cpu_setregs();
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200309302252.h8UMqL41029438>