Actually, this:
m = &vm_page_array[pmap_page_index(addr) - first_page];
should probably be written as:
m = &vm_page_array[PHYS_TO_VM_PAGE(addr)];
But this reminds me of somethign else. In the MACHINE_NONCONTIG case,
should we assume that pmap_page_index() already adjusts for
first_page, so we can avoid the extra arithmetic on machines that
don't need it?