busdma buffer management enhancements - call for review and test

Warner Losh imp at bsdimp.com
Tue Sep 4 18:08:39 UTC 2012


On Sep 4, 2012, at 11:56 AM, Ian Lepore wrote:

> On Tue, 2012-09-04 at 12:40 -0500, Mark Tinguely wrote:
>> On Tue, Sep 4, 2012 at 11:58 AM, Ian Lepore
>> <freebsd at damnhippie.dyndns.org> wrote:
>> How about having a per processor cache line definition rather than using:
>> 
>> +#define        MIN_ZONE_BUFSIZE        32
>> 
>> For those archs that have a 64 byte cache line.
>> 
>> I like the separation of the regular and BUS_DMA_COHERENT or
>> BUS_DMA_NOCACHE. I never liked turning the cache off the entire page
>> for a few DMA buffers.
>> 
>> --Mark.
> 
> The code in busdma_bufalloc.c (where that constant appears) knows
> nothing about architecture cache line sizes, that info has to be passed
> in to the create call as the minimum_alignment parameter.
> 
> The point of that constant is to enforce internal limits in the
> implementation... if the caller passes in a minimum_alignment size less
> than 32, it will still use 32 as the smallest buffer size in the cache,
> purely because it only allocates enough slots in the array to handle
> log2(PAGE_SIZE) - log2(MIN_ZONE_BUFSIZE) + 1 zones, but you can't use
> log2() in a compile time constant expression, so things are a bit
> hand-tuned, and there's some code for sanity-enforcement.

kassert then, because we'll have this problem all over again.  Would be nice if we could make those arrays dynamically sized though...

Will read the rest of the patch later today...

Warner



More information about the freebsd-arm mailing list