Re: bus_dmamem_alloc() can't handle large NOWAIT requests

From: Scott Long <scottl_at_freebsd.org>
Date: Sat, 08 Jan 2005 22:25:03 -0700
Peter Jeremy wrote:

> I've just been tracking down a panic in 4.x and found that the problem
> is still present in 6.x.
> 
> According to bus_dma(9), bus_dmamem_alloc() can be invoked with a
> flag BUS_DMA_NOWAIT to indicate that sleep()ing is not allowed.
> 
> At least on the i386, if the requested size exceeds 1 page (or some
> other cases), the requested memory will be allocated via contigmalloc().
> 
> bus_dmamem_alloc() maps BUS_DMA_NOWAIT to M_NOWAIT but contigmalloc()
> does not support M_NOWAIT and will tsleep() under some conditions.
> 
> Unfortunately, I don't know enough about the VM code to be able to
> suggest a fix.
> 

Will contigmalloc() actually sleep?  If so, then this is something that
needs to be addressed in contigmalloc.

Scott
Received on Sun Jan 09 2005 - 04:25:22 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:25 UTC