[PATCH v6 0/5] dma-mapping: Patches for speeding up allocation
From: Douglas Anderson <dianders@chromium.org>
Date: 2016-01-11 17:31:46
This series of patches will speed up memory allocation in dma-mapping
quite a bit.
The first patch ("ARM: dma-mapping: Optimize allocation") is hopefully
not terribly controversial: it merely doesn't try as hard to allocate
big chunks once it gets the first failure. Since it's unlikely that
further big chunks will help (they're not likely to be virtually aligned
anyway), this should give a big speedup with no real regression to speak
of. Yes, things could be made better, but this seems like a sane start.
The second patch ("common: DMA-mapping: add DMA_ATTR_ALLOC_SINGLE_PAGES
attribute") models MADV_NOHUGEPAGE as I understand it. Hopefully folks
are happy with following that lead. It does nothing by itself.
The third patch ("ARM: dma-mapping: Use DMA_ATTR_ALLOC_SINGLE_PAGES hint to
optimize allocation") simply applies the 2nd patch. Again it's pretty
simple. ...and again it does nothing by itself.
Thue fourth patch ("[media] videobuf2-dc: Let drivers specify DMA
attrs") comes from the ChromeOS tree (authored by Tomasz Figa) and
allows the fifth patch.
The fifth patch ("[media] s5p-mfc: Set DMA_ATTR_ALLOC_SINGLE_PAGES") uses the
new attribute. For a second user, you can see the out of tree patch for
rk3288 at <https://chromium-review.googlesource.com/#/c/320498/>.
All testing was done on the chromeos kernel-3.8 and kernel-3.14.
Sanity (compile / boot) testing was done on a v4.4-rc6-based kernel on
rk3288, though the video codec isn't there. I don't have graphics / MFC
working well on exynos, so the MFC change was only compile-tested
upstream. Hopefully someone upstream whose setup for MFC can give a
Tested-by for these?
Also note that v2 of this series had an extra patch
<https://patchwork.kernel.org/patch/7888861/> that would attempt to sort
the allocation results to opportunistically get some extra alignment. I
dropped that, but it could be re-introduced if there was interest. I
found that it did give a little extra alignment sometimes, but maybe not
enough to justify the extra complexity. It also was a bit half-baked
since it really should have tried harder to ensure alignment.