Re: Getting/Forcing Greater than 4KB Buffer Allocations

From: Pyun YongHyeon <pyunyh_at_gmail.com>
Date: Wed, 18 Jul 2007 11:18:39 +0900
On Tue, Jul 17, 2007 at 04:54:31PM -0700, David Christensen wrote:
 > I'm investigating a problem with my bce driver which occurs when I ask
 > for a jumbo
 > mbuf cluster (through m_cljget()).  When I map the memory for DMA I
 > normally 
 > get 3 memory segments (4KB + 4KB + 1KB) on my system, but on another
 > user's 
 > system he's seeing 2 memory segments (8KB + 1KB).  Is there a
 > configuration
 > option that allows this or some other tuning variable involved?  The
 > system is a 
 > Xeon dual-core processor and has 8GB of RAM, running an AMD64 version of
 > the kernel.
 >  

I've briefly looked over bus_dma usage on bce(4). It seems that you
told bus_dma the the dma map could be made up of BCE_MAX_SEGMENTS
segments, where a dma segment could be MJUM9BYTES bytes. If you want
just two segments you may have to use 2 instead of BCE_MAX_SEGMENTS.
If the hardware can support up to BCE_MAX_SEGMENTS dma segments on Rx
descriptors you should be prepared to handle that number of dma
segments too(e.g. You don't know how may dma segments would be
returned by bus_dma, you just know the upper bound as you specified
in bus_dma_tag_create()).
If the hardware can handle just up to 4KB for a dma segment you
should tell bus_dma the restriction of the dma segment.
If you have to get a single dma segment that covers MJUM9BYTES bytes
due to the limitation of the hardware you may have to use local
allocator.

-- 
Regards,
Pyun YongHyeon
Received on Wed Jul 18 2007 - 00:18:48 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:14 UTC