diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index 55262a8f..f31f7170 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c | |||
@@ -2878,6 +2878,33 @@ int gk20a_free_obj_ctx(struct channel_gk20a *c, | |||
2878 | return 0; | 2878 | return 0; |
2879 | } | 2879 | } |
2880 | 2880 | ||
2881 | int gk20a_comptag_allocator_init(struct gk20a_comptag_allocator *allocator, | ||
2882 | unsigned long size) | ||
2883 | { | ||
2884 | mutex_init(&allocator->lock); | ||
2885 | /* | ||
2886 | * 0th comptag is special and is never used. The base for this bitmap | ||
2887 | * is 1, and its size is one less than the size of comptag store. | ||
2888 | */ | ||
2889 | size--; | ||
2890 | allocator->bitmap = vzalloc(BITS_TO_LONGS(size) * sizeof(long)); | ||
2891 | if (!allocator->bitmap) | ||
2892 | return -ENOMEM; | ||
2893 | allocator->size = size; | ||
2894 | return 0; | ||
2895 | } | ||
2896 | |||
2897 | void gk20a_comptag_allocator_destroy(struct gk20a_comptag_allocator *allocator) | ||
2898 | { | ||
2899 | /* | ||
2900 | * called only when exiting the driver (gk20a_remove, or unwinding the | ||
2901 | * init stage); no users should be active, so taking the mutex is | ||
2902 | * unnecessary here. | ||
2903 | */ | ||
2904 | allocator->size = 0; | ||
2905 | vfree(allocator->bitmap); | ||
2906 | } | ||
2907 | |||
2881 | static void gk20a_remove_gr_support(struct gr_gk20a *gr) | 2908 | static void gk20a_remove_gr_support(struct gr_gk20a *gr) |
2882 | { | 2909 | { |
2883 | struct gk20a *g = gr->g; | 2910 | struct gk20a *g = gr->g; |
@@ -2936,7 +2963,7 @@ static void gk20a_remove_gr_support(struct gr_gk20a *gr) | |||
2936 | kfree(gr->ctx_vars.local_golden_image); | 2963 | kfree(gr->ctx_vars.local_golden_image); |
2937 | gr->ctx_vars.local_golden_image = NULL; | 2964 | gr->ctx_vars.local_golden_image = NULL; |
2938 | 2965 | ||
2939 | gk20a_allocator_destroy(&gr->comp_tags); | 2966 | gk20a_comptag_allocator_destroy(&gr->comp_tags); |
2940 | } | 2967 | } |
2941 | 2968 | ||
2942 | static void gr_gk20a_bundle_cb_defaults(struct gk20a *g) | 2969 | static void gr_gk20a_bundle_cb_defaults(struct gk20a *g) |