Merge tag 'drm-misc-next-2022-02-23' of git://anongit.freedesktop.org/drm/drm-misc...
[linux-2.6-microblaze.git] / drivers / gpu / drm / i915 / i915_gem.c
1 /*
2  * Copyright © 2008-2015 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  * Authors:
24  *    Eric Anholt <eric@anholt.net>
25  *
26  */
27
28 #include <linux/dma-fence-array.h>
29 #include <linux/kthread.h>
30 #include <linux/dma-resv.h>
31 #include <linux/shmem_fs.h>
32 #include <linux/slab.h>
33 #include <linux/stop_machine.h>
34 #include <linux/swap.h>
35 #include <linux/pci.h>
36 #include <linux/dma-buf.h>
37 #include <linux/mman.h>
38
39 #include <drm/drm_cache.h>
40 #include <drm/drm_vma_manager.h>
41
42 #include "display/intel_display.h"
43 #include "display/intel_frontbuffer.h"
44
45 #include "gem/i915_gem_clflush.h"
46 #include "gem/i915_gem_context.h"
47 #include "gem/i915_gem_ioctls.h"
48 #include "gem/i915_gem_mman.h"
49 #include "gem/i915_gem_pm.h"
50 #include "gem/i915_gem_region.h"
51 #include "gem/i915_gem_userptr.h"
52 #include "gt/intel_engine_user.h"
53 #include "gt/intel_gt.h"
54 #include "gt/intel_gt_pm.h"
55 #include "gt/intel_workarounds.h"
56
57 #include "i915_drv.h"
58 #include "i915_file_private.h"
59 #include "i915_trace.h"
60 #include "i915_vgpu.h"
61 #include "intel_pm.h"
62
63 static int
64 insert_mappable_node(struct i915_ggtt *ggtt, struct drm_mm_node *node, u32 size)
65 {
66         int err;
67
68         err = mutex_lock_interruptible(&ggtt->vm.mutex);
69         if (err)
70                 return err;
71
72         memset(node, 0, sizeof(*node));
73         err = drm_mm_insert_node_in_range(&ggtt->vm.mm, node,
74                                           size, 0, I915_COLOR_UNEVICTABLE,
75                                           0, ggtt->mappable_end,
76                                           DRM_MM_INSERT_LOW);
77
78         mutex_unlock(&ggtt->vm.mutex);
79
80         return err;
81 }
82
83 static void
84 remove_mappable_node(struct i915_ggtt *ggtt, struct drm_mm_node *node)
85 {
86         mutex_lock(&ggtt->vm.mutex);
87         drm_mm_remove_node(node);
88         mutex_unlock(&ggtt->vm.mutex);
89 }
90
91 int
92 i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
93                             struct drm_file *file)
94 {
95         struct drm_i915_private *i915 = to_i915(dev);
96         struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
97         struct drm_i915_gem_get_aperture *args = data;
98         struct i915_vma *vma;
99         u64 pinned;
100
101         if (mutex_lock_interruptible(&ggtt->vm.mutex))
102                 return -EINTR;
103
104         pinned = ggtt->vm.reserved;
105         list_for_each_entry(vma, &ggtt->vm.bound_list, vm_link)
106                 if (i915_vma_is_pinned(vma))
107                         pinned += vma->node.size;
108
109         mutex_unlock(&ggtt->vm.mutex);
110
111         args->aper_size = ggtt->vm.total;
112         args->aper_available_size = args->aper_size - pinned;
113
114         return 0;
115 }
116
117 int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
118                            unsigned long flags)
119 {
120         struct intel_runtime_pm *rpm = &to_i915(obj->base.dev)->runtime_pm;
121         LIST_HEAD(still_in_list);
122         intel_wakeref_t wakeref;
123         struct i915_vma *vma;
124         int ret;
125
126         assert_object_held(obj);
127
128         if (list_empty(&obj->vma.list))
129                 return 0;
130
131         /*
132          * As some machines use ACPI to handle runtime-resume callbacks, and
133          * ACPI is quite kmalloc happy, we cannot resume beneath the vm->mutex
134          * as they are required by the shrinker. Ergo, we wake the device up
135          * first just in case.
136          */
137         wakeref = intel_runtime_pm_get(rpm);
138
139 try_again:
140         ret = 0;
141         spin_lock(&obj->vma.lock);
142         while (!ret && (vma = list_first_entry_or_null(&obj->vma.list,
143                                                        struct i915_vma,
144                                                        obj_link))) {
145                 struct i915_address_space *vm = vma->vm;
146
147                 list_move_tail(&vma->obj_link, &still_in_list);
148                 if (!i915_vma_is_bound(vma, I915_VMA_BIND_MASK))
149                         continue;
150
151                 if (flags & I915_GEM_OBJECT_UNBIND_TEST) {
152                         ret = -EBUSY;
153                         break;
154                 }
155
156                 ret = -EAGAIN;
157                 if (!i915_vm_tryopen(vm))
158                         break;
159
160                 /* Prevent vma being freed by i915_vma_parked as we unbind */
161                 vma = __i915_vma_get(vma);
162                 spin_unlock(&obj->vma.lock);
163
164                 if (vma) {
165                         bool vm_trylock = !!(flags & I915_GEM_OBJECT_UNBIND_VM_TRYLOCK);
166                         ret = -EBUSY;
167                         if (flags & I915_GEM_OBJECT_UNBIND_ASYNC) {
168                                 assert_object_held(vma->obj);
169                                 ret = i915_vma_unbind_async(vma, vm_trylock);
170                         }
171
172                         if (ret == -EBUSY && (flags & I915_GEM_OBJECT_UNBIND_ACTIVE ||
173                                               !i915_vma_is_active(vma))) {
174                                 if (vm_trylock) {
175                                         if (mutex_trylock(&vma->vm->mutex)) {
176                                                 ret = __i915_vma_unbind(vma);
177                                                 mutex_unlock(&vma->vm->mutex);
178                                         } else {
179                                                 ret = -EBUSY;
180                                         }
181                                 } else {
182                                         ret = i915_vma_unbind(vma);
183                                 }
184                         }
185
186                         __i915_vma_put(vma);
187                 }
188
189                 i915_vm_close(vm);
190                 spin_lock(&obj->vma.lock);
191         }
192         list_splice_init(&still_in_list, &obj->vma.list);
193         spin_unlock(&obj->vma.lock);
194
195         if (ret == -EAGAIN && flags & I915_GEM_OBJECT_UNBIND_BARRIER) {
196                 rcu_barrier(); /* flush the i915_vm_release() */
197                 goto try_again;
198         }
199
200         intel_runtime_pm_put(rpm, wakeref);
201
202         return ret;
203 }
204
205 static int
206 shmem_pread(struct page *page, int offset, int len, char __user *user_data,
207             bool needs_clflush)
208 {
209         char *vaddr;
210         int ret;
211
212         vaddr = kmap(page);
213
214         if (needs_clflush)
215                 drm_clflush_virt_range(vaddr + offset, len);
216
217         ret = __copy_to_user(user_data, vaddr + offset, len);
218
219         kunmap(page);
220
221         return ret ? -EFAULT : 0;
222 }
223
224 static int
225 i915_gem_shmem_pread(struct drm_i915_gem_object *obj,
226                      struct drm_i915_gem_pread *args)
227 {
228         unsigned int needs_clflush;
229         unsigned int idx, offset;
230         char __user *user_data;
231         u64 remain;
232         int ret;
233
234         ret = i915_gem_object_lock_interruptible(obj, NULL);
235         if (ret)
236                 return ret;
237
238         ret = i915_gem_object_pin_pages(obj);
239         if (ret)
240                 goto err_unlock;
241
242         ret = i915_gem_object_prepare_read(obj, &needs_clflush);
243         if (ret)
244                 goto err_unpin;
245
246         i915_gem_object_finish_access(obj);
247         i915_gem_object_unlock(obj);
248
249         remain = args->size;
250         user_data = u64_to_user_ptr(args->data_ptr);
251         offset = offset_in_page(args->offset);
252         for (idx = args->offset >> PAGE_SHIFT; remain; idx++) {
253                 struct page *page = i915_gem_object_get_page(obj, idx);
254                 unsigned int length = min_t(u64, remain, PAGE_SIZE - offset);
255
256                 ret = shmem_pread(page, offset, length, user_data,
257                                   needs_clflush);
258                 if (ret)
259                         break;
260
261                 remain -= length;
262                 user_data += length;
263                 offset = 0;
264         }
265
266         i915_gem_object_unpin_pages(obj);
267         return ret;
268
269 err_unpin:
270         i915_gem_object_unpin_pages(obj);
271 err_unlock:
272         i915_gem_object_unlock(obj);
273         return ret;
274 }
275
276 static inline bool
277 gtt_user_read(struct io_mapping *mapping,
278               loff_t base, int offset,
279               char __user *user_data, int length)
280 {
281         void __iomem *vaddr;
282         unsigned long unwritten;
283
284         /* We can use the cpu mem copy function because this is X86. */
285         vaddr = io_mapping_map_atomic_wc(mapping, base);
286         unwritten = __copy_to_user_inatomic(user_data,
287                                             (void __force *)vaddr + offset,
288                                             length);
289         io_mapping_unmap_atomic(vaddr);
290         if (unwritten) {
291                 vaddr = io_mapping_map_wc(mapping, base, PAGE_SIZE);
292                 unwritten = copy_to_user(user_data,
293                                          (void __force *)vaddr + offset,
294                                          length);
295                 io_mapping_unmap(vaddr);
296         }
297         return unwritten;
298 }
299
300 static struct i915_vma *i915_gem_gtt_prepare(struct drm_i915_gem_object *obj,
301                                              struct drm_mm_node *node,
302                                              bool write)
303 {
304         struct drm_i915_private *i915 = to_i915(obj->base.dev);
305         struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
306         struct i915_vma *vma;
307         struct i915_gem_ww_ctx ww;
308         int ret;
309
310         i915_gem_ww_ctx_init(&ww, true);
311 retry:
312         vma = ERR_PTR(-ENODEV);
313         ret = i915_gem_object_lock(obj, &ww);
314         if (ret)
315                 goto err_ww;
316
317         ret = i915_gem_object_set_to_gtt_domain(obj, write);
318         if (ret)
319                 goto err_ww;
320
321         if (!i915_gem_object_is_tiled(obj))
322                 vma = i915_gem_object_ggtt_pin_ww(obj, &ww, NULL, 0, 0,
323                                                   PIN_MAPPABLE |
324                                                   PIN_NONBLOCK /* NOWARN */ |
325                                                   PIN_NOEVICT);
326         if (vma == ERR_PTR(-EDEADLK)) {
327                 ret = -EDEADLK;
328                 goto err_ww;
329         } else if (!IS_ERR(vma)) {
330                 node->start = i915_ggtt_offset(vma);
331                 node->flags = 0;
332         } else {
333                 ret = insert_mappable_node(ggtt, node, PAGE_SIZE);
334                 if (ret)
335                         goto err_ww;
336                 GEM_BUG_ON(!drm_mm_node_allocated(node));
337                 vma = NULL;
338         }
339
340         ret = i915_gem_object_pin_pages(obj);
341         if (ret) {
342                 if (drm_mm_node_allocated(node)) {
343                         ggtt->vm.clear_range(&ggtt->vm, node->start, node->size);
344                         remove_mappable_node(ggtt, node);
345                 } else {
346                         i915_vma_unpin(vma);
347                 }
348         }
349
350 err_ww:
351         if (ret == -EDEADLK) {
352                 ret = i915_gem_ww_ctx_backoff(&ww);
353                 if (!ret)
354                         goto retry;
355         }
356         i915_gem_ww_ctx_fini(&ww);
357
358         return ret ? ERR_PTR(ret) : vma;
359 }
360
361 static void i915_gem_gtt_cleanup(struct drm_i915_gem_object *obj,
362                                  struct drm_mm_node *node,
363                                  struct i915_vma *vma)
364 {
365         struct drm_i915_private *i915 = to_i915(obj->base.dev);
366         struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
367
368         i915_gem_object_unpin_pages(obj);
369         if (drm_mm_node_allocated(node)) {
370                 ggtt->vm.clear_range(&ggtt->vm, node->start, node->size);
371                 remove_mappable_node(ggtt, node);
372         } else {
373                 i915_vma_unpin(vma);
374         }
375 }
376
377 static int
378 i915_gem_gtt_pread(struct drm_i915_gem_object *obj,
379                    const struct drm_i915_gem_pread *args)
380 {
381         struct drm_i915_private *i915 = to_i915(obj->base.dev);
382         struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
383         intel_wakeref_t wakeref;
384         struct drm_mm_node node;
385         void __user *user_data;
386         struct i915_vma *vma;
387         u64 remain, offset;
388         int ret = 0;
389
390         wakeref = intel_runtime_pm_get(&i915->runtime_pm);
391
392         vma = i915_gem_gtt_prepare(obj, &node, false);
393         if (IS_ERR(vma)) {
394                 ret = PTR_ERR(vma);
395                 goto out_rpm;
396         }
397
398         user_data = u64_to_user_ptr(args->data_ptr);
399         remain = args->size;
400         offset = args->offset;
401
402         while (remain > 0) {
403                 /* Operation in this page
404                  *
405                  * page_base = page offset within aperture
406                  * page_offset = offset within page
407                  * page_length = bytes to copy for this page
408                  */
409                 u32 page_base = node.start;
410                 unsigned page_offset = offset_in_page(offset);
411                 unsigned page_length = PAGE_SIZE - page_offset;
412                 page_length = remain < page_length ? remain : page_length;
413                 if (drm_mm_node_allocated(&node)) {
414                         ggtt->vm.insert_page(&ggtt->vm,
415                                              i915_gem_object_get_dma_address(obj, offset >> PAGE_SHIFT),
416                                              node.start, I915_CACHE_NONE, 0);
417                 } else {
418                         page_base += offset & PAGE_MASK;
419                 }
420
421                 if (gtt_user_read(&ggtt->iomap, page_base, page_offset,
422                                   user_data, page_length)) {
423                         ret = -EFAULT;
424                         break;
425                 }
426
427                 remain -= page_length;
428                 user_data += page_length;
429                 offset += page_length;
430         }
431
432         i915_gem_gtt_cleanup(obj, &node, vma);
433 out_rpm:
434         intel_runtime_pm_put(&i915->runtime_pm, wakeref);
435         return ret;
436 }
437
438 /**
439  * Reads data from the object referenced by handle.
440  * @dev: drm device pointer
441  * @data: ioctl data blob
442  * @file: drm file pointer
443  *
444  * On error, the contents of *data are undefined.
445  */
446 int
447 i915_gem_pread_ioctl(struct drm_device *dev, void *data,
448                      struct drm_file *file)
449 {
450         struct drm_i915_private *i915 = to_i915(dev);
451         struct drm_i915_gem_pread *args = data;
452         struct drm_i915_gem_object *obj;
453         int ret;
454
455         /* PREAD is disallowed for all platforms after TGL-LP.  This also
456          * covers all platforms with local memory.
457          */
458         if (GRAPHICS_VER(i915) >= 12 && !IS_TIGERLAKE(i915))
459                 return -EOPNOTSUPP;
460
461         if (args->size == 0)
462                 return 0;
463
464         if (!access_ok(u64_to_user_ptr(args->data_ptr),
465                        args->size))
466                 return -EFAULT;
467
468         obj = i915_gem_object_lookup(file, args->handle);
469         if (!obj)
470                 return -ENOENT;
471
472         /* Bounds check source.  */
473         if (range_overflows_t(u64, args->offset, args->size, obj->base.size)) {
474                 ret = -EINVAL;
475                 goto out;
476         }
477
478         trace_i915_gem_object_pread(obj, args->offset, args->size);
479         ret = -ENODEV;
480         if (obj->ops->pread)
481                 ret = obj->ops->pread(obj, args);
482         if (ret != -ENODEV)
483                 goto out;
484
485         ret = i915_gem_object_wait(obj,
486                                    I915_WAIT_INTERRUPTIBLE,
487                                    MAX_SCHEDULE_TIMEOUT);
488         if (ret)
489                 goto out;
490
491         ret = i915_gem_shmem_pread(obj, args);
492         if (ret == -EFAULT || ret == -ENODEV)
493                 ret = i915_gem_gtt_pread(obj, args);
494
495 out:
496         i915_gem_object_put(obj);
497         return ret;
498 }
499
500 /* This is the fast write path which cannot handle
501  * page faults in the source data
502  */
503
504 static inline bool
505 ggtt_write(struct io_mapping *mapping,
506            loff_t base, int offset,
507            char __user *user_data, int length)
508 {
509         void __iomem *vaddr;
510         unsigned long unwritten;
511
512         /* We can use the cpu mem copy function because this is X86. */
513         vaddr = io_mapping_map_atomic_wc(mapping, base);
514         unwritten = __copy_from_user_inatomic_nocache((void __force *)vaddr + offset,
515                                                       user_data, length);
516         io_mapping_unmap_atomic(vaddr);
517         if (unwritten) {
518                 vaddr = io_mapping_map_wc(mapping, base, PAGE_SIZE);
519                 unwritten = copy_from_user((void __force *)vaddr + offset,
520                                            user_data, length);
521                 io_mapping_unmap(vaddr);
522         }
523
524         return unwritten;
525 }
526
527 /**
528  * This is the fast pwrite path, where we copy the data directly from the
529  * user into the GTT, uncached.
530  * @obj: i915 GEM object
531  * @args: pwrite arguments structure
532  */
533 static int
534 i915_gem_gtt_pwrite_fast(struct drm_i915_gem_object *obj,
535                          const struct drm_i915_gem_pwrite *args)
536 {
537         struct drm_i915_private *i915 = to_i915(obj->base.dev);
538         struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
539         struct intel_runtime_pm *rpm = &i915->runtime_pm;
540         intel_wakeref_t wakeref;
541         struct drm_mm_node node;
542         struct i915_vma *vma;
543         u64 remain, offset;
544         void __user *user_data;
545         int ret = 0;
546
547         if (i915_gem_object_has_struct_page(obj)) {
548                 /*
549                  * Avoid waking the device up if we can fallback, as
550                  * waking/resuming is very slow (worst-case 10-100 ms
551                  * depending on PCI sleeps and our own resume time).
552                  * This easily dwarfs any performance advantage from
553                  * using the cache bypass of indirect GGTT access.
554                  */
555                 wakeref = intel_runtime_pm_get_if_in_use(rpm);
556                 if (!wakeref)
557                         return -EFAULT;
558         } else {
559                 /* No backing pages, no fallback, we must force GGTT access */
560                 wakeref = intel_runtime_pm_get(rpm);
561         }
562
563         vma = i915_gem_gtt_prepare(obj, &node, true);
564         if (IS_ERR(vma)) {
565                 ret = PTR_ERR(vma);
566                 goto out_rpm;
567         }
568
569         i915_gem_object_invalidate_frontbuffer(obj, ORIGIN_CPU);
570
571         user_data = u64_to_user_ptr(args->data_ptr);
572         offset = args->offset;
573         remain = args->size;
574         while (remain) {
575                 /* Operation in this page
576                  *
577                  * page_base = page offset within aperture
578                  * page_offset = offset within page
579                  * page_length = bytes to copy for this page
580                  */
581                 u32 page_base = node.start;
582                 unsigned int page_offset = offset_in_page(offset);
583                 unsigned int page_length = PAGE_SIZE - page_offset;
584                 page_length = remain < page_length ? remain : page_length;
585                 if (drm_mm_node_allocated(&node)) {
586                         /* flush the write before we modify the GGTT */
587                         intel_gt_flush_ggtt_writes(ggtt->vm.gt);
588                         ggtt->vm.insert_page(&ggtt->vm,
589                                              i915_gem_object_get_dma_address(obj, offset >> PAGE_SHIFT),
590                                              node.start, I915_CACHE_NONE, 0);
591                         wmb(); /* flush modifications to the GGTT (insert_page) */
592                 } else {
593                         page_base += offset & PAGE_MASK;
594                 }
595                 /* If we get a fault while copying data, then (presumably) our
596                  * source page isn't available.  Return the error and we'll
597                  * retry in the slow path.
598                  * If the object is non-shmem backed, we retry again with the
599                  * path that handles page fault.
600                  */
601                 if (ggtt_write(&ggtt->iomap, page_base, page_offset,
602                                user_data, page_length)) {
603                         ret = -EFAULT;
604                         break;
605                 }
606
607                 remain -= page_length;
608                 user_data += page_length;
609                 offset += page_length;
610         }
611
612         intel_gt_flush_ggtt_writes(ggtt->vm.gt);
613         i915_gem_object_flush_frontbuffer(obj, ORIGIN_CPU);
614
615         i915_gem_gtt_cleanup(obj, &node, vma);
616 out_rpm:
617         intel_runtime_pm_put(rpm, wakeref);
618         return ret;
619 }
620
621 /* Per-page copy function for the shmem pwrite fastpath.
622  * Flushes invalid cachelines before writing to the target if
623  * needs_clflush_before is set and flushes out any written cachelines after
624  * writing if needs_clflush is set.
625  */
626 static int
627 shmem_pwrite(struct page *page, int offset, int len, char __user *user_data,
628              bool needs_clflush_before,
629              bool needs_clflush_after)
630 {
631         char *vaddr;
632         int ret;
633
634         vaddr = kmap(page);
635
636         if (needs_clflush_before)
637                 drm_clflush_virt_range(vaddr + offset, len);
638
639         ret = __copy_from_user(vaddr + offset, user_data, len);
640         if (!ret && needs_clflush_after)
641                 drm_clflush_virt_range(vaddr + offset, len);
642
643         kunmap(page);
644
645         return ret ? -EFAULT : 0;
646 }
647
648 static int
649 i915_gem_shmem_pwrite(struct drm_i915_gem_object *obj,
650                       const struct drm_i915_gem_pwrite *args)
651 {
652         unsigned int partial_cacheline_write;
653         unsigned int needs_clflush;
654         unsigned int offset, idx;
655         void __user *user_data;
656         u64 remain;
657         int ret;
658
659         ret = i915_gem_object_lock_interruptible(obj, NULL);
660         if (ret)
661                 return ret;
662
663         ret = i915_gem_object_pin_pages(obj);
664         if (ret)
665                 goto err_unlock;
666
667         ret = i915_gem_object_prepare_write(obj, &needs_clflush);
668         if (ret)
669                 goto err_unpin;
670
671         i915_gem_object_finish_access(obj);
672         i915_gem_object_unlock(obj);
673
674         /* If we don't overwrite a cacheline completely we need to be
675          * careful to have up-to-date data by first clflushing. Don't
676          * overcomplicate things and flush the entire patch.
677          */
678         partial_cacheline_write = 0;
679         if (needs_clflush & CLFLUSH_BEFORE)
680                 partial_cacheline_write = boot_cpu_data.x86_clflush_size - 1;
681
682         user_data = u64_to_user_ptr(args->data_ptr);
683         remain = args->size;
684         offset = offset_in_page(args->offset);
685         for (idx = args->offset >> PAGE_SHIFT; remain; idx++) {
686                 struct page *page = i915_gem_object_get_page(obj, idx);
687                 unsigned int length = min_t(u64, remain, PAGE_SIZE - offset);
688
689                 ret = shmem_pwrite(page, offset, length, user_data,
690                                    (offset | length) & partial_cacheline_write,
691                                    needs_clflush & CLFLUSH_AFTER);
692                 if (ret)
693                         break;
694
695                 remain -= length;
696                 user_data += length;
697                 offset = 0;
698         }
699
700         i915_gem_object_flush_frontbuffer(obj, ORIGIN_CPU);
701
702         i915_gem_object_unpin_pages(obj);
703         return ret;
704
705 err_unpin:
706         i915_gem_object_unpin_pages(obj);
707 err_unlock:
708         i915_gem_object_unlock(obj);
709         return ret;
710 }
711
712 /**
713  * Writes data to the object referenced by handle.
714  * @dev: drm device
715  * @data: ioctl data blob
716  * @file: drm file
717  *
718  * On error, the contents of the buffer that were to be modified are undefined.
719  */
720 int
721 i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
722                       struct drm_file *file)
723 {
724         struct drm_i915_private *i915 = to_i915(dev);
725         struct drm_i915_gem_pwrite *args = data;
726         struct drm_i915_gem_object *obj;
727         int ret;
728
729         /* PWRITE is disallowed for all platforms after TGL-LP.  This also
730          * covers all platforms with local memory.
731          */
732         if (GRAPHICS_VER(i915) >= 12 && !IS_TIGERLAKE(i915))
733                 return -EOPNOTSUPP;
734
735         if (args->size == 0)
736                 return 0;
737
738         if (!access_ok(u64_to_user_ptr(args->data_ptr), args->size))
739                 return -EFAULT;
740
741         obj = i915_gem_object_lookup(file, args->handle);
742         if (!obj)
743                 return -ENOENT;
744
745         /* Bounds check destination. */
746         if (range_overflows_t(u64, args->offset, args->size, obj->base.size)) {
747                 ret = -EINVAL;
748                 goto err;
749         }
750
751         /* Writes not allowed into this read-only object */
752         if (i915_gem_object_is_readonly(obj)) {
753                 ret = -EINVAL;
754                 goto err;
755         }
756
757         trace_i915_gem_object_pwrite(obj, args->offset, args->size);
758
759         ret = -ENODEV;
760         if (obj->ops->pwrite)
761                 ret = obj->ops->pwrite(obj, args);
762         if (ret != -ENODEV)
763                 goto err;
764
765         ret = i915_gem_object_wait(obj,
766                                    I915_WAIT_INTERRUPTIBLE |
767                                    I915_WAIT_ALL,
768                                    MAX_SCHEDULE_TIMEOUT);
769         if (ret)
770                 goto err;
771
772         ret = -EFAULT;
773         /* We can only do the GTT pwrite on untiled buffers, as otherwise
774          * it would end up going through the fenced access, and we'll get
775          * different detiling behavior between reading and writing.
776          * pread/pwrite currently are reading and writing from the CPU
777          * perspective, requiring manual detiling by the client.
778          */
779         if (!i915_gem_object_has_struct_page(obj) ||
780             i915_gem_cpu_write_needs_clflush(obj))
781                 /* Note that the gtt paths might fail with non-page-backed user
782                  * pointers (e.g. gtt mappings when moving data between
783                  * textures). Fallback to the shmem path in that case.
784                  */
785                 ret = i915_gem_gtt_pwrite_fast(obj, args);
786
787         if (ret == -EFAULT || ret == -ENOSPC) {
788                 if (i915_gem_object_has_struct_page(obj))
789                         ret = i915_gem_shmem_pwrite(obj, args);
790         }
791
792 err:
793         i915_gem_object_put(obj);
794         return ret;
795 }
796
797 /**
798  * Called when user space has done writes to this buffer
799  * @dev: drm device
800  * @data: ioctl data blob
801  * @file: drm file
802  */
803 int
804 i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
805                          struct drm_file *file)
806 {
807         struct drm_i915_gem_sw_finish *args = data;
808         struct drm_i915_gem_object *obj;
809
810         obj = i915_gem_object_lookup(file, args->handle);
811         if (!obj)
812                 return -ENOENT;
813
814         /*
815          * Proxy objects are barred from CPU access, so there is no
816          * need to ban sw_finish as it is a nop.
817          */
818
819         /* Pinned buffers may be scanout, so flush the cache */
820         i915_gem_object_flush_if_display(obj);
821         i915_gem_object_put(obj);
822
823         return 0;
824 }
825
826 void i915_gem_runtime_suspend(struct drm_i915_private *i915)
827 {
828         struct drm_i915_gem_object *obj, *on;
829         int i;
830
831         /*
832          * Only called during RPM suspend. All users of the userfault_list
833          * must be holding an RPM wakeref to ensure that this can not
834          * run concurrently with themselves (and use the struct_mutex for
835          * protection between themselves).
836          */
837
838         list_for_each_entry_safe(obj, on,
839                                  &to_gt(i915)->ggtt->userfault_list, userfault_link)
840                 __i915_gem_object_release_mmap_gtt(obj);
841
842         /*
843          * The fence will be lost when the device powers down. If any were
844          * in use by hardware (i.e. they are pinned), we should not be powering
845          * down! All other fences will be reacquired by the user upon waking.
846          */
847         for (i = 0; i < to_gt(i915)->ggtt->num_fences; i++) {
848                 struct i915_fence_reg *reg = &to_gt(i915)->ggtt->fence_regs[i];
849
850                 /*
851                  * Ideally we want to assert that the fence register is not
852                  * live at this point (i.e. that no piece of code will be
853                  * trying to write through fence + GTT, as that both violates
854                  * our tracking of activity and associated locking/barriers,
855                  * but also is illegal given that the hw is powered down).
856                  *
857                  * Previously we used reg->pin_count as a "liveness" indicator.
858                  * That is not sufficient, and we need a more fine-grained
859                  * tool if we want to have a sanity check here.
860                  */
861
862                 if (!reg->vma)
863                         continue;
864
865                 GEM_BUG_ON(i915_vma_has_userfault(reg->vma));
866                 reg->dirty = true;
867         }
868 }
869
870 static void discard_ggtt_vma(struct i915_vma *vma)
871 {
872         struct drm_i915_gem_object *obj = vma->obj;
873
874         spin_lock(&obj->vma.lock);
875         if (!RB_EMPTY_NODE(&vma->obj_node)) {
876                 rb_erase(&vma->obj_node, &obj->vma.tree);
877                 RB_CLEAR_NODE(&vma->obj_node);
878         }
879         spin_unlock(&obj->vma.lock);
880 }
881
882 struct i915_vma *
883 i915_gem_object_ggtt_pin_ww(struct drm_i915_gem_object *obj,
884                             struct i915_gem_ww_ctx *ww,
885                             const struct i915_ggtt_view *view,
886                             u64 size, u64 alignment, u64 flags)
887 {
888         struct drm_i915_private *i915 = to_i915(obj->base.dev);
889         struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
890         struct i915_vma *vma;
891         int ret;
892
893         GEM_WARN_ON(!ww);
894
895         if (flags & PIN_MAPPABLE &&
896             (!view || view->type == I915_GGTT_VIEW_NORMAL)) {
897                 /*
898                  * If the required space is larger than the available
899                  * aperture, we will not able to find a slot for the
900                  * object and unbinding the object now will be in
901                  * vain. Worse, doing so may cause us to ping-pong
902                  * the object in and out of the Global GTT and
903                  * waste a lot of cycles under the mutex.
904                  */
905                 if (obj->base.size > ggtt->mappable_end)
906                         return ERR_PTR(-E2BIG);
907
908                 /*
909                  * If NONBLOCK is set the caller is optimistically
910                  * trying to cache the full object within the mappable
911                  * aperture, and *must* have a fallback in place for
912                  * situations where we cannot bind the object. We
913                  * can be a little more lax here and use the fallback
914                  * more often to avoid costly migrations of ourselves
915                  * and other objects within the aperture.
916                  *
917                  * Half-the-aperture is used as a simple heuristic.
918                  * More interesting would to do search for a free
919                  * block prior to making the commitment to unbind.
920                  * That caters for the self-harm case, and with a
921                  * little more heuristics (e.g. NOFAULT, NOEVICT)
922                  * we could try to minimise harm to others.
923                  */
924                 if (flags & PIN_NONBLOCK &&
925                     obj->base.size > ggtt->mappable_end / 2)
926                         return ERR_PTR(-ENOSPC);
927         }
928
929 new_vma:
930         vma = i915_vma_instance(obj, &ggtt->vm, view);
931         if (IS_ERR(vma))
932                 return vma;
933
934         if (i915_vma_misplaced(vma, size, alignment, flags)) {
935                 if (flags & PIN_NONBLOCK) {
936                         if (i915_vma_is_pinned(vma) || i915_vma_is_active(vma))
937                                 return ERR_PTR(-ENOSPC);
938
939                         if (flags & PIN_MAPPABLE &&
940                             vma->fence_size > ggtt->mappable_end / 2)
941                                 return ERR_PTR(-ENOSPC);
942                 }
943
944                 if (i915_vma_is_pinned(vma) || i915_vma_is_active(vma)) {
945                         discard_ggtt_vma(vma);
946                         goto new_vma;
947                 }
948
949                 ret = i915_vma_unbind(vma);
950                 if (ret)
951                         return ERR_PTR(ret);
952         }
953
954         ret = i915_vma_pin_ww(vma, ww, size, alignment, flags | PIN_GLOBAL);
955
956         if (ret)
957                 return ERR_PTR(ret);
958
959         if (vma->fence && !i915_gem_object_is_tiled(obj)) {
960                 mutex_lock(&ggtt->vm.mutex);
961                 i915_vma_revoke_fence(vma);
962                 mutex_unlock(&ggtt->vm.mutex);
963         }
964
965         ret = i915_vma_wait_for_bind(vma);
966         if (ret) {
967                 i915_vma_unpin(vma);
968                 return ERR_PTR(ret);
969         }
970
971         return vma;
972 }
973
974 struct i915_vma * __must_check
975 i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
976                          const struct i915_ggtt_view *view,
977                          u64 size, u64 alignment, u64 flags)
978 {
979         struct i915_gem_ww_ctx ww;
980         struct i915_vma *ret;
981         int err;
982
983         for_i915_gem_ww(&ww, err, true) {
984                 err = i915_gem_object_lock(obj, &ww);
985                 if (err)
986                         continue;
987
988                 ret = i915_gem_object_ggtt_pin_ww(obj, &ww, view, size,
989                                                   alignment, flags);
990                 if (IS_ERR(ret))
991                         err = PTR_ERR(ret);
992         }
993
994         return err ? ERR_PTR(err) : ret;
995 }
996
997 int
998 i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
999                        struct drm_file *file_priv)
1000 {
1001         struct drm_i915_private *i915 = to_i915(dev);
1002         struct drm_i915_gem_madvise *args = data;
1003         struct drm_i915_gem_object *obj;
1004         int err;
1005
1006         switch (args->madv) {
1007         case I915_MADV_DONTNEED:
1008         case I915_MADV_WILLNEED:
1009             break;
1010         default:
1011             return -EINVAL;
1012         }
1013
1014         obj = i915_gem_object_lookup(file_priv, args->handle);
1015         if (!obj)
1016                 return -ENOENT;
1017
1018         err = i915_gem_object_lock_interruptible(obj, NULL);
1019         if (err)
1020                 goto out;
1021
1022         if (i915_gem_object_has_pages(obj) &&
1023             i915_gem_object_is_tiled(obj) &&
1024             i915->quirks & QUIRK_PIN_SWIZZLED_PAGES) {
1025                 if (obj->mm.madv == I915_MADV_WILLNEED) {
1026                         GEM_BUG_ON(!i915_gem_object_has_tiling_quirk(obj));
1027                         i915_gem_object_clear_tiling_quirk(obj);
1028                         i915_gem_object_make_shrinkable(obj);
1029                 }
1030                 if (args->madv == I915_MADV_WILLNEED) {
1031                         GEM_BUG_ON(i915_gem_object_has_tiling_quirk(obj));
1032                         i915_gem_object_make_unshrinkable(obj);
1033                         i915_gem_object_set_tiling_quirk(obj);
1034                 }
1035         }
1036
1037         if (obj->mm.madv != __I915_MADV_PURGED) {
1038                 obj->mm.madv = args->madv;
1039                 if (obj->ops->adjust_lru)
1040                         obj->ops->adjust_lru(obj);
1041         }
1042
1043         if (i915_gem_object_has_pages(obj) ||
1044             i915_gem_object_has_self_managed_shrink_list(obj)) {
1045                 unsigned long flags;
1046
1047                 spin_lock_irqsave(&i915->mm.obj_lock, flags);
1048                 if (!list_empty(&obj->mm.link)) {
1049                         struct list_head *list;
1050
1051                         if (obj->mm.madv != I915_MADV_WILLNEED)
1052                                 list = &i915->mm.purge_list;
1053                         else
1054                                 list = &i915->mm.shrink_list;
1055                         list_move_tail(&obj->mm.link, list);
1056
1057                 }
1058                 spin_unlock_irqrestore(&i915->mm.obj_lock, flags);
1059         }
1060
1061         /* if the object is no longer attached, discard its backing storage */
1062         if (obj->mm.madv == I915_MADV_DONTNEED &&
1063             !i915_gem_object_has_pages(obj))
1064                 i915_gem_object_truncate(obj);
1065
1066         args->retained = obj->mm.madv != __I915_MADV_PURGED;
1067
1068         i915_gem_object_unlock(obj);
1069 out:
1070         i915_gem_object_put(obj);
1071         return err;
1072 }
1073
1074 int i915_gem_init(struct drm_i915_private *dev_priv)
1075 {
1076         int ret;
1077
1078         /* We need to fallback to 4K pages if host doesn't support huge gtt. */
1079         if (intel_vgpu_active(dev_priv) && !intel_vgpu_has_huge_gtt(dev_priv))
1080                 mkwrite_device_info(dev_priv)->page_sizes =
1081                         I915_GTT_PAGE_SIZE_4K;
1082
1083         ret = i915_gem_init_userptr(dev_priv);
1084         if (ret)
1085                 return ret;
1086
1087         intel_uc_fetch_firmwares(&to_gt(dev_priv)->uc);
1088         intel_wopcm_init(&dev_priv->wopcm);
1089
1090         ret = i915_init_ggtt(dev_priv);
1091         if (ret) {
1092                 GEM_BUG_ON(ret == -EIO);
1093                 goto err_unlock;
1094         }
1095
1096         /*
1097          * Despite its name intel_init_clock_gating applies both display
1098          * clock gating workarounds; GT mmio workarounds and the occasional
1099          * GT power context workaround. Worse, sometimes it includes a context
1100          * register workaround which we need to apply before we record the
1101          * default HW state for all contexts.
1102          *
1103          * FIXME: break up the workarounds and apply them at the right time!
1104          */
1105         intel_init_clock_gating(dev_priv);
1106
1107         ret = intel_gt_init(to_gt(dev_priv));
1108         if (ret)
1109                 goto err_unlock;
1110
1111         return 0;
1112
1113         /*
1114          * Unwinding is complicated by that we want to handle -EIO to mean
1115          * disable GPU submission but keep KMS alive. We want to mark the
1116          * HW as irrevisibly wedged, but keep enough state around that the
1117          * driver doesn't explode during runtime.
1118          */
1119 err_unlock:
1120         i915_gem_drain_workqueue(dev_priv);
1121
1122         if (ret != -EIO)
1123                 intel_uc_cleanup_firmwares(&to_gt(dev_priv)->uc);
1124
1125         if (ret == -EIO) {
1126                 /*
1127                  * Allow engines or uC initialisation to fail by marking the GPU
1128                  * as wedged. But we only want to do this when the GPU is angry,
1129                  * for all other failure, such as an allocation failure, bail.
1130                  */
1131                 if (!intel_gt_is_wedged(to_gt(dev_priv))) {
1132                         i915_probe_error(dev_priv,
1133                                          "Failed to initialize GPU, declaring it wedged!\n");
1134                         intel_gt_set_wedged(to_gt(dev_priv));
1135                 }
1136
1137                 /* Minimal basic recovery for KMS */
1138                 ret = i915_ggtt_enable_hw(dev_priv);
1139                 i915_ggtt_resume(to_gt(dev_priv)->ggtt);
1140                 intel_init_clock_gating(dev_priv);
1141         }
1142
1143         i915_gem_drain_freed_objects(dev_priv);
1144
1145         return ret;
1146 }
1147
1148 void i915_gem_driver_register(struct drm_i915_private *i915)
1149 {
1150         i915_gem_driver_register__shrinker(i915);
1151
1152         intel_engines_driver_register(i915);
1153 }
1154
1155 void i915_gem_driver_unregister(struct drm_i915_private *i915)
1156 {
1157         i915_gem_driver_unregister__shrinker(i915);
1158 }
1159
1160 void i915_gem_driver_remove(struct drm_i915_private *dev_priv)
1161 {
1162         intel_wakeref_auto_fini(&to_gt(dev_priv)->ggtt->userfault_wakeref);
1163
1164         i915_gem_suspend_late(dev_priv);
1165         intel_gt_driver_remove(to_gt(dev_priv));
1166         dev_priv->uabi_engines = RB_ROOT;
1167
1168         /* Flush any outstanding unpin_work. */
1169         i915_gem_drain_workqueue(dev_priv);
1170
1171         i915_gem_drain_freed_objects(dev_priv);
1172 }
1173
1174 void i915_gem_driver_release(struct drm_i915_private *dev_priv)
1175 {
1176         intel_gt_driver_release(to_gt(dev_priv));
1177
1178         intel_uc_cleanup_firmwares(&to_gt(dev_priv)->uc);
1179
1180         i915_gem_drain_freed_objects(dev_priv);
1181
1182         drm_WARN_ON(&dev_priv->drm, !list_empty(&dev_priv->gem.contexts.list));
1183 }
1184
1185 static void i915_gem_init__mm(struct drm_i915_private *i915)
1186 {
1187         spin_lock_init(&i915->mm.obj_lock);
1188
1189         init_llist_head(&i915->mm.free_list);
1190
1191         INIT_LIST_HEAD(&i915->mm.purge_list);
1192         INIT_LIST_HEAD(&i915->mm.shrink_list);
1193
1194         i915_gem_init__objects(i915);
1195 }
1196
1197 void i915_gem_init_early(struct drm_i915_private *dev_priv)
1198 {
1199         i915_gem_init__mm(dev_priv);
1200         i915_gem_init__contexts(dev_priv);
1201
1202         spin_lock_init(&dev_priv->fb_tracking.lock);
1203 }
1204
1205 void i915_gem_cleanup_early(struct drm_i915_private *dev_priv)
1206 {
1207         i915_gem_drain_freed_objects(dev_priv);
1208         GEM_BUG_ON(!llist_empty(&dev_priv->mm.free_list));
1209         GEM_BUG_ON(atomic_read(&dev_priv->mm.free_count));
1210         drm_WARN_ON(&dev_priv->drm, dev_priv->mm.shrink_count);
1211 }
1212
1213 int i915_gem_open(struct drm_i915_private *i915, struct drm_file *file)
1214 {
1215         struct drm_i915_file_private *file_priv;
1216         int ret;
1217
1218         DRM_DEBUG("\n");
1219
1220         file_priv = kzalloc(sizeof(*file_priv), GFP_KERNEL);
1221         if (!file_priv)
1222                 return -ENOMEM;
1223
1224         file->driver_priv = file_priv;
1225         file_priv->dev_priv = i915;
1226         file_priv->file = file;
1227
1228         file_priv->bsd_engine = -1;
1229         file_priv->hang_timestamp = jiffies;
1230
1231         ret = i915_gem_context_open(i915, file);
1232         if (ret)
1233                 kfree(file_priv);
1234
1235         return ret;
1236 }
1237
1238 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
1239 #include "selftests/mock_gem_device.c"
1240 #include "selftests/i915_gem.c"
1241 #endif