I sat down and built a low-memory reservation algorithm during early
    boot that should fix graphics driver attachments and USB disk key
    attachments both at boot time and late on after the system has been
    active for a while.  This is now in master.

    Essentially it will temporarily reserve the lower 1/4 of ram during
    device driver initialization, then return all but 16MB of the remaining
    reserved space to the free pool.  So this allows device drivers to
    allocate potentially very large contiguous spaces (some graphics drivers
    need to do that) during boot.  Then once the system has come up,
    ~16MB or so of low memory is left permanently reserved for USB and
    other contigmalloc() needs later on.

    The management code uses a revamped and fixed up kern/subr_alist.c
    module that has been unused in the kernel for several years, but was
    too good just to remove.  Well, now its been resurrected!  The
    contigmalloc() code will use the module to optimally allocate the
    request without having to scan page tables, and will fall back to
    scannin page tables if the allocation via the alist code fails.

    The same code can also potentially be used down the line to manage
    super-page page allocations but for now it is just being used to
    manage a DMA address space reserve.
    
                                        -Matt
                                        Matthew Dillon 
                                        <dil...@backplane.com>

Reply via email to