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 JeremyReceived on Sun Jan 09 2005 - 00:11:36 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:25 UTC