gpu: nvgpu: Fix CDE bind channel usage
Alex Waterman [Tue, 29 Nov 2016 00:25:28 +0000 (16:25 -0800)]
Use the shared bind channel code from CDE instead of custom
channel binding cide. The CDE code was using its own bind
channel code because the bind channel API took a gk20a_as_share
argument to define the VM. However, the core bind channel API
is trivially abstractable so that the core API can take a
vm_gk20a struct directly.

Bug: 31680980
NvBug 1825464

Change-Id: I0ad766748f22a64d30003a089eaa7dc65fa10e8a
Signed-off-by: Alex Waterman <alexw@nvidia.com>
Reviewed-on: http://git-master/r/1265359
GVS: Gerrit_Virtual_Submit
Reviewed-by: Vinayak Pane <vpane@nvidia.com>

drivers/gpu/nvgpu/gk20a/cde_gk20a.c
drivers/gpu/nvgpu/gk20a/mm_gk20a.c
drivers/gpu/nvgpu/gk20a/mm_gk20a.h

index 68cabce..79bb057 100644 (file)
@@ -1109,9 +1109,7 @@ static int gk20a_cde_load(struct gk20a_cde_ctx *cde_ctx)
        }
 
        /* bind the channel to the vm */
-       gk20a_vm_get(&g->mm.pmu.vm);
-       ch->vm = &g->mm.pmu.vm;
-       err = channel_gk20a_commit_va(ch);
+       err = __gk20a_vm_bind_channel(&g->mm.pmu.vm, ch);
        if (err) {
                gk20a_warn(&cde_ctx->pdev->dev, "cde: could not bind vm");
                goto err_commit_va;
index 9c61570..3652a8a 100644 (file)
@@ -320,7 +320,7 @@ static int gk20a_alloc_comptags(struct gk20a *g,
        if (err)
                return err;
 
-       /* 
+       /*
         * offset needs to be at the start of a page/cacheline boundary;
         * prune the preceding ctaglines that were allocated for alignment.
         */
@@ -3126,11 +3126,9 @@ int gk20a_vm_free_space(struct gk20a_as_share *as_share,
        return err;
 }
 
-int gk20a_vm_bind_channel(struct gk20a_as_share *as_share,
-                         struct channel_gk20a *ch)
+int __gk20a_vm_bind_channel(struct vm_gk20a *vm, struct channel_gk20a *ch)
 {
        int err = 0;
-       struct vm_gk20a *vm = as_share->vm;
 
        gk20a_dbg_fn("");
 
@@ -3143,6 +3141,12 @@ int gk20a_vm_bind_channel(struct gk20a_as_share *as_share,
        return err;
 }
 
+int gk20a_vm_bind_channel(struct gk20a_as_share *as_share,
+                         struct channel_gk20a *ch)
+{
+       return __gk20a_vm_bind_channel(as_share->vm, ch);
+}
+
 int gk20a_dmabuf_alloc_drvdata(struct dma_buf *dmabuf, struct device *dev)
 {
        struct gk20a_dmabuf_priv *priv;
@@ -3719,4 +3723,3 @@ void gk20a_init_mm(struct gpu_ops *gops)
        gops->mm.init_pdb = gk20a_mm_init_pdb;
        gops->mm.init_mm_setup_hw = gk20a_init_mm_setup_hw;
 }
-
index 18fa415..d70d5c8 100644 (file)
@@ -588,6 +588,7 @@ int gk20a_vm_free_space(struct gk20a_as_share *as_share,
                        struct nvgpu_as_free_space_args *args);
 int gk20a_vm_bind_channel(struct gk20a_as_share *as_share,
                          struct channel_gk20a *ch);
+int __gk20a_vm_bind_channel(struct vm_gk20a *vm, struct channel_gk20a *ch);
 
 /* batching eliminates redundant cache flushes and invalidates */
 void gk20a_vm_mapping_batch_start(struct vm_gk20a_mapping_batch *batch);