30377b53f5fa15379f0950a676d750a78b3601f5
[sfrench/cifs-2.6.git] / drivers / gpu / drm / drm_prime.c
1 /*
2  * Copyright © 2012 Red Hat
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21  * IN THE SOFTWARE.
22  *
23  * Authors:
24  *      Dave Airlie <airlied@redhat.com>
25  *      Rob Clark <rob.clark@linaro.org>
26  *
27  */
28
29 #include <linux/export.h>
30 #include <linux/dma-buf.h>
31 #include <linux/rbtree.h>
32
33 #include <drm/drm_drv.h>
34 #include <drm/drm_file.h>
35 #include <drm/drm_framebuffer.h>
36 #include <drm/drm_gem.h>
37 #include <drm/drm_prime.h>
38
39 #include "drm_internal.h"
40
41 /**
42  * DOC: overview and lifetime rules
43  *
44  * Similar to GEM global names, PRIME file descriptors are also used to share
45  * buffer objects across processes. They offer additional security: as file
46  * descriptors must be explicitly sent over UNIX domain sockets to be shared
47  * between applications, they can't be guessed like the globally unique GEM
48  * names.
49  *
50  * Drivers that support the PRIME API implement the
51  * &drm_driver.prime_handle_to_fd and &drm_driver.prime_fd_to_handle operations.
52  * GEM based drivers must use drm_gem_prime_handle_to_fd() and
53  * drm_gem_prime_fd_to_handle() to implement these. For GEM based drivers the
54  * actual driver interfaces is provided through the &drm_gem_object_funcs.export
55  * and &drm_driver.gem_prime_import hooks.
56  *
57  * &dma_buf_ops implementations for GEM drivers are all individually exported
58  * for drivers which need to overwrite or reimplement some of them.
59  *
60  * Reference Counting for GEM Drivers
61  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62  *
63  * On the export the &dma_buf holds a reference to the exported buffer object,
64  * usually a &drm_gem_object. It takes this reference in the PRIME_HANDLE_TO_FD
65  * IOCTL, when it first calls &drm_gem_object_funcs.export
66  * and stores the exporting GEM object in the &dma_buf.priv field. This
67  * reference needs to be released when the final reference to the &dma_buf
68  * itself is dropped and its &dma_buf_ops.release function is called.  For
69  * GEM-based drivers, the &dma_buf should be exported using
70  * drm_gem_dmabuf_export() and then released by drm_gem_dmabuf_release().
71  *
72  * Thus the chain of references always flows in one direction, avoiding loops:
73  * importing GEM object -> dma-buf -> exported GEM bo. A further complication
74  * are the lookup caches for import and export. These are required to guarantee
75  * that any given object will always have only one uniqe userspace handle. This
76  * is required to allow userspace to detect duplicated imports, since some GEM
77  * drivers do fail command submissions if a given buffer object is listed more
78  * than once. These import and export caches in &drm_prime_file_private only
79  * retain a weak reference, which is cleaned up when the corresponding object is
80  * released.
81  *
82  * Self-importing: If userspace is using PRIME as a replacement for flink then
83  * it will get a fd->handle request for a GEM object that it created.  Drivers
84  * should detect this situation and return back the underlying object from the
85  * dma-buf private. For GEM based drivers this is handled in
86  * drm_gem_prime_import() already.
87  */
88
89 struct drm_prime_member {
90         struct dma_buf *dma_buf;
91         uint32_t handle;
92
93         struct rb_node dmabuf_rb;
94         struct rb_node handle_rb;
95 };
96
97 static int drm_prime_add_buf_handle(struct drm_prime_file_private *prime_fpriv,
98                                     struct dma_buf *dma_buf, uint32_t handle)
99 {
100         struct drm_prime_member *member;
101         struct rb_node **p, *rb;
102
103         member = kmalloc(sizeof(*member), GFP_KERNEL);
104         if (!member)
105                 return -ENOMEM;
106
107         get_dma_buf(dma_buf);
108         member->dma_buf = dma_buf;
109         member->handle = handle;
110
111         rb = NULL;
112         p = &prime_fpriv->dmabufs.rb_node;
113         while (*p) {
114                 struct drm_prime_member *pos;
115
116                 rb = *p;
117                 pos = rb_entry(rb, struct drm_prime_member, dmabuf_rb);
118                 if (dma_buf > pos->dma_buf)
119                         p = &rb->rb_right;
120                 else
121                         p = &rb->rb_left;
122         }
123         rb_link_node(&member->dmabuf_rb, rb, p);
124         rb_insert_color(&member->dmabuf_rb, &prime_fpriv->dmabufs);
125
126         rb = NULL;
127         p = &prime_fpriv->handles.rb_node;
128         while (*p) {
129                 struct drm_prime_member *pos;
130
131                 rb = *p;
132                 pos = rb_entry(rb, struct drm_prime_member, handle_rb);
133                 if (handle > pos->handle)
134                         p = &rb->rb_right;
135                 else
136                         p = &rb->rb_left;
137         }
138         rb_link_node(&member->handle_rb, rb, p);
139         rb_insert_color(&member->handle_rb, &prime_fpriv->handles);
140
141         return 0;
142 }
143
144 static struct dma_buf *drm_prime_lookup_buf_by_handle(struct drm_prime_file_private *prime_fpriv,
145                                                       uint32_t handle)
146 {
147         struct rb_node *rb;
148
149         rb = prime_fpriv->handles.rb_node;
150         while (rb) {
151                 struct drm_prime_member *member;
152
153                 member = rb_entry(rb, struct drm_prime_member, handle_rb);
154                 if (member->handle == handle)
155                         return member->dma_buf;
156                 else if (member->handle < handle)
157                         rb = rb->rb_right;
158                 else
159                         rb = rb->rb_left;
160         }
161
162         return NULL;
163 }
164
165 static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpriv,
166                                        struct dma_buf *dma_buf,
167                                        uint32_t *handle)
168 {
169         struct rb_node *rb;
170
171         rb = prime_fpriv->dmabufs.rb_node;
172         while (rb) {
173                 struct drm_prime_member *member;
174
175                 member = rb_entry(rb, struct drm_prime_member, dmabuf_rb);
176                 if (member->dma_buf == dma_buf) {
177                         *handle = member->handle;
178                         return 0;
179                 } else if (member->dma_buf < dma_buf) {
180                         rb = rb->rb_right;
181                 } else {
182                         rb = rb->rb_left;
183                 }
184         }
185
186         return -ENOENT;
187 }
188
189 void drm_prime_remove_buf_handle_locked(struct drm_prime_file_private *prime_fpriv,
190                                         struct dma_buf *dma_buf)
191 {
192         struct rb_node *rb;
193
194         rb = prime_fpriv->dmabufs.rb_node;
195         while (rb) {
196                 struct drm_prime_member *member;
197
198                 member = rb_entry(rb, struct drm_prime_member, dmabuf_rb);
199                 if (member->dma_buf == dma_buf) {
200                         rb_erase(&member->handle_rb, &prime_fpriv->handles);
201                         rb_erase(&member->dmabuf_rb, &prime_fpriv->dmabufs);
202
203                         dma_buf_put(dma_buf);
204                         kfree(member);
205                         return;
206                 } else if (member->dma_buf < dma_buf) {
207                         rb = rb->rb_right;
208                 } else {
209                         rb = rb->rb_left;
210                 }
211         }
212 }
213
214 void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv)
215 {
216         mutex_init(&prime_fpriv->lock);
217         prime_fpriv->dmabufs = RB_ROOT;
218         prime_fpriv->handles = RB_ROOT;
219 }
220
221 void drm_prime_destroy_file_private(struct drm_prime_file_private *prime_fpriv)
222 {
223         /* by now drm_gem_release should've made sure the list is empty */
224         WARN_ON(!RB_EMPTY_ROOT(&prime_fpriv->dmabufs));
225 }
226
227 /**
228  * drm_gem_dmabuf_export - &dma_buf export implementation for GEM
229  * @dev: parent device for the exported dmabuf
230  * @exp_info: the export information used by dma_buf_export()
231  *
232  * This wraps dma_buf_export() for use by generic GEM drivers that are using
233  * drm_gem_dmabuf_release(). In addition to calling dma_buf_export(), we take
234  * a reference to the &drm_device and the exported &drm_gem_object (stored in
235  * &dma_buf_export_info.priv) which is released by drm_gem_dmabuf_release().
236  *
237  * Returns the new dmabuf.
238  */
239 struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
240                                       struct dma_buf_export_info *exp_info)
241 {
242         struct dma_buf *dma_buf;
243
244         dma_buf = dma_buf_export(exp_info);
245         if (IS_ERR(dma_buf))
246                 return dma_buf;
247
248         drm_dev_get(dev);
249         drm_gem_object_get(exp_info->priv);
250
251         return dma_buf;
252 }
253 EXPORT_SYMBOL(drm_gem_dmabuf_export);
254
255 /**
256  * drm_gem_dmabuf_release - &dma_buf release implementation for GEM
257  * @dma_buf: buffer to be released
258  *
259  * Generic release function for dma_bufs exported as PRIME buffers. GEM drivers
260  * must use this in their &dma_buf_ops structure as the release callback.
261  * drm_gem_dmabuf_release() should be used in conjunction with
262  * drm_gem_dmabuf_export().
263  */
264 void drm_gem_dmabuf_release(struct dma_buf *dma_buf)
265 {
266         struct drm_gem_object *obj = dma_buf->priv;
267         struct drm_device *dev = obj->dev;
268
269         /* drop the reference on the export fd holds */
270         drm_gem_object_put_unlocked(obj);
271
272         drm_dev_put(dev);
273 }
274 EXPORT_SYMBOL(drm_gem_dmabuf_release);
275
276 /**
277  * drm_gem_prime_fd_to_handle - PRIME import function for GEM drivers
278  * @dev: dev to export the buffer from
279  * @file_priv: drm file-private structure
280  * @prime_fd: fd id of the dma-buf which should be imported
281  * @handle: pointer to storage for the handle of the imported buffer object
282  *
283  * This is the PRIME import function which must be used mandatorily by GEM
284  * drivers to ensure correct lifetime management of the underlying GEM object.
285  * The actual importing of GEM object from the dma-buf is done through the
286  * &drm_driver.gem_prime_import driver callback.
287  *
288  * Returns 0 on success or a negative error code on failure.
289  */
290 int drm_gem_prime_fd_to_handle(struct drm_device *dev,
291                                struct drm_file *file_priv, int prime_fd,
292                                uint32_t *handle)
293 {
294         struct dma_buf *dma_buf;
295         struct drm_gem_object *obj;
296         int ret;
297
298         dma_buf = dma_buf_get(prime_fd);
299         if (IS_ERR(dma_buf))
300                 return PTR_ERR(dma_buf);
301
302         mutex_lock(&file_priv->prime.lock);
303
304         ret = drm_prime_lookup_buf_handle(&file_priv->prime,
305                         dma_buf, handle);
306         if (ret == 0)
307                 goto out_put;
308
309         /* never seen this one, need to import */
310         mutex_lock(&dev->object_name_lock);
311         if (dev->driver->gem_prime_import)
312                 obj = dev->driver->gem_prime_import(dev, dma_buf);
313         else
314                 obj = drm_gem_prime_import(dev, dma_buf);
315         if (IS_ERR(obj)) {
316                 ret = PTR_ERR(obj);
317                 goto out_unlock;
318         }
319
320         if (obj->dma_buf) {
321                 WARN_ON(obj->dma_buf != dma_buf);
322         } else {
323                 obj->dma_buf = dma_buf;
324                 get_dma_buf(dma_buf);
325         }
326
327         /* _handle_create_tail unconditionally unlocks dev->object_name_lock. */
328         ret = drm_gem_handle_create_tail(file_priv, obj, handle);
329         drm_gem_object_put_unlocked(obj);
330         if (ret)
331                 goto out_put;
332
333         ret = drm_prime_add_buf_handle(&file_priv->prime,
334                         dma_buf, *handle);
335         mutex_unlock(&file_priv->prime.lock);
336         if (ret)
337                 goto fail;
338
339         dma_buf_put(dma_buf);
340
341         return 0;
342
343 fail:
344         /* hmm, if driver attached, we are relying on the free-object path
345          * to detach.. which seems ok..
346          */
347         drm_gem_handle_delete(file_priv, *handle);
348         dma_buf_put(dma_buf);
349         return ret;
350
351 out_unlock:
352         mutex_unlock(&dev->object_name_lock);
353 out_put:
354         mutex_unlock(&file_priv->prime.lock);
355         dma_buf_put(dma_buf);
356         return ret;
357 }
358 EXPORT_SYMBOL(drm_gem_prime_fd_to_handle);
359
360 int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data,
361                                  struct drm_file *file_priv)
362 {
363         struct drm_prime_handle *args = data;
364
365         if (!dev->driver->prime_fd_to_handle)
366                 return -ENOSYS;
367
368         return dev->driver->prime_fd_to_handle(dev, file_priv,
369                         args->fd, &args->handle);
370 }
371
372 static struct dma_buf *export_and_register_object(struct drm_device *dev,
373                                                   struct drm_gem_object *obj,
374                                                   uint32_t flags)
375 {
376         struct dma_buf *dmabuf;
377
378         /* prevent races with concurrent gem_close. */
379         if (obj->handle_count == 0) {
380                 dmabuf = ERR_PTR(-ENOENT);
381                 return dmabuf;
382         }
383
384         if (obj->funcs && obj->funcs->export)
385                 dmabuf = obj->funcs->export(obj, flags);
386         else if (dev->driver->gem_prime_export)
387                 dmabuf = dev->driver->gem_prime_export(obj, flags);
388         else
389                 dmabuf = drm_gem_prime_export(obj, flags);
390         if (IS_ERR(dmabuf)) {
391                 /* normally the created dma-buf takes ownership of the ref,
392                  * but if that fails then drop the ref
393                  */
394                 return dmabuf;
395         }
396
397         /*
398          * Note that callers do not need to clean up the export cache
399          * since the check for obj->handle_count guarantees that someone
400          * will clean it up.
401          */
402         obj->dma_buf = dmabuf;
403         get_dma_buf(obj->dma_buf);
404
405         return dmabuf;
406 }
407
408 /**
409  * drm_gem_prime_handle_to_fd - PRIME export function for GEM drivers
410  * @dev: dev to export the buffer from
411  * @file_priv: drm file-private structure
412  * @handle: buffer handle to export
413  * @flags: flags like DRM_CLOEXEC
414  * @prime_fd: pointer to storage for the fd id of the create dma-buf
415  *
416  * This is the PRIME export function which must be used mandatorily by GEM
417  * drivers to ensure correct lifetime management of the underlying GEM object.
418  * The actual exporting from GEM object to a dma-buf is done through the
419  * &drm_driver.gem_prime_export driver callback.
420  */
421 int drm_gem_prime_handle_to_fd(struct drm_device *dev,
422                                struct drm_file *file_priv, uint32_t handle,
423                                uint32_t flags,
424                                int *prime_fd)
425 {
426         struct drm_gem_object *obj;
427         int ret = 0;
428         struct dma_buf *dmabuf;
429
430         mutex_lock(&file_priv->prime.lock);
431         obj = drm_gem_object_lookup(file_priv, handle);
432         if (!obj)  {
433                 ret = -ENOENT;
434                 goto out_unlock;
435         }
436
437         dmabuf = drm_prime_lookup_buf_by_handle(&file_priv->prime, handle);
438         if (dmabuf) {
439                 get_dma_buf(dmabuf);
440                 goto out_have_handle;
441         }
442
443         mutex_lock(&dev->object_name_lock);
444         /* re-export the original imported object */
445         if (obj->import_attach) {
446                 dmabuf = obj->import_attach->dmabuf;
447                 get_dma_buf(dmabuf);
448                 goto out_have_obj;
449         }
450
451         if (obj->dma_buf) {
452                 get_dma_buf(obj->dma_buf);
453                 dmabuf = obj->dma_buf;
454                 goto out_have_obj;
455         }
456
457         dmabuf = export_and_register_object(dev, obj, flags);
458         if (IS_ERR(dmabuf)) {
459                 /* normally the created dma-buf takes ownership of the ref,
460                  * but if that fails then drop the ref
461                  */
462                 ret = PTR_ERR(dmabuf);
463                 mutex_unlock(&dev->object_name_lock);
464                 goto out;
465         }
466
467 out_have_obj:
468         /*
469          * If we've exported this buffer then cheat and add it to the import list
470          * so we get the correct handle back. We must do this under the
471          * protection of dev->object_name_lock to ensure that a racing gem close
472          * ioctl doesn't miss to remove this buffer handle from the cache.
473          */
474         ret = drm_prime_add_buf_handle(&file_priv->prime,
475                                        dmabuf, handle);
476         mutex_unlock(&dev->object_name_lock);
477         if (ret)
478                 goto fail_put_dmabuf;
479
480 out_have_handle:
481         ret = dma_buf_fd(dmabuf, flags);
482         /*
483          * We must _not_ remove the buffer from the handle cache since the newly
484          * created dma buf is already linked in the global obj->dma_buf pointer,
485          * and that is invariant as long as a userspace gem handle exists.
486          * Closing the handle will clean out the cache anyway, so we don't leak.
487          */
488         if (ret < 0) {
489                 goto fail_put_dmabuf;
490         } else {
491                 *prime_fd = ret;
492                 ret = 0;
493         }
494
495         goto out;
496
497 fail_put_dmabuf:
498         dma_buf_put(dmabuf);
499 out:
500         drm_gem_object_put_unlocked(obj);
501 out_unlock:
502         mutex_unlock(&file_priv->prime.lock);
503
504         return ret;
505 }
506 EXPORT_SYMBOL(drm_gem_prime_handle_to_fd);
507
508 int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data,
509                                  struct drm_file *file_priv)
510 {
511         struct drm_prime_handle *args = data;
512
513         if (!dev->driver->prime_handle_to_fd)
514                 return -ENOSYS;
515
516         /* check flags are valid */
517         if (args->flags & ~(DRM_CLOEXEC | DRM_RDWR))
518                 return -EINVAL;
519
520         return dev->driver->prime_handle_to_fd(dev, file_priv,
521                         args->handle, args->flags, &args->fd);
522 }
523
524 /**
525  * DOC: PRIME Helpers
526  *
527  * Drivers can implement &drm_gem_object_funcs.export and
528  * &drm_driver.gem_prime_import in terms of simpler APIs by using the helper
529  * functions drm_gem_prime_export() and drm_gem_prime_import(). These functions
530  * implement dma-buf support in terms of some lower-level helpers, which are
531  * again exported for drivers to use individually:
532  *
533  * Exporting buffers
534  * ~~~~~~~~~~~~~~~~~
535  *
536  * Optional pinning of buffers is handled at dma-buf attach and detach time in
537  * drm_gem_map_attach() and drm_gem_map_detach(). Backing storage itself is
538  * handled by drm_gem_map_dma_buf() and drm_gem_unmap_dma_buf(), which relies on
539  * &drm_gem_object_funcs.get_sg_table.
540  *
541  * For kernel-internal access there's drm_gem_dmabuf_vmap() and
542  * drm_gem_dmabuf_vunmap(). Userspace mmap support is provided by
543  * drm_gem_dmabuf_mmap().
544  *
545  * Note that these export helpers can only be used if the underlying backing
546  * storage is fully coherent and either permanently pinned, or it is safe to pin
547  * it indefinitely.
548  *
549  * FIXME: The underlying helper functions are named rather inconsistently.
550  *
551  * Exporting buffers
552  * ~~~~~~~~~~~~~~~~~
553  *
554  * Importing dma-bufs using drm_gem_prime_import() relies on
555  * &drm_driver.gem_prime_import_sg_table.
556  *
557  * Note that similarly to the export helpers this permanently pins the
558  * underlying backing storage. Which is ok for scanout, but is not the best
559  * option for sharing lots of buffers for rendering.
560  */
561
562 /**
563  * drm_gem_map_attach - dma_buf attach implementation for GEM
564  * @dma_buf: buffer to attach device to
565  * @attach: buffer attachment data
566  *
567  * Calls &drm_gem_object_funcs.pin for device specific handling. This can be
568  * used as the &dma_buf_ops.attach callback. Must be used together with
569  * drm_gem_map_detach().
570  *
571  * Returns 0 on success, negative error code on failure.
572  */
573 int drm_gem_map_attach(struct dma_buf *dma_buf,
574                        struct dma_buf_attachment *attach)
575 {
576         struct drm_gem_object *obj = dma_buf->priv;
577
578         return drm_gem_pin(obj);
579 }
580 EXPORT_SYMBOL(drm_gem_map_attach);
581
582 /**
583  * drm_gem_map_detach - dma_buf detach implementation for GEM
584  * @dma_buf: buffer to detach from
585  * @attach: attachment to be detached
586  *
587  * Calls &drm_gem_object_funcs.pin for device specific handling.  Cleans up
588  * &dma_buf_attachment from drm_gem_map_attach(). This can be used as the
589  * &dma_buf_ops.detach callback.
590  */
591 void drm_gem_map_detach(struct dma_buf *dma_buf,
592                         struct dma_buf_attachment *attach)
593 {
594         struct drm_gem_object *obj = dma_buf->priv;
595
596         drm_gem_unpin(obj);
597 }
598 EXPORT_SYMBOL(drm_gem_map_detach);
599
600 /**
601  * drm_gem_map_dma_buf - map_dma_buf implementation for GEM
602  * @attach: attachment whose scatterlist is to be returned
603  * @dir: direction of DMA transfer
604  *
605  * Calls &drm_gem_object_funcs.get_sg_table and then maps the scatterlist. This
606  * can be used as the &dma_buf_ops.map_dma_buf callback. Should be used together
607  * with drm_gem_unmap_dma_buf().
608  *
609  * Returns:sg_table containing the scatterlist to be returned; returns ERR_PTR
610  * on error. May return -EINTR if it is interrupted by a signal.
611  */
612 struct sg_table *drm_gem_map_dma_buf(struct dma_buf_attachment *attach,
613                                      enum dma_data_direction dir)
614 {
615         struct drm_gem_object *obj = attach->dmabuf->priv;
616         struct sg_table *sgt;
617
618         if (WARN_ON(dir == DMA_NONE))
619                 return ERR_PTR(-EINVAL);
620
621         if (obj->funcs)
622                 sgt = obj->funcs->get_sg_table(obj);
623         else
624                 sgt = obj->dev->driver->gem_prime_get_sg_table(obj);
625
626         if (!dma_map_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
627                               DMA_ATTR_SKIP_CPU_SYNC)) {
628                 sg_free_table(sgt);
629                 kfree(sgt);
630                 sgt = ERR_PTR(-ENOMEM);
631         }
632
633         return sgt;
634 }
635 EXPORT_SYMBOL(drm_gem_map_dma_buf);
636
637 /**
638  * drm_gem_unmap_dma_buf - unmap_dma_buf implementation for GEM
639  * @attach: attachment to unmap buffer from
640  * @sgt: scatterlist info of the buffer to unmap
641  * @dir: direction of DMA transfer
642  *
643  * This can be used as the &dma_buf_ops.unmap_dma_buf callback.
644  */
645 void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach,
646                            struct sg_table *sgt,
647                            enum dma_data_direction dir)
648 {
649         if (!sgt)
650                 return;
651
652         dma_unmap_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
653                            DMA_ATTR_SKIP_CPU_SYNC);
654         sg_free_table(sgt);
655         kfree(sgt);
656 }
657 EXPORT_SYMBOL(drm_gem_unmap_dma_buf);
658
659 /**
660  * drm_gem_dmabuf_vmap - dma_buf vmap implementation for GEM
661  * @dma_buf: buffer to be mapped
662  *
663  * Sets up a kernel virtual mapping. This can be used as the &dma_buf_ops.vmap
664  * callback. Calls into &drm_gem_object_funcs.vmap for device specific handling.
665  *
666  * Returns the kernel virtual address or NULL on failure.
667  */
668 void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf)
669 {
670         struct drm_gem_object *obj = dma_buf->priv;
671         void *vaddr;
672
673         vaddr = drm_gem_vmap(obj);
674         if (IS_ERR(vaddr))
675                 vaddr = NULL;
676
677         return vaddr;
678 }
679 EXPORT_SYMBOL(drm_gem_dmabuf_vmap);
680
681 /**
682  * drm_gem_dmabuf_vunmap - dma_buf vunmap implementation for GEM
683  * @dma_buf: buffer to be unmapped
684  * @vaddr: the virtual address of the buffer
685  *
686  * Releases a kernel virtual mapping. This can be used as the
687  * &dma_buf_ops.vunmap callback. Calls into &drm_gem_object_funcs.vunmap for device specific handling.
688  */
689 void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
690 {
691         struct drm_gem_object *obj = dma_buf->priv;
692
693         drm_gem_vunmap(obj, vaddr);
694 }
695 EXPORT_SYMBOL(drm_gem_dmabuf_vunmap);
696
697 /**
698  * drm_gem_prime_mmap - PRIME mmap function for GEM drivers
699  * @obj: GEM object
700  * @vma: Virtual address range
701  *
702  * This function sets up a userspace mapping for PRIME exported buffers using
703  * the same codepath that is used for regular GEM buffer mapping on the DRM fd.
704  * The fake GEM offset is added to vma->vm_pgoff and &drm_driver->fops->mmap is
705  * called to set up the mapping.
706  *
707  * Drivers can use this as their &drm_driver.gem_prime_mmap callback.
708  */
709 int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
710 {
711         struct drm_file *priv;
712         struct file *fil;
713         int ret;
714
715         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
716         fil = kzalloc(sizeof(*fil), GFP_KERNEL);
717         if (!priv || !fil) {
718                 ret = -ENOMEM;
719                 goto out;
720         }
721
722         /* Used by drm_gem_mmap() to lookup the GEM object */
723         priv->minor = obj->dev->primary;
724         fil->private_data = priv;
725
726         ret = drm_vma_node_allow(&obj->vma_node, priv);
727         if (ret)
728                 goto out;
729
730         vma->vm_pgoff += drm_vma_node_start(&obj->vma_node);
731
732         ret = obj->dev->driver->fops->mmap(fil, vma);
733
734         drm_vma_node_revoke(&obj->vma_node, priv);
735 out:
736         kfree(priv);
737         kfree(fil);
738
739         return ret;
740 }
741 EXPORT_SYMBOL(drm_gem_prime_mmap);
742
743 /**
744  * drm_gem_dmabuf_mmap - dma_buf mmap implementation for GEM
745  * @dma_buf: buffer to be mapped
746  * @vma: virtual address range
747  *
748  * Provides memory mapping for the buffer. This can be used as the
749  * &dma_buf_ops.mmap callback. It just forwards to &drm_driver.gem_prime_mmap,
750  * which should be set to drm_gem_prime_mmap().
751  *
752  * FIXME: There's really no point to this wrapper, drivers which need anything
753  * else but drm_gem_prime_mmap can roll their own &dma_buf_ops.mmap callback.
754  *
755  * Returns 0 on success or a negative error code on failure.
756  */
757 int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma)
758 {
759         struct drm_gem_object *obj = dma_buf->priv;
760         struct drm_device *dev = obj->dev;
761
762         if (!dev->driver->gem_prime_mmap)
763                 return -ENOSYS;
764
765         return dev->driver->gem_prime_mmap(obj, vma);
766 }
767 EXPORT_SYMBOL(drm_gem_dmabuf_mmap);
768
769 static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
770         .cache_sgt_mapping = true,
771         .attach = drm_gem_map_attach,
772         .detach = drm_gem_map_detach,
773         .map_dma_buf = drm_gem_map_dma_buf,
774         .unmap_dma_buf = drm_gem_unmap_dma_buf,
775         .release = drm_gem_dmabuf_release,
776         .mmap = drm_gem_dmabuf_mmap,
777         .vmap = drm_gem_dmabuf_vmap,
778         .vunmap = drm_gem_dmabuf_vunmap,
779 };
780
781 /**
782  * drm_prime_pages_to_sg - converts a page array into an sg list
783  * @pages: pointer to the array of page pointers to convert
784  * @nr_pages: length of the page vector
785  *
786  * This helper creates an sg table object from a set of pages
787  * the driver is responsible for mapping the pages into the
788  * importers address space for use with dma_buf itself.
789  *
790  * This is useful for implementing &drm_gem_object_funcs.get_sg_table.
791  */
792 struct sg_table *drm_prime_pages_to_sg(struct page **pages, unsigned int nr_pages)
793 {
794         struct sg_table *sg = NULL;
795         int ret;
796
797         sg = kmalloc(sizeof(struct sg_table), GFP_KERNEL);
798         if (!sg) {
799                 ret = -ENOMEM;
800                 goto out;
801         }
802
803         ret = sg_alloc_table_from_pages(sg, pages, nr_pages, 0,
804                                 nr_pages << PAGE_SHIFT, GFP_KERNEL);
805         if (ret)
806                 goto out;
807
808         return sg;
809 out:
810         kfree(sg);
811         return ERR_PTR(ret);
812 }
813 EXPORT_SYMBOL(drm_prime_pages_to_sg);
814
815 /**
816  * drm_gem_prime_export - helper library implementation of the export callback
817  * @obj: GEM object to export
818  * @flags: flags like DRM_CLOEXEC and DRM_RDWR
819  *
820  * This is the implementation of the &drm_gem_object_funcs.export functions for GEM drivers
821  * using the PRIME helpers. It is used as the default in
822  * drm_gem_prime_handle_to_fd().
823  */
824 struct dma_buf *drm_gem_prime_export(struct drm_gem_object *obj,
825                                      int flags)
826 {
827         struct drm_device *dev = obj->dev;
828         struct dma_buf_export_info exp_info = {
829                 .exp_name = KBUILD_MODNAME, /* white lie for debug */
830                 .owner = dev->driver->fops->owner,
831                 .ops = &drm_gem_prime_dmabuf_ops,
832                 .size = obj->size,
833                 .flags = flags,
834                 .priv = obj,
835                 .resv = obj->resv,
836         };
837
838         if (dev->driver->gem_prime_res_obj)
839                 exp_info.resv = dev->driver->gem_prime_res_obj(obj);
840
841         return drm_gem_dmabuf_export(dev, &exp_info);
842 }
843 EXPORT_SYMBOL(drm_gem_prime_export);
844
845 /**
846  * drm_gem_prime_import_dev - core implementation of the import callback
847  * @dev: drm_device to import into
848  * @dma_buf: dma-buf object to import
849  * @attach_dev: struct device to dma_buf attach
850  *
851  * This is the core of drm_gem_prime_import(). It's designed to be called by
852  * drivers who want to use a different device structure than &drm_device.dev for
853  * attaching via dma_buf. This function calls
854  * &drm_driver.gem_prime_import_sg_table internally.
855  *
856  * Drivers must arrange to call drm_prime_gem_destroy() from their
857  * &drm_gem_object_funcs.free hook when using this function.
858  */
859 struct drm_gem_object *drm_gem_prime_import_dev(struct drm_device *dev,
860                                             struct dma_buf *dma_buf,
861                                             struct device *attach_dev)
862 {
863         struct dma_buf_attachment *attach;
864         struct sg_table *sgt;
865         struct drm_gem_object *obj;
866         int ret;
867
868         if (dma_buf->ops == &drm_gem_prime_dmabuf_ops) {
869                 obj = dma_buf->priv;
870                 if (obj->dev == dev) {
871                         /*
872                          * Importing dmabuf exported from out own gem increases
873                          * refcount on gem itself instead of f_count of dmabuf.
874                          */
875                         drm_gem_object_get(obj);
876                         return obj;
877                 }
878         }
879
880         if (!dev->driver->gem_prime_import_sg_table)
881                 return ERR_PTR(-EINVAL);
882
883         attach = dma_buf_attach(dma_buf, attach_dev);
884         if (IS_ERR(attach))
885                 return ERR_CAST(attach);
886
887         get_dma_buf(dma_buf);
888
889         sgt = dma_buf_map_attachment(attach, DMA_BIDIRECTIONAL);
890         if (IS_ERR(sgt)) {
891                 ret = PTR_ERR(sgt);
892                 goto fail_detach;
893         }
894
895         obj = dev->driver->gem_prime_import_sg_table(dev, attach, sgt);
896         if (IS_ERR(obj)) {
897                 ret = PTR_ERR(obj);
898                 goto fail_unmap;
899         }
900
901         obj->import_attach = attach;
902
903         return obj;
904
905 fail_unmap:
906         dma_buf_unmap_attachment(attach, sgt, DMA_BIDIRECTIONAL);
907 fail_detach:
908         dma_buf_detach(dma_buf, attach);
909         dma_buf_put(dma_buf);
910
911         return ERR_PTR(ret);
912 }
913 EXPORT_SYMBOL(drm_gem_prime_import_dev);
914
915 /**
916  * drm_gem_prime_import - helper library implementation of the import callback
917  * @dev: drm_device to import into
918  * @dma_buf: dma-buf object to import
919  *
920  * This is the implementation of the gem_prime_import functions for GEM drivers
921  * using the PRIME helpers. Drivers can use this as their
922  * &drm_driver.gem_prime_import implementation. It is used as the default
923  * implementation in drm_gem_prime_fd_to_handle().
924  *
925  * Drivers must arrange to call drm_prime_gem_destroy() from their
926  * &drm_gem_object_funcs.free hook when using this function.
927  */
928 struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev,
929                                             struct dma_buf *dma_buf)
930 {
931         return drm_gem_prime_import_dev(dev, dma_buf, dev->dev);
932 }
933 EXPORT_SYMBOL(drm_gem_prime_import);
934
935 /**
936  * drm_prime_sg_to_page_addr_arrays - convert an sg table into a page array
937  * @sgt: scatter-gather table to convert
938  * @pages: optional array of page pointers to store the page array in
939  * @addrs: optional array to store the dma bus address of each page
940  * @max_entries: size of both the passed-in arrays
941  *
942  * Exports an sg table into an array of pages and addresses. This is currently
943  * required by the TTM driver in order to do correct fault handling.
944  *
945  * Drivers can use this in their &drm_driver.gem_prime_import_sg_table
946  * implementation.
947  */
948 int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages,
949                                      dma_addr_t *addrs, int max_entries)
950 {
951         unsigned count;
952         struct scatterlist *sg;
953         struct page *page;
954         u32 len, index;
955         dma_addr_t addr;
956
957         index = 0;
958         for_each_sg(sgt->sgl, sg, sgt->nents, count) {
959                 len = sg->length;
960                 page = sg_page(sg);
961                 addr = sg_dma_address(sg);
962
963                 while (len > 0) {
964                         if (WARN_ON(index >= max_entries))
965                                 return -1;
966                         if (pages)
967                                 pages[index] = page;
968                         if (addrs)
969                                 addrs[index] = addr;
970
971                         page++;
972                         addr += PAGE_SIZE;
973                         len -= PAGE_SIZE;
974                         index++;
975                 }
976         }
977         return 0;
978 }
979 EXPORT_SYMBOL(drm_prime_sg_to_page_addr_arrays);
980
981 /**
982  * drm_prime_gem_destroy - helper to clean up a PRIME-imported GEM object
983  * @obj: GEM object which was created from a dma-buf
984  * @sg: the sg-table which was pinned at import time
985  *
986  * This is the cleanup functions which GEM drivers need to call when they use
987  * drm_gem_prime_import() or drm_gem_prime_import_dev() to import dma-bufs.
988  */
989 void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg)
990 {
991         struct dma_buf_attachment *attach;
992         struct dma_buf *dma_buf;
993         attach = obj->import_attach;
994         if (sg)
995                 dma_buf_unmap_attachment(attach, sg, DMA_BIDIRECTIONAL);
996         dma_buf = attach->dmabuf;
997         dma_buf_detach(attach->dmabuf, attach);
998         /* remove the reference */
999         dma_buf_put(dma_buf);
1000 }
1001 EXPORT_SYMBOL(drm_prime_gem_destroy);