Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 04 Sep 2012 11:56:30 -0600
From:      Ian Lepore <freebsd@damnhippie.dyndns.org>
To:        Mark Tinguely <marktinguely@gmail.com>
Cc:        freebsd-arm@freebsd.org, freebsd-mips@freebsd.org
Subject:   Re: busdma buffer management enhancements - call for review and test
Message-ID:  <1346781390.1140.641.camel@revolution.hippie.lan>
In-Reply-To: <CAP%2BM-_FMaLs1_gg4zoua52u=JPwLigBGp69Pwyf9OQKBzJ1vEQ@mail.gmail.com>
References:  <1346777897.1140.633.camel@revolution.hippie.lan> <CAP%2BM-_FMaLs1_gg4zoua52u=JPwLigBGp69Pwyf9OQKBzJ1vEQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 2012-09-04 at 12:40 -0500, Mark Tinguely wrote:
> On Tue, Sep 4, 2012 at 11:58 AM, Ian Lepore
> <freebsd@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.

-- Ian





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