i915_gem.c revision 1.50 1 /* $NetBSD: i915_gem.c,v 1.50 2018/08/27 14:14:29 riastradh Exp $ */
2
3 /*
4 * Copyright 2008-2015 Intel Corporation
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
23 * IN THE SOFTWARE.
24 *
25 * Authors:
26 * Eric Anholt <eric (at) anholt.net>
27 *
28 */
29
30 #include <sys/cdefs.h>
31 __KERNEL_RCSID(0, "$NetBSD: i915_gem.c,v 1.50 2018/08/27 14:14:29 riastradh Exp $");
32
33 #ifdef __NetBSD__
34 #if 0 /* XXX uvmhist option? */
35 #include "opt_uvmhist.h"
36 #endif
37
38 #include <sys/types.h>
39 #include <sys/param.h>
40
41 #include <uvm/uvm.h>
42 #include <uvm/uvm_extern.h>
43 #include <uvm/uvm_fault.h>
44 #include <uvm/uvm_page.h>
45 #include <uvm/uvm_pmap.h>
46 #include <uvm/uvm_prot.h>
47
48 #include <drm/bus_dma_hacks.h>
49 #endif
50
51 #include <drm/drmP.h>
52 #include <drm/drm_vma_manager.h>
53 #include <drm/i915_drm.h>
54 #include "i915_drv.h"
55 #include "i915_vgpu.h"
56 #include "i915_trace.h"
57 #include "intel_drv.h"
58 #include <linux/shmem_fs.h>
59 #include <linux/slab.h>
60 #include <linux/swap.h>
61 #include <linux/pci.h>
62 #include <linux/dma-buf.h>
63 #include <linux/errno.h>
64 #include <linux/time.h>
65 #include <linux/err.h>
66 #include <linux/bitops.h>
67 #include <linux/printk.h>
68 #include <asm/param.h>
69 #include <asm/page.h>
70 #include <asm/cpufeature.h>
71
72 #define RQ_BUG_ON(expr)
73
74 static void i915_gem_object_flush_gtt_write_domain(struct drm_i915_gem_object *obj);
75 static void i915_gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj);
76 static void
77 i915_gem_object_retire__write(struct drm_i915_gem_object *obj);
78 static void
79 i915_gem_object_retire__read(struct drm_i915_gem_object *obj, int ring);
80
81 static bool cpu_cache_is_coherent(struct drm_device *dev,
82 enum i915_cache_level level)
83 {
84 return HAS_LLC(dev) || level != I915_CACHE_NONE;
85 }
86
87 static bool cpu_write_needs_clflush(struct drm_i915_gem_object *obj)
88 {
89 if (!cpu_cache_is_coherent(obj->base.dev, obj->cache_level))
90 return true;
91
92 return obj->pin_display;
93 }
94
95 /* some bookkeeping */
96 static void i915_gem_info_add_obj(struct drm_i915_private *dev_priv,
97 size_t size)
98 {
99 spin_lock(&dev_priv->mm.object_stat_lock);
100 dev_priv->mm.object_count++;
101 dev_priv->mm.object_memory += size;
102 spin_unlock(&dev_priv->mm.object_stat_lock);
103 }
104
105 static void i915_gem_info_remove_obj(struct drm_i915_private *dev_priv,
106 size_t size)
107 {
108 spin_lock(&dev_priv->mm.object_stat_lock);
109 dev_priv->mm.object_count--;
110 dev_priv->mm.object_memory -= size;
111 spin_unlock(&dev_priv->mm.object_stat_lock);
112 }
113
114 static int
115 i915_gem_wait_for_error(struct i915_gpu_error *error)
116 {
117 int ret;
118
119 #define EXIT_COND (!i915_reset_in_progress(error) || \
120 i915_terminally_wedged(error))
121 if (EXIT_COND)
122 return 0;
123
124 /*
125 * Only wait 10 seconds for the gpu reset to complete to avoid hanging
126 * userspace. If it takes that long something really bad is going on and
127 * we should simply try to bail out and fail as gracefully as possible.
128 */
129 #ifdef __NetBSD__
130 spin_lock(&error->reset_lock);
131 DRM_SPIN_TIMED_WAIT_UNTIL(ret, &error->reset_queue, &error->reset_lock,
132 10*HZ, EXIT_COND);
133 spin_unlock(&error->reset_lock);
134 #else
135 ret = wait_event_interruptible_timeout(error->reset_queue,
136 EXIT_COND,
137 10*HZ);
138 #endif
139 if (ret == 0) {
140 DRM_ERROR("Timed out waiting for the gpu reset to complete\n");
141 return -EIO;
142 } else if (ret < 0) {
143 return ret;
144 }
145 #undef EXIT_COND
146
147 return 0;
148 }
149
150 int i915_mutex_lock_interruptible(struct drm_device *dev)
151 {
152 struct drm_i915_private *dev_priv = dev->dev_private;
153 int ret;
154
155 ret = i915_gem_wait_for_error(&dev_priv->gpu_error);
156 if (ret)
157 return ret;
158
159 ret = mutex_lock_interruptible(&dev->struct_mutex);
160 if (ret)
161 return ret;
162
163 WARN_ON(i915_verify_lists(dev));
164 return 0;
165 }
166
167 int
168 i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
169 struct drm_file *file)
170 {
171 struct drm_i915_private *dev_priv = dev->dev_private;
172 struct drm_i915_gem_get_aperture *args = data;
173 struct i915_gtt *ggtt = &dev_priv->gtt;
174 struct i915_vma *vma;
175 size_t pinned;
176
177 pinned = 0;
178 mutex_lock(&dev->struct_mutex);
179 list_for_each_entry(vma, &ggtt->base.active_list, mm_list)
180 if (vma->pin_count)
181 pinned += vma->node.size;
182 list_for_each_entry(vma, &ggtt->base.inactive_list, mm_list)
183 if (vma->pin_count)
184 pinned += vma->node.size;
185 mutex_unlock(&dev->struct_mutex);
186
187 args->aper_size = dev_priv->gtt.base.total;
188 args->aper_available_size = args->aper_size - pinned;
189
190 return 0;
191 }
192
193 static int
194 i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
195 {
196 #ifndef __NetBSD__
197 struct address_space *mapping = file_inode(obj->base.filp)->i_mapping;
198 #endif
199 char *vaddr = obj->phys_handle->vaddr;
200 #ifndef __NetBSD__
201 struct sg_table *st;
202 struct scatterlist *sg;
203 #endif
204 int i;
205
206 if (WARN_ON(i915_gem_object_needs_bit17_swizzle(obj)))
207 return -EINVAL;
208
209 for (i = 0; i < obj->base.size / PAGE_SIZE; i++) {
210 struct page *page;
211 char *src;
212
213 #ifdef __NetBSD__
214 struct pglist pages = TAILQ_HEAD_INITIALIZER(pages);
215 int ret;
216 /* XXX errno NetBSD->Linux */
217 ret = -uvm_obj_wirepages(obj->base.filp, i*PAGE_SIZE,
218 (i + 1)*PAGE_SIZE, &pages);
219 if (ret)
220 return ret;
221 page = container_of(TAILQ_FIRST(&pages), struct page, p_vmp);
222 #else
223 page = shmem_read_mapping_page(mapping, i);
224 if (IS_ERR(page))
225 return PTR_ERR(page);
226 #endif
227
228 src = kmap_atomic(page);
229 memcpy(vaddr, src, PAGE_SIZE);
230 drm_clflush_virt_range(vaddr, PAGE_SIZE);
231 kunmap_atomic(src);
232
233 #ifdef __NetBSD__
234 uvm_obj_unwirepages(obj->base.filp, i*PAGE_SIZE,
235 (i + 1)*PAGE_SIZE);
236 #else
237 page_cache_release(page);
238 #endif
239 vaddr += PAGE_SIZE;
240 }
241
242 i915_gem_chipset_flush(obj->base.dev);
243
244 #ifdef __NetBSD__
245 obj->pages = obj->phys_handle->dmah_map;
246 #else
247 st = kmalloc(sizeof(*st), GFP_KERNEL);
248 if (st == NULL)
249 return -ENOMEM;
250
251 if (sg_alloc_table(st, 1, GFP_KERNEL)) {
252 kfree(st);
253 return -ENOMEM;
254 }
255
256 sg = st->sgl;
257 sg->offset = 0;
258 sg->length = obj->base.size;
259
260 sg_dma_address(sg) = obj->phys_handle->busaddr;
261 sg_dma_len(sg) = obj->base.size;
262
263 obj->pages = st;
264 #endif
265 return 0;
266 }
267
268 static void
269 i915_gem_object_put_pages_phys(struct drm_i915_gem_object *obj)
270 {
271 int ret;
272
273 BUG_ON(obj->madv == __I915_MADV_PURGED);
274
275 ret = i915_gem_object_set_to_cpu_domain(obj, true);
276 if (ret) {
277 /* In the event of a disaster, abandon all caches and
278 * hope for the best.
279 */
280 WARN_ON(ret != -EIO);
281 obj->base.read_domains = obj->base.write_domain = I915_GEM_DOMAIN_CPU;
282 }
283
284 if (obj->madv == I915_MADV_DONTNEED)
285 obj->dirty = 0;
286
287 if (obj->dirty) {
288 #ifndef __NetBSD__
289 struct address_space *mapping = file_inode(obj->base.filp)->i_mapping;
290 #endif
291 const char *vaddr = obj->phys_handle->vaddr;
292 int i;
293
294 for (i = 0; i < obj->base.size / PAGE_SIZE; i++) {
295 struct page *page;
296 char *dst;
297
298 #ifdef __NetBSD__
299 struct pglist pages = TAILQ_HEAD_INITIALIZER(pages);
300 /* XXX errno NetBSD->Linux */
301 ret = -uvm_obj_wirepages(obj->base.filp,
302 i*PAGE_SIZE, (i + 1)*PAGE_SIZE, &pages);
303 if (ret)
304 continue;
305 page = container_of(TAILQ_FIRST(&pages), struct page,
306 p_vmp);
307 #endif
308
309 dst = kmap_atomic(page);
310 drm_clflush_virt_range(vaddr, PAGE_SIZE);
311 memcpy(dst, vaddr, PAGE_SIZE);
312 kunmap_atomic(dst);
313
314 set_page_dirty(page);
315 #ifdef __NetBSD__
316 /* XXX mark page accessed */
317 uvm_obj_unwirepages(obj->base.filp, i*PAGE_SIZE,
318 (i+1)*PAGE_SIZE);
319 #else
320 if (obj->madv == I915_MADV_WILLNEED)
321 mark_page_accessed(page);
322 page_cache_release(page);
323 #endif
324 vaddr += PAGE_SIZE;
325 }
326 obj->dirty = 0;
327 }
328
329 #ifdef __NetBSD__
330 obj->pages = NULL;
331 #else
332 sg_free_table(obj->pages);
333 kfree(obj->pages);
334 #endif
335 }
336
337 static void
338 i915_gem_object_release_phys(struct drm_i915_gem_object *obj)
339 {
340 drm_pci_free(obj->base.dev, obj->phys_handle);
341 }
342
343 static const struct drm_i915_gem_object_ops i915_gem_phys_ops = {
344 .get_pages = i915_gem_object_get_pages_phys,
345 .put_pages = i915_gem_object_put_pages_phys,
346 .release = i915_gem_object_release_phys,
347 };
348
349 static int
350 drop_pages(struct drm_i915_gem_object *obj)
351 {
352 struct i915_vma *vma, *next;
353 int ret;
354
355 drm_gem_object_reference(&obj->base);
356 list_for_each_entry_safe(vma, next, &obj->vma_list, vma_link)
357 if (i915_vma_unbind(vma))
358 break;
359
360 ret = i915_gem_object_put_pages(obj);
361 drm_gem_object_unreference(&obj->base);
362
363 return ret;
364 }
365
366 int
367 i915_gem_object_attach_phys(struct drm_i915_gem_object *obj,
368 int align)
369 {
370 drm_dma_handle_t *phys;
371 int ret;
372
373 if (obj->phys_handle) {
374 if ((unsigned long)obj->phys_handle->vaddr & (align -1))
375 return -EBUSY;
376
377 return 0;
378 }
379
380 if (obj->madv != I915_MADV_WILLNEED)
381 return -EFAULT;
382
383 if (obj->base.filp == NULL)
384 return -EINVAL;
385
386 ret = drop_pages(obj);
387 if (ret)
388 return ret;
389
390 /* create a new object */
391 phys = drm_pci_alloc(obj->base.dev, obj->base.size, align);
392 if (!phys)
393 return -ENOMEM;
394
395 obj->phys_handle = phys;
396 obj->ops = &i915_gem_phys_ops;
397
398 return i915_gem_object_get_pages(obj);
399 }
400
401 static int
402 i915_gem_phys_pwrite(struct drm_i915_gem_object *obj,
403 struct drm_i915_gem_pwrite *args,
404 struct drm_file *file_priv)
405 {
406 struct drm_device *dev = obj->base.dev;
407 void *vaddr = (char *)obj->phys_handle->vaddr + args->offset;
408 char __user *user_data = to_user_ptr(args->data_ptr);
409 int ret = 0;
410
411 /* We manually control the domain here and pretend that it
412 * remains coherent i.e. in the GTT domain, like shmem_pwrite.
413 */
414 ret = i915_gem_object_wait_rendering(obj, false);
415 if (ret)
416 return ret;
417
418 intel_fb_obj_invalidate(obj, ORIGIN_CPU);
419 if (__copy_from_user_inatomic_nocache(vaddr, user_data, args->size)) {
420 unsigned long unwritten;
421
422 /* The physical object once assigned is fixed for the lifetime
423 * of the obj, so we can safely drop the lock and continue
424 * to access vaddr.
425 */
426 mutex_unlock(&dev->struct_mutex);
427 unwritten = copy_from_user(vaddr, user_data, args->size);
428 mutex_lock(&dev->struct_mutex);
429 if (unwritten) {
430 ret = -EFAULT;
431 goto out;
432 }
433 }
434
435 drm_clflush_virt_range(vaddr, args->size);
436 i915_gem_chipset_flush(dev);
437
438 out:
439 intel_fb_obj_flush(obj, false, ORIGIN_CPU);
440 return ret;
441 }
442
443 void *i915_gem_object_alloc(struct drm_device *dev)
444 {
445 struct drm_i915_private *dev_priv = dev->dev_private;
446 return kmem_cache_zalloc(dev_priv->objects, GFP_KERNEL);
447 }
448
449 void i915_gem_object_free(struct drm_i915_gem_object *obj)
450 {
451 struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
452 kmem_cache_free(dev_priv->objects, obj);
453 }
454
455 static int
456 i915_gem_create(struct drm_file *file,
457 struct drm_device *dev,
458 uint64_t size,
459 uint32_t *handle_p)
460 {
461 struct drm_i915_gem_object *obj;
462 int ret;
463 u32 handle;
464
465 size = roundup(size, PAGE_SIZE);
466 if (size == 0)
467 return -EINVAL;
468
469 /* Allocate the new object */
470 obj = i915_gem_alloc_object(dev, size);
471 if (obj == NULL)
472 return -ENOMEM;
473
474 ret = drm_gem_handle_create(file, &obj->base, &handle);
475 /* drop reference from allocate - handle holds it now */
476 drm_gem_object_unreference_unlocked(&obj->base);
477 if (ret)
478 return ret;
479
480 *handle_p = handle;
481 return 0;
482 }
483
484 int
485 i915_gem_dumb_create(struct drm_file *file,
486 struct drm_device *dev,
487 struct drm_mode_create_dumb *args)
488 {
489 /* have to work out size/pitch and return them */
490 #ifdef __NetBSD__ /* ALIGN means something else. */
491 args->pitch = round_up(args->width * DIV_ROUND_UP(args->bpp, 8), 64);
492 #else
493 args->pitch = ALIGN(args->width * DIV_ROUND_UP(args->bpp, 8), 64);
494 #endif
495 args->size = args->pitch * args->height;
496 return i915_gem_create(file, dev,
497 args->size, &args->handle);
498 }
499
500 /**
501 * Creates a new mm object and returns a handle to it.
502 */
503 int
504 i915_gem_create_ioctl(struct drm_device *dev, void *data,
505 struct drm_file *file)
506 {
507 struct drm_i915_gem_create *args = data;
508
509 return i915_gem_create(file, dev,
510 args->size, &args->handle);
511 }
512
513 static inline int
514 __copy_to_user_swizzled(char __user *cpu_vaddr,
515 const char *gpu_vaddr, int gpu_offset,
516 int length)
517 {
518 int ret, cpu_offset = 0;
519
520 while (length > 0) {
521 #ifdef __NetBSD__ /* XXX ALIGN means something else. */
522 int cacheline_end = round_up(gpu_offset + 1, 64);
523 #else
524 int cacheline_end = ALIGN(gpu_offset + 1, 64);
525 #endif
526 int this_length = min(cacheline_end - gpu_offset, length);
527 int swizzled_gpu_offset = gpu_offset ^ 64;
528
529 ret = __copy_to_user(cpu_vaddr + cpu_offset,
530 gpu_vaddr + swizzled_gpu_offset,
531 this_length);
532 if (ret)
533 return ret + length;
534
535 cpu_offset += this_length;
536 gpu_offset += this_length;
537 length -= this_length;
538 }
539
540 return 0;
541 }
542
543 static inline int
544 __copy_from_user_swizzled(char *gpu_vaddr, int gpu_offset,
545 const char __user *cpu_vaddr,
546 int length)
547 {
548 int ret, cpu_offset = 0;
549
550 while (length > 0) {
551 #ifdef __NetBSD__ /* XXX ALIGN means something else. */
552 int cacheline_end = round_up(gpu_offset + 1, 64);
553 #else
554 int cacheline_end = ALIGN(gpu_offset + 1, 64);
555 #endif
556 int this_length = min(cacheline_end - gpu_offset, length);
557 int swizzled_gpu_offset = gpu_offset ^ 64;
558
559 ret = __copy_from_user(gpu_vaddr + swizzled_gpu_offset,
560 cpu_vaddr + cpu_offset,
561 this_length);
562 if (ret)
563 return ret + length;
564
565 cpu_offset += this_length;
566 gpu_offset += this_length;
567 length -= this_length;
568 }
569
570 return 0;
571 }
572
573 /*
574 * Pins the specified object's pages and synchronizes the object with
575 * GPU accesses. Sets needs_clflush to non-zero if the caller should
576 * flush the object from the CPU cache.
577 */
578 int i915_gem_obj_prepare_shmem_read(struct drm_i915_gem_object *obj,
579 int *needs_clflush)
580 {
581 int ret;
582
583 *needs_clflush = 0;
584
585 if (!obj->base.filp)
586 return -EINVAL;
587
588 if (!(obj->base.read_domains & I915_GEM_DOMAIN_CPU)) {
589 /* If we're not in the cpu read domain, set ourself into the gtt
590 * read domain and manually flush cachelines (if required). This
591 * optimizes for the case when the gpu will dirty the data
592 * anyway again before the next pread happens. */
593 *needs_clflush = !cpu_cache_is_coherent(obj->base.dev,
594 obj->cache_level);
595 ret = i915_gem_object_wait_rendering(obj, true);
596 if (ret)
597 return ret;
598 }
599
600 ret = i915_gem_object_get_pages(obj);
601 if (ret)
602 return ret;
603
604 i915_gem_object_pin_pages(obj);
605
606 return ret;
607 }
608
609 /* Per-page copy function for the shmem pread fastpath.
610 * Flushes invalid cachelines before reading the target if
611 * needs_clflush is set. */
612 static int
613 shmem_pread_fast(struct page *page, int shmem_page_offset, int page_length,
614 char __user *user_data,
615 bool page_do_bit17_swizzling, bool needs_clflush)
616 {
617 #ifdef __NetBSD__ /* XXX atomic shmem fast path */
618 return -EFAULT;
619 #else
620 char *vaddr;
621 int ret;
622
623 if (unlikely(page_do_bit17_swizzling))
624 return -EINVAL;
625
626 vaddr = kmap_atomic(page);
627 if (needs_clflush)
628 drm_clflush_virt_range(vaddr + shmem_page_offset,
629 page_length);
630 ret = __copy_to_user_inatomic(user_data,
631 vaddr + shmem_page_offset,
632 page_length);
633 kunmap_atomic(vaddr);
634
635 return ret ? -EFAULT : 0;
636 #endif
637 }
638
639 static void
640 shmem_clflush_swizzled_range(char *addr, unsigned long length,
641 bool swizzled)
642 {
643 if (unlikely(swizzled)) {
644 unsigned long start = (unsigned long) addr;
645 unsigned long end = (unsigned long) addr + length;
646
647 /* For swizzling simply ensure that we always flush both
648 * channels. Lame, but simple and it works. Swizzled
649 * pwrite/pread is far from a hotpath - current userspace
650 * doesn't use it at all. */
651 start = round_down(start, 128);
652 end = round_up(end, 128);
653
654 drm_clflush_virt_range((void *)start, end - start);
655 } else {
656 drm_clflush_virt_range(addr, length);
657 }
658
659 }
660
661 /* Only difference to the fast-path function is that this can handle bit17
662 * and uses non-atomic copy and kmap functions. */
663 static int
664 shmem_pread_slow(struct page *page, int shmem_page_offset, int page_length,
665 char __user *user_data,
666 bool page_do_bit17_swizzling, bool needs_clflush)
667 {
668 char *vaddr;
669 int ret;
670
671 vaddr = kmap(page);
672 if (needs_clflush)
673 shmem_clflush_swizzled_range(vaddr + shmem_page_offset,
674 page_length,
675 page_do_bit17_swizzling);
676
677 if (page_do_bit17_swizzling)
678 ret = __copy_to_user_swizzled(user_data,
679 vaddr, shmem_page_offset,
680 page_length);
681 else
682 ret = __copy_to_user(user_data,
683 vaddr + shmem_page_offset,
684 page_length);
685 kunmap(page);
686
687 return ret ? - EFAULT : 0;
688 }
689
690 static int
691 i915_gem_shmem_pread(struct drm_device *dev,
692 struct drm_i915_gem_object *obj,
693 struct drm_i915_gem_pread *args,
694 struct drm_file *file)
695 {
696 char __user *user_data;
697 ssize_t remain;
698 loff_t offset;
699 int shmem_page_offset, page_length, ret = 0;
700 int obj_do_bit17_swizzling, page_do_bit17_swizzling;
701 #ifndef __NetBSD__ /* XXX */
702 int prefaulted = 0;
703 #endif
704 int needs_clflush = 0;
705 #ifndef __NetBSD__
706 struct sg_page_iter sg_iter;
707 #endif
708
709 user_data = to_user_ptr(args->data_ptr);
710 remain = args->size;
711
712 obj_do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
713
714 ret = i915_gem_obj_prepare_shmem_read(obj, &needs_clflush);
715 if (ret)
716 return ret;
717
718 offset = args->offset;
719
720 #ifdef __NetBSD__
721 while (0 < remain)
722 #else
723 for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents,
724 offset >> PAGE_SHIFT)
725 #endif
726 {
727 #ifdef __NetBSD__
728 struct page *const page = i915_gem_object_get_page(obj,
729 atop(offset));
730 #else
731 struct page *page = sg_page_iter_page(&sg_iter);
732
733 if (remain <= 0)
734 break;
735 #endif
736
737 /* Operation in this page
738 *
739 * shmem_page_offset = offset within page in shmem file
740 * page_length = bytes to copy for this page
741 */
742 shmem_page_offset = offset_in_page(offset);
743 page_length = remain;
744 if ((shmem_page_offset + page_length) > PAGE_SIZE)
745 page_length = PAGE_SIZE - shmem_page_offset;
746
747 page_do_bit17_swizzling = obj_do_bit17_swizzling &&
748 (page_to_phys(page) & (1 << 17)) != 0;
749
750 ret = shmem_pread_fast(page, shmem_page_offset, page_length,
751 user_data, page_do_bit17_swizzling,
752 needs_clflush);
753 if (ret == 0)
754 goto next_page;
755
756 mutex_unlock(&dev->struct_mutex);
757 #ifndef __NetBSD__
758 if (likely(!i915.prefault_disable) && !prefaulted) {
759 ret = fault_in_multipages_writeable(user_data, remain);
760 /* Userspace is tricking us, but we've already clobbered
761 * its pages with the prefault and promised to write the
762 * data up to the first fault. Hence ignore any errors
763 * and just continue. */
764 (void)ret;
765 prefaulted = 1;
766 }
767 #endif
768 ret = shmem_pread_slow(page, shmem_page_offset, page_length,
769 user_data, page_do_bit17_swizzling,
770 needs_clflush);
771
772 mutex_lock(&dev->struct_mutex);
773
774 if (ret)
775 goto out;
776
777 next_page:
778 remain -= page_length;
779 user_data += page_length;
780 offset += page_length;
781 }
782
783 out:
784 i915_gem_object_unpin_pages(obj);
785
786 return ret;
787 }
788
789 /**
790 * Reads data from the object referenced by handle.
791 *
792 * On error, the contents of *data are undefined.
793 */
794 int
795 i915_gem_pread_ioctl(struct drm_device *dev, void *data,
796 struct drm_file *file)
797 {
798 struct drm_i915_gem_pread *args = data;
799 struct drm_gem_object *gobj;
800 struct drm_i915_gem_object *obj;
801 int ret = 0;
802
803 if (args->size == 0)
804 return 0;
805
806 if (!access_ok(VERIFY_WRITE,
807 to_user_ptr(args->data_ptr),
808 args->size))
809 return -EFAULT;
810
811 ret = i915_mutex_lock_interruptible(dev);
812 if (ret)
813 return ret;
814
815 gobj = drm_gem_object_lookup(dev, file, args->handle);
816 if (gobj == NULL) {
817 ret = -ENOENT;
818 goto unlock;
819 }
820 obj = to_intel_bo(gobj);
821
822 /* Bounds check source. */
823 if (args->offset > obj->base.size ||
824 args->size > obj->base.size - args->offset) {
825 ret = -EINVAL;
826 goto out;
827 }
828
829 /* prime objects have no backing filp to GEM pread/pwrite
830 * pages from.
831 */
832 if (!obj->base.filp) {
833 ret = -EINVAL;
834 goto out;
835 }
836
837 trace_i915_gem_object_pread(obj, args->offset, args->size);
838
839 ret = i915_gem_shmem_pread(dev, obj, args, file);
840
841 out:
842 drm_gem_object_unreference(&obj->base);
843 unlock:
844 mutex_unlock(&dev->struct_mutex);
845 return ret;
846 }
847
848 /* This is the fast write path which cannot handle
849 * page faults in the source data
850 */
851
852 static inline int
853 fast_user_write(struct io_mapping *mapping,
854 loff_t page_base, int page_offset,
855 char __user *user_data,
856 int length)
857 {
858 #ifdef __NetBSD__ /* XXX atomic shmem fast path */
859 return -EFAULT;
860 #else
861 void __iomem *vaddr_atomic;
862 void *vaddr;
863 unsigned long unwritten;
864
865 vaddr_atomic = io_mapping_map_atomic_wc(mapping, page_base);
866 /* We can use the cpu mem copy function because this is X86. */
867 vaddr = (void __force*)vaddr_atomic + page_offset;
868 unwritten = __copy_from_user_inatomic_nocache(vaddr,
869 user_data, length);
870 io_mapping_unmap_atomic(vaddr_atomic);
871 return unwritten;
872 #endif
873 }
874
875 /**
876 * This is the fast pwrite path, where we copy the data directly from the
877 * user into the GTT, uncached.
878 */
879 static int
880 i915_gem_gtt_pwrite_fast(struct drm_device *dev,
881 struct drm_i915_gem_object *obj,
882 struct drm_i915_gem_pwrite *args,
883 struct drm_file *file)
884 {
885 struct drm_i915_private *dev_priv = dev->dev_private;
886 ssize_t remain;
887 loff_t offset, page_base;
888 char __user *user_data;
889 int page_offset, page_length, ret;
890
891 ret = i915_gem_obj_ggtt_pin(obj, 0, PIN_MAPPABLE | PIN_NONBLOCK);
892 if (ret)
893 goto out;
894
895 ret = i915_gem_object_set_to_gtt_domain(obj, true);
896 if (ret)
897 goto out_unpin;
898
899 ret = i915_gem_object_put_fence(obj);
900 if (ret)
901 goto out_unpin;
902
903 user_data = to_user_ptr(args->data_ptr);
904 remain = args->size;
905
906 offset = i915_gem_obj_ggtt_offset(obj) + args->offset;
907
908 intel_fb_obj_invalidate(obj, ORIGIN_GTT);
909
910 while (remain > 0) {
911 /* Operation in this page
912 *
913 * page_base = page offset within aperture
914 * page_offset = offset within page
915 * page_length = bytes to copy for this page
916 */
917 page_base = offset & PAGE_MASK;
918 page_offset = offset_in_page(offset);
919 page_length = remain;
920 if ((page_offset + remain) > PAGE_SIZE)
921 page_length = PAGE_SIZE - page_offset;
922
923 /* If we get a fault while copying data, then (presumably) our
924 * source page isn't available. Return the error and we'll
925 * retry in the slow path.
926 */
927 if (fast_user_write(dev_priv->gtt.mappable, page_base,
928 page_offset, user_data, page_length)) {
929 ret = -EFAULT;
930 goto out_flush;
931 }
932
933 remain -= page_length;
934 user_data += page_length;
935 offset += page_length;
936 }
937
938 out_flush:
939 intel_fb_obj_flush(obj, false, ORIGIN_GTT);
940 out_unpin:
941 i915_gem_object_ggtt_unpin(obj);
942 out:
943 return ret;
944 }
945
946 /* Per-page copy function for the shmem pwrite fastpath.
947 * Flushes invalid cachelines before writing to the target if
948 * needs_clflush_before is set and flushes out any written cachelines after
949 * writing if needs_clflush is set. */
950 static int
951 shmem_pwrite_fast(struct page *page, int shmem_page_offset, int page_length,
952 char __user *user_data,
953 bool page_do_bit17_swizzling,
954 bool needs_clflush_before,
955 bool needs_clflush_after)
956 {
957 #ifdef __NetBSD__
958 return -EFAULT;
959 #else
960 char *vaddr;
961 int ret;
962
963 if (unlikely(page_do_bit17_swizzling))
964 return -EINVAL;
965
966 vaddr = kmap_atomic(page);
967 if (needs_clflush_before)
968 drm_clflush_virt_range(vaddr + shmem_page_offset,
969 page_length);
970 ret = __copy_from_user_inatomic(vaddr + shmem_page_offset,
971 user_data, page_length);
972 if (needs_clflush_after)
973 drm_clflush_virt_range(vaddr + shmem_page_offset,
974 page_length);
975 kunmap_atomic(vaddr);
976
977 return ret ? -EFAULT : 0;
978 #endif
979 }
980
981 /* Only difference to the fast-path function is that this can handle bit17
982 * and uses non-atomic copy and kmap functions. */
983 static int
984 shmem_pwrite_slow(struct page *page, int shmem_page_offset, int page_length,
985 char __user *user_data,
986 bool page_do_bit17_swizzling,
987 bool needs_clflush_before,
988 bool needs_clflush_after)
989 {
990 char *vaddr;
991 int ret;
992
993 vaddr = kmap(page);
994 if (unlikely(needs_clflush_before || page_do_bit17_swizzling))
995 shmem_clflush_swizzled_range(vaddr + shmem_page_offset,
996 page_length,
997 page_do_bit17_swizzling);
998 if (page_do_bit17_swizzling)
999 ret = __copy_from_user_swizzled(vaddr, shmem_page_offset,
1000 user_data,
1001 page_length);
1002 else
1003 ret = __copy_from_user(vaddr + shmem_page_offset,
1004 user_data,
1005 page_length);
1006 if (needs_clflush_after)
1007 shmem_clflush_swizzled_range(vaddr + shmem_page_offset,
1008 page_length,
1009 page_do_bit17_swizzling);
1010 kunmap(page);
1011
1012 return ret ? -EFAULT : 0;
1013 }
1014
1015 static int
1016 i915_gem_shmem_pwrite(struct drm_device *dev,
1017 struct drm_i915_gem_object *obj,
1018 struct drm_i915_gem_pwrite *args,
1019 struct drm_file *file)
1020 {
1021 ssize_t remain;
1022 loff_t offset;
1023 char __user *user_data;
1024 int shmem_page_offset, page_length, ret = 0;
1025 int obj_do_bit17_swizzling, page_do_bit17_swizzling;
1026 int hit_slowpath = 0;
1027 int needs_clflush_after = 0;
1028 int needs_clflush_before = 0;
1029 #ifndef __NetBSD__
1030 struct sg_page_iter sg_iter;
1031 int flush_mask = boot_cpu_data.x86_clflush_size - 1;
1032 #else
1033 int flush_mask = cpu_info_primary.ci_cflush_lsize - 1;
1034 #endif
1035
1036 user_data = to_user_ptr(args->data_ptr);
1037 remain = args->size;
1038
1039 obj_do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
1040
1041 if (obj->base.write_domain != I915_GEM_DOMAIN_CPU) {
1042 /* If we're not in the cpu write domain, set ourself into the gtt
1043 * write domain and manually flush cachelines (if required). This
1044 * optimizes for the case when the gpu will use the data
1045 * right away and we therefore have to clflush anyway. */
1046 needs_clflush_after = cpu_write_needs_clflush(obj);
1047 ret = i915_gem_object_wait_rendering(obj, false);
1048 if (ret)
1049 return ret;
1050 }
1051 /* Same trick applies to invalidate partially written cachelines read
1052 * before writing. */
1053 if ((obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0)
1054 needs_clflush_before =
1055 !cpu_cache_is_coherent(dev, obj->cache_level);
1056
1057 ret = i915_gem_object_get_pages(obj);
1058 if (ret)
1059 return ret;
1060
1061 intel_fb_obj_invalidate(obj, ORIGIN_CPU);
1062
1063 i915_gem_object_pin_pages(obj);
1064
1065 offset = args->offset;
1066 obj->dirty = 1;
1067
1068 #ifdef __NetBSD__
1069 while (0 < remain)
1070 #else
1071 for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents,
1072 offset >> PAGE_SHIFT)
1073 #endif
1074 {
1075 #ifdef __NetBSD__
1076 struct page *const page = i915_gem_object_get_page(obj,
1077 atop(offset));
1078 #else
1079 struct page *page = sg_page_iter_page(&sg_iter);
1080
1081 if (remain <= 0)
1082 break;
1083 #endif
1084
1085 /* Operation in this page
1086 *
1087 * shmem_page_offset = offset within page in shmem file
1088 * page_length = bytes to copy for this page
1089 */
1090 shmem_page_offset = offset_in_page(offset);
1091
1092 page_length = remain;
1093 if ((shmem_page_offset + page_length) > PAGE_SIZE)
1094 page_length = PAGE_SIZE - shmem_page_offset;
1095
1096 /* If we don't overwrite a cacheline completely we need to be
1097 * careful to have up-to-date data by first clflushing. Don't
1098 * overcomplicate things and flush the entire patch. */
1099 const int partial_cacheline_write = needs_clflush_before &&
1100 ((shmem_page_offset | page_length) & flush_mask);
1101
1102 page_do_bit17_swizzling = obj_do_bit17_swizzling &&
1103 (page_to_phys(page) & (1 << 17)) != 0;
1104
1105 ret = shmem_pwrite_fast(page, shmem_page_offset, page_length,
1106 user_data, page_do_bit17_swizzling,
1107 partial_cacheline_write,
1108 needs_clflush_after);
1109 if (ret == 0)
1110 goto next_page;
1111
1112 hit_slowpath = 1;
1113 mutex_unlock(&dev->struct_mutex);
1114 ret = shmem_pwrite_slow(page, shmem_page_offset, page_length,
1115 user_data, page_do_bit17_swizzling,
1116 partial_cacheline_write,
1117 needs_clflush_after);
1118
1119 mutex_lock(&dev->struct_mutex);
1120
1121 if (ret)
1122 goto out;
1123
1124 next_page:
1125 remain -= page_length;
1126 user_data += page_length;
1127 offset += page_length;
1128 }
1129
1130 out:
1131 i915_gem_object_unpin_pages(obj);
1132
1133 if (hit_slowpath) {
1134 /*
1135 * Fixup: Flush cpu caches in case we didn't flush the dirty
1136 * cachelines in-line while writing and the object moved
1137 * out of the cpu write domain while we've dropped the lock.
1138 */
1139 if (!needs_clflush_after &&
1140 obj->base.write_domain != I915_GEM_DOMAIN_CPU) {
1141 if (i915_gem_clflush_object(obj, obj->pin_display))
1142 needs_clflush_after = true;
1143 }
1144 }
1145
1146 if (needs_clflush_after)
1147 i915_gem_chipset_flush(dev);
1148 else
1149 obj->cache_dirty = true;
1150
1151 intel_fb_obj_flush(obj, false, ORIGIN_CPU);
1152 return ret;
1153 }
1154
1155 /**
1156 * Writes data to the object referenced by handle.
1157 *
1158 * On error, the contents of the buffer that were to be modified are undefined.
1159 */
1160 int
1161 i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
1162 struct drm_file *file)
1163 {
1164 struct drm_i915_private *dev_priv = dev->dev_private;
1165 struct drm_i915_gem_pwrite *args = data;
1166 struct drm_gem_object *gobj;
1167 struct drm_i915_gem_object *obj;
1168 int ret;
1169
1170 if (args->size == 0)
1171 return 0;
1172
1173 if (!access_ok(VERIFY_READ,
1174 to_user_ptr(args->data_ptr),
1175 args->size))
1176 return -EFAULT;
1177
1178 #ifndef __NetBSD__ /* XXX prefault */
1179 if (likely(!i915.prefault_disable)) {
1180 ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr),
1181 args->size);
1182 if (ret)
1183 return -EFAULT;
1184 }
1185 #endif
1186
1187 intel_runtime_pm_get(dev_priv);
1188
1189 ret = i915_mutex_lock_interruptible(dev);
1190 if (ret)
1191 goto put_rpm;
1192
1193 gobj = drm_gem_object_lookup(dev, file, args->handle);
1194 if (gobj == NULL) {
1195 ret = -ENOENT;
1196 goto unlock;
1197 }
1198 obj = to_intel_bo(gobj);
1199
1200 /* Bounds check destination. */
1201 if (args->offset > obj->base.size ||
1202 args->size > obj->base.size - args->offset) {
1203 ret = -EINVAL;
1204 goto out;
1205 }
1206
1207 /* prime objects have no backing filp to GEM pread/pwrite
1208 * pages from.
1209 */
1210 if (!obj->base.filp) {
1211 ret = -EINVAL;
1212 goto out;
1213 }
1214
1215 trace_i915_gem_object_pwrite(obj, args->offset, args->size);
1216
1217 ret = -EFAULT;
1218 /* We can only do the GTT pwrite on untiled buffers, as otherwise
1219 * it would end up going through the fenced access, and we'll get
1220 * different detiling behavior between reading and writing.
1221 * pread/pwrite currently are reading and writing from the CPU
1222 * perspective, requiring manual detiling by the client.
1223 */
1224 if (obj->tiling_mode == I915_TILING_NONE &&
1225 obj->base.write_domain != I915_GEM_DOMAIN_CPU &&
1226 cpu_write_needs_clflush(obj)) {
1227 ret = i915_gem_gtt_pwrite_fast(dev, obj, args, file);
1228 /* Note that the gtt paths might fail with non-page-backed user
1229 * pointers (e.g. gtt mappings when moving data between
1230 * textures). Fallback to the shmem path in that case. */
1231 }
1232
1233 if (ret == -EFAULT || ret == -ENOSPC) {
1234 if (obj->phys_handle)
1235 ret = i915_gem_phys_pwrite(obj, args, file);
1236 else
1237 ret = i915_gem_shmem_pwrite(dev, obj, args, file);
1238 }
1239
1240 out:
1241 drm_gem_object_unreference(&obj->base);
1242 unlock:
1243 mutex_unlock(&dev->struct_mutex);
1244 put_rpm:
1245 intel_runtime_pm_put(dev_priv);
1246
1247 return ret;
1248 }
1249
1250 int
1251 i915_gem_check_wedge(struct i915_gpu_error *error,
1252 bool interruptible)
1253 {
1254 if (i915_reset_in_progress(error)) {
1255 /* Non-interruptible callers can't handle -EAGAIN, hence return
1256 * -EIO unconditionally for these. */
1257 if (!interruptible)
1258 return -EIO;
1259
1260 /* Recovery complete, but the reset failed ... */
1261 if (i915_terminally_wedged(error))
1262 return -EIO;
1263
1264 /*
1265 * Check if GPU Reset is in progress - we need intel_ring_begin
1266 * to work properly to reinit the hw state while the gpu is
1267 * still marked as reset-in-progress. Handle this with a flag.
1268 */
1269 if (!error->reload_in_reset)
1270 return -EAGAIN;
1271 }
1272
1273 return 0;
1274 }
1275
1276 #ifndef __NetBSD__
1277 static void fake_irq(unsigned long data)
1278 {
1279 wake_up_process((struct task_struct *)data);
1280 }
1281 #endif
1282
1283 static bool missed_irq(struct drm_i915_private *dev_priv,
1284 struct intel_engine_cs *ring)
1285 {
1286 return test_bit(ring->id, &dev_priv->gpu_error.missed_irq_rings);
1287 }
1288
1289 #ifndef __NetBSD__
1290 static unsigned long local_clock_us(unsigned *cpu)
1291 {
1292 unsigned long t;
1293
1294 /* Cheaply and approximately convert from nanoseconds to microseconds.
1295 * The result and subsequent calculations are also defined in the same
1296 * approximate microseconds units. The principal source of timing
1297 * error here is from the simple truncation.
1298 *
1299 * Note that local_clock() is only defined wrt to the current CPU;
1300 * the comparisons are no longer valid if we switch CPUs. Instead of
1301 * blocking preemption for the entire busywait, we can detect the CPU
1302 * switch and use that as indicator of system load and a reason to
1303 * stop busywaiting, see busywait_stop().
1304 */
1305 *cpu = get_cpu();
1306 t = local_clock() >> 10;
1307 put_cpu();
1308
1309 return t;
1310 }
1311
1312 static bool busywait_stop(unsigned long timeout, unsigned cpu)
1313 {
1314 unsigned this_cpu;
1315
1316 if (time_after(local_clock_us(&this_cpu), timeout))
1317 return true;
1318
1319 return this_cpu != cpu;
1320 }
1321 #endif
1322
1323 static int __i915_spin_request(struct drm_i915_gem_request *req, int state)
1324 {
1325 #ifndef __NetBSD__
1326 unsigned long timeout;
1327 unsigned cpu;
1328 #endif
1329
1330 /* When waiting for high frequency requests, e.g. during synchronous
1331 * rendering split between the CPU and GPU, the finite amount of time
1332 * required to set up the irq and wait upon it limits the response
1333 * rate. By busywaiting on the request completion for a short while we
1334 * can service the high frequency waits as quick as possible. However,
1335 * if it is a slow request, we want to sleep as quickly as possible.
1336 * The tradeoff between waiting and sleeping is roughly the time it
1337 * takes to sleep on a request, on the order of a microsecond.
1338 */
1339
1340 if (req->ring->irq_refcount)
1341 return -EBUSY;
1342
1343 /* Only spin if we know the GPU is processing this request */
1344 if (!i915_gem_request_started(req, true))
1345 return -EAGAIN;
1346
1347 #ifndef __NetBSD__ /* XXX No local clock in usec. */
1348 timeout = local_clock_us(&cpu) + 5;
1349 while (!need_resched()) {
1350 if (i915_gem_request_completed(req, true))
1351 return 0;
1352
1353 if (signal_pending_state(state, current))
1354 break;
1355
1356 if (busywait_stop(timeout, cpu))
1357 break;
1358
1359 cpu_relax_lowlatency();
1360 }
1361 #endif
1362
1363 if (i915_gem_request_completed(req, false))
1364 return 0;
1365
1366 return -EAGAIN;
1367 }
1368
1369 /**
1370 * __i915_wait_request - wait until execution of request has finished
1371 * @req: duh!
1372 * @reset_counter: reset sequence associated with the given request
1373 * @interruptible: do an interruptible wait (normally yes)
1374 * @timeout: in - how long to wait (NULL forever); out - how much time remaining
1375 *
1376 * Note: It is of utmost importance that the passed in seqno and reset_counter
1377 * values have been read by the caller in an smp safe manner. Where read-side
1378 * locks are involved, it is sufficient to read the reset_counter before
1379 * unlocking the lock that protects the seqno. For lockless tricks, the
1380 * reset_counter _must_ be read before, and an appropriate smp_rmb must be
1381 * inserted.
1382 *
1383 * Returns 0 if the request was found within the alloted time. Else returns the
1384 * errno with remaining time filled in timeout argument.
1385 */
1386 int __i915_wait_request(struct drm_i915_gem_request *req,
1387 unsigned reset_counter,
1388 bool interruptible,
1389 s64 *timeout,
1390 struct intel_rps_client *rps)
1391 {
1392 struct intel_engine_cs *ring = i915_gem_request_get_ring(req);
1393 struct drm_device *dev = ring->dev;
1394 struct drm_i915_private *dev_priv = dev->dev_private;
1395 const bool irq_test_in_progress =
1396 ACCESS_ONCE(dev_priv->gpu_error.test_irq_rings) & intel_ring_flag(ring);
1397 #ifdef __NetBSD__
1398 int state = 0;
1399 bool wedged;
1400 #else
1401 int state = interruptible ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE;
1402 DEFINE_WAIT(wait);
1403 unsigned long timeout_expire;
1404 #endif
1405 s64 before, now;
1406 int ret;
1407
1408 WARN(!intel_irqs_enabled(dev_priv), "IRQs disabled");
1409
1410 if (list_empty(&req->list))
1411 return 0;
1412
1413 if (i915_gem_request_completed(req, true))
1414 return 0;
1415
1416 #ifndef __NetBSD__
1417 timeout_expire = 0;
1418 if (timeout) {
1419 if (WARN_ON(*timeout < 0))
1420 return -EINVAL;
1421
1422 if (*timeout == 0)
1423 return -ETIME;
1424
1425 timeout_expire = jiffies + nsecs_to_jiffies_timeout(*timeout);
1426 }
1427 #endif
1428
1429 if (INTEL_INFO(dev_priv)->gen >= 6)
1430 gen6_rps_boost(dev_priv, rps, req->emitted_jiffies);
1431
1432 /* Record current time in case interrupted by signal, or wedged */
1433 trace_i915_gem_request_wait_begin(req);
1434 before = ktime_get_raw_ns();
1435
1436 /* Optimistic spin for the next jiffie before touching IRQs */
1437 ret = __i915_spin_request(req, state);
1438 if (ret == 0)
1439 goto out;
1440
1441 if (!irq_test_in_progress && WARN_ON(!ring->irq_get(ring))) {
1442 ret = -ENODEV;
1443 goto out;
1444 }
1445
1446 #ifdef __NetBSD__
1447 # define EXIT_COND \
1448 ((wedged = (reset_counter != \
1449 atomic_read(&dev_priv->gpu_error.reset_counter))) || \
1450 i915_gem_request_completed(req, false))
1451 if (timeout) {
1452 int ticks = missed_irq(dev_priv, ring) ? 1 :
1453 nsecs_to_jiffies_timeout(*timeout);
1454 if (interruptible) {
1455 DRM_SPIN_TIMED_WAIT_UNTIL(ret, &ring->irq_queue,
1456 &dev_priv->irq_lock, ticks, EXIT_COND);
1457 } else {
1458 DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, &ring->irq_queue,
1459 &dev_priv->irq_lock, ticks, EXIT_COND);
1460 }
1461 if (ret < 0) /* Failure: return negative error as is. */
1462 ;
1463 else if (ret == 0) /* Timed out: return -ETIME. */
1464 ret = -ETIME;
1465 else /* Succeeded (ret > 0): return 0. */
1466 ret = 0;
1467 } else {
1468 if (interruptible) {
1469 DRM_SPIN_WAIT_UNTIL(ret, &ring->irq_queue,
1470 &dev_priv->irq_lock, EXIT_COND);
1471 } else {
1472 DRM_SPIN_WAIT_NOINTR_UNTIL(ret, &ring->irq_queue,
1473 &dev_priv->irq_lock, EXIT_COND);
1474 }
1475 /* ret is negative on failure or zero on success. */
1476 }
1477 if (wedged) {
1478 ret = i915_gem_check_wedge(&dev_priv->gpu_error, interruptible);
1479 if (ret == 0)
1480 ret = -EAGAIN;
1481 }
1482 #else
1483 for (;;) {
1484 struct timer_list timer;
1485
1486 prepare_to_wait(&ring->irq_queue, &wait, state);
1487
1488 /* We need to check whether any gpu reset happened in between
1489 * the caller grabbing the seqno and now ... */
1490 if (reset_counter != atomic_read(&dev_priv->gpu_error.reset_counter)) {
1491 /* ... but upgrade the -EAGAIN to an -EIO if the gpu
1492 * is truely gone. */
1493 ret = i915_gem_check_wedge(&dev_priv->gpu_error, interruptible);
1494 if (ret == 0)
1495 ret = -EAGAIN;
1496 break;
1497 }
1498
1499 if (i915_gem_request_completed(req, false)) {
1500 ret = 0;
1501 break;
1502 }
1503
1504 if (signal_pending_state(state, current)) {
1505 ret = -ERESTARTSYS;
1506 break;
1507 }
1508
1509 if (timeout && time_after_eq(jiffies, timeout_expire)) {
1510 ret = -ETIME;
1511 break;
1512 }
1513
1514 timer.function = NULL;
1515 if (timeout || missed_irq(dev_priv, ring)) {
1516 unsigned long expire;
1517
1518 setup_timer_on_stack(&timer, fake_irq, (unsigned long)current);
1519 expire = missed_irq(dev_priv, ring) ? jiffies + 1 : timeout_expire;
1520 mod_timer(&timer, expire);
1521 }
1522
1523 io_schedule();
1524
1525 if (timer.function) {
1526 del_singleshot_timer_sync(&timer);
1527 destroy_timer_on_stack(&timer);
1528 }
1529 }
1530 #endif
1531 if (!irq_test_in_progress)
1532 ring->irq_put(ring);
1533
1534 #ifndef __NetBSD__
1535 finish_wait(&ring->irq_queue, &wait);
1536 #endif
1537
1538 out:
1539 now = ktime_get_raw_ns();
1540 trace_i915_gem_request_wait_end(req);
1541
1542 if (timeout) {
1543 s64 tres = *timeout - (now - before);
1544
1545 *timeout = tres < 0 ? 0 : tres;
1546
1547 /*
1548 * Apparently ktime isn't accurate enough and occasionally has a
1549 * bit of mismatch in the jiffies<->nsecs<->ktime loop. So patch
1550 * things up to make the test happy. We allow up to 1 jiffy.
1551 *
1552 * This is a regrssion from the timespec->ktime conversion.
1553 */
1554 if (ret == -ETIME && *timeout < jiffies_to_usecs(1)*1000)
1555 *timeout = 0;
1556 }
1557
1558 return ret;
1559 }
1560
1561 int i915_gem_request_add_to_client(struct drm_i915_gem_request *req,
1562 struct drm_file *file)
1563 {
1564 struct drm_i915_private *dev_private __unused;
1565 struct drm_i915_file_private *file_priv;
1566
1567 WARN_ON(!req || !file || req->file_priv);
1568
1569 if (!req || !file)
1570 return -EINVAL;
1571
1572 if (req->file_priv)
1573 return -EINVAL;
1574
1575 dev_private = req->ring->dev->dev_private;
1576 file_priv = file->driver_priv;
1577
1578 spin_lock(&file_priv->mm.lock);
1579 req->file_priv = file_priv;
1580 list_add_tail(&req->client_list, &file_priv->mm.request_list);
1581 spin_unlock(&file_priv->mm.lock);
1582
1583 #ifndef __NetBSD__
1584 req->pid = get_pid(task_pid(current));
1585 #endif
1586
1587 return 0;
1588 }
1589
1590 static inline void
1591 i915_gem_request_remove_from_client(struct drm_i915_gem_request *request)
1592 {
1593 struct drm_i915_file_private *file_priv = request->file_priv;
1594
1595 if (!file_priv)
1596 return;
1597
1598 spin_lock(&file_priv->mm.lock);
1599 list_del(&request->client_list);
1600 request->file_priv = NULL;
1601 spin_unlock(&file_priv->mm.lock);
1602
1603 #ifndef __NetBSD__
1604 put_pid(request->pid);
1605 request->pid = NULL;
1606 #endif
1607 }
1608
1609 static void i915_gem_request_retire(struct drm_i915_gem_request *request)
1610 {
1611 trace_i915_gem_request_retire(request);
1612
1613 /* We know the GPU must have read the request to have
1614 * sent us the seqno + interrupt, so use the position
1615 * of tail of the request to update the last known position
1616 * of the GPU head.
1617 *
1618 * Note this requires that we are always called in request
1619 * completion order.
1620 */
1621 request->ringbuf->last_retired_head = request->postfix;
1622
1623 list_del_init(&request->list);
1624 i915_gem_request_remove_from_client(request);
1625
1626 i915_gem_request_unreference(request);
1627 }
1628
1629 static void
1630 __i915_gem_request_retire__upto(struct drm_i915_gem_request *req)
1631 {
1632 struct intel_engine_cs *engine = req->ring;
1633 struct drm_i915_gem_request *tmp;
1634
1635 lockdep_assert_held(&engine->dev->struct_mutex);
1636
1637 if (list_empty(&req->list))
1638 return;
1639
1640 do {
1641 tmp = list_first_entry(&engine->request_list,
1642 typeof(*tmp), list);
1643
1644 i915_gem_request_retire(tmp);
1645 } while (tmp != req);
1646
1647 WARN_ON(i915_verify_lists(engine->dev));
1648 }
1649
1650 /**
1651 * Waits for a request to be signaled, and cleans up the
1652 * request and object lists appropriately for that event.
1653 */
1654 int
1655 i915_wait_request(struct drm_i915_gem_request *req)
1656 {
1657 struct drm_device *dev;
1658 struct drm_i915_private *dev_priv;
1659 bool interruptible;
1660 int ret;
1661
1662 BUG_ON(req == NULL);
1663
1664 dev = req->ring->dev;
1665 dev_priv = dev->dev_private;
1666 interruptible = dev_priv->mm.interruptible;
1667
1668 BUG_ON(!mutex_is_locked(&dev->struct_mutex));
1669
1670 ret = i915_gem_check_wedge(&dev_priv->gpu_error, interruptible);
1671 if (ret)
1672 return ret;
1673
1674 ret = __i915_wait_request(req,
1675 atomic_read(&dev_priv->gpu_error.reset_counter),
1676 interruptible, NULL, NULL);
1677 if (ret)
1678 return ret;
1679
1680 __i915_gem_request_retire__upto(req);
1681 return 0;
1682 }
1683
1684 /**
1685 * Ensures that all rendering to the object has completed and the object is
1686 * safe to unbind from the GTT or access from the CPU.
1687 */
1688 int
1689 i915_gem_object_wait_rendering(struct drm_i915_gem_object *obj,
1690 bool readonly)
1691 {
1692 int ret, i;
1693
1694 if (!obj->active)
1695 return 0;
1696
1697 if (readonly) {
1698 if (obj->last_write_req != NULL) {
1699 ret = i915_wait_request(obj->last_write_req);
1700 if (ret)
1701 return ret;
1702
1703 i = obj->last_write_req->ring->id;
1704 if (obj->last_read_req[i] == obj->last_write_req)
1705 i915_gem_object_retire__read(obj, i);
1706 else
1707 i915_gem_object_retire__write(obj);
1708 }
1709 } else {
1710 for (i = 0; i < I915_NUM_RINGS; i++) {
1711 if (obj->last_read_req[i] == NULL)
1712 continue;
1713
1714 ret = i915_wait_request(obj->last_read_req[i]);
1715 if (ret)
1716 return ret;
1717
1718 i915_gem_object_retire__read(obj, i);
1719 }
1720 RQ_BUG_ON(obj->active);
1721 }
1722
1723 return 0;
1724 }
1725
1726 static void
1727 i915_gem_object_retire_request(struct drm_i915_gem_object *obj,
1728 struct drm_i915_gem_request *req)
1729 {
1730 int ring = req->ring->id;
1731
1732 if (obj->last_read_req[ring] == req)
1733 i915_gem_object_retire__read(obj, ring);
1734 else if (obj->last_write_req == req)
1735 i915_gem_object_retire__write(obj);
1736
1737 __i915_gem_request_retire__upto(req);
1738 }
1739
1740 /* A nonblocking variant of the above wait. This is a highly dangerous routine
1741 * as the object state may change during this call.
1742 */
1743 static __must_check int
1744 i915_gem_object_wait_rendering__nonblocking(struct drm_i915_gem_object *obj,
1745 struct intel_rps_client *rps,
1746 bool readonly)
1747 {
1748 struct drm_device *dev = obj->base.dev;
1749 struct drm_i915_private *dev_priv = dev->dev_private;
1750 struct drm_i915_gem_request *requests[I915_NUM_RINGS];
1751 unsigned reset_counter;
1752 int ret, i, n = 0;
1753
1754 BUG_ON(!mutex_is_locked(&dev->struct_mutex));
1755 BUG_ON(!dev_priv->mm.interruptible);
1756
1757 if (!obj->active)
1758 return 0;
1759
1760 ret = i915_gem_check_wedge(&dev_priv->gpu_error, true);
1761 if (ret)
1762 return ret;
1763
1764 reset_counter = atomic_read(&dev_priv->gpu_error.reset_counter);
1765
1766 if (readonly) {
1767 struct drm_i915_gem_request *req;
1768
1769 req = obj->last_write_req;
1770 if (req == NULL)
1771 return 0;
1772
1773 requests[n++] = i915_gem_request_reference(req);
1774 } else {
1775 for (i = 0; i < I915_NUM_RINGS; i++) {
1776 struct drm_i915_gem_request *req;
1777
1778 req = obj->last_read_req[i];
1779 if (req == NULL)
1780 continue;
1781
1782 requests[n++] = i915_gem_request_reference(req);
1783 }
1784 }
1785
1786 mutex_unlock(&dev->struct_mutex);
1787 for (i = 0; ret == 0 && i < n; i++)
1788 ret = __i915_wait_request(requests[i], reset_counter, true,
1789 NULL, rps);
1790 mutex_lock(&dev->struct_mutex);
1791
1792 for (i = 0; i < n; i++) {
1793 if (ret == 0)
1794 i915_gem_object_retire_request(obj, requests[i]);
1795 i915_gem_request_unreference(requests[i]);
1796 }
1797
1798 return ret;
1799 }
1800
1801 static struct intel_rps_client *to_rps_client(struct drm_file *file)
1802 {
1803 struct drm_i915_file_private *fpriv = file->driver_priv;
1804 return &fpriv->rps;
1805 }
1806
1807 /**
1808 * Called when user space prepares to use an object with the CPU, either
1809 * through the mmap ioctl's mapping or a GTT mapping.
1810 */
1811 int
1812 i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
1813 struct drm_file *file)
1814 {
1815 struct drm_i915_gem_set_domain *args = data;
1816 struct drm_gem_object *gobj;
1817 struct drm_i915_gem_object *obj;
1818 uint32_t read_domains = args->read_domains;
1819 uint32_t write_domain = args->write_domain;
1820 int ret;
1821
1822 /* Only handle setting domains to types used by the CPU. */
1823 if (write_domain & I915_GEM_GPU_DOMAINS)
1824 return -EINVAL;
1825
1826 if (read_domains & I915_GEM_GPU_DOMAINS)
1827 return -EINVAL;
1828
1829 /* Having something in the write domain implies it's in the read
1830 * domain, and only that read domain. Enforce that in the request.
1831 */
1832 if (write_domain != 0 && read_domains != write_domain)
1833 return -EINVAL;
1834
1835 ret = i915_mutex_lock_interruptible(dev);
1836 if (ret)
1837 return ret;
1838
1839 gobj = drm_gem_object_lookup(dev, file, args->handle);
1840 if (gobj == NULL) {
1841 ret = -ENOENT;
1842 goto unlock;
1843 }
1844 obj = to_intel_bo(gobj);
1845
1846 /* Try to flush the object off the GPU without holding the lock.
1847 * We will repeat the flush holding the lock in the normal manner
1848 * to catch cases where we are gazumped.
1849 */
1850 ret = i915_gem_object_wait_rendering__nonblocking(obj,
1851 to_rps_client(file),
1852 !write_domain);
1853 if (ret)
1854 goto unref;
1855
1856 if (read_domains & I915_GEM_DOMAIN_GTT)
1857 ret = i915_gem_object_set_to_gtt_domain(obj, write_domain != 0);
1858 else
1859 ret = i915_gem_object_set_to_cpu_domain(obj, write_domain != 0);
1860
1861 if (write_domain != 0)
1862 intel_fb_obj_invalidate(obj,
1863 write_domain == I915_GEM_DOMAIN_GTT ?
1864 ORIGIN_GTT : ORIGIN_CPU);
1865
1866 unref:
1867 drm_gem_object_unreference(&obj->base);
1868 unlock:
1869 mutex_unlock(&dev->struct_mutex);
1870 return ret;
1871 }
1872
1873 /**
1874 * Called when user space has done writes to this buffer
1875 */
1876 int
1877 i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
1878 struct drm_file *file)
1879 {
1880 struct drm_i915_gem_sw_finish *args = data;
1881 struct drm_gem_object *gobj;
1882 struct drm_i915_gem_object *obj;
1883 int ret = 0;
1884
1885 ret = i915_mutex_lock_interruptible(dev);
1886 if (ret)
1887 return ret;
1888
1889 gobj = drm_gem_object_lookup(dev, file, args->handle);
1890 if (gobj == NULL) {
1891 ret = -ENOENT;
1892 goto unlock;
1893 }
1894 obj = to_intel_bo(gobj);
1895
1896 /* Pinned buffers may be scanout, so flush the cache */
1897 if (obj->pin_display)
1898 i915_gem_object_flush_cpu_write_domain(obj);
1899
1900 drm_gem_object_unreference(&obj->base);
1901 unlock:
1902 mutex_unlock(&dev->struct_mutex);
1903 return ret;
1904 }
1905
1906 /**
1907 * Maps the contents of an object, returning the address it is mapped
1908 * into.
1909 *
1910 * While the mapping holds a reference on the contents of the object, it doesn't
1911 * imply a ref on the object itself.
1912 *
1913 * IMPORTANT:
1914 *
1915 * DRM driver writers who look a this function as an example for how to do GEM
1916 * mmap support, please don't implement mmap support like here. The modern way
1917 * to implement DRM mmap support is with an mmap offset ioctl (like
1918 * i915_gem_mmap_gtt) and then using the mmap syscall on the DRM fd directly.
1919 * That way debug tooling like valgrind will understand what's going on, hiding
1920 * the mmap call in a driver private ioctl will break that. The i915 driver only
1921 * does cpu mmaps this way because we didn't know better.
1922 */
1923 int
1924 i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
1925 struct drm_file *file)
1926 {
1927 struct drm_i915_gem_mmap *args = data;
1928 struct drm_gem_object *obj;
1929 unsigned long addr;
1930 #ifdef __NetBSD__
1931 int ret;
1932 #endif
1933
1934 if (args->flags & ~(I915_MMAP_WC))
1935 return -EINVAL;
1936
1937 if (args->flags & I915_MMAP_WC && !cpu_has_pat)
1938 return -ENODEV;
1939
1940 obj = drm_gem_object_lookup(dev, file, args->handle);
1941 if (obj == NULL)
1942 return -ENOENT;
1943
1944 /* prime objects have no backing filp to GEM mmap
1945 * pages from.
1946 */
1947 if (!obj->filp) {
1948 drm_gem_object_unreference_unlocked(obj);
1949 return -EINVAL;
1950 }
1951
1952 #ifdef __NetBSD__
1953 addr = (*curproc->p_emul->e_vm_default_addr)(curproc,
1954 (vaddr_t)curproc->p_vmspace->vm_daddr, args->size,
1955 curproc->p_vmspace->vm_map.flags & VM_MAP_TOPDOWN);
1956 /* XXX errno NetBSD->Linux */
1957 ret = -uvm_map(&curproc->p_vmspace->vm_map, &addr, args->size,
1958 obj->filp, args->offset, 0,
1959 UVM_MAPFLAG((VM_PROT_READ | VM_PROT_WRITE),
1960 (VM_PROT_READ | VM_PROT_WRITE), UVM_INH_COPY, UVM_ADV_NORMAL,
1961 0));
1962 if (ret) {
1963 drm_gem_object_unreference_unlocked(obj);
1964 return ret;
1965 }
1966 uao_reference(obj->filp);
1967 drm_gem_object_unreference_unlocked(obj);
1968 #else
1969 addr = vm_mmap(obj->filp, 0, args->size,
1970 PROT_READ | PROT_WRITE, MAP_SHARED,
1971 args->offset);
1972 if (args->flags & I915_MMAP_WC) {
1973 struct mm_struct *mm = current->mm;
1974 struct vm_area_struct *vma;
1975
1976 down_write(&mm->mmap_sem);
1977 vma = find_vma(mm, addr);
1978 if (vma)
1979 vma->vm_page_prot =
1980 pgprot_writecombine(vm_get_page_prot(vma->vm_flags));
1981 else
1982 addr = -ENOMEM;
1983 up_write(&mm->mmap_sem);
1984 }
1985 drm_gem_object_unreference_unlocked(obj);
1986 if (IS_ERR((void *)addr))
1987 return addr;
1988 #endif
1989
1990 args->addr_ptr = (uint64_t) addr;
1991
1992 return 0;
1993 }
1994
1995 #ifdef __NetBSD__ /* XXX gem gtt fault */
1996 static int i915_udv_fault(struct uvm_faultinfo *, vaddr_t,
1997 struct vm_page **, int, int, vm_prot_t, int, paddr_t);
1998
1999 int
2000 i915_gem_fault(struct uvm_faultinfo *ufi, vaddr_t vaddr, struct vm_page **pps,
2001 int npages, int centeridx, vm_prot_t access_type, int flags)
2002 {
2003 struct uvm_object *uobj = ufi->entry->object.uvm_obj;
2004 struct drm_gem_object *gem_obj =
2005 container_of(uobj, struct drm_gem_object, gemo_uvmobj);
2006 struct drm_i915_gem_object *obj = to_intel_bo(gem_obj);
2007 struct drm_device *dev = obj->base.dev;
2008 struct drm_i915_private *dev_priv = dev->dev_private;
2009 voff_t byte_offset;
2010 pgoff_t page_offset;
2011 int ret = 0;
2012 bool write = ISSET(access_type, VM_PROT_WRITE)? 1 : 0;
2013
2014 byte_offset = (ufi->entry->offset + (vaddr - ufi->entry->start));
2015 KASSERT(byte_offset <= obj->base.size);
2016 page_offset = (byte_offset >> PAGE_SHIFT);
2017
2018 intel_runtime_pm_get(dev_priv);
2019
2020 /* Thanks, uvm, but we don't need this lock. */
2021 mutex_exit(uobj->vmobjlock);
2022
2023 ret = i915_mutex_lock_interruptible(dev);
2024 if (ret)
2025 goto out;
2026
2027 trace_i915_gem_object_fault(obj, page_offset, true, write);
2028
2029 ret = i915_gem_object_wait_rendering__nonblocking(obj, NULL, !write);
2030 if (ret)
2031 goto unlock;
2032
2033 if ((obj->cache_level != I915_CACHE_NONE) && !HAS_LLC(dev)) {
2034 ret = -EINVAL;
2035 goto unlock;
2036 }
2037
2038 ret = i915_gem_obj_ggtt_pin(obj, 0, PIN_MAPPABLE);
2039 if (ret)
2040 goto unlock;
2041
2042 ret = i915_gem_object_set_to_gtt_domain(obj, write);
2043 if (ret)
2044 goto unpin;
2045
2046 ret = i915_gem_object_get_fence(obj);
2047 if (ret)
2048 goto unpin;
2049
2050 obj->fault_mappable = true;
2051
2052 /* XXX errno NetBSD->Linux */
2053 ret = -i915_udv_fault(ufi, vaddr, pps, npages, centeridx, access_type,
2054 flags,
2055 (dev_priv->gtt.mappable_base + i915_gem_obj_ggtt_offset(obj)));
2056 unpin:
2057 i915_gem_object_ggtt_unpin(obj);
2058 unlock:
2059 mutex_unlock(&dev->struct_mutex);
2060 out:
2061 mutex_enter(uobj->vmobjlock);
2062 uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap, uobj);
2063 if (ret == -ERESTART)
2064 uvm_wait("i915flt");
2065
2066 /*
2067 * Remap EINTR to success, so that we return to userland.
2068 * On the way out, we'll deliver the signal, and if the signal
2069 * is not fatal then the user code which faulted will most likely
2070 * fault again, and we'll come back here for another try.
2071 */
2072 if (ret == -EINTR)
2073 ret = 0;
2074 /* XXX Deal with GPU hangs here... */
2075 intel_runtime_pm_put(dev_priv);
2076 /* XXX errno Linux->NetBSD */
2077 return -ret;
2078 }
2079
2080 /*
2081 * XXX i915_udv_fault is copypasta of udv_fault from uvm_device.c.
2082 *
2083 * XXX pmap_enter_default instead of pmap_enter because of a problem
2084 * with using weak aliases in kernel modules or something.
2085 */
2086 int pmap_enter_default(pmap_t, vaddr_t, paddr_t, vm_prot_t, unsigned);
2087
2088 static int
2089 i915_udv_fault(struct uvm_faultinfo *ufi, vaddr_t vaddr, struct vm_page **pps,
2090 int npages, int centeridx, vm_prot_t access_type, int flags,
2091 paddr_t gtt_paddr)
2092 {
2093 struct vm_map_entry *entry = ufi->entry;
2094 vaddr_t curr_va;
2095 off_t curr_offset;
2096 paddr_t paddr;
2097 u_int mmapflags;
2098 int lcv, retval;
2099 vm_prot_t mapprot;
2100 UVMHIST_FUNC("i915_udv_fault"); UVMHIST_CALLED(maphist);
2101 UVMHIST_LOG(maphist," flags=%jd", flags,0,0,0);
2102
2103 /*
2104 * we do not allow device mappings to be mapped copy-on-write
2105 * so we kill any attempt to do so here.
2106 */
2107
2108 if (UVM_ET_ISCOPYONWRITE(entry)) {
2109 UVMHIST_LOG(maphist, "<- failed -- COW entry (etype=0x%jx)",
2110 entry->etype, 0,0,0);
2111 return(EIO);
2112 }
2113
2114 /*
2115 * now we must determine the offset in udv to use and the VA to
2116 * use for pmap_enter. note that we always use orig_map's pmap
2117 * for pmap_enter (even if we have a submap). since virtual
2118 * addresses in a submap must match the main map, this is ok.
2119 */
2120
2121 /* udv offset = (offset from start of entry) + entry's offset */
2122 curr_offset = entry->offset + (vaddr - entry->start);
2123 /* pmap va = vaddr (virtual address of pps[0]) */
2124 curr_va = vaddr;
2125
2126 /*
2127 * loop over the page range entering in as needed
2128 */
2129
2130 retval = 0;
2131 for (lcv = 0 ; lcv < npages ; lcv++, curr_offset += PAGE_SIZE,
2132 curr_va += PAGE_SIZE) {
2133 if ((flags & PGO_ALLPAGES) == 0 && lcv != centeridx)
2134 continue;
2135
2136 if (pps[lcv] == PGO_DONTCARE)
2137 continue;
2138
2139 paddr = (gtt_paddr + curr_offset);
2140 mmapflags = 0;
2141 mapprot = ufi->entry->protection;
2142 UVMHIST_LOG(maphist,
2143 " MAPPING: device: pm=0x%#jx, va=0x%jx, pa=0x%jx, at=%jd",
2144 (uintptr_t)ufi->orig_map->pmap, curr_va, paddr, mapprot);
2145 if (pmap_enter_default(ufi->orig_map->pmap, curr_va, paddr, mapprot,
2146 PMAP_CANFAIL | mapprot | mmapflags) != 0) {
2147 /*
2148 * pmap_enter() didn't have the resource to
2149 * enter this mapping. Unlock everything,
2150 * wait for the pagedaemon to free up some
2151 * pages, and then tell uvm_fault() to start
2152 * the fault again.
2153 *
2154 * XXX Needs some rethinking for the PGO_ALLPAGES
2155 * XXX case.
2156 */
2157 pmap_update(ufi->orig_map->pmap); /* sync what we have so far */
2158 return (ERESTART);
2159 }
2160 }
2161
2162 pmap_update(ufi->orig_map->pmap);
2163 return (retval);
2164 }
2165 #else
2166 /**
2167 * i915_gem_fault - fault a page into the GTT
2168 * @vma: VMA in question
2169 * @vmf: fault info
2170 *
2171 * The fault handler is set up by drm_gem_mmap() when a object is GTT mapped
2172 * from userspace. The fault handler takes care of binding the object to
2173 * the GTT (if needed), allocating and programming a fence register (again,
2174 * only if needed based on whether the old reg is still valid or the object
2175 * is tiled) and inserting a new PTE into the faulting process.
2176 *
2177 * Note that the faulting process may involve evicting existing objects
2178 * from the GTT and/or fence registers to make room. So performance may
2179 * suffer if the GTT working set is large or there are few fence registers
2180 * left.
2181 */
2182 int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
2183 {
2184 struct drm_i915_gem_object *obj = to_intel_bo(vma->vm_private_data);
2185 struct drm_device *dev = obj->base.dev;
2186 struct drm_i915_private *dev_priv = dev->dev_private;
2187 struct i915_ggtt_view view = i915_ggtt_view_normal;
2188 pgoff_t page_offset;
2189 unsigned long pfn;
2190 int ret = 0;
2191 bool write = !!(vmf->flags & FAULT_FLAG_WRITE);
2192
2193 intel_runtime_pm_get(dev_priv);
2194
2195 /* We don't use vmf->pgoff since that has the fake offset */
2196 page_offset = ((unsigned long)vmf->virtual_address - vma->vm_start) >>
2197 PAGE_SHIFT;
2198
2199 ret = i915_mutex_lock_interruptible(dev);
2200 if (ret)
2201 goto out;
2202
2203 trace_i915_gem_object_fault(obj, page_offset, true, write);
2204
2205 /* Try to flush the object off the GPU first without holding the lock.
2206 * Upon reacquiring the lock, we will perform our sanity checks and then
2207 * repeat the flush holding the lock in the normal manner to catch cases
2208 * where we are gazumped.
2209 */
2210 ret = i915_gem_object_wait_rendering__nonblocking(obj, NULL, !write);
2211 if (ret)
2212 goto unlock;
2213
2214 /* Access to snoopable pages through the GTT is incoherent. */
2215 if (obj->cache_level != I915_CACHE_NONE && !HAS_LLC(dev)) {
2216 ret = -EFAULT;
2217 goto unlock;
2218 }
2219
2220 /* Use a partial view if the object is bigger than the aperture. */
2221 if (obj->base.size >= dev_priv->gtt.mappable_end &&
2222 obj->tiling_mode == I915_TILING_NONE) {
2223 static const unsigned int chunk_size = 256; // 1 MiB
2224
2225 memset(&view, 0, sizeof(view));
2226 view.type = I915_GGTT_VIEW_PARTIAL;
2227 view.params.partial.offset = rounddown(page_offset, chunk_size);
2228 view.params.partial.size =
2229 min_t(unsigned int,
2230 chunk_size,
2231 (vma->vm_end - vma->vm_start)/PAGE_SIZE -
2232 view.params.partial.offset);
2233 }
2234
2235 /* Now pin it into the GTT if needed */
2236 ret = i915_gem_object_ggtt_pin(obj, &view, 0, PIN_MAPPABLE);
2237 if (ret)
2238 goto unlock;
2239
2240 ret = i915_gem_object_set_to_gtt_domain(obj, write);
2241 if (ret)
2242 goto unpin;
2243
2244 ret = i915_gem_object_get_fence(obj);
2245 if (ret)
2246 goto unpin;
2247
2248 /* Finally, remap it using the new GTT offset */
2249 pfn = dev_priv->gtt.mappable_base +
2250 i915_gem_obj_ggtt_offset_view(obj, &view);
2251 pfn >>= PAGE_SHIFT;
2252
2253 if (unlikely(view.type == I915_GGTT_VIEW_PARTIAL)) {
2254 /* Overriding existing pages in partial view does not cause
2255 * us any trouble as TLBs are still valid because the fault
2256 * is due to userspace losing part of the mapping or never
2257 * having accessed it before (at this partials' range).
2258 */
2259 unsigned long base = vma->vm_start +
2260 (view.params.partial.offset << PAGE_SHIFT);
2261 unsigned int i;
2262
2263 for (i = 0; i < view.params.partial.size; i++) {
2264 ret = vm_insert_pfn(vma, base + i * PAGE_SIZE, pfn + i);
2265 if (ret)
2266 break;
2267 }
2268
2269 obj->fault_mappable = true;
2270 } else {
2271 if (!obj->fault_mappable) {
2272 unsigned long size = min_t(unsigned long,
2273 vma->vm_end - vma->vm_start,
2274 obj->base.size);
2275 int i;
2276
2277 for (i = 0; i < size >> PAGE_SHIFT; i++) {
2278 ret = vm_insert_pfn(vma,
2279 (unsigned long)vma->vm_start + i * PAGE_SIZE,
2280 pfn + i);
2281 if (ret)
2282 break;
2283 }
2284
2285 obj->fault_mappable = true;
2286 } else
2287 ret = vm_insert_pfn(vma,
2288 (unsigned long)vmf->virtual_address,
2289 pfn + page_offset);
2290 }
2291 unpin:
2292 i915_gem_object_ggtt_unpin_view(obj, &view);
2293 unlock:
2294 mutex_unlock(&dev->struct_mutex);
2295 out:
2296 switch (ret) {
2297 case -EIO:
2298 /*
2299 * We eat errors when the gpu is terminally wedged to avoid
2300 * userspace unduly crashing (gl has no provisions for mmaps to
2301 * fail). But any other -EIO isn't ours (e.g. swap in failure)
2302 * and so needs to be reported.
2303 */
2304 if (!i915_terminally_wedged(&dev_priv->gpu_error)) {
2305 ret = VM_FAULT_SIGBUS;
2306 break;
2307 }
2308 case -EAGAIN:
2309 /*
2310 * EAGAIN means the gpu is hung and we'll wait for the error
2311 * handler to reset everything when re-faulting in
2312 * i915_mutex_lock_interruptible.
2313 */
2314 case 0:
2315 case -ERESTARTSYS:
2316 case -EINTR:
2317 case -EBUSY:
2318 /*
2319 * EBUSY is ok: this just means that another thread
2320 * already did the job.
2321 */
2322 ret = VM_FAULT_NOPAGE;
2323 break;
2324 case -ENOMEM:
2325 ret = VM_FAULT_OOM;
2326 break;
2327 case -ENOSPC:
2328 case -EFAULT:
2329 ret = VM_FAULT_SIGBUS;
2330 break;
2331 default:
2332 WARN_ONCE(ret, "unhandled error in i915_gem_fault: %i\n", ret);
2333 ret = VM_FAULT_SIGBUS;
2334 break;
2335 }
2336
2337 intel_runtime_pm_put(dev_priv);
2338 return ret;
2339 }
2340 #endif
2341
2342 /**
2343 * i915_gem_release_mmap - remove physical page mappings
2344 * @obj: obj in question
2345 *
2346 * Preserve the reservation of the mmapping with the DRM core code, but
2347 * relinquish ownership of the pages back to the system.
2348 *
2349 * It is vital that we remove the page mapping if we have mapped a tiled
2350 * object through the GTT and then lose the fence register due to
2351 * resource pressure. Similarly if the object has been moved out of the
2352 * aperture, than pages mapped into userspace must be revoked. Removing the
2353 * mapping will then trigger a page fault on the next user access, allowing
2354 * fixup by i915_gem_fault().
2355 */
2356 void
2357 i915_gem_release_mmap(struct drm_i915_gem_object *obj)
2358 {
2359 if (!obj->fault_mappable)
2360 return;
2361
2362 #ifdef __NetBSD__ /* XXX gem gtt fault */
2363 {
2364 struct drm_device *const dev = obj->base.dev;
2365 struct drm_i915_private *const dev_priv = dev->dev_private;
2366 const paddr_t start = dev_priv->gtt.mappable_base +
2367 i915_gem_obj_ggtt_offset(obj);
2368 const size_t size = obj->base.size;
2369 const paddr_t end = start + size;
2370 paddr_t pa;
2371
2372 KASSERT((start & (PAGE_SIZE - 1)) == 0);
2373 KASSERT((size & (PAGE_SIZE - 1)) == 0);
2374
2375 for (pa = start; pa < end; pa += PAGE_SIZE)
2376 pmap_pv_protect(pa, VM_PROT_NONE);
2377 }
2378 #else
2379 drm_vma_node_unmap(&obj->base.vma_node,
2380 obj->base.dev->anon_inode->i_mapping);
2381 #endif
2382 obj->fault_mappable = false;
2383 }
2384
2385 void
2386 i915_gem_release_all_mmaps(struct drm_i915_private *dev_priv)
2387 {
2388 struct drm_i915_gem_object *obj;
2389
2390 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list)
2391 i915_gem_release_mmap(obj);
2392 }
2393
2394 uint32_t
2395 i915_gem_get_gtt_size(struct drm_device *dev, uint32_t size, int tiling_mode)
2396 {
2397 uint32_t gtt_size;
2398
2399 if (INTEL_INFO(dev)->gen >= 4 ||
2400 tiling_mode == I915_TILING_NONE)
2401 return size;
2402
2403 /* Previous chips need a power-of-two fence region when tiling */
2404 if (INTEL_INFO(dev)->gen == 3)
2405 gtt_size = 1024*1024;
2406 else
2407 gtt_size = 512*1024;
2408
2409 while (gtt_size < size)
2410 gtt_size <<= 1;
2411
2412 return gtt_size;
2413 }
2414
2415 /**
2416 * i915_gem_get_gtt_alignment - return required GTT alignment for an object
2417 * @obj: object to check
2418 *
2419 * Return the required GTT alignment for an object, taking into account
2420 * potential fence register mapping.
2421 */
2422 uint32_t
2423 i915_gem_get_gtt_alignment(struct drm_device *dev, uint32_t size,
2424 int tiling_mode, bool fenced)
2425 {
2426 /*
2427 * Minimum alignment is 4k (GTT page size), but might be greater
2428 * if a fence register is needed for the object.
2429 */
2430 if (INTEL_INFO(dev)->gen >= 4 || (!fenced && IS_G33(dev)) ||
2431 tiling_mode == I915_TILING_NONE)
2432 return 4096;
2433
2434 /*
2435 * Previous chips need to be aligned to the size of the smallest
2436 * fence register that can contain the object.
2437 */
2438 return i915_gem_get_gtt_size(dev, size, tiling_mode);
2439 }
2440
2441 static int i915_gem_object_create_mmap_offset(struct drm_i915_gem_object *obj)
2442 {
2443 struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
2444 int ret;
2445
2446 if (drm_vma_node_has_offset(&obj->base.vma_node))
2447 return 0;
2448
2449 dev_priv->mm.shrinker_no_lock_stealing = true;
2450
2451 ret = drm_gem_create_mmap_offset(&obj->base);
2452 if (ret != -ENOSPC)
2453 goto out;
2454
2455 /* Badly fragmented mmap space? The only way we can recover
2456 * space is by destroying unwanted objects. We can't randomly release
2457 * mmap_offsets as userspace expects them to be persistent for the
2458 * lifetime of the objects. The closest we can is to release the
2459 * offsets on purgeable objects by truncating it and marking it purged,
2460 * which prevents userspace from ever using that object again.
2461 */
2462 i915_gem_shrink(dev_priv,
2463 obj->base.size >> PAGE_SHIFT,
2464 I915_SHRINK_BOUND |
2465 I915_SHRINK_UNBOUND |
2466 I915_SHRINK_PURGEABLE);
2467 ret = drm_gem_create_mmap_offset(&obj->base);
2468 if (ret != -ENOSPC)
2469 goto out;
2470
2471 i915_gem_shrink_all(dev_priv);
2472 ret = drm_gem_create_mmap_offset(&obj->base);
2473 out:
2474 dev_priv->mm.shrinker_no_lock_stealing = false;
2475
2476 return ret;
2477 }
2478
2479 static void i915_gem_object_free_mmap_offset(struct drm_i915_gem_object *obj)
2480 {
2481 drm_gem_free_mmap_offset(&obj->base);
2482 }
2483
2484 int
2485 i915_gem_mmap_gtt(struct drm_file *file,
2486 struct drm_device *dev,
2487 uint32_t handle,
2488 uint64_t *offset)
2489 {
2490 struct drm_gem_object *gobj;
2491 struct drm_i915_gem_object *obj;
2492 int ret;
2493
2494 ret = i915_mutex_lock_interruptible(dev);
2495 if (ret)
2496 return ret;
2497
2498 gobj = drm_gem_object_lookup(dev, file, handle);
2499 if (gobj == NULL) {
2500 ret = -ENOENT;
2501 goto unlock;
2502 }
2503 obj = to_intel_bo(gobj);
2504
2505 if (obj->madv != I915_MADV_WILLNEED) {
2506 DRM_DEBUG("Attempting to mmap a purgeable buffer\n");
2507 ret = -EFAULT;
2508 goto out;
2509 }
2510
2511 ret = i915_gem_object_create_mmap_offset(obj);
2512 if (ret)
2513 goto out;
2514
2515 *offset = drm_vma_node_offset_addr(&obj->base.vma_node);
2516
2517 out:
2518 drm_gem_object_unreference(&obj->base);
2519 unlock:
2520 mutex_unlock(&dev->struct_mutex);
2521 return ret;
2522 }
2523
2524 /**
2525 * i915_gem_mmap_gtt_ioctl - prepare an object for GTT mmap'ing
2526 * @dev: DRM device
2527 * @data: GTT mapping ioctl data
2528 * @file: GEM object info
2529 *
2530 * Simply returns the fake offset to userspace so it can mmap it.
2531 * The mmap call will end up in drm_gem_mmap(), which will set things
2532 * up so we can get faults in the handler above.
2533 *
2534 * The fault handler will take care of binding the object into the GTT
2535 * (since it may have been evicted to make room for something), allocating
2536 * a fence register, and mapping the appropriate aperture address into
2537 * userspace.
2538 */
2539 int
2540 i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data,
2541 struct drm_file *file)
2542 {
2543 struct drm_i915_gem_mmap_gtt *args = data;
2544
2545 return i915_gem_mmap_gtt(file, dev, args->handle, &args->offset);
2546 }
2547
2548 /* Immediately discard the backing storage */
2549 static void
2550 i915_gem_object_truncate(struct drm_i915_gem_object *obj)
2551 {
2552 i915_gem_object_free_mmap_offset(obj);
2553
2554 if (obj->base.filp == NULL)
2555 return;
2556
2557 #ifdef __NetBSD__
2558 {
2559 struct uvm_object *const uobj = obj->base.filp;
2560
2561 if (uobj != NULL) {
2562 /* XXX Calling pgo_put like this is bogus. */
2563 mutex_enter(uobj->vmobjlock);
2564 (*uobj->pgops->pgo_put)(uobj, 0, obj->base.size,
2565 (PGO_ALLPAGES | PGO_FREE));
2566 }
2567 }
2568 #else
2569 /* Our goal here is to return as much of the memory as
2570 * is possible back to the system as we are called from OOM.
2571 * To do this we must instruct the shmfs to drop all of its
2572 * backing pages, *now*.
2573 */
2574 shmem_truncate_range(file_inode(obj->base.filp), 0, (loff_t)-1);
2575 #endif
2576 obj->madv = __I915_MADV_PURGED;
2577 }
2578
2579 /* Try to discard unwanted pages */
2580 static void
2581 i915_gem_object_invalidate(struct drm_i915_gem_object *obj)
2582 {
2583 #ifdef __NetBSD__
2584 struct uvm_object *uobj;
2585 #else
2586 struct address_space *mapping;
2587 #endif
2588
2589 switch (obj->madv) {
2590 case I915_MADV_DONTNEED:
2591 i915_gem_object_truncate(obj);
2592 case __I915_MADV_PURGED:
2593 return;
2594 }
2595
2596 if (obj->base.filp == NULL)
2597 return;
2598
2599 #ifdef __NetBSD__
2600 uobj = obj->base.filp;
2601 mutex_enter(uobj->vmobjlock);
2602 (*uobj->pgops->pgo_put)(uobj, 0, obj->base.size,
2603 PGO_ALLPAGES|PGO_DEACTIVATE|PGO_CLEANIT);
2604 #else
2605 mapping = file_inode(obj->base.filp)->i_mapping,
2606 invalidate_mapping_pages(mapping, 0, (loff_t)-1);
2607 #endif
2608 }
2609
2610 static void
2611 i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj)
2612 {
2613 #ifdef __NetBSD__
2614 struct drm_device *const dev = obj->base.dev;
2615 struct vm_page *page;
2616 int ret;
2617
2618 /* XXX Cargo-culted from the Linux code. */
2619 BUG_ON(obj->madv == __I915_MADV_PURGED);
2620
2621 ret = i915_gem_object_set_to_cpu_domain(obj, true);
2622 if (ret) {
2623 WARN_ON(ret != -EIO);
2624 i915_gem_clflush_object(obj, true);
2625 obj->base.read_domains = obj->base.write_domain =
2626 I915_GEM_DOMAIN_CPU;
2627 }
2628
2629 i915_gem_gtt_finish_object(obj);
2630
2631 if (i915_gem_object_needs_bit17_swizzle(obj))
2632 i915_gem_object_save_bit_17_swizzle(obj);
2633
2634 if (obj->madv == I915_MADV_DONTNEED)
2635 obj->dirty = 0;
2636
2637 if (obj->dirty) {
2638 TAILQ_FOREACH(page, &obj->pageq, pageq.queue) {
2639 page->flags &= ~PG_CLEAN;
2640 /* XXX mark page accessed */
2641 }
2642 }
2643 obj->dirty = 0;
2644
2645 uvm_obj_unwirepages(obj->base.filp, 0, obj->base.size);
2646 bus_dmamap_destroy(dev->dmat, obj->pages);
2647 #else
2648 struct sg_page_iter sg_iter;
2649 int ret;
2650
2651 BUG_ON(obj->madv == __I915_MADV_PURGED);
2652
2653 ret = i915_gem_object_set_to_cpu_domain(obj, true);
2654 if (ret) {
2655 /* In the event of a disaster, abandon all caches and
2656 * hope for the best.
2657 */
2658 WARN_ON(ret != -EIO);
2659 i915_gem_clflush_object(obj, true);
2660 obj->base.read_domains = obj->base.write_domain = I915_GEM_DOMAIN_CPU;
2661 }
2662
2663 i915_gem_gtt_finish_object(obj);
2664
2665 if (i915_gem_object_needs_bit17_swizzle(obj))
2666 i915_gem_object_save_bit_17_swizzle(obj);
2667
2668 if (obj->madv == I915_MADV_DONTNEED)
2669 obj->dirty = 0;
2670
2671 for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents, 0) {
2672 struct page *page = sg_page_iter_page(&sg_iter);
2673
2674 if (obj->dirty)
2675 set_page_dirty(page);
2676
2677 if (obj->madv == I915_MADV_WILLNEED)
2678 mark_page_accessed(page);
2679
2680 page_cache_release(page);
2681 }
2682 obj->dirty = 0;
2683
2684 sg_free_table(obj->pages);
2685 kfree(obj->pages);
2686 #endif
2687 }
2688
2689 int
2690 i915_gem_object_put_pages(struct drm_i915_gem_object *obj)
2691 {
2692 const struct drm_i915_gem_object_ops *ops = obj->ops;
2693
2694 if (obj->pages == NULL)
2695 return 0;
2696
2697 if (obj->pages_pin_count)
2698 return -EBUSY;
2699
2700 BUG_ON(i915_gem_obj_bound_any(obj));
2701
2702 /* ->put_pages might need to allocate memory for the bit17 swizzle
2703 * array, hence protect them from being reaped by removing them from gtt
2704 * lists early. */
2705 list_del(&obj->global_list);
2706
2707 ops->put_pages(obj);
2708 obj->pages = NULL;
2709
2710 i915_gem_object_invalidate(obj);
2711
2712 return 0;
2713 }
2714
2715 static int
2716 i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
2717 {
2718 #ifdef __NetBSD__
2719 struct drm_device *const dev = obj->base.dev;
2720 struct drm_i915_private *dev_priv = dev->dev_private;
2721 struct vm_page *page;
2722 int ret;
2723
2724 BUG_ON(obj->base.read_domains & I915_GEM_GPU_DOMAINS);
2725 BUG_ON(obj->base.write_domain & I915_GEM_GPU_DOMAINS);
2726
2727 KASSERT(obj->pages == NULL);
2728 TAILQ_INIT(&obj->pageq);
2729
2730 /* XXX errno NetBSD->Linux */
2731 ret = -bus_dmamap_create(dev->dmat, obj->base.size,
2732 obj->base.size/PAGE_SIZE, PAGE_SIZE, 0, BUS_DMA_NOWAIT,
2733 &obj->pages);
2734 if (ret)
2735 goto fail0;
2736
2737 /* XXX errno NetBSD->Linux */
2738 ret = -uvm_obj_wirepages(obj->base.filp, 0, obj->base.size,
2739 &obj->pageq);
2740 if (ret) /* XXX Try purge, shrink. */
2741 goto fail1;
2742
2743 /*
2744 * Check that the paddrs will fit in 40 bits, or 32 bits on i965.
2745 *
2746 * XXX This should be unnecessary: the uao should guarantee
2747 * this constraint after uao_set_pgfl.
2748 *
2749 * XXX This should also be expanded for newer devices.
2750 */
2751 TAILQ_FOREACH(page, &obj->pageq, pageq.queue) {
2752 const uint64_t mask =
2753 (IS_BROADWATER(dev) || IS_CRESTLINE(dev)?
2754 0xffffffffULL : 0xffffffffffULL);
2755 if (VM_PAGE_TO_PHYS(page) & ~mask) {
2756 DRM_ERROR("GEM physical address exceeds %u bits"
2757 ": %"PRIxMAX"\n",
2758 popcount64(mask),
2759 (uintmax_t)VM_PAGE_TO_PHYS(page));
2760 ret = -EIO;
2761 goto fail2;
2762 }
2763 }
2764
2765 ret = i915_gem_gtt_prepare_object(obj);
2766 if (ret)
2767 goto fail2;
2768
2769 if (i915_gem_object_needs_bit17_swizzle(obj))
2770 i915_gem_object_do_bit_17_swizzle(obj);
2771
2772 if (obj->tiling_mode != I915_TILING_NONE &&
2773 dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES)
2774 i915_gem_object_pin_pages(obj);
2775
2776 /* Success! */
2777 return 0;
2778
2779 fail3: __unused
2780 i915_gem_gtt_finish_object(obj);
2781 fail2: uvm_obj_unwirepages(obj->base.filp, 0, obj->base.size);
2782 fail1: bus_dmamap_destroy(dev->dmat, obj->pages);
2783 obj->pages = NULL;
2784 fail0: KASSERT(ret);
2785 return ret;
2786 #else
2787 struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
2788 int page_count, i;
2789 struct address_space *mapping;
2790 struct sg_table *st;
2791 struct scatterlist *sg;
2792 struct sg_page_iter sg_iter;
2793 struct page *page;
2794 unsigned long last_pfn = 0; /* suppress gcc warning */
2795 int ret;
2796 gfp_t gfp;
2797
2798 /* Assert that the object is not currently in any GPU domain. As it
2799 * wasn't in the GTT, there shouldn't be any way it could have been in
2800 * a GPU cache
2801 */
2802 BUG_ON(obj->base.read_domains & I915_GEM_GPU_DOMAINS);
2803 BUG_ON(obj->base.write_domain & I915_GEM_GPU_DOMAINS);
2804
2805 st = kmalloc(sizeof(*st), GFP_KERNEL);
2806 if (st == NULL)
2807 return -ENOMEM;
2808
2809 page_count = obj->base.size / PAGE_SIZE;
2810 if (sg_alloc_table(st, page_count, GFP_KERNEL)) {
2811 kfree(st);
2812 return -ENOMEM;
2813 }
2814
2815 /* Get the list of pages out of our struct file. They'll be pinned
2816 * at this point until we release them.
2817 *
2818 * Fail silently without starting the shrinker
2819 */
2820 mapping = file_inode(obj->base.filp)->i_mapping;
2821 gfp = mapping_gfp_constraint(mapping, ~(__GFP_IO | __GFP_RECLAIM));
2822 gfp |= __GFP_NORETRY | __GFP_NOWARN;
2823 sg = st->sgl;
2824 st->nents = 0;
2825 for (i = 0; i < page_count; i++) {
2826 page = shmem_read_mapping_page_gfp(mapping, i, gfp);
2827 if (IS_ERR(page)) {
2828 i915_gem_shrink(dev_priv,
2829 page_count,
2830 I915_SHRINK_BOUND |
2831 I915_SHRINK_UNBOUND |
2832 I915_SHRINK_PURGEABLE);
2833 page = shmem_read_mapping_page_gfp(mapping, i, gfp);
2834 }
2835 if (IS_ERR(page)) {
2836 /* We've tried hard to allocate the memory by reaping
2837 * our own buffer, now let the real VM do its job and
2838 * go down in flames if truly OOM.
2839 */
2840 i915_gem_shrink_all(dev_priv);
2841 page = shmem_read_mapping_page(mapping, i);
2842 if (IS_ERR(page)) {
2843 ret = PTR_ERR(page);
2844 goto err_pages;
2845 }
2846 }
2847 #ifdef CONFIG_SWIOTLB
2848 if (swiotlb_nr_tbl()) {
2849 st->nents++;
2850 sg_set_page(sg, page, PAGE_SIZE, 0);
2851 sg = sg_next(sg);
2852 continue;
2853 }
2854 #endif
2855 if (!i || page_to_pfn(page) != last_pfn + 1) {
2856 if (i)
2857 sg = sg_next(sg);
2858 st->nents++;
2859 sg_set_page(sg, page, PAGE_SIZE, 0);
2860 } else {
2861 sg->length += PAGE_SIZE;
2862 }
2863 last_pfn = page_to_pfn(page);
2864
2865 /* Check that the i965g/gm workaround works. */
2866 WARN_ON((gfp & __GFP_DMA32) && (last_pfn >= 0x00100000UL));
2867 }
2868 #ifdef CONFIG_SWIOTLB
2869 if (!swiotlb_nr_tbl())
2870 #endif
2871 sg_mark_end(sg);
2872 obj->pages = st;
2873
2874 ret = i915_gem_gtt_prepare_object(obj);
2875 if (ret)
2876 goto err_pages;
2877
2878 if (i915_gem_object_needs_bit17_swizzle(obj))
2879 i915_gem_object_do_bit_17_swizzle(obj);
2880
2881 if (obj->tiling_mode != I915_TILING_NONE &&
2882 dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES)
2883 i915_gem_object_pin_pages(obj);
2884
2885 return 0;
2886
2887 err_pages:
2888 sg_mark_end(sg);
2889 for_each_sg_page(st->sgl, &sg_iter, st->nents, 0)
2890 page_cache_release(sg_page_iter_page(&sg_iter));
2891 sg_free_table(st);
2892 kfree(st);
2893
2894 /* shmemfs first checks if there is enough memory to allocate the page
2895 * and reports ENOSPC should there be insufficient, along with the usual
2896 * ENOMEM for a genuine allocation failure.
2897 *
2898 * We use ENOSPC in our driver to mean that we have run out of aperture
2899 * space and so want to translate the error from shmemfs back to our
2900 * usual understanding of ENOMEM.
2901 */
2902 if (ret == -ENOSPC)
2903 ret = -ENOMEM;
2904
2905 return ret;
2906 #endif
2907 }
2908
2909 /* Ensure that the associated pages are gathered from the backing storage
2910 * and pinned into our object. i915_gem_object_get_pages() may be called
2911 * multiple times before they are released by a single call to
2912 * i915_gem_object_put_pages() - once the pages are no longer referenced
2913 * either as a result of memory pressure (reaping pages under the shrinker)
2914 * or as the object is itself released.
2915 */
2916 int
2917 i915_gem_object_get_pages(struct drm_i915_gem_object *obj)
2918 {
2919 struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
2920 const struct drm_i915_gem_object_ops *ops = obj->ops;
2921 int ret;
2922
2923 if (obj->pages)
2924 return 0;
2925
2926 if (obj->madv != I915_MADV_WILLNEED) {
2927 DRM_DEBUG("Attempting to obtain a purgeable object\n");
2928 return -EFAULT;
2929 }
2930
2931 BUG_ON(obj->pages_pin_count);
2932
2933 ret = ops->get_pages(obj);
2934 if (ret)
2935 return ret;
2936
2937 list_add_tail(&obj->global_list, &dev_priv->mm.unbound_list);
2938
2939 #ifndef __NetBSD__
2940 obj->get_page.sg = obj->pages->sgl;
2941 obj->get_page.last = 0;
2942 #endif
2943
2944 return 0;
2945 }
2946
2947 void i915_vma_move_to_active(struct i915_vma *vma,
2948 struct drm_i915_gem_request *req)
2949 {
2950 struct drm_i915_gem_object *obj = vma->obj;
2951 struct intel_engine_cs *ring;
2952
2953 ring = i915_gem_request_get_ring(req);
2954
2955 /* Add a reference if we're newly entering the active list. */
2956 if (obj->active == 0)
2957 drm_gem_object_reference(&obj->base);
2958 obj->active |= intel_ring_flag(ring);
2959
2960 list_move_tail(&obj->ring_list[ring->id], &ring->active_list);
2961 i915_gem_request_assign(&obj->last_read_req[ring->id], req);
2962
2963 list_move_tail(&vma->mm_list, &vma->vm->active_list);
2964 }
2965
2966 static void
2967 i915_gem_object_retire__write(struct drm_i915_gem_object *obj)
2968 {
2969 RQ_BUG_ON(obj->last_write_req == NULL);
2970 RQ_BUG_ON(!(obj->active & intel_ring_flag(obj->last_write_req->ring)));
2971
2972 i915_gem_request_assign(&obj->last_write_req, NULL);
2973 intel_fb_obj_flush(obj, true, ORIGIN_CS);
2974 }
2975
2976 static void
2977 i915_gem_object_retire__read(struct drm_i915_gem_object *obj, int ring)
2978 {
2979 struct i915_vma *vma;
2980
2981 RQ_BUG_ON(obj->last_read_req[ring] == NULL);
2982 RQ_BUG_ON(!(obj->active & (1 << ring)));
2983
2984 list_del_init(&obj->ring_list[ring]);
2985 i915_gem_request_assign(&obj->last_read_req[ring], NULL);
2986
2987 if (obj->last_write_req && obj->last_write_req->ring->id == ring)
2988 i915_gem_object_retire__write(obj);
2989
2990 obj->active &= ~(1 << ring);
2991 if (obj->active)
2992 return;
2993
2994 /* Bump our place on the bound list to keep it roughly in LRU order
2995 * so that we don't steal from recently used but inactive objects
2996 * (unless we are forced to ofc!)
2997 */
2998 list_move_tail(&obj->global_list,
2999 &to_i915(obj->base.dev)->mm.bound_list);
3000
3001 list_for_each_entry(vma, &obj->vma_list, vma_link) {
3002 if (!list_empty(&vma->mm_list))
3003 list_move_tail(&vma->mm_list, &vma->vm->inactive_list);
3004 }
3005
3006 i915_gem_request_assign(&obj->last_fenced_req, NULL);
3007 drm_gem_object_unreference(&obj->base);
3008 }
3009
3010 static int
3011 i915_gem_init_seqno(struct drm_device *dev, u32 seqno)
3012 {
3013 struct drm_i915_private *dev_priv = dev->dev_private;
3014 struct intel_engine_cs *ring;
3015 int ret, i, j;
3016
3017 /* Carefully retire all requests without writing to the rings */
3018 for_each_ring(ring, dev_priv, i) {
3019 ret = intel_ring_idle(ring);
3020 if (ret)
3021 return ret;
3022 }
3023 i915_gem_retire_requests(dev);
3024
3025 /* Finally reset hw state */
3026 for_each_ring(ring, dev_priv, i) {
3027 intel_ring_init_seqno(ring, seqno);
3028
3029 for (j = 0; j < ARRAY_SIZE(ring->semaphore.sync_seqno); j++)
3030 ring->semaphore.sync_seqno[j] = 0;
3031 }
3032
3033 return 0;
3034 }
3035
3036 int i915_gem_set_seqno(struct drm_device *dev, u32 seqno)
3037 {
3038 struct drm_i915_private *dev_priv = dev->dev_private;
3039 int ret;
3040
3041 if (seqno == 0)
3042 return -EINVAL;
3043
3044 /* HWS page needs to be set less than what we
3045 * will inject to ring
3046 */
3047 ret = i915_gem_init_seqno(dev, seqno - 1);
3048 if (ret)
3049 return ret;
3050
3051 /* Carefully set the last_seqno value so that wrap
3052 * detection still works
3053 */
3054 dev_priv->next_seqno = seqno;
3055 dev_priv->last_seqno = seqno - 1;
3056 if (dev_priv->last_seqno == 0)
3057 dev_priv->last_seqno--;
3058
3059 return 0;
3060 }
3061
3062 int
3063 i915_gem_get_seqno(struct drm_device *dev, u32 *seqno)
3064 {
3065 struct drm_i915_private *dev_priv = dev->dev_private;
3066
3067 /* reserve 0 for non-seqno */
3068 if (dev_priv->next_seqno == 0) {
3069 int ret = i915_gem_init_seqno(dev, 0);
3070 if (ret)
3071 return ret;
3072
3073 dev_priv->next_seqno = 1;
3074 }
3075
3076 *seqno = dev_priv->last_seqno = dev_priv->next_seqno++;
3077 return 0;
3078 }
3079
3080 /*
3081 * NB: This function is not allowed to fail. Doing so would mean the the
3082 * request is not being tracked for completion but the work itself is
3083 * going to happen on the hardware. This would be a Bad Thing(tm).
3084 */
3085 void __i915_add_request(struct drm_i915_gem_request *request,
3086 struct drm_i915_gem_object *obj,
3087 bool flush_caches)
3088 {
3089 struct intel_engine_cs *ring;
3090 struct drm_i915_private *dev_priv;
3091 struct intel_ringbuffer *ringbuf;
3092 u32 request_start;
3093 int ret;
3094
3095 if (WARN_ON(request == NULL))
3096 return;
3097
3098 ring = request->ring;
3099 dev_priv = ring->dev->dev_private;
3100 ringbuf = request->ringbuf;
3101
3102 /*
3103 * To ensure that this call will not fail, space for its emissions
3104 * should already have been reserved in the ring buffer. Let the ring
3105 * know that it is time to use that space up.
3106 */
3107 intel_ring_reserved_space_use(ringbuf);
3108
3109 request_start = intel_ring_get_tail(ringbuf);
3110 /*
3111 * Emit any outstanding flushes - execbuf can fail to emit the flush
3112 * after having emitted the batchbuffer command. Hence we need to fix
3113 * things up similar to emitting the lazy request. The difference here
3114 * is that the flush _must_ happen before the next request, no matter
3115 * what.
3116 */
3117 if (flush_caches) {
3118 if (i915.enable_execlists)
3119 ret = logical_ring_flush_all_caches(request);
3120 else
3121 ret = intel_ring_flush_all_caches(request);
3122 /* Not allowed to fail! */
3123 WARN(ret, "*_ring_flush_all_caches failed: %d!\n", ret);
3124 }
3125
3126 /* Record the position of the start of the request so that
3127 * should we detect the updated seqno part-way through the
3128 * GPU processing the request, we never over-estimate the
3129 * position of the head.
3130 */
3131 request->postfix = intel_ring_get_tail(ringbuf);
3132
3133 if (i915.enable_execlists)
3134 ret = ring->emit_request(request);
3135 else {
3136 ret = ring->add_request(request);
3137
3138 request->tail = intel_ring_get_tail(ringbuf);
3139 }
3140 /* Not allowed to fail! */
3141 WARN(ret, "emit|add_request failed: %d!\n", ret);
3142
3143 request->head = request_start;
3144
3145 /* Whilst this request exists, batch_obj will be on the
3146 * active_list, and so will hold the active reference. Only when this
3147 * request is retired will the the batch_obj be moved onto the
3148 * inactive_list and lose its active reference. Hence we do not need
3149 * to explicitly hold another reference here.
3150 */
3151 request->batch_obj = obj;
3152
3153 request->emitted_jiffies = jiffies;
3154 request->previous_seqno = ring->last_submitted_seqno;
3155 ring->last_submitted_seqno = request->seqno;
3156 list_add_tail(&request->list, &ring->request_list);
3157
3158 trace_i915_gem_request_add(request);
3159
3160 i915_queue_hangcheck(ring->dev);
3161
3162 queue_delayed_work(dev_priv->wq,
3163 &dev_priv->mm.retire_work,
3164 round_jiffies_up_relative(HZ));
3165 intel_mark_busy(dev_priv->dev);
3166
3167 /* Sanity check that the reserved size was large enough. */
3168 intel_ring_reserved_space_end(ringbuf);
3169 }
3170
3171 static bool i915_context_is_banned(struct drm_i915_private *dev_priv,
3172 const struct intel_context *ctx)
3173 {
3174 unsigned long elapsed;
3175
3176 elapsed = get_seconds() - ctx->hang_stats.guilty_ts;
3177
3178 if (ctx->hang_stats.banned)
3179 return true;
3180
3181 if (ctx->hang_stats.ban_period_seconds &&
3182 elapsed <= ctx->hang_stats.ban_period_seconds) {
3183 if (!i915_gem_context_is_default(ctx)) {
3184 DRM_DEBUG("context hanging too fast, banning!\n");
3185 return true;
3186 } else if (i915_stop_ring_allow_ban(dev_priv)) {
3187 if (i915_stop_ring_allow_warn(dev_priv))
3188 DRM_ERROR("gpu hanging too fast, banning!\n");
3189 return true;
3190 }
3191 }
3192
3193 return false;
3194 }
3195
3196 static void i915_set_reset_status(struct drm_i915_private *dev_priv,
3197 struct intel_context *ctx,
3198 const bool guilty)
3199 {
3200 struct i915_ctx_hang_stats *hs;
3201
3202 if (WARN_ON(!ctx))
3203 return;
3204
3205 hs = &ctx->hang_stats;
3206
3207 if (guilty) {
3208 hs->banned = i915_context_is_banned(dev_priv, ctx);
3209 hs->batch_active++;
3210 hs->guilty_ts = get_seconds();
3211 } else {
3212 hs->batch_pending++;
3213 }
3214 }
3215
3216 void i915_gem_request_free(struct kref *req_ref)
3217 {
3218 struct drm_i915_gem_request *req = container_of(req_ref,
3219 typeof(*req), ref);
3220 struct intel_context *ctx = req->ctx;
3221
3222 if (req->file_priv)
3223 i915_gem_request_remove_from_client(req);
3224
3225 if (ctx) {
3226 if (i915.enable_execlists) {
3227 if (ctx != req->ring->default_context)
3228 intel_lr_context_unpin(req);
3229 }
3230
3231 i915_gem_context_unreference(ctx);
3232 }
3233
3234 kmem_cache_free(req->i915->requests, req);
3235 }
3236
3237 int i915_gem_request_alloc(struct intel_engine_cs *ring,
3238 struct intel_context *ctx,
3239 struct drm_i915_gem_request **req_out)
3240 {
3241 struct drm_i915_private *dev_priv = to_i915(ring->dev);
3242 struct drm_i915_gem_request *req;
3243 int ret;
3244
3245 if (!req_out)
3246 return -EINVAL;
3247
3248 *req_out = NULL;
3249
3250 req = kmem_cache_zalloc(dev_priv->requests, GFP_KERNEL);
3251 if (req == NULL)
3252 return -ENOMEM;
3253
3254 ret = i915_gem_get_seqno(ring->dev, &req->seqno);
3255 if (ret)
3256 goto err;
3257
3258 kref_init(&req->ref);
3259 req->i915 = dev_priv;
3260 req->ring = ring;
3261 req->ctx = ctx;
3262 i915_gem_context_reference(req->ctx);
3263
3264 if (i915.enable_execlists)
3265 ret = intel_logical_ring_alloc_request_extras(req);
3266 else
3267 ret = intel_ring_alloc_request_extras(req);
3268 if (ret) {
3269 i915_gem_context_unreference(req->ctx);
3270 goto err;
3271 }
3272
3273 /*
3274 * Reserve space in the ring buffer for all the commands required to
3275 * eventually emit this request. This is to guarantee that the
3276 * i915_add_request() call can't fail. Note that the reserve may need
3277 * to be redone if the request is not actually submitted straight
3278 * away, e.g. because a GPU scheduler has deferred it.
3279 */
3280 if (i915.enable_execlists)
3281 ret = intel_logical_ring_reserve_space(req);
3282 else
3283 ret = intel_ring_reserve_space(req);
3284 if (ret) {
3285 /*
3286 * At this point, the request is fully allocated even if not
3287 * fully prepared. Thus it can be cleaned up using the proper
3288 * free code.
3289 */
3290 i915_gem_request_cancel(req);
3291 return ret;
3292 }
3293
3294 *req_out = req;
3295 return 0;
3296
3297 err:
3298 kmem_cache_free(dev_priv->requests, req);
3299 return ret;
3300 }
3301
3302 void i915_gem_request_cancel(struct drm_i915_gem_request *req)
3303 {
3304 intel_ring_reserved_space_cancel(req->ringbuf);
3305
3306 i915_gem_request_unreference(req);
3307 }
3308
3309 struct drm_i915_gem_request *
3310 i915_gem_find_active_request(struct intel_engine_cs *ring)
3311 {
3312 struct drm_i915_gem_request *request;
3313
3314 list_for_each_entry(request, &ring->request_list, list) {
3315 if (i915_gem_request_completed(request, false))
3316 continue;
3317
3318 return request;
3319 }
3320
3321 return NULL;
3322 }
3323
3324 static void i915_gem_reset_ring_status(struct drm_i915_private *dev_priv,
3325 struct intel_engine_cs *ring)
3326 {
3327 struct drm_i915_gem_request *request;
3328 bool ring_hung;
3329
3330 request = i915_gem_find_active_request(ring);
3331
3332 if (request == NULL)
3333 return;
3334
3335 ring_hung = ring->hangcheck.score >= HANGCHECK_SCORE_RING_HUNG;
3336
3337 i915_set_reset_status(dev_priv, request->ctx, ring_hung);
3338
3339 list_for_each_entry_continue(request, &ring->request_list, list)
3340 i915_set_reset_status(dev_priv, request->ctx, false);
3341 }
3342
3343 static void i915_gem_reset_ring_cleanup(struct drm_i915_private *dev_priv,
3344 struct intel_engine_cs *ring)
3345 {
3346 while (!list_empty(&ring->active_list)) {
3347 struct drm_i915_gem_object *obj;
3348
3349 obj = list_first_entry(&ring->active_list,
3350 struct drm_i915_gem_object,
3351 ring_list[ring->id]);
3352
3353 i915_gem_object_retire__read(obj, ring->id);
3354 }
3355
3356 /*
3357 * Clear the execlists queue up before freeing the requests, as those
3358 * are the ones that keep the context and ringbuffer backing objects
3359 * pinned in place.
3360 */
3361 while (!list_empty(&ring->execlist_queue)) {
3362 struct drm_i915_gem_request *submit_req;
3363
3364 submit_req = list_first_entry(&ring->execlist_queue,
3365 struct drm_i915_gem_request,
3366 execlist_link);
3367 list_del(&submit_req->execlist_link);
3368
3369 if (submit_req->ctx != ring->default_context)
3370 intel_lr_context_unpin(submit_req);
3371
3372 i915_gem_request_unreference(submit_req);
3373 }
3374
3375 /*
3376 * We must free the requests after all the corresponding objects have
3377 * been moved off active lists. Which is the same order as the normal
3378 * retire_requests function does. This is important if object hold
3379 * implicit references on things like e.g. ppgtt address spaces through
3380 * the request.
3381 */
3382 while (!list_empty(&ring->request_list)) {
3383 struct drm_i915_gem_request *request;
3384
3385 request = list_first_entry(&ring->request_list,
3386 struct drm_i915_gem_request,
3387 list);
3388
3389 i915_gem_request_retire(request);
3390 }
3391 }
3392
3393 void i915_gem_reset(struct drm_device *dev)
3394 {
3395 struct drm_i915_private *dev_priv = dev->dev_private;
3396 struct intel_engine_cs *ring;
3397 int i;
3398
3399 /*
3400 * Before we free the objects from the requests, we need to inspect
3401 * them for finding the guilty party. As the requests only borrow
3402 * their reference to the objects, the inspection must be done first.
3403 */
3404 for_each_ring(ring, dev_priv, i)
3405 i915_gem_reset_ring_status(dev_priv, ring);
3406
3407 for_each_ring(ring, dev_priv, i)
3408 i915_gem_reset_ring_cleanup(dev_priv, ring);
3409
3410 i915_gem_context_reset(dev);
3411
3412 i915_gem_restore_fences(dev);
3413
3414 WARN_ON(i915_verify_lists(dev));
3415 }
3416
3417 /**
3418 * This function clears the request list as sequence numbers are passed.
3419 */
3420 void
3421 i915_gem_retire_requests_ring(struct intel_engine_cs *ring)
3422 {
3423 WARN_ON(i915_verify_lists(ring->dev));
3424
3425 /* Retire requests first as we use it above for the early return.
3426 * If we retire requests last, we may use a later seqno and so clear
3427 * the requests lists without clearing the active list, leading to
3428 * confusion.
3429 */
3430 while (!list_empty(&ring->request_list)) {
3431 struct drm_i915_gem_request *request;
3432
3433 request = list_first_entry(&ring->request_list,
3434 struct drm_i915_gem_request,
3435 list);
3436
3437 if (!i915_gem_request_completed(request, true))
3438 break;
3439
3440 i915_gem_request_retire(request);
3441 }
3442
3443 /* Move any buffers on the active list that are no longer referenced
3444 * by the ringbuffer to the flushing/inactive lists as appropriate,
3445 * before we free the context associated with the requests.
3446 */
3447 while (!list_empty(&ring->active_list)) {
3448 struct drm_i915_gem_object *obj;
3449
3450 obj = list_first_entry(&ring->active_list,
3451 struct drm_i915_gem_object,
3452 ring_list[ring->id]);
3453
3454 if (!list_empty(&obj->last_read_req[ring->id]->list))
3455 break;
3456
3457 i915_gem_object_retire__read(obj, ring->id);
3458 }
3459
3460 if (unlikely(ring->trace_irq_req &&
3461 i915_gem_request_completed(ring->trace_irq_req, true))) {
3462 ring->irq_put(ring);
3463 i915_gem_request_assign(&ring->trace_irq_req, NULL);
3464 }
3465
3466 WARN_ON(i915_verify_lists(ring->dev));
3467 }
3468
3469 bool
3470 i915_gem_retire_requests(struct drm_device *dev)
3471 {
3472 struct drm_i915_private *dev_priv = dev->dev_private;
3473 struct intel_engine_cs *ring;
3474 bool idle = true;
3475 int i;
3476
3477 for_each_ring(ring, dev_priv, i) {
3478 i915_gem_retire_requests_ring(ring);
3479 idle &= list_empty(&ring->request_list);
3480 if (i915.enable_execlists) {
3481 unsigned long flags;
3482
3483 spin_lock_irqsave(&ring->execlist_lock, flags);
3484 idle &= list_empty(&ring->execlist_queue);
3485 spin_unlock_irqrestore(&ring->execlist_lock, flags);
3486
3487 intel_execlists_retire_requests(ring);
3488 }
3489 }
3490
3491 if (idle)
3492 mod_delayed_work(dev_priv->wq,
3493 &dev_priv->mm.idle_work,
3494 msecs_to_jiffies(100));
3495
3496 return idle;
3497 }
3498
3499 static void
3500 i915_gem_retire_work_handler(struct work_struct *work)
3501 {
3502 struct drm_i915_private *dev_priv =
3503 container_of(work, typeof(*dev_priv), mm.retire_work.work);
3504 struct drm_device *dev = dev_priv->dev;
3505 bool idle;
3506
3507 /* Come back later if the device is busy... */
3508 idle = false;
3509 if (mutex_trylock(&dev->struct_mutex)) {
3510 idle = i915_gem_retire_requests(dev);
3511 mutex_unlock(&dev->struct_mutex);
3512 }
3513 if (!idle)
3514 queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work,
3515 round_jiffies_up_relative(HZ));
3516 }
3517
3518 static void
3519 i915_gem_idle_work_handler(struct work_struct *work)
3520 {
3521 struct drm_i915_private *dev_priv =
3522 container_of(work, typeof(*dev_priv), mm.idle_work.work);
3523 struct drm_device *dev = dev_priv->dev;
3524 struct intel_engine_cs *ring;
3525 int i;
3526
3527 for_each_ring(ring, dev_priv, i)
3528 if (!list_empty(&ring->request_list))
3529 return;
3530
3531 intel_mark_idle(dev);
3532
3533 if (mutex_trylock(&dev->struct_mutex)) {
3534 struct intel_engine_cs *ring;
3535 int i;
3536
3537 for_each_ring(ring, dev_priv, i)
3538 i915_gem_batch_pool_fini(&ring->batch_pool);
3539
3540 mutex_unlock(&dev->struct_mutex);
3541 }
3542 }
3543
3544 /**
3545 * Ensures that an object will eventually get non-busy by flushing any required
3546 * write domains, emitting any outstanding lazy request and retiring and
3547 * completed requests.
3548 */
3549 static int
3550 i915_gem_object_flush_active(struct drm_i915_gem_object *obj)
3551 {
3552 int i;
3553
3554 if (!obj->active)
3555 return 0;
3556
3557 for (i = 0; i < I915_NUM_RINGS; i++) {
3558 struct drm_i915_gem_request *req;
3559
3560 req = obj->last_read_req[i];
3561 if (req == NULL)
3562 continue;
3563
3564 if (list_empty(&req->list))
3565 goto retire;
3566
3567 if (i915_gem_request_completed(req, true)) {
3568 __i915_gem_request_retire__upto(req);
3569 retire:
3570 i915_gem_object_retire__read(obj, i);
3571 }
3572 }
3573
3574 return 0;
3575 }
3576
3577 /**
3578 * i915_gem_wait_ioctl - implements DRM_IOCTL_I915_GEM_WAIT
3579 * @DRM_IOCTL_ARGS: standard ioctl arguments
3580 *
3581 * Returns 0 if successful, else an error is returned with the remaining time in
3582 * the timeout parameter.
3583 * -ETIME: object is still busy after timeout
3584 * -ERESTARTSYS: signal interrupted the wait
3585 * -ENONENT: object doesn't exist
3586 * Also possible, but rare:
3587 * -EAGAIN: GPU wedged
3588 * -ENOMEM: damn
3589 * -ENODEV: Internal IRQ fail
3590 * -E?: The add request failed
3591 *
3592 * The wait ioctl with a timeout of 0 reimplements the busy ioctl. With any
3593 * non-zero timeout parameter the wait ioctl will wait for the given number of
3594 * nanoseconds on an object becoming unbusy. Since the wait itself does so
3595 * without holding struct_mutex the object may become re-busied before this
3596 * function completes. A similar but shorter * race condition exists in the busy
3597 * ioctl
3598 */
3599 int
3600 i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
3601 {
3602 struct drm_i915_private *dev_priv = dev->dev_private;
3603 struct drm_i915_gem_wait *args = data;
3604 struct drm_gem_object *gobj;
3605 struct drm_i915_gem_object *obj;
3606 struct drm_i915_gem_request *req[I915_NUM_RINGS];
3607 unsigned reset_counter;
3608 int i, n = 0;
3609 int ret;
3610
3611 if (args->flags != 0)
3612 return -EINVAL;
3613
3614 ret = i915_mutex_lock_interruptible(dev);
3615 if (ret)
3616 return ret;
3617
3618 gobj = drm_gem_object_lookup(dev, file, args->bo_handle);
3619 if (gobj == NULL) {
3620 mutex_unlock(&dev->struct_mutex);
3621 return -ENOENT;
3622 }
3623 obj = to_intel_bo(gobj);
3624
3625 /* Need to make sure the object gets inactive eventually. */
3626 ret = i915_gem_object_flush_active(obj);
3627 if (ret)
3628 goto out;
3629
3630 if (!obj->active)
3631 goto out;
3632
3633 /* Do this after OLR check to make sure we make forward progress polling
3634 * on this IOCTL with a timeout == 0 (like busy ioctl)
3635 */
3636 if (args->timeout_ns == 0) {
3637 ret = -ETIME;
3638 goto out;
3639 }
3640
3641 drm_gem_object_unreference(&obj->base);
3642 reset_counter = atomic_read(&dev_priv->gpu_error.reset_counter);
3643
3644 for (i = 0; i < I915_NUM_RINGS; i++) {
3645 if (obj->last_read_req[i] == NULL)
3646 continue;
3647
3648 req[n++] = i915_gem_request_reference(obj->last_read_req[i]);
3649 }
3650
3651 mutex_unlock(&dev->struct_mutex);
3652
3653 for (i = 0; i < n; i++) {
3654 if (ret == 0)
3655 ret = __i915_wait_request(req[i], reset_counter, true,
3656 args->timeout_ns > 0 ? &args->timeout_ns : NULL,
3657 file->driver_priv);
3658 i915_gem_request_unreference__unlocked(req[i]);
3659 }
3660 return ret;
3661
3662 out:
3663 drm_gem_object_unreference(&obj->base);
3664 mutex_unlock(&dev->struct_mutex);
3665 return ret;
3666 }
3667
3668 static int
3669 __i915_gem_object_sync(struct drm_i915_gem_object *obj,
3670 struct intel_engine_cs *to,
3671 struct drm_i915_gem_request *from_req,
3672 struct drm_i915_gem_request **to_req)
3673 {
3674 struct intel_engine_cs *from;
3675 int ret;
3676
3677 from = i915_gem_request_get_ring(from_req);
3678 if (to == from)
3679 return 0;
3680
3681 if (i915_gem_request_completed(from_req, true))
3682 return 0;
3683
3684 if (!i915_semaphore_is_enabled(obj->base.dev)) {
3685 struct drm_i915_private *i915 = to_i915(obj->base.dev);
3686 ret = __i915_wait_request(from_req,
3687 atomic_read(&i915->gpu_error.reset_counter),
3688 i915->mm.interruptible,
3689 NULL,
3690 &i915->rps.semaphores);
3691 if (ret)
3692 return ret;
3693
3694 i915_gem_object_retire_request(obj, from_req);
3695 } else {
3696 int idx = intel_ring_sync_index(from, to);
3697 u32 seqno = i915_gem_request_get_seqno(from_req);
3698
3699 WARN_ON(!to_req);
3700
3701 if (seqno <= from->semaphore.sync_seqno[idx])
3702 return 0;
3703
3704 if (*to_req == NULL) {
3705 ret = i915_gem_request_alloc(to, to->default_context, to_req);
3706 if (ret)
3707 return ret;
3708 }
3709
3710 trace_i915_gem_ring_sync_to(*to_req, from, from_req);
3711 ret = to->semaphore.sync_to(*to_req, from, seqno);
3712 if (ret)
3713 return ret;
3714
3715 /* We use last_read_req because sync_to()
3716 * might have just caused seqno wrap under
3717 * the radar.
3718 */
3719 from->semaphore.sync_seqno[idx] =
3720 i915_gem_request_get_seqno(obj->last_read_req[from->id]);
3721 }
3722
3723 return 0;
3724 }
3725
3726 /**
3727 * i915_gem_object_sync - sync an object to a ring.
3728 *
3729 * @obj: object which may be in use on another ring.
3730 * @to: ring we wish to use the object on. May be NULL.
3731 * @to_req: request we wish to use the object for. See below.
3732 * This will be allocated and returned if a request is
3733 * required but not passed in.
3734 *
3735 * This code is meant to abstract object synchronization with the GPU.
3736 * Calling with NULL implies synchronizing the object with the CPU
3737 * rather than a particular GPU ring. Conceptually we serialise writes
3738 * between engines inside the GPU. We only allow one engine to write
3739 * into a buffer at any time, but multiple readers. To ensure each has
3740 * a coherent view of memory, we must:
3741 *
3742 * - If there is an outstanding write request to the object, the new
3743 * request must wait for it to complete (either CPU or in hw, requests
3744 * on the same ring will be naturally ordered).
3745 *
3746 * - If we are a write request (pending_write_domain is set), the new
3747 * request must wait for outstanding read requests to complete.
3748 *
3749 * For CPU synchronisation (NULL to) no request is required. For syncing with
3750 * rings to_req must be non-NULL. However, a request does not have to be
3751 * pre-allocated. If *to_req is NULL and sync commands will be emitted then a
3752 * request will be allocated automatically and returned through *to_req. Note
3753 * that it is not guaranteed that commands will be emitted (because the system
3754 * might already be idle). Hence there is no need to create a request that
3755 * might never have any work submitted. Note further that if a request is
3756 * returned in *to_req, it is the responsibility of the caller to submit
3757 * that request (after potentially adding more work to it).
3758 *
3759 * Returns 0 if successful, else propagates up the lower layer error.
3760 */
3761 int
3762 i915_gem_object_sync(struct drm_i915_gem_object *obj,
3763 struct intel_engine_cs *to,
3764 struct drm_i915_gem_request **to_req)
3765 {
3766 const bool readonly = obj->base.pending_write_domain == 0;
3767 struct drm_i915_gem_request *req[I915_NUM_RINGS];
3768 int ret, i, n;
3769
3770 if (!obj->active)
3771 return 0;
3772
3773 if (to == NULL)
3774 return i915_gem_object_wait_rendering(obj, readonly);
3775
3776 n = 0;
3777 if (readonly) {
3778 if (obj->last_write_req)
3779 req[n++] = obj->last_write_req;
3780 } else {
3781 for (i = 0; i < I915_NUM_RINGS; i++)
3782 if (obj->last_read_req[i])
3783 req[n++] = obj->last_read_req[i];
3784 }
3785 for (i = 0; i < n; i++) {
3786 ret = __i915_gem_object_sync(obj, to, req[i], to_req);
3787 if (ret)
3788 return ret;
3789 }
3790
3791 return 0;
3792 }
3793
3794 static void i915_gem_object_finish_gtt(struct drm_i915_gem_object *obj)
3795 {
3796 u32 old_write_domain, old_read_domains;
3797
3798 /* Force a pagefault for domain tracking on next user access */
3799 i915_gem_release_mmap(obj);
3800
3801 if ((obj->base.read_domains & I915_GEM_DOMAIN_GTT) == 0)
3802 return;
3803
3804 /* Wait for any direct GTT access to complete */
3805 mb();
3806
3807 old_read_domains = obj->base.read_domains;
3808 old_write_domain = obj->base.write_domain;
3809
3810 obj->base.read_domains &= ~I915_GEM_DOMAIN_GTT;
3811 obj->base.write_domain &= ~I915_GEM_DOMAIN_GTT;
3812
3813 trace_i915_gem_object_change_domain(obj,
3814 old_read_domains,
3815 old_write_domain);
3816 }
3817
3818 static int __i915_vma_unbind(struct i915_vma *vma, bool wait)
3819 {
3820 struct drm_i915_gem_object *obj = vma->obj;
3821 struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
3822 int ret;
3823
3824 if (list_empty(&vma->vma_link))
3825 return 0;
3826
3827 if (!drm_mm_node_allocated(&vma->node)) {
3828 i915_gem_vma_destroy(vma);
3829 return 0;
3830 }
3831
3832 if (vma->pin_count)
3833 return -EBUSY;
3834
3835 BUG_ON(obj->pages == NULL);
3836
3837 if (wait) {
3838 ret = i915_gem_object_wait_rendering(obj, false);
3839 if (ret)
3840 return ret;
3841 }
3842
3843 if (i915_is_ggtt(vma->vm) &&
3844 vma->ggtt_view.type == I915_GGTT_VIEW_NORMAL) {
3845 i915_gem_object_finish_gtt(obj);
3846
3847 /* release the fence reg _after_ flushing */
3848 ret = i915_gem_object_put_fence(obj);
3849 if (ret)
3850 return ret;
3851 }
3852
3853 trace_i915_vma_unbind(vma);
3854
3855 vma->vm->unbind_vma(vma);
3856 vma->bound = 0;
3857
3858 list_del_init(&vma->mm_list);
3859 if (i915_is_ggtt(vma->vm)) {
3860 if (vma->ggtt_view.type == I915_GGTT_VIEW_NORMAL) {
3861 obj->map_and_fenceable = false;
3862 } else if (vma->ggtt_view.pages) {
3863 #ifdef __NetBSD__
3864 panic("rotated/partial views can't happen");
3865 #else
3866 sg_free_table(vma->ggtt_view.pages);
3867 kfree(vma->ggtt_view.pages);
3868 #endif
3869 }
3870 vma->ggtt_view.pages = NULL;
3871 }
3872
3873 drm_mm_remove_node(&vma->node);
3874 i915_gem_vma_destroy(vma);
3875
3876 /* Since the unbound list is global, only move to that list if
3877 * no more VMAs exist. */
3878 if (list_empty(&obj->vma_list))
3879 list_move_tail(&obj->global_list, &dev_priv->mm.unbound_list);
3880
3881 /* And finally now the object is completely decoupled from this vma,
3882 * we can drop its hold on the backing storage and allow it to be
3883 * reaped by the shrinker.
3884 */
3885 i915_gem_object_unpin_pages(obj);
3886
3887 return 0;
3888 }
3889
3890 int i915_vma_unbind(struct i915_vma *vma)
3891 {
3892 return __i915_vma_unbind(vma, true);
3893 }
3894
3895 int __i915_vma_unbind_no_wait(struct i915_vma *vma)
3896 {
3897 return __i915_vma_unbind(vma, false);
3898 }
3899
3900 int i915_gpu_idle(struct drm_device *dev)
3901 {
3902 struct drm_i915_private *dev_priv = dev->dev_private;
3903 struct intel_engine_cs *ring;
3904 int ret, i;
3905
3906 /* Flush everything onto the inactive list. */
3907 for_each_ring(ring, dev_priv, i) {
3908 if (!i915.enable_execlists) {
3909 struct drm_i915_gem_request *req;
3910
3911 ret = i915_gem_request_alloc(ring, ring->default_context, &req);
3912 if (ret)
3913 return ret;
3914
3915 ret = i915_switch_context(req);
3916 if (ret) {
3917 i915_gem_request_cancel(req);
3918 return ret;
3919 }
3920
3921 i915_add_request_no_flush(req);
3922 }
3923
3924 ret = intel_ring_idle(ring);
3925 if (ret)
3926 return ret;
3927 }
3928
3929 WARN_ON(i915_verify_lists(dev));
3930 return 0;
3931 }
3932
3933 static bool i915_gem_valid_gtt_space(struct i915_vma *vma,
3934 unsigned long cache_level)
3935 {
3936 struct drm_mm_node *gtt_space = &vma->node;
3937 struct drm_mm_node *other;
3938
3939 /*
3940 * On some machines we have to be careful when putting differing types
3941 * of snoopable memory together to avoid the prefetcher crossing memory
3942 * domains and dying. During vm initialisation, we decide whether or not
3943 * these constraints apply and set the drm_mm.color_adjust
3944 * appropriately.
3945 */
3946 if (vma->vm->mm.color_adjust == NULL)
3947 return true;
3948
3949 if (!drm_mm_node_allocated(gtt_space))
3950 return true;
3951
3952 if (list_empty(>t_space->node_list))
3953 return true;
3954
3955 other = list_entry(gtt_space->node_list.prev, struct drm_mm_node, node_list);
3956 if (other->allocated && !other->hole_follows && other->color != cache_level)
3957 return false;
3958
3959 other = list_entry(gtt_space->node_list.next, struct drm_mm_node, node_list);
3960 if (other->allocated && !gtt_space->hole_follows && other->color != cache_level)
3961 return false;
3962
3963 return true;
3964 }
3965
3966 /**
3967 * Finds free space in the GTT aperture and binds the object or a view of it
3968 * there.
3969 */
3970 static struct i915_vma *
3971 i915_gem_object_bind_to_vm(struct drm_i915_gem_object *obj,
3972 struct i915_address_space *vm,
3973 const struct i915_ggtt_view *ggtt_view,
3974 unsigned alignment,
3975 uint64_t flags)
3976 {
3977 struct drm_device *dev = obj->base.dev;
3978 struct drm_i915_private *dev_priv = dev->dev_private;
3979 u32 fence_alignment, unfenced_alignment;
3980 u32 search_flag, alloc_flag;
3981 u64 start, end;
3982 u64 size, fence_size;
3983 struct i915_vma *vma;
3984 int ret;
3985
3986 if (i915_is_ggtt(vm)) {
3987 u32 view_size;
3988
3989 if (WARN_ON(!ggtt_view))
3990 return ERR_PTR(-EINVAL);
3991
3992 view_size = i915_ggtt_view_size(obj, ggtt_view);
3993
3994 fence_size = i915_gem_get_gtt_size(dev,
3995 view_size,
3996 obj->tiling_mode);
3997 fence_alignment = i915_gem_get_gtt_alignment(dev,
3998 view_size,
3999 obj->tiling_mode,
4000 true);
4001 unfenced_alignment = i915_gem_get_gtt_alignment(dev,
4002 view_size,
4003 obj->tiling_mode,
4004 false);
4005 size = flags & PIN_MAPPABLE ? fence_size : view_size;
4006 } else {
4007 fence_size = i915_gem_get_gtt_size(dev,
4008 obj->base.size,
4009 obj->tiling_mode);
4010 fence_alignment = i915_gem_get_gtt_alignment(dev,
4011 obj->base.size,
4012 obj->tiling_mode,
4013 true);
4014 unfenced_alignment =
4015 i915_gem_get_gtt_alignment(dev,
4016 obj->base.size,
4017 obj->tiling_mode,
4018 false);
4019 size = flags & PIN_MAPPABLE ? fence_size : obj->base.size;
4020 }
4021
4022 start = flags & PIN_OFFSET_BIAS ? flags & PIN_OFFSET_MASK : 0;
4023 end = vm->total;
4024 if (flags & PIN_MAPPABLE)
4025 end = min_t(u64, end, dev_priv->gtt.mappable_end);
4026 if (flags & PIN_ZONE_4G)
4027 end = min_t(u64, end, (1ULL << 32));
4028
4029 if (alignment == 0)
4030 alignment = flags & PIN_MAPPABLE ? fence_alignment :
4031 unfenced_alignment;
4032 if (flags & PIN_MAPPABLE && alignment & (fence_alignment - 1)) {
4033 DRM_DEBUG("Invalid object (view type=%u) alignment requested %u\n",
4034 ggtt_view ? ggtt_view->type : 0,
4035 alignment);
4036 return ERR_PTR(-EINVAL);
4037 }
4038
4039 /* If binding the object/GGTT view requires more space than the entire
4040 * aperture has, reject it early before evicting everything in a vain
4041 * attempt to find space.
4042 */
4043 if (size > end) {
4044 DRM_DEBUG("Attempting to bind an object (view type=%u) larger than the aperture: size=%"PRIx64" > %s aperture=%"PRIx64"\n",
4045 ggtt_view ? ggtt_view->type : 0,
4046 size,
4047 flags & PIN_MAPPABLE ? "mappable" : "total",
4048 end);
4049 return ERR_PTR(-E2BIG);
4050 }
4051
4052 ret = i915_gem_object_get_pages(obj);
4053 if (ret)
4054 return ERR_PTR(ret);
4055
4056 i915_gem_object_pin_pages(obj);
4057
4058 vma = ggtt_view ? i915_gem_obj_lookup_or_create_ggtt_vma(obj, ggtt_view) :
4059 i915_gem_obj_lookup_or_create_vma(obj, vm);
4060
4061 if (IS_ERR(vma))
4062 goto err_unpin;
4063
4064 if (flags & PIN_HIGH) {
4065 search_flag = DRM_MM_SEARCH_BELOW;
4066 alloc_flag = DRM_MM_CREATE_TOP;
4067 } else {
4068 search_flag = DRM_MM_SEARCH_DEFAULT;
4069 alloc_flag = DRM_MM_CREATE_DEFAULT;
4070 }
4071
4072 search_free:
4073 ret = drm_mm_insert_node_in_range_generic(&vm->mm, &vma->node,
4074 size, alignment,
4075 obj->cache_level,
4076 start, end,
4077 search_flag,
4078 alloc_flag);
4079 if (ret) {
4080 ret = i915_gem_evict_something(dev, vm, size, alignment,
4081 obj->cache_level,
4082 start, end,
4083 flags);
4084 if (ret == 0)
4085 goto search_free;
4086
4087 goto err_free_vma;
4088 }
4089 if (WARN_ON(!i915_gem_valid_gtt_space(vma, obj->cache_level))) {
4090 ret = -EINVAL;
4091 goto err_remove_node;
4092 }
4093
4094 trace_i915_vma_bind(vma, flags);
4095 ret = i915_vma_bind(vma, obj->cache_level, flags);
4096 if (ret)
4097 goto err_remove_node;
4098
4099 list_move_tail(&obj->global_list, &dev_priv->mm.bound_list);
4100 list_add_tail(&vma->mm_list, &vm->inactive_list);
4101
4102 return vma;
4103
4104 err_remove_node:
4105 drm_mm_remove_node(&vma->node);
4106 err_free_vma:
4107 i915_gem_vma_destroy(vma);
4108 vma = ERR_PTR(ret);
4109 err_unpin:
4110 i915_gem_object_unpin_pages(obj);
4111 return vma;
4112 }
4113
4114 bool
4115 i915_gem_clflush_object(struct drm_i915_gem_object *obj,
4116 bool force)
4117 {
4118 /* If we don't have a page list set up, then we're not pinned
4119 * to GPU, and we can ignore the cache flush because it'll happen
4120 * again at bind time.
4121 */
4122 if (obj->pages == NULL)
4123 return false;
4124
4125 /*
4126 * Stolen memory is always coherent with the GPU as it is explicitly
4127 * marked as wc by the system, or the system is cache-coherent.
4128 */
4129 if (obj->stolen || obj->phys_handle)
4130 return false;
4131
4132 /* If the GPU is snooping the contents of the CPU cache,
4133 * we do not need to manually clear the CPU cache lines. However,
4134 * the caches are only snooped when the render cache is
4135 * flushed/invalidated. As we always have to emit invalidations
4136 * and flushes when moving into and out of the RENDER domain, correct
4137 * snooping behaviour occurs naturally as the result of our domain
4138 * tracking.
4139 */
4140 if (!force && cpu_cache_is_coherent(obj->base.dev, obj->cache_level)) {
4141 obj->cache_dirty = true;
4142 return false;
4143 }
4144
4145 trace_i915_gem_object_clflush(obj);
4146 #ifdef __NetBSD__
4147 drm_clflush_pglist(&obj->pageq);
4148 #else
4149 drm_clflush_sg(obj->pages);
4150 #endif
4151 obj->cache_dirty = false;
4152
4153 return true;
4154 }
4155
4156 /** Flushes the GTT write domain for the object if it's dirty. */
4157 static void
4158 i915_gem_object_flush_gtt_write_domain(struct drm_i915_gem_object *obj)
4159 {
4160 uint32_t old_write_domain;
4161
4162 if (obj->base.write_domain != I915_GEM_DOMAIN_GTT)
4163 return;
4164
4165 /* No actual flushing is required for the GTT write domain. Writes
4166 * to it immediately go to main memory as far as we know, so there's
4167 * no chipset flush. It also doesn't land in render cache.
4168 *
4169 * However, we do have to enforce the order so that all writes through
4170 * the GTT land before any writes to the device, such as updates to
4171 * the GATT itself.
4172 */
4173 wmb();
4174
4175 old_write_domain = obj->base.write_domain;
4176 obj->base.write_domain = 0;
4177
4178 intel_fb_obj_flush(obj, false, ORIGIN_GTT);
4179
4180 trace_i915_gem_object_change_domain(obj,
4181 obj->base.read_domains,
4182 old_write_domain);
4183 }
4184
4185 /** Flushes the CPU write domain for the object if it's dirty. */
4186 static void
4187 i915_gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj)
4188 {
4189 uint32_t old_write_domain;
4190
4191 if (obj->base.write_domain != I915_GEM_DOMAIN_CPU)
4192 return;
4193
4194 if (i915_gem_clflush_object(obj, obj->pin_display))
4195 i915_gem_chipset_flush(obj->base.dev);
4196
4197 old_write_domain = obj->base.write_domain;
4198 obj->base.write_domain = 0;
4199
4200 intel_fb_obj_flush(obj, false, ORIGIN_CPU);
4201
4202 trace_i915_gem_object_change_domain(obj,
4203 obj->base.read_domains,
4204 old_write_domain);
4205 }
4206
4207 /**
4208 * Moves a single object to the GTT read, and possibly write domain.
4209 *
4210 * This function returns when the move is complete, including waiting on
4211 * flushes to occur.
4212 */
4213 int
4214 i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
4215 {
4216 uint32_t old_write_domain, old_read_domains;
4217 struct i915_vma *vma;
4218 int ret;
4219
4220 if (obj->base.write_domain == I915_GEM_DOMAIN_GTT)
4221 return 0;
4222
4223 ret = i915_gem_object_wait_rendering(obj, !write);
4224 if (ret)
4225 return ret;
4226
4227 /* Flush and acquire obj->pages so that we are coherent through
4228 * direct access in memory with previous cached writes through
4229 * shmemfs and that our cache domain tracking remains valid.
4230 * For example, if the obj->filp was moved to swap without us
4231 * being notified and releasing the pages, we would mistakenly
4232 * continue to assume that the obj remained out of the CPU cached
4233 * domain.
4234 */
4235 ret = i915_gem_object_get_pages(obj);
4236 if (ret)
4237 return ret;
4238
4239 i915_gem_object_flush_cpu_write_domain(obj);
4240
4241 /* Serialise direct access to this object with the barriers for
4242 * coherent writes from the GPU, by effectively invalidating the
4243 * GTT domain upon first access.
4244 */
4245 if ((obj->base.read_domains & I915_GEM_DOMAIN_GTT) == 0)
4246 mb();
4247
4248 old_write_domain = obj->base.write_domain;
4249 old_read_domains = obj->base.read_domains;
4250
4251 /* It should now be out of any other write domains, and we can update
4252 * the domain values for our changes.
4253 */
4254 BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_GTT) != 0);
4255 obj->base.read_domains |= I915_GEM_DOMAIN_GTT;
4256 if (write) {
4257 obj->base.read_domains = I915_GEM_DOMAIN_GTT;
4258 obj->base.write_domain = I915_GEM_DOMAIN_GTT;
4259 obj->dirty = 1;
4260 }
4261
4262 trace_i915_gem_object_change_domain(obj,
4263 old_read_domains,
4264 old_write_domain);
4265
4266 /* And bump the LRU for this access */
4267 vma = i915_gem_obj_to_ggtt(obj);
4268 if (vma && drm_mm_node_allocated(&vma->node) && !obj->active)
4269 list_move_tail(&vma->mm_list,
4270 &to_i915(obj->base.dev)->gtt.base.inactive_list);
4271
4272 return 0;
4273 }
4274
4275 /**
4276 * Changes the cache-level of an object across all VMA.
4277 *
4278 * After this function returns, the object will be in the new cache-level
4279 * across all GTT and the contents of the backing storage will be coherent,
4280 * with respect to the new cache-level. In order to keep the backing storage
4281 * coherent for all users, we only allow a single cache level to be set
4282 * globally on the object and prevent it from being changed whilst the
4283 * hardware is reading from the object. That is if the object is currently
4284 * on the scanout it will be set to uncached (or equivalent display
4285 * cache coherency) and all non-MOCS GPU access will also be uncached so
4286 * that all direct access to the scanout remains coherent.
4287 */
4288 int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
4289 enum i915_cache_level cache_level)
4290 {
4291 struct drm_device *dev = obj->base.dev;
4292 struct i915_vma *vma, *next;
4293 bool bound = false;
4294 int ret = 0;
4295
4296 if (obj->cache_level == cache_level)
4297 goto out;
4298
4299 /* Inspect the list of currently bound VMA and unbind any that would
4300 * be invalid given the new cache-level. This is principally to
4301 * catch the issue of the CS prefetch crossing page boundaries and
4302 * reading an invalid PTE on older architectures.
4303 */
4304 list_for_each_entry_safe(vma, next, &obj->vma_list, vma_link) {
4305 if (!drm_mm_node_allocated(&vma->node))
4306 continue;
4307
4308 if (vma->pin_count) {
4309 DRM_DEBUG("can not change the cache level of pinned objects\n");
4310 return -EBUSY;
4311 }
4312
4313 if (!i915_gem_valid_gtt_space(vma, cache_level)) {
4314 ret = i915_vma_unbind(vma);
4315 if (ret)
4316 return ret;
4317 } else
4318 bound = true;
4319 }
4320
4321 /* We can reuse the existing drm_mm nodes but need to change the
4322 * cache-level on the PTE. We could simply unbind them all and
4323 * rebind with the correct cache-level on next use. However since
4324 * we already have a valid slot, dma mapping, pages etc, we may as
4325 * rewrite the PTE in the belief that doing so tramples upon less
4326 * state and so involves less work.
4327 */
4328 if (bound) {
4329 /* Before we change the PTE, the GPU must not be accessing it.
4330 * If we wait upon the object, we know that all the bound
4331 * VMA are no longer active.
4332 */
4333 ret = i915_gem_object_wait_rendering(obj, false);
4334 if (ret)
4335 return ret;
4336
4337 if (!HAS_LLC(dev) && cache_level != I915_CACHE_NONE) {
4338 /* Access to snoopable pages through the GTT is
4339 * incoherent and on some machines causes a hard
4340 * lockup. Relinquish the CPU mmaping to force
4341 * userspace to refault in the pages and we can
4342 * then double check if the GTT mapping is still
4343 * valid for that pointer access.
4344 */
4345 i915_gem_release_mmap(obj);
4346
4347 /* As we no longer need a fence for GTT access,
4348 * we can relinquish it now (and so prevent having
4349 * to steal a fence from someone else on the next
4350 * fence request). Note GPU activity would have
4351 * dropped the fence as all snoopable access is
4352 * supposed to be linear.
4353 */
4354 ret = i915_gem_object_put_fence(obj);
4355 if (ret)
4356 return ret;
4357 } else {
4358 /* We either have incoherent backing store and
4359 * so no GTT access or the architecture is fully
4360 * coherent. In such cases, existing GTT mmaps
4361 * ignore the cache bit in the PTE and we can
4362 * rewrite it without confusing the GPU or having
4363 * to force userspace to fault back in its mmaps.
4364 */
4365 }
4366
4367 list_for_each_entry(vma, &obj->vma_list, vma_link) {
4368 if (!drm_mm_node_allocated(&vma->node))
4369 continue;
4370
4371 ret = i915_vma_bind(vma, cache_level, PIN_UPDATE);
4372 if (ret)
4373 return ret;
4374 }
4375 }
4376
4377 list_for_each_entry(vma, &obj->vma_list, vma_link)
4378 vma->node.color = cache_level;
4379 obj->cache_level = cache_level;
4380
4381 out:
4382 /* Flush the dirty CPU caches to the backing storage so that the
4383 * object is now coherent at its new cache level (with respect
4384 * to the access domain).
4385 */
4386 if (obj->cache_dirty &&
4387 obj->base.write_domain != I915_GEM_DOMAIN_CPU &&
4388 cpu_write_needs_clflush(obj)) {
4389 if (i915_gem_clflush_object(obj, true))
4390 i915_gem_chipset_flush(obj->base.dev);
4391 }
4392
4393 return 0;
4394 }
4395
4396 int i915_gem_get_caching_ioctl(struct drm_device *dev, void *data,
4397 struct drm_file *file)
4398 {
4399 struct drm_i915_gem_caching *args = data;
4400 struct drm_gem_object *gobj;
4401 struct drm_i915_gem_object *obj;
4402
4403 gobj = drm_gem_object_lookup(dev, file, args->handle);
4404 if (gobj == NULL)
4405 return -ENOENT;
4406 obj = to_intel_bo(gobj);
4407
4408 switch (obj->cache_level) {
4409 case I915_CACHE_LLC:
4410 case I915_CACHE_L3_LLC:
4411 args->caching = I915_CACHING_CACHED;
4412 break;
4413
4414 case I915_CACHE_WT:
4415 args->caching = I915_CACHING_DISPLAY;
4416 break;
4417
4418 default:
4419 args->caching = I915_CACHING_NONE;
4420 break;
4421 }
4422
4423 drm_gem_object_unreference_unlocked(&obj->base);
4424 return 0;
4425 }
4426
4427 int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
4428 struct drm_file *file)
4429 {
4430 struct drm_i915_private *dev_priv = dev->dev_private;
4431 struct drm_i915_gem_caching *args = data;
4432 struct drm_gem_object *gobj;
4433 struct drm_i915_gem_object *obj;
4434 enum i915_cache_level level;
4435 int ret;
4436
4437 switch (args->caching) {
4438 case I915_CACHING_NONE:
4439 level = I915_CACHE_NONE;
4440 break;
4441 case I915_CACHING_CACHED:
4442 /*
4443 * Due to a HW issue on BXT A stepping, GPU stores via a
4444 * snooped mapping may leave stale data in a corresponding CPU
4445 * cacheline, whereas normally such cachelines would get
4446 * invalidated.
4447 */
4448 if (IS_BROXTON(dev) && INTEL_REVID(dev) < BXT_REVID_B0)
4449 return -ENODEV;
4450
4451 level = I915_CACHE_LLC;
4452 break;
4453 case I915_CACHING_DISPLAY:
4454 level = HAS_WT(dev) ? I915_CACHE_WT : I915_CACHE_NONE;
4455 break;
4456 default:
4457 return -EINVAL;
4458 }
4459
4460 intel_runtime_pm_get(dev_priv);
4461
4462 ret = i915_mutex_lock_interruptible(dev);
4463 if (ret)
4464 goto rpm_put;
4465
4466 gobj = drm_gem_object_lookup(dev, file, args->handle);
4467 if (gobj == NULL) {
4468 ret = -ENOENT;
4469 goto unlock;
4470 }
4471 obj = to_intel_bo(gobj);
4472
4473 ret = i915_gem_object_set_cache_level(obj, level);
4474
4475 drm_gem_object_unreference(&obj->base);
4476 unlock:
4477 mutex_unlock(&dev->struct_mutex);
4478 rpm_put:
4479 intel_runtime_pm_put(dev_priv);
4480
4481 return ret;
4482 }
4483
4484 /*
4485 * Prepare buffer for display plane (scanout, cursors, etc).
4486 * Can be called from an uninterruptible phase (modesetting) and allows
4487 * any flushes to be pipelined (for pageflips).
4488 */
4489 int
4490 i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
4491 u32 alignment,
4492 struct intel_engine_cs *pipelined,
4493 struct drm_i915_gem_request **pipelined_request,
4494 const struct i915_ggtt_view *view)
4495 {
4496 u32 old_read_domains, old_write_domain;
4497 int ret;
4498
4499 ret = i915_gem_object_sync(obj, pipelined, pipelined_request);
4500 if (ret)
4501 return ret;
4502
4503 /* Mark the pin_display early so that we account for the
4504 * display coherency whilst setting up the cache domains.
4505 */
4506 obj->pin_display++;
4507
4508 /* The display engine is not coherent with the LLC cache on gen6. As
4509 * a result, we make sure that the pinning that is about to occur is
4510 * done with uncached PTEs. This is lowest common denominator for all
4511 * chipsets.
4512 *
4513 * However for gen6+, we could do better by using the GFDT bit instead
4514 * of uncaching, which would allow us to flush all the LLC-cached data
4515 * with that bit in the PTE to main memory with just one PIPE_CONTROL.
4516 */
4517 ret = i915_gem_object_set_cache_level(obj,
4518 HAS_WT(obj->base.dev) ? I915_CACHE_WT : I915_CACHE_NONE);
4519 if (ret)
4520 goto err_unpin_display;
4521
4522 /* As the user may map the buffer once pinned in the display plane
4523 * (e.g. libkms for the bootup splash), we have to ensure that we
4524 * always use map_and_fenceable for all scanout buffers.
4525 */
4526 ret = i915_gem_object_ggtt_pin(obj, view, alignment,
4527 view->type == I915_GGTT_VIEW_NORMAL ?
4528 PIN_MAPPABLE : 0);
4529 if (ret)
4530 goto err_unpin_display;
4531
4532 i915_gem_object_flush_cpu_write_domain(obj);
4533
4534 old_write_domain = obj->base.write_domain;
4535 old_read_domains = obj->base.read_domains;
4536
4537 /* It should now be out of any other write domains, and we can update
4538 * the domain values for our changes.
4539 */
4540 obj->base.write_domain = 0;
4541 obj->base.read_domains |= I915_GEM_DOMAIN_GTT;
4542
4543 trace_i915_gem_object_change_domain(obj,
4544 old_read_domains,
4545 old_write_domain);
4546
4547 return 0;
4548
4549 err_unpin_display:
4550 obj->pin_display--;
4551 return ret;
4552 }
4553
4554 void
4555 i915_gem_object_unpin_from_display_plane(struct drm_i915_gem_object *obj,
4556 const struct i915_ggtt_view *view)
4557 {
4558 if (WARN_ON(obj->pin_display == 0))
4559 return;
4560
4561 i915_gem_object_ggtt_unpin_view(obj, view);
4562
4563 obj->pin_display--;
4564 }
4565
4566 /**
4567 * Moves a single object to the CPU read, and possibly write domain.
4568 *
4569 * This function returns when the move is complete, including waiting on
4570 * flushes to occur.
4571 */
4572 int
4573 i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write)
4574 {
4575 uint32_t old_write_domain, old_read_domains;
4576 int ret;
4577
4578 if (obj->base.write_domain == I915_GEM_DOMAIN_CPU)
4579 return 0;
4580
4581 ret = i915_gem_object_wait_rendering(obj, !write);
4582 if (ret)
4583 return ret;
4584
4585 i915_gem_object_flush_gtt_write_domain(obj);
4586
4587 old_write_domain = obj->base.write_domain;
4588 old_read_domains = obj->base.read_domains;
4589
4590 /* Flush the CPU cache if it's still invalid. */
4591 if ((obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0) {
4592 i915_gem_clflush_object(obj, false);
4593
4594 obj->base.read_domains |= I915_GEM_DOMAIN_CPU;
4595 }
4596
4597 /* It should now be out of any other write domains, and we can update
4598 * the domain values for our changes.
4599 */
4600 BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_CPU) != 0);
4601
4602 /* If we're writing through the CPU, then the GPU read domains will
4603 * need to be invalidated at next use.
4604 */
4605 if (write) {
4606 obj->base.read_domains = I915_GEM_DOMAIN_CPU;
4607 obj->base.write_domain = I915_GEM_DOMAIN_CPU;
4608 }
4609
4610 trace_i915_gem_object_change_domain(obj,
4611 old_read_domains,
4612 old_write_domain);
4613
4614 return 0;
4615 }
4616
4617 /* Throttle our rendering by waiting until the ring has completed our requests
4618 * emitted over 20 msec ago.
4619 *
4620 * Note that if we were to use the current jiffies each time around the loop,
4621 * we wouldn't escape the function with any frames outstanding if the time to
4622 * render a frame was over 20ms.
4623 *
4624 * This should get us reasonable parallelism between CPU and GPU but also
4625 * relatively low latency when blocking on a particular request to finish.
4626 */
4627 static int
4628 i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
4629 {
4630 struct drm_i915_private *dev_priv = dev->dev_private;
4631 struct drm_i915_file_private *file_priv = file->driver_priv;
4632 unsigned long recent_enough = jiffies - DRM_I915_THROTTLE_JIFFIES;
4633 struct drm_i915_gem_request *request, *target = NULL;
4634 unsigned reset_counter;
4635 int ret;
4636
4637 ret = i915_gem_wait_for_error(&dev_priv->gpu_error);
4638 if (ret)
4639 return ret;
4640
4641 ret = i915_gem_check_wedge(&dev_priv->gpu_error, false);
4642 if (ret)
4643 return ret;
4644
4645 spin_lock(&file_priv->mm.lock);
4646 list_for_each_entry(request, &file_priv->mm.request_list, client_list) {
4647 if (time_after_eq(request->emitted_jiffies, recent_enough))
4648 break;
4649
4650 /*
4651 * Note that the request might not have been submitted yet.
4652 * In which case emitted_jiffies will be zero.
4653 */
4654 if (!request->emitted_jiffies)
4655 continue;
4656
4657 target = request;
4658 }
4659 reset_counter = atomic_read(&dev_priv->gpu_error.reset_counter);
4660 if (target)
4661 i915_gem_request_reference(target);
4662 spin_unlock(&file_priv->mm.lock);
4663
4664 if (target == NULL)
4665 return 0;
4666
4667 ret = __i915_wait_request(target, reset_counter, true, NULL, NULL);
4668 if (ret == 0)
4669 queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, 0);
4670
4671 i915_gem_request_unreference__unlocked(target);
4672
4673 return ret;
4674 }
4675
4676 static bool
4677 i915_vma_misplaced(struct i915_vma *vma, uint32_t alignment, uint64_t flags)
4678 {
4679 struct drm_i915_gem_object *obj = vma->obj;
4680
4681 if (alignment &&
4682 vma->node.start & (alignment - 1))
4683 return true;
4684
4685 if (flags & PIN_MAPPABLE && !obj->map_and_fenceable)
4686 return true;
4687
4688 if (flags & PIN_OFFSET_BIAS &&
4689 vma->node.start < (flags & PIN_OFFSET_MASK))
4690 return true;
4691
4692 return false;
4693 }
4694
4695 void __i915_vma_set_map_and_fenceable(struct i915_vma *vma)
4696 {
4697 struct drm_i915_gem_object *obj = vma->obj;
4698 bool mappable, fenceable;
4699 u32 fence_size, fence_alignment;
4700
4701 fence_size = i915_gem_get_gtt_size(obj->base.dev,
4702 obj->base.size,
4703 obj->tiling_mode);
4704 fence_alignment = i915_gem_get_gtt_alignment(obj->base.dev,
4705 obj->base.size,
4706 obj->tiling_mode,
4707 true);
4708
4709 fenceable = (vma->node.size == fence_size &&
4710 (vma->node.start & (fence_alignment - 1)) == 0);
4711
4712 mappable = (vma->node.start + fence_size <=
4713 to_i915(obj->base.dev)->gtt.mappable_end);
4714
4715 obj->map_and_fenceable = mappable && fenceable;
4716 }
4717
4718 static int
4719 i915_gem_object_do_pin(struct drm_i915_gem_object *obj,
4720 struct i915_address_space *vm,
4721 const struct i915_ggtt_view *ggtt_view,
4722 uint32_t alignment,
4723 uint64_t flags)
4724 {
4725 struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
4726 struct i915_vma *vma;
4727 unsigned bound;
4728 int ret;
4729
4730 if (WARN_ON(vm == &dev_priv->mm.aliasing_ppgtt->base))
4731 return -ENODEV;
4732
4733 if (WARN_ON(flags & (PIN_GLOBAL | PIN_MAPPABLE) && !i915_is_ggtt(vm)))
4734 return -EINVAL;
4735
4736 if (WARN_ON((flags & (PIN_MAPPABLE | PIN_GLOBAL)) == PIN_MAPPABLE))
4737 return -EINVAL;
4738
4739 if (WARN_ON(i915_is_ggtt(vm) != !!ggtt_view))
4740 return -EINVAL;
4741
4742 vma = ggtt_view ? i915_gem_obj_to_ggtt_view(obj, ggtt_view) :
4743 i915_gem_obj_to_vma(obj, vm);
4744
4745 if (IS_ERR(vma))
4746 return PTR_ERR(vma);
4747
4748 if (vma) {
4749 if (WARN_ON(vma->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT))
4750 return -EBUSY;
4751
4752 if (i915_vma_misplaced(vma, alignment, flags)) {
4753 WARN(vma->pin_count,
4754 "bo is already pinned in %s with incorrect alignment:"
4755 " offset=%08x %08x, req.alignment=%x, req.map_and_fenceable=%d,"
4756 " obj->map_and_fenceable=%d\n",
4757 ggtt_view ? "ggtt" : "ppgtt",
4758 upper_32_bits(vma->node.start),
4759 lower_32_bits(vma->node.start),
4760 alignment,
4761 !!(flags & PIN_MAPPABLE),
4762 obj->map_and_fenceable);
4763 ret = i915_vma_unbind(vma);
4764 if (ret)
4765 return ret;
4766
4767 vma = NULL;
4768 }
4769 }
4770
4771 bound = vma ? vma->bound : 0;
4772 if (vma == NULL || !drm_mm_node_allocated(&vma->node)) {
4773 vma = i915_gem_object_bind_to_vm(obj, vm, ggtt_view, alignment,
4774 flags);
4775 if (IS_ERR(vma))
4776 return PTR_ERR(vma);
4777 } else {
4778 ret = i915_vma_bind(vma, obj->cache_level, flags);
4779 if (ret)
4780 return ret;
4781 }
4782
4783 if (ggtt_view && ggtt_view->type == I915_GGTT_VIEW_NORMAL &&
4784 (bound ^ vma->bound) & GLOBAL_BIND) {
4785 __i915_vma_set_map_and_fenceable(vma);
4786 WARN_ON(flags & PIN_MAPPABLE && !obj->map_and_fenceable);
4787 }
4788
4789 vma->pin_count++;
4790 return 0;
4791 }
4792
4793 int
4794 i915_gem_object_pin(struct drm_i915_gem_object *obj,
4795 struct i915_address_space *vm,
4796 uint32_t alignment,
4797 uint64_t flags)
4798 {
4799 return i915_gem_object_do_pin(obj, vm,
4800 i915_is_ggtt(vm) ? &i915_ggtt_view_normal : NULL,
4801 alignment, flags);
4802 }
4803
4804 int
4805 i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
4806 const struct i915_ggtt_view *view,
4807 uint32_t alignment,
4808 uint64_t flags)
4809 {
4810 if (WARN_ONCE(!view, "no view specified"))
4811 return -EINVAL;
4812
4813 return i915_gem_object_do_pin(obj, i915_obj_to_ggtt(obj), view,
4814 alignment, flags | PIN_GLOBAL);
4815 }
4816
4817 void
4818 i915_gem_object_ggtt_unpin_view(struct drm_i915_gem_object *obj,
4819 const struct i915_ggtt_view *view)
4820 {
4821 struct i915_vma *vma = i915_gem_obj_to_ggtt_view(obj, view);
4822
4823 BUG_ON(!vma);
4824 WARN_ON(vma->pin_count == 0);
4825 WARN_ON(!i915_gem_obj_ggtt_bound_view(obj, view));
4826
4827 --vma->pin_count;
4828 }
4829
4830 int
4831 i915_gem_busy_ioctl(struct drm_device *dev, void *data,
4832 struct drm_file *file)
4833 {
4834 struct drm_i915_gem_busy *args = data;
4835 struct drm_gem_object *gobj;
4836 struct drm_i915_gem_object *obj;
4837 int ret;
4838
4839 ret = i915_mutex_lock_interruptible(dev);
4840 if (ret)
4841 return ret;
4842
4843 gobj = drm_gem_object_lookup(dev, file, args->handle);
4844 if (gobj == NULL) {
4845 ret = -ENOENT;
4846 goto unlock;
4847 }
4848 obj = to_intel_bo(gobj);
4849
4850 /* Count all active objects as busy, even if they are currently not used
4851 * by the gpu. Users of this interface expect objects to eventually
4852 * become non-busy without any further actions, therefore emit any
4853 * necessary flushes here.
4854 */
4855 ret = i915_gem_object_flush_active(obj);
4856 if (ret)
4857 goto unref;
4858
4859 BUILD_BUG_ON(I915_NUM_RINGS > 16);
4860 args->busy = obj->active << 16;
4861 if (obj->last_write_req)
4862 args->busy |= obj->last_write_req->ring->id;
4863
4864 unref:
4865 drm_gem_object_unreference(&obj->base);
4866 unlock:
4867 mutex_unlock(&dev->struct_mutex);
4868 return ret;
4869 }
4870
4871 int
4872 i915_gem_throttle_ioctl(struct drm_device *dev, void *data,
4873 struct drm_file *file_priv)
4874 {
4875 return i915_gem_ring_throttle(dev, file_priv);
4876 }
4877
4878 int
4879 i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
4880 struct drm_file *file_priv)
4881 {
4882 struct drm_i915_private *dev_priv = dev->dev_private;
4883 struct drm_i915_gem_madvise *args = data;
4884 struct drm_gem_object *gobj;
4885 struct drm_i915_gem_object *obj;
4886 int ret;
4887
4888 switch (args->madv) {
4889 case I915_MADV_DONTNEED:
4890 case I915_MADV_WILLNEED:
4891 break;
4892 default:
4893 return -EINVAL;
4894 }
4895
4896 ret = i915_mutex_lock_interruptible(dev);
4897 if (ret)
4898 return ret;
4899
4900 gobj = drm_gem_object_lookup(dev, file_priv, args->handle);
4901 if (gobj == NULL) {
4902 ret = -ENOENT;
4903 goto unlock;
4904 }
4905 obj = to_intel_bo(gobj);
4906
4907 if (i915_gem_obj_is_pinned(obj)) {
4908 ret = -EINVAL;
4909 goto out;
4910 }
4911
4912 if (obj->pages &&
4913 obj->tiling_mode != I915_TILING_NONE &&
4914 dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES) {
4915 if (obj->madv == I915_MADV_WILLNEED)
4916 i915_gem_object_unpin_pages(obj);
4917 if (args->madv == I915_MADV_WILLNEED)
4918 i915_gem_object_pin_pages(obj);
4919 }
4920
4921 if (obj->madv != __I915_MADV_PURGED)
4922 obj->madv = args->madv;
4923
4924 /* if the object is no longer attached, discard its backing storage */
4925 if (obj->madv == I915_MADV_DONTNEED && obj->pages == NULL)
4926 i915_gem_object_truncate(obj);
4927
4928 args->retained = obj->madv != __I915_MADV_PURGED;
4929
4930 out:
4931 drm_gem_object_unreference(&obj->base);
4932 unlock:
4933 mutex_unlock(&dev->struct_mutex);
4934 return ret;
4935 }
4936
4937 void i915_gem_object_init(struct drm_i915_gem_object *obj,
4938 const struct drm_i915_gem_object_ops *ops)
4939 {
4940 int i;
4941
4942 INIT_LIST_HEAD(&obj->global_list);
4943 for (i = 0; i < I915_NUM_RINGS; i++)
4944 INIT_LIST_HEAD(&obj->ring_list[i]);
4945 INIT_LIST_HEAD(&obj->obj_exec_link);
4946 INIT_LIST_HEAD(&obj->vma_list);
4947 INIT_LIST_HEAD(&obj->batch_pool_link);
4948
4949 obj->ops = ops;
4950
4951 obj->fence_reg = I915_FENCE_REG_NONE;
4952 obj->madv = I915_MADV_WILLNEED;
4953
4954 i915_gem_info_add_obj(obj->base.dev->dev_private, obj->base.size);
4955 }
4956
4957 static const struct drm_i915_gem_object_ops i915_gem_object_ops = {
4958 .get_pages = i915_gem_object_get_pages_gtt,
4959 .put_pages = i915_gem_object_put_pages_gtt,
4960 };
4961
4962 struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
4963 size_t size)
4964 {
4965 #ifdef __NetBSD__
4966 struct drm_i915_private *const dev_priv = dev->dev_private;
4967 #endif
4968 struct drm_i915_gem_object *obj;
4969 #ifndef __NetBSD__
4970 struct address_space *mapping;
4971 gfp_t mask;
4972 #endif
4973
4974 obj = i915_gem_object_alloc(dev);
4975 if (obj == NULL)
4976 return NULL;
4977
4978 if (drm_gem_object_init(dev, &obj->base, size) != 0) {
4979 i915_gem_object_free(obj);
4980 return NULL;
4981 }
4982
4983 #ifdef __NetBSD__
4984 uao_set_pgfl(obj->base.filp, dev_priv->gtt.pgfl);
4985 #else
4986 mask = GFP_HIGHUSER | __GFP_RECLAIMABLE;
4987 if (IS_CRESTLINE(dev) || IS_BROADWATER(dev)) {
4988 /* 965gm cannot relocate objects above 4GiB. */
4989 mask &= ~__GFP_HIGHMEM;
4990 mask |= __GFP_DMA32;
4991 }
4992
4993 mapping = file_inode(obj->base.filp)->i_mapping;
4994 mapping_set_gfp_mask(mapping, mask);
4995 #endif
4996
4997 i915_gem_object_init(obj, &i915_gem_object_ops);
4998
4999 obj->base.write_domain = I915_GEM_DOMAIN_CPU;
5000 obj->base.read_domains = I915_GEM_DOMAIN_CPU;
5001
5002 if (HAS_LLC(dev)) {
5003 /* On some devices, we can have the GPU use the LLC (the CPU
5004 * cache) for about a 10% performance improvement
5005 * compared to uncached. Graphics requests other than
5006 * display scanout are coherent with the CPU in
5007 * accessing this cache. This means in this mode we
5008 * don't need to clflush on the CPU side, and on the
5009 * GPU side we only need to flush internal caches to
5010 * get data visible to the CPU.
5011 *
5012 * However, we maintain the display planes as UC, and so
5013 * need to rebind when first used as such.
5014 */
5015 obj->cache_level = I915_CACHE_LLC;
5016 } else
5017 obj->cache_level = I915_CACHE_NONE;
5018
5019 trace_i915_gem_object_create(obj);
5020
5021 return obj;
5022 }
5023
5024 static bool discard_backing_storage(struct drm_i915_gem_object *obj)
5025 {
5026 /* If we are the last user of the backing storage (be it shmemfs
5027 * pages or stolen etc), we know that the pages are going to be
5028 * immediately released. In this case, we can then skip copying
5029 * back the contents from the GPU.
5030 */
5031
5032 if (obj->madv != I915_MADV_WILLNEED)
5033 return false;
5034
5035 if (obj->base.filp == NULL)
5036 return true;
5037
5038 /* At first glance, this looks racy, but then again so would be
5039 * userspace racing mmap against close. However, the first external
5040 * reference to the filp can only be obtained through the
5041 * i915_gem_mmap_ioctl() which safeguards us against the user
5042 * acquiring such a reference whilst we are in the middle of
5043 * freeing the object.
5044 */
5045 #ifdef __NetBSD__
5046 /* XXX This number might be a fencepost. */
5047 return obj->base.filp->uo_refs == 1;
5048 #else
5049 return atomic_long_read(&obj->base.filp->f_count) == 1;
5050 #endif
5051 }
5052
5053 void i915_gem_free_object(struct drm_gem_object *gem_obj)
5054 {
5055 struct drm_i915_gem_object *obj = to_intel_bo(gem_obj);
5056 struct drm_device *dev = obj->base.dev;
5057 struct drm_i915_private *dev_priv = dev->dev_private;
5058 struct i915_vma *vma, *next;
5059
5060 intel_runtime_pm_get(dev_priv);
5061
5062 trace_i915_gem_object_destroy(obj);
5063
5064 list_for_each_entry_safe(vma, next, &obj->vma_list, vma_link) {
5065 int ret;
5066
5067 vma->pin_count = 0;
5068 ret = i915_vma_unbind(vma);
5069 if (WARN_ON(ret == -ERESTARTSYS)) {
5070 bool was_interruptible;
5071
5072 was_interruptible = dev_priv->mm.interruptible;
5073 dev_priv->mm.interruptible = false;
5074
5075 WARN_ON(i915_vma_unbind(vma));
5076
5077 dev_priv->mm.interruptible = was_interruptible;
5078 }
5079 }
5080
5081 /* Stolen objects don't hold a ref, but do hold pin count. Fix that up
5082 * before progressing. */
5083 if (obj->stolen)
5084 i915_gem_object_unpin_pages(obj);
5085
5086 WARN_ON(obj->frontbuffer_bits);
5087
5088 if (obj->pages && obj->madv == I915_MADV_WILLNEED &&
5089 dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES &&
5090 obj->tiling_mode != I915_TILING_NONE)
5091 i915_gem_object_unpin_pages(obj);
5092
5093 if (WARN_ON(obj->pages_pin_count))
5094 obj->pages_pin_count = 0;
5095 if (discard_backing_storage(obj))
5096 obj->madv = I915_MADV_DONTNEED;
5097 i915_gem_object_put_pages(obj);
5098 i915_gem_object_free_mmap_offset(obj);
5099
5100 BUG_ON(obj->pages);
5101
5102 #ifndef __NetBSD__ /* XXX drm prime */
5103 if (obj->base.import_attach)
5104 drm_prime_gem_destroy(&obj->base, NULL);
5105 #endif
5106
5107 if (obj->ops->release)
5108 obj->ops->release(obj);
5109
5110 drm_gem_object_release(&obj->base);
5111 i915_gem_info_remove_obj(dev_priv, obj->base.size);
5112
5113 kfree(obj->bit_17);
5114 i915_gem_object_free(obj);
5115
5116 intel_runtime_pm_put(dev_priv);
5117 }
5118
5119 struct i915_vma *i915_gem_obj_to_vma(struct drm_i915_gem_object *obj,
5120 struct i915_address_space *vm)
5121 {
5122 struct i915_vma *vma;
5123 list_for_each_entry(vma, &obj->vma_list, vma_link) {
5124 if (i915_is_ggtt(vma->vm) &&
5125 vma->ggtt_view.type != I915_GGTT_VIEW_NORMAL)
5126 continue;
5127 if (vma->vm == vm)
5128 return vma;
5129 }
5130 return NULL;
5131 }
5132
5133 struct i915_vma *i915_gem_obj_to_ggtt_view(struct drm_i915_gem_object *obj,
5134 const struct i915_ggtt_view *view)
5135 {
5136 struct i915_address_space *ggtt = i915_obj_to_ggtt(obj);
5137 struct i915_vma *vma;
5138
5139 if (WARN_ONCE(!view, "no view specified"))
5140 return ERR_PTR(-EINVAL);
5141
5142 list_for_each_entry(vma, &obj->vma_list, vma_link)
5143 if (vma->vm == ggtt &&
5144 i915_ggtt_view_equal(&vma->ggtt_view, view))
5145 return vma;
5146 return NULL;
5147 }
5148
5149 void i915_gem_vma_destroy(struct i915_vma *vma)
5150 {
5151 struct i915_address_space *vm = NULL;
5152 WARN_ON(vma->node.allocated);
5153
5154 /* Keep the vma as a placeholder in the execbuffer reservation lists */
5155 if (!list_empty(&vma->exec_list))
5156 return;
5157
5158 vm = vma->vm;
5159
5160 if (!i915_is_ggtt(vm))
5161 i915_ppgtt_put(i915_vm_to_ppgtt(vm));
5162
5163 list_del(&vma->vma_link);
5164
5165 kmem_cache_free(to_i915(vma->obj->base.dev)->vmas, vma);
5166 }
5167
5168 static void
5169 i915_gem_stop_ringbuffers(struct drm_device *dev)
5170 {
5171 struct drm_i915_private *dev_priv = dev->dev_private;
5172 struct intel_engine_cs *ring;
5173 int i;
5174
5175 for_each_ring(ring, dev_priv, i)
5176 dev_priv->gt.stop_ring(ring);
5177 }
5178
5179 int
5180 i915_gem_suspend(struct drm_device *dev)
5181 {
5182 struct drm_i915_private *dev_priv = dev->dev_private;
5183 int ret = 0;
5184
5185 mutex_lock(&dev->struct_mutex);
5186 ret = i915_gpu_idle(dev);
5187 if (ret)
5188 goto err;
5189
5190 i915_gem_retire_requests(dev);
5191
5192 i915_gem_stop_ringbuffers(dev);
5193 mutex_unlock(&dev->struct_mutex);
5194
5195 cancel_delayed_work_sync(&dev_priv->gpu_error.hangcheck_work);
5196 cancel_delayed_work_sync(&dev_priv->mm.retire_work);
5197 flush_delayed_work(&dev_priv->mm.idle_work);
5198
5199 /* Assert that we sucessfully flushed all the work and
5200 * reset the GPU back to its idle, low power state.
5201 */
5202 WARN_ON(dev_priv->mm.busy);
5203
5204 return 0;
5205
5206 err:
5207 mutex_unlock(&dev->struct_mutex);
5208 return ret;
5209 }
5210
5211 int i915_gem_l3_remap(struct drm_i915_gem_request *req, int slice)
5212 {
5213 struct intel_engine_cs *ring = req->ring;
5214 struct drm_device *dev = ring->dev;
5215 struct drm_i915_private *dev_priv = dev->dev_private;
5216 u32 reg_base = GEN7_L3LOG_BASE + (slice * 0x200);
5217 u32 *remap_info = dev_priv->l3_parity.remap_info[slice];
5218 int i, ret;
5219
5220 if (!HAS_L3_DPF(dev) || !remap_info)
5221 return 0;
5222
5223 ret = intel_ring_begin(req, GEN7_L3LOG_SIZE / 4 * 3);
5224 if (ret)
5225 return ret;
5226
5227 /*
5228 * Note: We do not worry about the concurrent register cacheline hang
5229 * here because no other code should access these registers other than
5230 * at initialization time.
5231 */
5232 for (i = 0; i < GEN7_L3LOG_SIZE; i += 4) {
5233 intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
5234 intel_ring_emit(ring, reg_base + i);
5235 intel_ring_emit(ring, remap_info[i/4]);
5236 }
5237
5238 intel_ring_advance(ring);
5239
5240 return ret;
5241 }
5242
5243 void i915_gem_init_swizzling(struct drm_device *dev)
5244 {
5245 struct drm_i915_private *dev_priv = dev->dev_private;
5246
5247 if (INTEL_INFO(dev)->gen < 5 ||
5248 dev_priv->mm.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_NONE)
5249 return;
5250
5251 I915_WRITE(DISP_ARB_CTL, I915_READ(DISP_ARB_CTL) |
5252 DISP_TILE_SURFACE_SWIZZLING);
5253
5254 if (IS_GEN5(dev))
5255 return;
5256
5257 I915_WRITE(TILECTL, I915_READ(TILECTL) | TILECTL_SWZCTL);
5258 if (IS_GEN6(dev))
5259 I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_SNB));
5260 else if (IS_GEN7(dev))
5261 I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_IVB));
5262 else if (IS_GEN8(dev))
5263 I915_WRITE(GAMTARBMODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_BDW));
5264 else
5265 BUG();
5266 }
5267
5268 static void init_unused_ring(struct drm_device *dev, u32 base)
5269 {
5270 struct drm_i915_private *dev_priv = dev->dev_private;
5271
5272 I915_WRITE(RING_CTL(base), 0);
5273 I915_WRITE(RING_HEAD(base), 0);
5274 I915_WRITE(RING_TAIL(base), 0);
5275 I915_WRITE(RING_START(base), 0);
5276 }
5277
5278 static void init_unused_rings(struct drm_device *dev)
5279 {
5280 if (IS_I830(dev)) {
5281 init_unused_ring(dev, PRB1_BASE);
5282 init_unused_ring(dev, SRB0_BASE);
5283 init_unused_ring(dev, SRB1_BASE);
5284 init_unused_ring(dev, SRB2_BASE);
5285 init_unused_ring(dev, SRB3_BASE);
5286 } else if (IS_GEN2(dev)) {
5287 init_unused_ring(dev, SRB0_BASE);
5288 init_unused_ring(dev, SRB1_BASE);
5289 } else if (IS_GEN3(dev)) {
5290 init_unused_ring(dev, PRB1_BASE);
5291 init_unused_ring(dev, PRB2_BASE);
5292 }
5293 }
5294
5295 int i915_gem_init_rings(struct drm_device *dev)
5296 {
5297 struct drm_i915_private *dev_priv = dev->dev_private;
5298 int ret;
5299
5300 ret = intel_init_render_ring_buffer(dev);
5301 if (ret)
5302 return ret;
5303
5304 if (HAS_BSD(dev)) {
5305 ret = intel_init_bsd_ring_buffer(dev);
5306 if (ret)
5307 goto cleanup_render_ring;
5308 }
5309
5310 if (HAS_BLT(dev)) {
5311 ret = intel_init_blt_ring_buffer(dev);
5312 if (ret)
5313 goto cleanup_bsd_ring;
5314 }
5315
5316 if (HAS_VEBOX(dev)) {
5317 ret = intel_init_vebox_ring_buffer(dev);
5318 if (ret)
5319 goto cleanup_blt_ring;
5320 }
5321
5322 if (HAS_BSD2(dev)) {
5323 ret = intel_init_bsd2_ring_buffer(dev);
5324 if (ret)
5325 goto cleanup_vebox_ring;
5326 }
5327
5328 return 0;
5329
5330 cleanup_vebox_ring:
5331 intel_cleanup_ring_buffer(&dev_priv->ring[VECS]);
5332 cleanup_blt_ring:
5333 intel_cleanup_ring_buffer(&dev_priv->ring[BCS]);
5334 cleanup_bsd_ring:
5335 intel_cleanup_ring_buffer(&dev_priv->ring[VCS]);
5336 cleanup_render_ring:
5337 intel_cleanup_ring_buffer(&dev_priv->ring[RCS]);
5338
5339 return ret;
5340 }
5341
5342 int
5343 i915_gem_init_hw(struct drm_device *dev)
5344 {
5345 struct drm_i915_private *dev_priv = dev->dev_private;
5346 struct intel_engine_cs *ring;
5347 int ret, i, j;
5348
5349 if (INTEL_INFO(dev)->gen < 6 && !intel_enable_gtt())
5350 return -EIO;
5351
5352 /* Double layer security blanket, see i915_gem_init() */
5353 intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
5354
5355 if (dev_priv->ellc_size)
5356 I915_WRITE(HSW_IDICR, I915_READ(HSW_IDICR) | IDIHASHMSK(0xf));
5357
5358 if (IS_HASWELL(dev))
5359 I915_WRITE(MI_PREDICATE_RESULT_2, IS_HSW_GT3(dev) ?
5360 LOWER_SLICE_ENABLED : LOWER_SLICE_DISABLED);
5361
5362 if (HAS_PCH_NOP(dev)) {
5363 if (IS_IVYBRIDGE(dev)) {
5364 u32 temp = I915_READ(GEN7_MSG_CTL);
5365 temp &= ~(WAIT_FOR_PCH_FLR_ACK | WAIT_FOR_PCH_RESET_ACK);
5366 I915_WRITE(GEN7_MSG_CTL, temp);
5367 } else if (INTEL_INFO(dev)->gen >= 7) {
5368 u32 temp = I915_READ(HSW_NDE_RSTWRN_OPT);
5369 temp &= ~RESET_PCH_HANDSHAKE_ENABLE;
5370 I915_WRITE(HSW_NDE_RSTWRN_OPT, temp);
5371 }
5372 }
5373
5374 i915_gem_init_swizzling(dev);
5375
5376 /*
5377 * At least 830 can leave some of the unused rings
5378 * "active" (ie. head != tail) after resume which
5379 * will prevent c3 entry. Makes sure all unused rings
5380 * are totally idle.
5381 */
5382 init_unused_rings(dev);
5383
5384 BUG_ON(!dev_priv->ring[RCS].default_context);
5385
5386 ret = i915_ppgtt_init_hw(dev);
5387 if (ret) {
5388 DRM_ERROR("PPGTT enable HW failed %d\n", ret);
5389 goto out;
5390 }
5391
5392 /* Need to do basic initialisation of all rings first: */
5393 for_each_ring(ring, dev_priv, i) {
5394 ret = ring->init_hw(ring);
5395 if (ret)
5396 goto out;
5397 }
5398
5399 /* We can't enable contexts until all firmware is loaded */
5400 if (HAS_GUC_UCODE(dev)) {
5401 ret = intel_guc_ucode_load(dev);
5402 if (ret) {
5403 /*
5404 * If we got an error and GuC submission is enabled, map
5405 * the error to -EIO so the GPU will be declared wedged.
5406 * OTOH, if we didn't intend to use the GuC anyway, just
5407 * discard the error and carry on.
5408 */
5409 DRM_ERROR("Failed to initialize GuC, error %d%s\n", ret,
5410 i915.enable_guc_submission ? "" :
5411 " (ignored)");
5412 ret = i915.enable_guc_submission ? -EIO : 0;
5413 if (ret)
5414 goto out;
5415 }
5416 }
5417
5418 /*
5419 * Increment the next seqno by 0x100 so we have a visible break
5420 * on re-initialisation
5421 */
5422 ret = i915_gem_set_seqno(dev, dev_priv->next_seqno+0x100);
5423 if (ret)
5424 goto out;
5425
5426 /* Now it is safe to go back round and do everything else: */
5427 for_each_ring(ring, dev_priv, i) {
5428 struct drm_i915_gem_request *req;
5429
5430 WARN_ON(!ring->default_context);
5431
5432 ret = i915_gem_request_alloc(ring, ring->default_context, &req);
5433 if (ret) {
5434 i915_gem_cleanup_ringbuffer(dev);
5435 goto out;
5436 }
5437
5438 if (ring->id == RCS) {
5439 for (j = 0; j < NUM_L3_SLICES(dev); j++)
5440 i915_gem_l3_remap(req, j);
5441 }
5442
5443 ret = i915_ppgtt_init_ring(req);
5444 if (ret && ret != -EIO) {
5445 DRM_ERROR("PPGTT enable ring #%d failed %d\n", i, ret);
5446 i915_gem_request_cancel(req);
5447 i915_gem_cleanup_ringbuffer(dev);
5448 goto out;
5449 }
5450
5451 ret = i915_gem_context_enable(req);
5452 if (ret && ret != -EIO) {
5453 DRM_ERROR("Context enable ring #%d failed %d\n", i, ret);
5454 i915_gem_request_cancel(req);
5455 i915_gem_cleanup_ringbuffer(dev);
5456 goto out;
5457 }
5458
5459 i915_add_request_no_flush(req);
5460 }
5461
5462 out:
5463 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
5464 return ret;
5465 }
5466
5467 int i915_gem_init(struct drm_device *dev)
5468 {
5469 struct drm_i915_private *dev_priv = dev->dev_private;
5470 int ret;
5471
5472 i915.enable_execlists = intel_sanitize_enable_execlists(dev,
5473 i915.enable_execlists);
5474
5475 idr_preload(GFP_KERNEL); /* gem context */
5476 mutex_lock(&dev->struct_mutex);
5477
5478 if (IS_VALLEYVIEW(dev)) {
5479 /* VLVA0 (potential hack), BIOS isn't actually waking us */
5480 I915_WRITE(VLV_GTLC_WAKE_CTRL, VLV_GTLC_ALLOWWAKEREQ);
5481 if (wait_for((I915_READ(VLV_GTLC_PW_STATUS) &
5482 VLV_GTLC_ALLOWWAKEACK), 10))
5483 DRM_DEBUG_DRIVER("allow wake ack timed out\n");
5484 }
5485
5486 if (!i915.enable_execlists) {
5487 dev_priv->gt.execbuf_submit = i915_gem_ringbuffer_submission;
5488 dev_priv->gt.init_rings = i915_gem_init_rings;
5489 dev_priv->gt.cleanup_ring = intel_cleanup_ring_buffer;
5490 dev_priv->gt.stop_ring = intel_stop_ring_buffer;
5491 } else {
5492 dev_priv->gt.execbuf_submit = intel_execlists_submission;
5493 dev_priv->gt.init_rings = intel_logical_rings_init;
5494 dev_priv->gt.cleanup_ring = intel_logical_ring_cleanup;
5495 dev_priv->gt.stop_ring = intel_logical_ring_stop;
5496 }
5497
5498 /* This is just a security blanket to placate dragons.
5499 * On some systems, we very sporadically observe that the first TLBs
5500 * used by the CS may be stale, despite us poking the TLB reset. If
5501 * we hold the forcewake during initialisation these problems
5502 * just magically go away.
5503 */
5504 intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
5505
5506 ret = i915_gem_init_userptr(dev);
5507 if (ret)
5508 goto out_unlock;
5509
5510 i915_gem_init_global_gtt(dev);
5511
5512 ret = i915_gem_context_init(dev);
5513 if (ret)
5514 goto out_unlock;
5515
5516 ret = dev_priv->gt.init_rings(dev);
5517 if (ret)
5518 goto out_unlock;
5519
5520 ret = i915_gem_init_hw(dev);
5521 if (ret == -EIO) {
5522 /* Allow ring initialisation to fail by marking the GPU as
5523 * wedged. But we only want to do this where the GPU is angry,
5524 * for all other failure, such as an allocation failure, bail.
5525 */
5526 DRM_ERROR("Failed to initialize GPU, declaring it wedged\n");
5527 atomic_or(I915_WEDGED, &dev_priv->gpu_error.reset_counter);
5528 ret = 0;
5529 }
5530
5531 out_unlock:
5532 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
5533 mutex_unlock(&dev->struct_mutex);
5534 idr_preload_end();
5535
5536 return ret;
5537 }
5538
5539 void
5540 i915_gem_cleanup_ringbuffer(struct drm_device *dev)
5541 {
5542 struct drm_i915_private *dev_priv = dev->dev_private;
5543 struct intel_engine_cs *ring;
5544 int i;
5545
5546 for_each_ring(ring, dev_priv, i)
5547 dev_priv->gt.cleanup_ring(ring);
5548
5549 if (i915.enable_execlists)
5550 /*
5551 * Neither the BIOS, ourselves or any other kernel
5552 * expects the system to be in execlists mode on startup,
5553 * so we need to reset the GPU back to legacy mode.
5554 */
5555 intel_gpu_reset(dev);
5556 }
5557
5558 static void
5559 init_ring_lists(struct intel_engine_cs *ring)
5560 {
5561 INIT_LIST_HEAD(&ring->active_list);
5562 INIT_LIST_HEAD(&ring->request_list);
5563 }
5564
5565 void
5566 i915_gem_load(struct drm_device *dev)
5567 {
5568 struct drm_i915_private *dev_priv = dev->dev_private;
5569 int i;
5570
5571 dev_priv->objects =
5572 kmem_cache_create("i915_gem_object",
5573 sizeof(struct drm_i915_gem_object), 0,
5574 SLAB_HWCACHE_ALIGN,
5575 NULL);
5576 dev_priv->vmas =
5577 kmem_cache_create("i915_gem_vma",
5578 sizeof(struct i915_vma), 0,
5579 SLAB_HWCACHE_ALIGN,
5580 NULL);
5581 dev_priv->requests =
5582 kmem_cache_create("i915_gem_request",
5583 sizeof(struct drm_i915_gem_request), 0,
5584 SLAB_HWCACHE_ALIGN,
5585 NULL);
5586
5587 INIT_LIST_HEAD(&dev_priv->vm_list);
5588 INIT_LIST_HEAD(&dev_priv->context_list);
5589 INIT_LIST_HEAD(&dev_priv->mm.unbound_list);
5590 INIT_LIST_HEAD(&dev_priv->mm.bound_list);
5591 INIT_LIST_HEAD(&dev_priv->mm.fence_list);
5592 for (i = 0; i < I915_NUM_RINGS; i++)
5593 init_ring_lists(&dev_priv->ring[i]);
5594 for (i = 0; i < I915_MAX_NUM_FENCES; i++)
5595 INIT_LIST_HEAD(&dev_priv->fence_regs[i].lru_list);
5596 INIT_DELAYED_WORK(&dev_priv->mm.retire_work,
5597 i915_gem_retire_work_handler);
5598 INIT_DELAYED_WORK(&dev_priv->mm.idle_work,
5599 i915_gem_idle_work_handler);
5600 #ifdef __NetBSD__
5601 spin_lock_init(&dev_priv->gpu_error.reset_lock);
5602 DRM_INIT_WAITQUEUE(&dev_priv->gpu_error.reset_queue, "i915errst");
5603 #else
5604 init_waitqueue_head(&dev_priv->gpu_error.reset_queue);
5605 #endif
5606
5607 dev_priv->relative_constants_mode = I915_EXEC_CONSTANTS_REL_GENERAL;
5608
5609 if (INTEL_INFO(dev)->gen >= 7 && !IS_VALLEYVIEW(dev))
5610 dev_priv->num_fence_regs = 32;
5611 else if (INTEL_INFO(dev)->gen >= 4 || IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
5612 dev_priv->num_fence_regs = 16;
5613 else
5614 dev_priv->num_fence_regs = 8;
5615
5616 if (intel_vgpu_active(dev))
5617 dev_priv->num_fence_regs =
5618 I915_READ(vgtif_reg(avail_rs.fence_num));
5619
5620 /*
5621 * Set initial sequence number for requests.
5622 * Using this number allows the wraparound to happen early,
5623 * catching any obvious problems.
5624 */
5625 dev_priv->next_seqno = ((u32)~0 - 0x1100);
5626 dev_priv->last_seqno = ((u32)~0 - 0x1101);
5627
5628 /* Initialize fence registers to zero */
5629 INIT_LIST_HEAD(&dev_priv->mm.fence_list);
5630 i915_gem_restore_fences(dev);
5631
5632 i915_gem_detect_bit_6_swizzle(dev);
5633 #ifdef __NetBSD__
5634 DRM_INIT_WAITQUEUE(&dev_priv->pending_flip_queue, "i915flip");
5635 spin_lock_init(&dev_priv->pending_flip_lock);
5636 #else
5637 init_waitqueue_head(&dev_priv->pending_flip_queue);
5638 #endif
5639
5640 dev_priv->mm.interruptible = true;
5641
5642 i915_gem_shrinker_init(dev_priv);
5643 #ifdef __NetBSD__
5644 linux_mutex_init(&dev_priv->fb_tracking.lock);
5645 #else
5646 mutex_init(&dev_priv->fb_tracking.lock);
5647 #endif
5648 }
5649
5650 void i915_gem_release(struct drm_device *dev, struct drm_file *file)
5651 {
5652 struct drm_i915_file_private *file_priv = file->driver_priv;
5653
5654 /* Clean up our request list when the client is going away, so that
5655 * later retire_requests won't dereference our soon-to-be-gone
5656 * file_priv.
5657 */
5658 spin_lock(&file_priv->mm.lock);
5659 while (!list_empty(&file_priv->mm.request_list)) {
5660 struct drm_i915_gem_request *request;
5661
5662 request = list_first_entry(&file_priv->mm.request_list,
5663 struct drm_i915_gem_request,
5664 client_list);
5665 list_del(&request->client_list);
5666 request->file_priv = NULL;
5667 }
5668 spin_unlock(&file_priv->mm.lock);
5669
5670 if (!list_empty(&file_priv->rps.link)) {
5671 spin_lock(&to_i915(dev)->rps.client_lock);
5672 list_del(&file_priv->rps.link);
5673 spin_unlock(&to_i915(dev)->rps.client_lock);
5674 }
5675 }
5676
5677 int i915_gem_open(struct drm_device *dev, struct drm_file *file)
5678 {
5679 struct drm_i915_file_private *file_priv;
5680 int ret;
5681
5682 DRM_DEBUG_DRIVER("\n");
5683
5684 file_priv = kzalloc(sizeof(*file_priv), GFP_KERNEL);
5685 if (!file_priv)
5686 return -ENOMEM;
5687
5688 file->driver_priv = file_priv;
5689 file_priv->dev_priv = dev->dev_private;
5690 file_priv->file = file;
5691 INIT_LIST_HEAD(&file_priv->rps.link);
5692
5693 spin_lock_init(&file_priv->mm.lock);
5694 INIT_LIST_HEAD(&file_priv->mm.request_list);
5695
5696 ret = i915_gem_context_open(dev, file);
5697 if (ret)
5698 kfree(file_priv);
5699
5700 return ret;
5701 }
5702
5703 /**
5704 * i915_gem_track_fb - update frontbuffer tracking
5705 * @old: current GEM buffer for the frontbuffer slots
5706 * @new: new GEM buffer for the frontbuffer slots
5707 * @frontbuffer_bits: bitmask of frontbuffer slots
5708 *
5709 * This updates the frontbuffer tracking bits @frontbuffer_bits by clearing them
5710 * from @old and setting them in @new. Both @old and @new can be NULL.
5711 */
5712 void i915_gem_track_fb(struct drm_i915_gem_object *old,
5713 struct drm_i915_gem_object *new,
5714 unsigned frontbuffer_bits)
5715 {
5716 if (old) {
5717 WARN_ON(!mutex_is_locked(&old->base.dev->struct_mutex));
5718 WARN_ON(!(old->frontbuffer_bits & frontbuffer_bits));
5719 old->frontbuffer_bits &= ~frontbuffer_bits;
5720 }
5721
5722 if (new) {
5723 WARN_ON(!mutex_is_locked(&new->base.dev->struct_mutex));
5724 WARN_ON(new->frontbuffer_bits & frontbuffer_bits);
5725 new->frontbuffer_bits |= frontbuffer_bits;
5726 }
5727 }
5728
5729 /* All the new VM stuff */
5730 u64 i915_gem_obj_offset(struct drm_i915_gem_object *o,
5731 struct i915_address_space *vm)
5732 {
5733 struct drm_i915_private *dev_priv = o->base.dev->dev_private;
5734 struct i915_vma *vma;
5735
5736 WARN_ON(vm == &dev_priv->mm.aliasing_ppgtt->base);
5737
5738 list_for_each_entry(vma, &o->vma_list, vma_link) {
5739 if (i915_is_ggtt(vma->vm) &&
5740 vma->ggtt_view.type != I915_GGTT_VIEW_NORMAL)
5741 continue;
5742 if (vma->vm == vm)
5743 return vma->node.start;
5744 }
5745
5746 WARN(1, "%s vma for this object not found.\n",
5747 i915_is_ggtt(vm) ? "global" : "ppgtt");
5748 return -1;
5749 }
5750
5751 u64 i915_gem_obj_ggtt_offset_view(struct drm_i915_gem_object *o,
5752 const struct i915_ggtt_view *view)
5753 {
5754 struct i915_address_space *ggtt = i915_obj_to_ggtt(o);
5755 struct i915_vma *vma;
5756
5757 list_for_each_entry(vma, &o->vma_list, vma_link)
5758 if (vma->vm == ggtt &&
5759 i915_ggtt_view_equal(&vma->ggtt_view, view))
5760 return vma->node.start;
5761
5762 WARN(1, "global vma for this object not found. (view=%u)\n", view->type);
5763 return -1;
5764 }
5765
5766 bool i915_gem_obj_bound(struct drm_i915_gem_object *o,
5767 struct i915_address_space *vm)
5768 {
5769 struct i915_vma *vma;
5770
5771 list_for_each_entry(vma, &o->vma_list, vma_link) {
5772 if (i915_is_ggtt(vma->vm) &&
5773 vma->ggtt_view.type != I915_GGTT_VIEW_NORMAL)
5774 continue;
5775 if (vma->vm == vm && drm_mm_node_allocated(&vma->node))
5776 return true;
5777 }
5778
5779 return false;
5780 }
5781
5782 bool i915_gem_obj_ggtt_bound_view(struct drm_i915_gem_object *o,
5783 const struct i915_ggtt_view *view)
5784 {
5785 struct i915_address_space *ggtt = i915_obj_to_ggtt(o);
5786 struct i915_vma *vma;
5787
5788 list_for_each_entry(vma, &o->vma_list, vma_link)
5789 if (vma->vm == ggtt &&
5790 i915_ggtt_view_equal(&vma->ggtt_view, view) &&
5791 drm_mm_node_allocated(&vma->node))
5792 return true;
5793
5794 return false;
5795 }
5796
5797 bool i915_gem_obj_bound_any(struct drm_i915_gem_object *o)
5798 {
5799 struct i915_vma *vma;
5800
5801 list_for_each_entry(vma, &o->vma_list, vma_link)
5802 if (drm_mm_node_allocated(&vma->node))
5803 return true;
5804
5805 return false;
5806 }
5807
5808 unsigned long i915_gem_obj_size(struct drm_i915_gem_object *o,
5809 struct i915_address_space *vm)
5810 {
5811 struct drm_i915_private *dev_priv = o->base.dev->dev_private;
5812 struct i915_vma *vma;
5813
5814 WARN_ON(vm == &dev_priv->mm.aliasing_ppgtt->base);
5815
5816 BUG_ON(list_empty(&o->vma_list));
5817
5818 list_for_each_entry(vma, &o->vma_list, vma_link) {
5819 if (i915_is_ggtt(vma->vm) &&
5820 vma->ggtt_view.type != I915_GGTT_VIEW_NORMAL)
5821 continue;
5822 if (vma->vm == vm)
5823 return vma->node.size;
5824 }
5825 return 0;
5826 }
5827
5828 bool i915_gem_obj_is_pinned(struct drm_i915_gem_object *obj)
5829 {
5830 struct i915_vma *vma;
5831 list_for_each_entry(vma, &obj->vma_list, vma_link)
5832 if (vma->pin_count > 0)
5833 return true;
5834
5835 return false;
5836 }
5837
5838 /* Allocate a new GEM object and fill it with the supplied data */
5839 struct drm_i915_gem_object *
5840 i915_gem_object_create_from_data(struct drm_device *dev,
5841 const void *data, size_t size)
5842 {
5843 struct drm_i915_gem_object *obj;
5844 #ifdef __NetBSD__
5845 struct iovec iov = { .iov_base = __UNCONST(data), .iov_len = size };
5846 struct uio uio = {
5847 .uio_iov = &iov,
5848 .uio_iovcnt = 1,
5849 .uio_offset = 0,
5850 .uio_resid = size,
5851 .uio_rw = UIO_WRITE,
5852 };
5853 #else
5854 struct sg_table *sg;
5855 #endif
5856 size_t bytes;
5857 int ret;
5858
5859 obj = i915_gem_alloc_object(dev, round_up(size, PAGE_SIZE));
5860 if (IS_ERR_OR_NULL(obj))
5861 return obj;
5862
5863 ret = i915_gem_object_set_to_cpu_domain(obj, true);
5864 if (ret)
5865 goto fail;
5866
5867 ret = i915_gem_object_get_pages(obj);
5868 if (ret)
5869 goto fail;
5870
5871 i915_gem_object_pin_pages(obj);
5872 #ifdef __NetBSD__
5873 UIO_SETUP_SYSSPACE(&uio);
5874 /* XXX errno NetBSD->Linux */
5875 ret = -ubc_uiomove(obj->base.filp, &uio, size, UVM_ADV_NORMAL,
5876 UBC_WRITE);
5877 if (ret)
5878 goto fail;
5879 bytes = size - uio.uio_resid;
5880 #else
5881 sg = obj->pages;
5882 bytes = sg_copy_from_buffer(sg->sgl, sg->nents, (void *)data, size);
5883 #endif
5884 i915_gem_object_unpin_pages(obj);
5885
5886 if (WARN_ON(bytes != size)) {
5887 DRM_ERROR("Incomplete copy, wrote %zu of %zu", bytes, size);
5888 ret = -EFAULT;
5889 goto fail;
5890 }
5891
5892 return obj;
5893
5894 fail:
5895 drm_gem_object_unreference(&obj->base);
5896 return ERR_PTR(ret);
5897 }
5898