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