On-stack allocation of DMA S/G lists
Ian Lepore
freebsd at damnhippie.dyndns.org
Tue Aug 7 21:45:08 UTC 2012
On Wed, 2012-08-08 at 07:25 +1000, Peter Jeremy wrote:
> On 2012-Aug-07 10:09:42 -0600, Ian Lepore <freebsd at damnhippie.dyndns.org> wrote:
> >And just for the record, looking at the problem from an even more
> >distant vantage... is there really a problem with stack-allocating the
> >segments? On a 64-bit arch the struct is like 16 bytes. Typical usage
> >is to allocate a tag allowing 1 or just a few segments. Is anyone
> >really going to create a tag specifying hundreds of segments that would
> >overflow the stack?
>
> The example that led me to study the code was drm(4). Video cards
> typically require fairly large allocations (32MB in my case) but don't
> require the RAM to be contiguous - ie it created a tag with 8192
> segments in my case. This may not be relevant to most arm or mips
> hosts but drm(4) is MI code that can (theoretically) be built on these
> architectures and is a real example where a tag can have many
> segments.
>
> > If they try, wouldn't failing the tag create be good enough?
>
> No. The caller specifies the hardware limits for the device. They
> should not need to take into account implementation details that
> mean the full hardware capabilities are not needed. We don't fail
> a tag create if it specifies that RAM above 4GB can be used when
> we don't have any. Why should be fail a tag create that allows the
> use of up to 8192 tags when we only support 1?
>
Oh, good example. I was wondering if there was any realistic need for
lots of segments, and a big video buffer is exactly that.
-- Ian
More information about the freebsd-arm
mailing list