Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 9 Jan 2005 12:11:32 +1100
From:      Peter Jeremy <PeterJeremy@optushome.com.au>
To:        freebsd-current@freebsd.org
Subject:   bus_dmamem_alloc() can't handle large NOWAIT requests
Message-ID:  <20050109011132.GJ39552@cirb503493.alcatel.com.au>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050109011132.GJ39552>