diff options
author | Alex Waterman <alexw@nvidia.com> | 2017-09-07 18:27:55 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-10-18 19:00:37 -0400 |
commit | b3446bc0b6fca6cb992667f80a95f8503b6a652a (patch) | |
tree | 9882c36bfaef83da9d0a6eefec5e8c3564b93cea /drivers/gpu/nvgpu/gk20a/gr_gk20a.c | |
parent | bee9c830c7898ceebf8c396b40598350229a7203 (diff) |
gpu: nvgpu: Move dma_buf usage from mm_gk20a.c
Move most of the dma_buf usage present in the mm_gk20a.c code
out to Linux specific code and some commom/mm code. There's
two primary groups of code:
1. dma_buf priv field code (for holding comptag data)
2. Comptag usage that relies on dma_buf pointers
For (1) the dma_buf code was simply moved to common/linux/dmabuf.c
since most of this code is clearly Linux specific.
The comptag code was a bit more complicated since there is two
parts to the comptag code. Firstly there's the code that manages
the comptag memory. This is essentially a simple allocator. This
was moved to common/mm/comptags.c since it can be shared across
all chips. The second set of code is moved to
common/linux/comptags.c since it is the interface between dma_bufs
and the comptag memory.
Two other fixes were done as well:
- Add struct gk20a to the comptag allocator init so that
the proper nvgpu_vzalloc() function could be used.
- Add necessary includes to common/linux/vm_priv.h.
JIRA NVGPU-30
JIRA NVGPU-138
Change-Id: I96c57f2763e5ebe18a2f2ee4b33e0e1a2597848c
Signed-off-by: Alex Waterman <alexw@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1566628
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 32 |
1 files changed, 1 insertions, 31 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index 57c1c0bc..700dcdf8 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c | |||
@@ -3044,36 +3044,6 @@ out: | |||
3044 | return err; | 3044 | return err; |
3045 | } | 3045 | } |
3046 | 3046 | ||
3047 | int gk20a_comptag_allocator_init(struct gk20a_comptag_allocator *allocator, | ||
3048 | unsigned long size) | ||
3049 | { | ||
3050 | nvgpu_mutex_init(&allocator->lock); | ||
3051 | /* | ||
3052 | * 0th comptag is special and is never used. The base for this bitmap | ||
3053 | * is 1, and its size is one less than the size of comptag store. | ||
3054 | */ | ||
3055 | size--; | ||
3056 | allocator->bitmap = vzalloc(BITS_TO_LONGS(size) * sizeof(long)); | ||
3057 | if (!allocator->bitmap) | ||
3058 | return -ENOMEM; | ||
3059 | allocator->size = size; | ||
3060 | return 0; | ||
3061 | } | ||
3062 | |||
3063 | void gk20a_comptag_allocator_destroy(struct gk20a_comptag_allocator *allocator) | ||
3064 | { | ||
3065 | struct gr_gk20a *gr = container_of(allocator, | ||
3066 | struct gr_gk20a, comp_tags); | ||
3067 | |||
3068 | /* | ||
3069 | * called only when exiting the driver (gk20a_remove, or unwinding the | ||
3070 | * init stage); no users should be active, so taking the mutex is | ||
3071 | * unnecessary here. | ||
3072 | */ | ||
3073 | allocator->size = 0; | ||
3074 | nvgpu_vfree(gr->g, allocator->bitmap); | ||
3075 | } | ||
3076 | |||
3077 | static void gk20a_remove_gr_support(struct gr_gk20a *gr) | 3047 | static void gk20a_remove_gr_support(struct gr_gk20a *gr) |
3078 | { | 3048 | { |
3079 | struct gk20a *g = gr->g; | 3049 | struct gk20a *g = gr->g; |
@@ -3148,7 +3118,7 @@ static void gk20a_remove_gr_support(struct gr_gk20a *gr) | |||
3148 | nvgpu_big_free(g, gr->ctx_vars.hwpm_ctxsw_buffer_offset_map); | 3118 | nvgpu_big_free(g, gr->ctx_vars.hwpm_ctxsw_buffer_offset_map); |
3149 | gr->ctx_vars.hwpm_ctxsw_buffer_offset_map = NULL; | 3119 | gr->ctx_vars.hwpm_ctxsw_buffer_offset_map = NULL; |
3150 | 3120 | ||
3151 | gk20a_comptag_allocator_destroy(&gr->comp_tags); | 3121 | gk20a_comptag_allocator_destroy(g, &gr->comp_tags); |
3152 | } | 3122 | } |
3153 | 3123 | ||
3154 | static int gr_gk20a_init_gr_config(struct gk20a *g, struct gr_gk20a *gr) | 3124 | static int gr_gk20a_init_gr_config(struct gk20a *g, struct gr_gk20a *gr) |