bus_dmamem_alloc() can't handle large NOWAIT requests
Peter Jeremy
PeterJeremy at optushome.com.au
Sat Jan 8 17:11:36 PST 2005
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.
--
Peter Jeremy
More information about the freebsd-current
mailing list