Confusion in acpi_sleep_machdep().

Matthew Dillon dillon at apollo.backplane.com
Sun Dec 31 12:54:27 PST 2006


    I'm trying to figure out how the acpi_sleep_machdep() code works and
    there are a couple of lines I just don't understand:

        pm = vmspace_pmap(p->p_vmspace);
        cr3 = rcr3();
#ifdef PAE
        load_cr3(vtophys(pm->pm_pdpt));
#else
        load_cr3(vtophys(pm->pm_pdir));
#endif

        page = PHYS_TO_VM_PAGE(sc->acpi_wakephys);
        pmap_enter(pm, sc->acpi_wakephys, page,
                   VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE, 1);

    First, why isn't it just using kernel_pmap ?  What's all the load_cr3()
    stuff for ?

    Second, why is it entering the physical address sc->acpi_wakephys
    as the virtual address in the pmap ?  Shouldn't it be using
    sc->acpi_wakeaddr there?

    Anybody know ?

						-Matt


More information about the freebsd-hackers mailing list