diff options
Diffstat (limited to 'drivers/gpu/nvgpu/common/as.c')
-rw-r--r-- | drivers/gpu/nvgpu/common/as.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/drivers/gpu/nvgpu/common/as.c b/drivers/gpu/nvgpu/common/as.c index 75537ecc..f6fc3a06 100644 --- a/drivers/gpu/nvgpu/common/as.c +++ b/drivers/gpu/nvgpu/common/as.c | |||
@@ -64,11 +64,14 @@ static int gk20a_vm_alloc_share(struct gk20a_as_share *as_share, | |||
64 | if (big_page_size == 0) { | 64 | if (big_page_size == 0) { |
65 | big_page_size = g->ops.mm.get_default_big_page_size(); | 65 | big_page_size = g->ops.mm.get_default_big_page_size(); |
66 | } else { | 66 | } else { |
67 | if (!is_power_of_2(big_page_size)) | 67 | if (!is_power_of_2(big_page_size)) { |
68 | return -EINVAL; | 68 | return -EINVAL; |
69 | } | ||
69 | 70 | ||
70 | if (!(big_page_size & nvgpu_mm_get_available_big_page_sizes(g))) | 71 | if (!(big_page_size & |
72 | nvgpu_mm_get_available_big_page_sizes(g))) { | ||
71 | return -EINVAL; | 73 | return -EINVAL; |
74 | } | ||
72 | } | 75 | } |
73 | 76 | ||
74 | snprintf(name, sizeof(name), "as_%d", as_share->id); | 77 | snprintf(name, sizeof(name), "as_%d", as_share->id); |
@@ -78,8 +81,9 @@ static int gk20a_vm_alloc_share(struct gk20a_as_share *as_share, | |||
78 | mm->channel.kernel_size, | 81 | mm->channel.kernel_size, |
79 | mm->channel.user_size + mm->channel.kernel_size, | 82 | mm->channel.user_size + mm->channel.kernel_size, |
80 | !mm->disable_bigpage, userspace_managed, name); | 83 | !mm->disable_bigpage, userspace_managed, name); |
81 | if (!vm) | 84 | if (!vm) { |
82 | return -ENOMEM; | 85 | return -ENOMEM; |
86 | } | ||
83 | 87 | ||
84 | as_share->vm = vm; | 88 | as_share->vm = vm; |
85 | vm->as_share = as_share; | 89 | vm->as_share = as_share; |
@@ -97,26 +101,30 @@ int gk20a_as_alloc_share(struct gk20a *g, | |||
97 | 101 | ||
98 | nvgpu_log_fn(g, " "); | 102 | nvgpu_log_fn(g, " "); |
99 | g = gk20a_get(g); | 103 | g = gk20a_get(g); |
100 | if (!g) | 104 | if (!g) { |
101 | return -ENODEV; | 105 | return -ENODEV; |
106 | } | ||
102 | 107 | ||
103 | *out = NULL; | 108 | *out = NULL; |
104 | as_share = nvgpu_kzalloc(g, sizeof(*as_share)); | 109 | as_share = nvgpu_kzalloc(g, sizeof(*as_share)); |
105 | if (!as_share) | 110 | if (!as_share) { |
106 | return -ENOMEM; | 111 | return -ENOMEM; |
112 | } | ||
107 | 113 | ||
108 | as_share->as = &g->as; | 114 | as_share->as = &g->as; |
109 | as_share->id = generate_as_share_id(as_share->as); | 115 | as_share->id = generate_as_share_id(as_share->as); |
110 | 116 | ||
111 | /* this will set as_share->vm. */ | 117 | /* this will set as_share->vm. */ |
112 | err = gk20a_busy(g); | 118 | err = gk20a_busy(g); |
113 | if (err) | 119 | if (err) { |
114 | goto failed; | 120 | goto failed; |
121 | } | ||
115 | err = gk20a_vm_alloc_share(as_share, big_page_size, flags); | 122 | err = gk20a_vm_alloc_share(as_share, big_page_size, flags); |
116 | gk20a_idle(g); | 123 | gk20a_idle(g); |
117 | 124 | ||
118 | if (err) | 125 | if (err) { |
119 | goto failed; | 126 | goto failed; |
127 | } | ||
120 | 128 | ||
121 | *out = as_share; | 129 | *out = as_share; |
122 | return 0; | 130 | return 0; |
@@ -154,8 +162,9 @@ int gk20a_as_release_share(struct gk20a_as_share *as_share) | |||
154 | 162 | ||
155 | err = gk20a_busy(g); | 163 | err = gk20a_busy(g); |
156 | 164 | ||
157 | if (err) | 165 | if (err) { |
158 | goto release_fail; | 166 | goto release_fail; |
167 | } | ||
159 | 168 | ||
160 | err = gk20a_vm_release_share(as_share); | 169 | err = gk20a_vm_release_share(as_share); |
161 | 170 | ||