Merge tag 'v4.6-rc3' into drm-intel-next-queued
[cascardo/linux.git] / drivers / gpu / drm / i915 / i915_gem_userptr.c
1 /*
2  * Copyright © 2012-2014 Intel Corporation
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  */
24
25 #include <drm/drmP.h>
26 #include <drm/i915_drm.h>
27 #include "i915_drv.h"
28 #include "i915_trace.h"
29 #include "intel_drv.h"
30 #include <linux/mmu_context.h>
31 #include <linux/mmu_notifier.h>
32 #include <linux/mempolicy.h>
33 #include <linux/swap.h>
34
35 struct i915_mm_struct {
36         struct mm_struct *mm;
37         struct drm_device *dev;
38         struct i915_mmu_notifier *mn;
39         struct hlist_node node;
40         struct kref kref;
41         struct work_struct work;
42 };
43
44 #if defined(CONFIG_MMU_NOTIFIER)
45 #include <linux/interval_tree.h>
46
47 struct i915_mmu_notifier {
48         spinlock_t lock;
49         struct hlist_node node;
50         struct mmu_notifier mn;
51         struct rb_root objects;
52 };
53
54 struct i915_mmu_object {
55         struct i915_mmu_notifier *mn;
56         struct drm_i915_gem_object *obj;
57         struct interval_tree_node it;
58         struct list_head link;
59         struct work_struct work;
60         bool attached;
61 };
62
63 static void cancel_userptr(struct work_struct *work)
64 {
65         struct i915_mmu_object *mo = container_of(work, typeof(*mo), work);
66         struct drm_i915_gem_object *obj = mo->obj;
67         struct drm_device *dev = obj->base.dev;
68
69         mutex_lock(&dev->struct_mutex);
70         /* Cancel any active worker and force us to re-evaluate gup */
71         obj->userptr.work = NULL;
72
73         if (obj->pages != NULL) {
74                 struct drm_i915_private *dev_priv = to_i915(dev);
75                 struct i915_vma *vma, *tmp;
76                 bool was_interruptible;
77
78                 was_interruptible = dev_priv->mm.interruptible;
79                 dev_priv->mm.interruptible = false;
80
81                 list_for_each_entry_safe(vma, tmp, &obj->vma_list, obj_link) {
82                         int ret = i915_vma_unbind(vma);
83                         WARN_ON(ret && ret != -EIO);
84                 }
85                 WARN_ON(i915_gem_object_put_pages(obj));
86
87                 dev_priv->mm.interruptible = was_interruptible;
88         }
89
90         drm_gem_object_unreference(&obj->base);
91         mutex_unlock(&dev->struct_mutex);
92 }
93
94 static void add_object(struct i915_mmu_object *mo)
95 {
96         if (mo->attached)
97                 return;
98
99         interval_tree_insert(&mo->it, &mo->mn->objects);
100         mo->attached = true;
101 }
102
103 static void del_object(struct i915_mmu_object *mo)
104 {
105         if (!mo->attached)
106                 return;
107
108         interval_tree_remove(&mo->it, &mo->mn->objects);
109         mo->attached = false;
110 }
111
112 static void i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
113                                                        struct mm_struct *mm,
114                                                        unsigned long start,
115                                                        unsigned long end)
116 {
117         struct i915_mmu_notifier *mn =
118                 container_of(_mn, struct i915_mmu_notifier, mn);
119         struct i915_mmu_object *mo;
120         struct interval_tree_node *it;
121         LIST_HEAD(cancelled);
122
123         if (RB_EMPTY_ROOT(&mn->objects))
124                 return;
125
126         /* interval ranges are inclusive, but invalidate range is exclusive */
127         end--;
128
129         spin_lock(&mn->lock);
130         it = interval_tree_iter_first(&mn->objects, start, end);
131         while (it) {
132                 /* The mmu_object is released late when destroying the
133                  * GEM object so it is entirely possible to gain a
134                  * reference on an object in the process of being freed
135                  * since our serialisation is via the spinlock and not
136                  * the struct_mutex - and consequently use it after it
137                  * is freed and then double free it. To prevent that
138                  * use-after-free we only acquire a reference on the
139                  * object if it is not in the process of being destroyed.
140                  */
141                 mo = container_of(it, struct i915_mmu_object, it);
142                 if (kref_get_unless_zero(&mo->obj->base.refcount))
143                         schedule_work(&mo->work);
144
145                 list_add(&mo->link, &cancelled);
146                 it = interval_tree_iter_next(it, start, end);
147         }
148         list_for_each_entry(mo, &cancelled, link)
149                 del_object(mo);
150         spin_unlock(&mn->lock);
151 }
152
153 static const struct mmu_notifier_ops i915_gem_userptr_notifier = {
154         .invalidate_range_start = i915_gem_userptr_mn_invalidate_range_start,
155 };
156
157 static struct i915_mmu_notifier *
158 i915_mmu_notifier_create(struct mm_struct *mm)
159 {
160         struct i915_mmu_notifier *mn;
161         int ret;
162
163         mn = kmalloc(sizeof(*mn), GFP_KERNEL);
164         if (mn == NULL)
165                 return ERR_PTR(-ENOMEM);
166
167         spin_lock_init(&mn->lock);
168         mn->mn.ops = &i915_gem_userptr_notifier;
169         mn->objects = RB_ROOT;
170
171          /* Protected by mmap_sem (write-lock) */
172         ret = __mmu_notifier_register(&mn->mn, mm);
173         if (ret) {
174                 kfree(mn);
175                 return ERR_PTR(ret);
176         }
177
178         return mn;
179 }
180
181 static void
182 i915_gem_userptr_release__mmu_notifier(struct drm_i915_gem_object *obj)
183 {
184         struct i915_mmu_object *mo;
185
186         mo = obj->userptr.mmu_object;
187         if (mo == NULL)
188                 return;
189
190         spin_lock(&mo->mn->lock);
191         del_object(mo);
192         spin_unlock(&mo->mn->lock);
193         kfree(mo);
194
195         obj->userptr.mmu_object = NULL;
196 }
197
198 static struct i915_mmu_notifier *
199 i915_mmu_notifier_find(struct i915_mm_struct *mm)
200 {
201         struct i915_mmu_notifier *mn = mm->mn;
202
203         mn = mm->mn;
204         if (mn)
205                 return mn;
206
207         down_write(&mm->mm->mmap_sem);
208         mutex_lock(&to_i915(mm->dev)->mm_lock);
209         if ((mn = mm->mn) == NULL) {
210                 mn = i915_mmu_notifier_create(mm->mm);
211                 if (!IS_ERR(mn))
212                         mm->mn = mn;
213         }
214         mutex_unlock(&to_i915(mm->dev)->mm_lock);
215         up_write(&mm->mm->mmap_sem);
216
217         return mn;
218 }
219
220 static int
221 i915_gem_userptr_init__mmu_notifier(struct drm_i915_gem_object *obj,
222                                     unsigned flags)
223 {
224         struct i915_mmu_notifier *mn;
225         struct i915_mmu_object *mo;
226
227         if (flags & I915_USERPTR_UNSYNCHRONIZED)
228                 return capable(CAP_SYS_ADMIN) ? 0 : -EPERM;
229
230         if (WARN_ON(obj->userptr.mm == NULL))
231                 return -EINVAL;
232
233         mn = i915_mmu_notifier_find(obj->userptr.mm);
234         if (IS_ERR(mn))
235                 return PTR_ERR(mn);
236
237         mo = kzalloc(sizeof(*mo), GFP_KERNEL);
238         if (mo == NULL)
239                 return -ENOMEM;
240
241         mo->mn = mn;
242         mo->obj = obj;
243         mo->it.start = obj->userptr.ptr;
244         mo->it.last = obj->userptr.ptr + obj->base.size - 1;
245         INIT_WORK(&mo->work, cancel_userptr);
246
247         obj->userptr.mmu_object = mo;
248         return 0;
249 }
250
251 static void
252 i915_mmu_notifier_free(struct i915_mmu_notifier *mn,
253                        struct mm_struct *mm)
254 {
255         if (mn == NULL)
256                 return;
257
258         mmu_notifier_unregister(&mn->mn, mm);
259         kfree(mn);
260 }
261
262 #else
263
264 static void
265 i915_gem_userptr_release__mmu_notifier(struct drm_i915_gem_object *obj)
266 {
267 }
268
269 static int
270 i915_gem_userptr_init__mmu_notifier(struct drm_i915_gem_object *obj,
271                                     unsigned flags)
272 {
273         if ((flags & I915_USERPTR_UNSYNCHRONIZED) == 0)
274                 return -ENODEV;
275
276         if (!capable(CAP_SYS_ADMIN))
277                 return -EPERM;
278
279         return 0;
280 }
281
282 static void
283 i915_mmu_notifier_free(struct i915_mmu_notifier *mn,
284                        struct mm_struct *mm)
285 {
286 }
287
288 #endif
289
290 static struct i915_mm_struct *
291 __i915_mm_struct_find(struct drm_i915_private *dev_priv, struct mm_struct *real)
292 {
293         struct i915_mm_struct *mm;
294
295         /* Protected by dev_priv->mm_lock */
296         hash_for_each_possible(dev_priv->mm_structs, mm, node, (unsigned long)real)
297                 if (mm->mm == real)
298                         return mm;
299
300         return NULL;
301 }
302
303 static int
304 i915_gem_userptr_init__mm_struct(struct drm_i915_gem_object *obj)
305 {
306         struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
307         struct i915_mm_struct *mm;
308         int ret = 0;
309
310         /* During release of the GEM object we hold the struct_mutex. This
311          * precludes us from calling mmput() at that time as that may be
312          * the last reference and so call exit_mmap(). exit_mmap() will
313          * attempt to reap the vma, and if we were holding a GTT mmap
314          * would then call drm_gem_vm_close() and attempt to reacquire
315          * the struct mutex. So in order to avoid that recursion, we have
316          * to defer releasing the mm reference until after we drop the
317          * struct_mutex, i.e. we need to schedule a worker to do the clean
318          * up.
319          */
320         mutex_lock(&dev_priv->mm_lock);
321         mm = __i915_mm_struct_find(dev_priv, current->mm);
322         if (mm == NULL) {
323                 mm = kmalloc(sizeof(*mm), GFP_KERNEL);
324                 if (mm == NULL) {
325                         ret = -ENOMEM;
326                         goto out;
327                 }
328
329                 kref_init(&mm->kref);
330                 mm->dev = obj->base.dev;
331
332                 mm->mm = current->mm;
333                 atomic_inc(&current->mm->mm_count);
334
335                 mm->mn = NULL;
336
337                 /* Protected by dev_priv->mm_lock */
338                 hash_add(dev_priv->mm_structs,
339                          &mm->node, (unsigned long)mm->mm);
340         } else
341                 kref_get(&mm->kref);
342
343         obj->userptr.mm = mm;
344 out:
345         mutex_unlock(&dev_priv->mm_lock);
346         return ret;
347 }
348
349 static void
350 __i915_mm_struct_free__worker(struct work_struct *work)
351 {
352         struct i915_mm_struct *mm = container_of(work, typeof(*mm), work);
353         i915_mmu_notifier_free(mm->mn, mm->mm);
354         mmdrop(mm->mm);
355         kfree(mm);
356 }
357
358 static void
359 __i915_mm_struct_free(struct kref *kref)
360 {
361         struct i915_mm_struct *mm = container_of(kref, typeof(*mm), kref);
362
363         /* Protected by dev_priv->mm_lock */
364         hash_del(&mm->node);
365         mutex_unlock(&to_i915(mm->dev)->mm_lock);
366
367         INIT_WORK(&mm->work, __i915_mm_struct_free__worker);
368         schedule_work(&mm->work);
369 }
370
371 static void
372 i915_gem_userptr_release__mm_struct(struct drm_i915_gem_object *obj)
373 {
374         if (obj->userptr.mm == NULL)
375                 return;
376
377         kref_put_mutex(&obj->userptr.mm->kref,
378                        __i915_mm_struct_free,
379                        &to_i915(obj->base.dev)->mm_lock);
380         obj->userptr.mm = NULL;
381 }
382
383 struct get_pages_work {
384         struct work_struct work;
385         struct drm_i915_gem_object *obj;
386         struct task_struct *task;
387 };
388
389 #if IS_ENABLED(CONFIG_SWIOTLB)
390 #define swiotlb_active() swiotlb_nr_tbl()
391 #else
392 #define swiotlb_active() 0
393 #endif
394
395 static int
396 st_set_pages(struct sg_table **st, struct page **pvec, int num_pages)
397 {
398         struct scatterlist *sg;
399         int ret, n;
400
401         *st = kmalloc(sizeof(**st), GFP_KERNEL);
402         if (*st == NULL)
403                 return -ENOMEM;
404
405         if (swiotlb_active()) {
406                 ret = sg_alloc_table(*st, num_pages, GFP_KERNEL);
407                 if (ret)
408                         goto err;
409
410                 for_each_sg((*st)->sgl, sg, num_pages, n)
411                         sg_set_page(sg, pvec[n], PAGE_SIZE, 0);
412         } else {
413                 ret = sg_alloc_table_from_pages(*st, pvec, num_pages,
414                                                 0, num_pages << PAGE_SHIFT,
415                                                 GFP_KERNEL);
416                 if (ret)
417                         goto err;
418         }
419
420         return 0;
421
422 err:
423         kfree(*st);
424         *st = NULL;
425         return ret;
426 }
427
428 static int
429 __i915_gem_userptr_set_pages(struct drm_i915_gem_object *obj,
430                              struct page **pvec, int num_pages)
431 {
432         int ret;
433
434         ret = st_set_pages(&obj->pages, pvec, num_pages);
435         if (ret)
436                 return ret;
437
438         ret = i915_gem_gtt_prepare_object(obj);
439         if (ret) {
440                 sg_free_table(obj->pages);
441                 kfree(obj->pages);
442                 obj->pages = NULL;
443         }
444
445         return ret;
446 }
447
448 static int
449 __i915_gem_userptr_set_active(struct drm_i915_gem_object *obj,
450                               bool value)
451 {
452         int ret = 0;
453
454         /* During mm_invalidate_range we need to cancel any userptr that
455          * overlaps the range being invalidated. Doing so requires the
456          * struct_mutex, and that risks recursion. In order to cause
457          * recursion, the user must alias the userptr address space with
458          * a GTT mmapping (possible with a MAP_FIXED) - then when we have
459          * to invalidate that mmaping, mm_invalidate_range is called with
460          * the userptr address *and* the struct_mutex held.  To prevent that
461          * we set a flag under the i915_mmu_notifier spinlock to indicate
462          * whether this object is valid.
463          */
464 #if defined(CONFIG_MMU_NOTIFIER)
465         if (obj->userptr.mmu_object == NULL)
466                 return 0;
467
468         spin_lock(&obj->userptr.mmu_object->mn->lock);
469         /* In order to serialise get_pages with an outstanding
470          * cancel_userptr, we must drop the struct_mutex and try again.
471          */
472         if (!value)
473                 del_object(obj->userptr.mmu_object);
474         else if (!work_pending(&obj->userptr.mmu_object->work))
475                 add_object(obj->userptr.mmu_object);
476         else
477                 ret = -EAGAIN;
478         spin_unlock(&obj->userptr.mmu_object->mn->lock);
479 #endif
480
481         return ret;
482 }
483
484 static void
485 __i915_gem_userptr_get_pages_worker(struct work_struct *_work)
486 {
487         struct get_pages_work *work = container_of(_work, typeof(*work), work);
488         struct drm_i915_gem_object *obj = work->obj;
489         struct drm_device *dev = obj->base.dev;
490         const int npages = obj->base.size >> PAGE_SHIFT;
491         struct page **pvec;
492         int pinned, ret;
493
494         ret = -ENOMEM;
495         pinned = 0;
496
497         pvec = drm_malloc_gfp(npages, sizeof(struct page *), GFP_TEMPORARY);
498         if (pvec != NULL) {
499                 struct mm_struct *mm = obj->userptr.mm->mm;
500
501                 down_read(&mm->mmap_sem);
502                 while (pinned < npages) {
503                         ret = get_user_pages_remote(work->task, mm,
504                                         obj->userptr.ptr + pinned * PAGE_SIZE,
505                                         npages - pinned,
506                                         !obj->userptr.read_only, 0,
507                                         pvec + pinned, NULL);
508                         if (ret < 0)
509                                 break;
510
511                         pinned += ret;
512                 }
513                 up_read(&mm->mmap_sem);
514         }
515
516         mutex_lock(&dev->struct_mutex);
517         if (obj->userptr.work == &work->work) {
518                 if (pinned == npages) {
519                         ret = __i915_gem_userptr_set_pages(obj, pvec, npages);
520                         if (ret == 0) {
521                                 list_add_tail(&obj->global_list,
522                                               &to_i915(dev)->mm.unbound_list);
523                                 obj->get_page.sg = obj->pages->sgl;
524                                 obj->get_page.last = 0;
525                                 pinned = 0;
526                         }
527                 }
528                 obj->userptr.work = ERR_PTR(ret);
529                 if (ret)
530                         __i915_gem_userptr_set_active(obj, false);
531         }
532
533         obj->userptr.workers--;
534         drm_gem_object_unreference(&obj->base);
535         mutex_unlock(&dev->struct_mutex);
536
537         release_pages(pvec, pinned, 0);
538         drm_free_large(pvec);
539
540         put_task_struct(work->task);
541         kfree(work);
542 }
543
544 static int
545 __i915_gem_userptr_get_pages_schedule(struct drm_i915_gem_object *obj,
546                                       bool *active)
547 {
548         struct get_pages_work *work;
549
550         /* Spawn a worker so that we can acquire the
551          * user pages without holding our mutex. Access
552          * to the user pages requires mmap_sem, and we have
553          * a strict lock ordering of mmap_sem, struct_mutex -
554          * we already hold struct_mutex here and so cannot
555          * call gup without encountering a lock inversion.
556          *
557          * Userspace will keep on repeating the operation
558          * (thanks to EAGAIN) until either we hit the fast
559          * path or the worker completes. If the worker is
560          * cancelled or superseded, the task is still run
561          * but the results ignored. (This leads to
562          * complications that we may have a stray object
563          * refcount that we need to be wary of when
564          * checking for existing objects during creation.)
565          * If the worker encounters an error, it reports
566          * that error back to this function through
567          * obj->userptr.work = ERR_PTR.
568          */
569         if (obj->userptr.workers >= I915_GEM_USERPTR_MAX_WORKERS)
570                 return -EAGAIN;
571
572         work = kmalloc(sizeof(*work), GFP_KERNEL);
573         if (work == NULL)
574                 return -ENOMEM;
575
576         obj->userptr.work = &work->work;
577         obj->userptr.workers++;
578
579         work->obj = obj;
580         drm_gem_object_reference(&obj->base);
581
582         work->task = current;
583         get_task_struct(work->task);
584
585         INIT_WORK(&work->work, __i915_gem_userptr_get_pages_worker);
586         schedule_work(&work->work);
587
588         *active = true;
589         return -EAGAIN;
590 }
591
592 static int
593 i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
594 {
595         const int num_pages = obj->base.size >> PAGE_SHIFT;
596         struct page **pvec;
597         int pinned, ret;
598         bool active;
599
600         /* If userspace should engineer that these pages are replaced in
601          * the vma between us binding this page into the GTT and completion
602          * of rendering... Their loss. If they change the mapping of their
603          * pages they need to create a new bo to point to the new vma.
604          *
605          * However, that still leaves open the possibility of the vma
606          * being copied upon fork. Which falls under the same userspace
607          * synchronisation issue as a regular bo, except that this time
608          * the process may not be expecting that a particular piece of
609          * memory is tied to the GPU.
610          *
611          * Fortunately, we can hook into the mmu_notifier in order to
612          * discard the page references prior to anything nasty happening
613          * to the vma (discard or cloning) which should prevent the more
614          * egregious cases from causing harm.
615          */
616         if (IS_ERR(obj->userptr.work)) {
617                 /* active flag will have been dropped already by the worker */
618                 ret = PTR_ERR(obj->userptr.work);
619                 obj->userptr.work = NULL;
620                 return ret;
621         }
622         if (obj->userptr.work)
623                 /* active flag should still be held for the pending work */
624                 return -EAGAIN;
625
626         /* Let the mmu-notifier know that we have begun and need cancellation */
627         ret = __i915_gem_userptr_set_active(obj, true);
628         if (ret)
629                 return ret;
630
631         pvec = NULL;
632         pinned = 0;
633         if (obj->userptr.mm->mm == current->mm) {
634                 pvec = drm_malloc_gfp(num_pages, sizeof(struct page *),
635                                       GFP_TEMPORARY);
636                 if (pvec == NULL) {
637                         __i915_gem_userptr_set_active(obj, false);
638                         return -ENOMEM;
639                 }
640
641                 pinned = __get_user_pages_fast(obj->userptr.ptr, num_pages,
642                                                !obj->userptr.read_only, pvec);
643         }
644
645         active = false;
646         if (pinned < 0)
647                 ret = pinned, pinned = 0;
648         else if (pinned < num_pages)
649                 ret = __i915_gem_userptr_get_pages_schedule(obj, &active);
650         else
651                 ret = __i915_gem_userptr_set_pages(obj, pvec, num_pages);
652         if (ret) {
653                 __i915_gem_userptr_set_active(obj, active);
654                 release_pages(pvec, pinned, 0);
655         }
656         drm_free_large(pvec);
657         return ret;
658 }
659
660 static void
661 i915_gem_userptr_put_pages(struct drm_i915_gem_object *obj)
662 {
663         struct sg_page_iter sg_iter;
664
665         BUG_ON(obj->userptr.work != NULL);
666         __i915_gem_userptr_set_active(obj, false);
667
668         if (obj->madv != I915_MADV_WILLNEED)
669                 obj->dirty = 0;
670
671         i915_gem_gtt_finish_object(obj);
672
673         for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents, 0) {
674                 struct page *page = sg_page_iter_page(&sg_iter);
675
676                 if (obj->dirty)
677                         set_page_dirty(page);
678
679                 mark_page_accessed(page);
680                 put_page(page);
681         }
682         obj->dirty = 0;
683
684         sg_free_table(obj->pages);
685         kfree(obj->pages);
686 }
687
688 static void
689 i915_gem_userptr_release(struct drm_i915_gem_object *obj)
690 {
691         i915_gem_userptr_release__mmu_notifier(obj);
692         i915_gem_userptr_release__mm_struct(obj);
693 }
694
695 static int
696 i915_gem_userptr_dmabuf_export(struct drm_i915_gem_object *obj)
697 {
698         if (obj->userptr.mmu_object)
699                 return 0;
700
701         return i915_gem_userptr_init__mmu_notifier(obj, 0);
702 }
703
704 static const struct drm_i915_gem_object_ops i915_gem_userptr_ops = {
705         .flags = I915_GEM_OBJECT_HAS_STRUCT_PAGE,
706         .get_pages = i915_gem_userptr_get_pages,
707         .put_pages = i915_gem_userptr_put_pages,
708         .dmabuf_export = i915_gem_userptr_dmabuf_export,
709         .release = i915_gem_userptr_release,
710 };
711
712 /**
713  * Creates a new mm object that wraps some normal memory from the process
714  * context - user memory.
715  *
716  * We impose several restrictions upon the memory being mapped
717  * into the GPU.
718  * 1. It must be page aligned (both start/end addresses, i.e ptr and size).
719  * 2. It must be normal system memory, not a pointer into another map of IO
720  *    space (e.g. it must not be a GTT mmapping of another object).
721  * 3. We only allow a bo as large as we could in theory map into the GTT,
722  *    that is we limit the size to the total size of the GTT.
723  * 4. The bo is marked as being snoopable. The backing pages are left
724  *    accessible directly by the CPU, but reads and writes by the GPU may
725  *    incur the cost of a snoop (unless you have an LLC architecture).
726  *
727  * Synchronisation between multiple users and the GPU is left to userspace
728  * through the normal set-domain-ioctl. The kernel will enforce that the
729  * GPU relinquishes the VMA before it is returned back to the system
730  * i.e. upon free(), munmap() or process termination. However, the userspace
731  * malloc() library may not immediately relinquish the VMA after free() and
732  * instead reuse it whilst the GPU is still reading and writing to the VMA.
733  * Caveat emptor.
734  *
735  * Also note, that the object created here is not currently a "first class"
736  * object, in that several ioctls are banned. These are the CPU access
737  * ioctls: mmap(), pwrite and pread. In practice, you are expected to use
738  * direct access via your pointer rather than use those ioctls. Another
739  * restriction is that we do not allow userptr surfaces to be pinned to the
740  * hardware and so we reject any attempt to create a framebuffer out of a
741  * userptr.
742  *
743  * If you think this is a good interface to use to pass GPU memory between
744  * drivers, please use dma-buf instead. In fact, wherever possible use
745  * dma-buf instead.
746  */
747 int
748 i915_gem_userptr_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
749 {
750         struct drm_i915_gem_userptr *args = data;
751         struct drm_i915_gem_object *obj;
752         int ret;
753         u32 handle;
754
755         if (!HAS_LLC(dev) && !HAS_SNOOP(dev)) {
756                 /* We cannot support coherent userptr objects on hw without
757                  * LLC and broken snooping.
758                  */
759                 return -ENODEV;
760         }
761
762         if (args->flags & ~(I915_USERPTR_READ_ONLY |
763                             I915_USERPTR_UNSYNCHRONIZED))
764                 return -EINVAL;
765
766         if (offset_in_page(args->user_ptr | args->user_size))
767                 return -EINVAL;
768
769         if (!access_ok(args->flags & I915_USERPTR_READ_ONLY ? VERIFY_READ : VERIFY_WRITE,
770                        (char __user *)(unsigned long)args->user_ptr, args->user_size))
771                 return -EFAULT;
772
773         if (args->flags & I915_USERPTR_READ_ONLY) {
774                 /* On almost all of the current hw, we cannot tell the GPU that a
775                  * page is readonly, so this is just a placeholder in the uAPI.
776                  */
777                 return -ENODEV;
778         }
779
780         obj = i915_gem_object_alloc(dev);
781         if (obj == NULL)
782                 return -ENOMEM;
783
784         drm_gem_private_object_init(dev, &obj->base, args->user_size);
785         i915_gem_object_init(obj, &i915_gem_userptr_ops);
786         obj->cache_level = I915_CACHE_LLC;
787         obj->base.write_domain = I915_GEM_DOMAIN_CPU;
788         obj->base.read_domains = I915_GEM_DOMAIN_CPU;
789
790         obj->userptr.ptr = args->user_ptr;
791         obj->userptr.read_only = !!(args->flags & I915_USERPTR_READ_ONLY);
792
793         /* And keep a pointer to the current->mm for resolving the user pages
794          * at binding. This means that we need to hook into the mmu_notifier
795          * in order to detect if the mmu is destroyed.
796          */
797         ret = i915_gem_userptr_init__mm_struct(obj);
798         if (ret == 0)
799                 ret = i915_gem_userptr_init__mmu_notifier(obj, args->flags);
800         if (ret == 0)
801                 ret = drm_gem_handle_create(file, &obj->base, &handle);
802
803         /* drop reference from allocate - handle holds it now */
804         drm_gem_object_unreference_unlocked(&obj->base);
805         if (ret)
806                 return ret;
807
808         args->handle = handle;
809         return 0;
810 }
811
812 int
813 i915_gem_init_userptr(struct drm_device *dev)
814 {
815         struct drm_i915_private *dev_priv = to_i915(dev);
816         mutex_init(&dev_priv->mm_lock);
817         hash_init(dev_priv->mm_structs);
818         return 0;
819 }