Date: Wed, 14 Mar 2007 16:07:59 -0700 From: Nate Lawson <nate@root.org> To: Julian Elischer <julian@elischer.org> Cc: cvs-src@freebsd.org, src-committers@freebsd.org, Alan Cox <alc@cs.rice.edu>, cvs-all@freebsd.org Subject: Re: [SRC] cvs commit: src/sys/i386/acpica acpi_wakeup.c src/sys/i386/i386 pmap.c Message-ID: <45F8804F.1050606@root.org> In-Reply-To: <45F8793E.5080602@elischer.org> References: <20070314223016.7CD4E16A418@hub.freebsd.org> <45F8793E.5080602@elischer.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Julian Elischer wrote: > Nate Lawson wrote: >> njl 2007-03-14 22:30:02 UTC >> >> FreeBSD src repository >> >> Modified files: >> sys/i386/acpica acpi_wakeup.c sys/i386/i386 pmap.c >> Log: >> Create an identity mapping (V=P) super page for the low memory >> region on >> boot. Then, just switch to the kernel pmap when suspending instead of >> allocating/freeing our own mapping every time. This should solve a >> panic >> of pmap_remove() being called with interrupts disabled. Thanks to Alan >> Cox for developing this patch. >> Note: this means that ACPI requires super page (PG_PS) support in >> the CPU. >> This has been present since the Pentium and first documented in the >> Pentium Pro. However, it may need to be revisited later. > > I thought we were still supporting 486 class machines. > if so, shouldn't this be somehow ifdef'd? Yes, that part needs to be covered although an ifdef is not necessary (PG_PS is defined for even 486's so this will compile). >> Index: src/sys/i386/i386/pmap.c >> diff -u src/sys/i386/i386/pmap.c:1.582 src/sys/i386/i386/pmap.c:1.583 >> --- src/sys/i386/i386/pmap.c:1.582 Mon Mar 5 21:40:10 2007 >> +++ src/sys/i386/i386/pmap.c Wed Mar 14 22:30:02 2007 >> @@ -422,6 +422,13 @@ >> >> /* Turn on PG_G on kernel page(s) */ >> pmap_set_pg(); >> + >> + /* >> + * Create an identity mapping (virt == phys) for the low 1 MB >> + * physical memory region that is used by the ACPI wakeup code. >> + * This mapping must not have PG_G set. + */ >> + kernel_pmap->pm_pdir[0] = PG_PS | PG_RW | PG_V; >> } >> >> /* I propose conditionalizing this code on "if (pseflag)". Of course, the acpi suspend code will fail on 486's but we disable acpi entirely if the bios date < 1999/1/1 and acpi isn't supported on the 486. -- Nate
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?45F8804F.1050606>