hc
2024-05-10 61598093bbdd283a7edc367d900f223070ead8d2
kernel/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c
....@@ -3,7 +3,9 @@
33 * Copyright (C) 2014-2018 Etnaviv Project
44 */
55
6
+#include <drm/drm_prime.h>
67 #include <linux/dma-buf.h>
8
+
79 #include "etnaviv_drv.h"
810 #include "etnaviv_gem.h"
911
....@@ -17,7 +19,7 @@
1719 if (WARN_ON(!etnaviv_obj->pages)) /* should have already pinned! */
1820 return ERR_PTR(-EINVAL);
1921
20
- return drm_prime_pages_to_sg(etnaviv_obj->pages, npages);
22
+ return drm_prime_pages_to_sg(obj->dev, etnaviv_obj->pages, npages);
2123 }
2224
2325 void *etnaviv_gem_prime_vmap(struct drm_gem_object *obj)
....@@ -91,7 +93,15 @@
9193 static int etnaviv_gem_prime_mmap_obj(struct etnaviv_gem_object *etnaviv_obj,
9294 struct vm_area_struct *vma)
9395 {
94
- return dma_buf_mmap(etnaviv_obj->base.dma_buf, vma, 0);
96
+ int ret;
97
+
98
+ ret = dma_buf_mmap(etnaviv_obj->base.dma_buf, vma, 0);
99
+ if (!ret) {
100
+ /* Drop the reference acquired by drm_gem_mmap_obj(). */
101
+ drm_gem_object_put(&etnaviv_obj->base);
102
+ }
103
+
104
+ return ret;
95105 }
96106
97107 static const struct etnaviv_gem_ops etnaviv_gem_prime_ops = {
....@@ -109,7 +119,6 @@
109119 int ret, npages;
110120
111121 ret = etnaviv_gem_new_private(dev, size, ETNA_BO_WC,
112
- attach->dmabuf->resv,
113122 &etnaviv_gem_prime_ops, &etnaviv_obj);
114123 if (ret < 0)
115124 return ERR_PTR(ret);
....@@ -135,14 +144,7 @@
135144 return &etnaviv_obj->base;
136145
137146 fail:
138
- drm_gem_object_put_unlocked(&etnaviv_obj->base);
147
+ drm_gem_object_put(&etnaviv_obj->base);
139148
140149 return ERR_PTR(ret);
141
-}
142
-
143
-struct reservation_object *etnaviv_gem_prime_res_obj(struct drm_gem_object *obj)
144
-{
145
- struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
146
-
147
- return etnaviv_obj->resv;
148150 }