panic: vm_fault: fault on nofualt entry, addr: 81423000

John Baldwin jhb at
Fri Jan 25 06:39:31 PST 2008

On Friday 25 January 2008 07:55:46 am Pete French wrote:
> > Hmm, so that's fine.  What pointer is returned by madt_map_table?
> 0x800e7610

That isn't page-aligned which is unexpected, though it should still
work fine.

> I also put some prints in afterwards to try and see how far through
> the loop it was getting:
> 		count = (xsdt->Header.Length - sizeof(ACPI_TABLE_HEADER)) /
>                     sizeof(UINT64);
>                 printf("DEBUG: count is %d\n", count);
>                 for (i = 0; i < count; i++) {
>                         printf("DEBUG: probing %d - offset %p\n",
>                                         i, xsdt->TableOffsetEntry[i]);
>                         if (madt_probe_table(xsdt->TableOffsetEntry[i]))
>                                 break;
>                 }
> The output is interesting - I get count printed as 6, but then nothing
> else, just the panic. Which leads me to believe that it is the access
> to xsdt->TableOffsetEntry[0] which is causing the panic.

Hmm, that is odd.  The header.Length and the the actual table should all be
in the same page, so you shouldn't be getting a page fault.  Can you add
some printfs to madt_map() to see what the final starting (pa, length) are
before the call to pmap_kenter_temporary() and then add a printf for each
iteration of the while loop showing the (pa, la, remaining length)?

John Baldwin

More information about the freebsd-stable mailing list