CHROMIUM: rk3288-vpu: Set DMA_ATTR_ALLOC_SINGLE_PAGES
authorDouglas Anderson <dianders@chromium.org>
Wed, 6 Jan 2016 18:04:33 +0000 (10:04 -0800)
committerHuang, Tao <huangtao@rock-chips.com>
Thu, 30 Jun 2016 11:57:46 +0000 (19:57 +0800)
We do video allocation all the time and we need it to be fast.  Plus TLB
efficiency isn't terribly important for video.

That means we want to set DMA_ATTR_ALLOC_SINGLE_PAGES

See also the previous change ("ARM: dma-mapping: Use
DMA_ATTR_ALLOC_SINGLE_PAGES hint to optimize alloc")

BUG=chromium:570532
TEST=Memory pressure + cat videos is even smoother!

Signed-off-by: Douglas Anderson <dianders@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/322336
Reviewed-by: Dmitry Torokhov <dtor@chromium.org>
Change-Id: I8bda3d9655daaa893c7bead7108b863607d1614f
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Signed-off-by: Yakir Yang <ykk@rock-chips.com>
drivers/media/platform/rk3288-vpu/rk3288_vpu.c

index 779513e2e267b1a3889dabeccdaaeab1eb84a102..ac35b0cf96655dc20f1ef817abddbcbde2e00faa 100644 (file)
@@ -589,6 +589,7 @@ static int rk3288_vpu_probe(struct platform_device *pdev)
 {
        struct rk3288_vpu_dev *vpu = NULL;
        DEFINE_DMA_ATTRS(attrs_novm);
+       DEFINE_DMA_ATTRS(attrs_nohugepage);
        struct video_device *vfd;
        int ret = 0;
 
@@ -611,6 +612,12 @@ static int rk3288_vpu_probe(struct platform_device *pdev)
                goto err_hw_probe;
        }
 
+       /*
+        * We'll do mostly sequential access, so sacrifice TLB efficiency for
+        * faster allocation.
+        */
+       dma_set_attr(DMA_ATTR_ALLOC_SINGLE_PAGES, &attrs_novm);
+
        dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &attrs_novm);
        vpu->alloc_ctx = vb2_dma_contig_init_ctx_attrs(&pdev->dev,
                                                                &attrs_novm);
@@ -619,7 +626,9 @@ static int rk3288_vpu_probe(struct platform_device *pdev)
                goto err_dma_contig;
        }
 
-       vpu->alloc_ctx_vm = vb2_dma_contig_init_ctx(&pdev->dev);
+       dma_set_attr(DMA_ATTR_ALLOC_SINGLE_PAGES, &attrs_nohugepage);
+       vpu->alloc_ctx_vm = vb2_dma_contig_init_ctx_attrs(&pdev->dev,
+                                                         &attrs_nohugepage);
        if (IS_ERR(vpu->alloc_ctx_vm)) {
                ret = PTR_ERR(vpu->alloc_ctx_vm);
                goto err_dma_contig_vm;