contigmalloc for low address in SI_SUB_KMEM

Matthew Dillon dillon at
Wed Sep 3 09:23:21 PDT 2003

    I am almost certain that the problem is that all of the low (ISA DMA)
    memory is being allocated due to the large slab cluster size.

    The solution is to try to figure out why that is occuring.  Long ago
    we 'fixed' FreeBSD by having it allocate higher physical addresses
    first, leaving lower ones available for contigmalloc during booting.
    Somehow this feature must have gotten broken.

					Matthew Dillon 
					<dillon at xxxxxxxxxxxxx>

:Two questions:
:  - Is contigmalloc1() supposed to be able to allocate a memory range
:  0 - 0x9FFFF when the initialization stage is in SI_SUB_KMEM?
:  - Is there a way to find who grabbed that area, if any
:I'm trying to cope with a weird error from acpi_alloc_wakeup_handler()
:(not in our tree, look at /sys/i386/acpica/acpi_wakeup.c in
:FreeBSD-STABLE tree), which calls bus_dmamem_alloc(), which eventually
:calls contigmalloc(), which failed.
:On ACPI-enabled-FreeBSD-STABLE kernel running on the same machine, the
:allocation doesn't fail, so I think it's not specific to this hardware.
:Adding some printf's around contigmalloc1(), I've found that the lowest
:possible value available in vm_page_array was something like 0x5db000,
:which is far above 0x9FFFF, and allocation always fails. I even inserted
:a test code at the end of vm_mem_init(), but the result was the same;
:no success below 0x5db000. I need to look at much more codes around this
:because I'm new to vm stuffs, and I hope someone can track this down.
:My kernel config file is available on request.
:Sincerely yours.

More information about the Bugs mailing list