hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/drivers/gpu/drm/drm_prime.c
....@@ -252,29 +252,33 @@
252252 }
253253 EXPORT_SYMBOL(drm_gem_map_detach);
254254
255
-void drm_prime_remove_buf_handle_locked(struct drm_prime_file_private *prime_fpriv,
256
- struct dma_buf *dma_buf)
255
+void drm_prime_remove_buf_handle(struct drm_prime_file_private *prime_fpriv,
256
+ uint32_t handle)
257257 {
258258 struct rb_node *rb;
259259
260
- rb = prime_fpriv->dmabufs.rb_node;
260
+ mutex_lock(&prime_fpriv->lock);
261
+
262
+ rb = prime_fpriv->handles.rb_node;
261263 while (rb) {
262264 struct drm_prime_member *member;
263265
264
- member = rb_entry(rb, struct drm_prime_member, dmabuf_rb);
265
- if (member->dma_buf == dma_buf) {
266
+ member = rb_entry(rb, struct drm_prime_member, handle_rb);
267
+ if (member->handle == handle) {
266268 rb_erase(&member->handle_rb, &prime_fpriv->handles);
267269 rb_erase(&member->dmabuf_rb, &prime_fpriv->dmabufs);
268270
269
- dma_buf_put(dma_buf);
271
+ dma_buf_put(member->dma_buf);
270272 kfree(member);
271
- return;
272
- } else if (member->dma_buf < dma_buf) {
273
+ break;
274
+ } else if (member->handle < handle) {
273275 rb = rb->rb_right;
274276 } else {
275277 rb = rb->rb_left;
276278 }
277279 }
280
+
281
+ mutex_unlock(&prime_fpriv->lock);
278282 }
279283
280284 /**