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