drm: Add linux/shmem_fs.h
[dragonfly.git] / sys / dev / drm / i915 / i915_gem.c
1 /*
2  * Copyright © 2008 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21  * IN THE SOFTWARE.
22  *
23  * Authors:
24  *    Eric Anholt <eric@anholt.net>
25  *
26  * Copyright (c) 2011 The FreeBSD Foundation
27  * All rights reserved.
28  *
29  * This software was developed by Konstantin Belousov under sponsorship from
30  * the FreeBSD Foundation.
31  *
32  * Redistribution and use in source and binary forms, with or without
33  * modification, are permitted provided that the following conditions
34  * are met:
35  * 1. Redistributions of source code must retain the above copyright
36  *    notice, this list of conditions and the following disclaimer.
37  * 2. Redistributions in binary form must reproduce the above copyright
38  *    notice, this list of conditions and the following disclaimer in the
39  *    documentation and/or other materials provided with the distribution.
40  *
41  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  *
53  */
54
55 #include <sys/resourcevar.h>
56 #include <sys/sfbuf.h>
57
58 #include <drm/drmP.h>
59 #include <drm/i915_drm.h>
60 #include "i915_drv.h"
61 #include "intel_drv.h"
62 #include <linux/shmem_fs.h>
63 #include <linux/completion.h>
64 #include <linux/highmem.h>
65 #include <linux/jiffies.h>
66 #include <linux/time.h>
67
68 static void i915_gem_object_flush_gtt_write_domain(struct drm_i915_gem_object *obj);
69 static void i915_gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj);
70 static __must_check int i915_gem_object_bind_to_gtt(struct drm_i915_gem_object *obj,
71                                                     unsigned alignment,
72                                                     bool map_and_fenceable,
73                                                     bool nonblocking);
74 static int i915_gem_phys_pwrite(struct drm_device *dev,
75                                 struct drm_i915_gem_object *obj,
76                                 struct drm_i915_gem_pwrite *args,
77                                 struct drm_file *file);
78
79 static void i915_gem_write_fence(struct drm_device *dev, int reg,
80                                  struct drm_i915_gem_object *obj);
81 static void i915_gem_object_update_fence(struct drm_i915_gem_object *obj,
82                                          struct drm_i915_fence_reg *fence,
83                                          bool enable);
84
85 static uint32_t i915_gem_get_gtt_size(struct drm_device *dev, uint32_t size,
86     int tiling_mode);
87 static uint32_t i915_gem_get_gtt_alignment(struct drm_device *dev,
88     uint32_t size, int tiling_mode);
89 static void i915_gem_object_finish_gtt(struct drm_i915_gem_object *obj);
90 static void i915_gem_object_truncate(struct drm_i915_gem_object *obj);
91
92 static inline void i915_gem_object_fence_lost(struct drm_i915_gem_object *obj)
93 {
94         if (obj->tiling_mode)
95                 i915_gem_release_mmap(obj);
96
97         /* As we do not have an associated fence register, we will force
98          * a tiling change if we ever need to acquire one.
99          */
100         obj->fence_dirty = false;
101         obj->fence_reg = I915_FENCE_REG_NONE;
102 }
103
104 static int i915_gem_object_is_purgeable(struct drm_i915_gem_object *obj);
105 static bool i915_gem_object_is_inactive(struct drm_i915_gem_object *obj);
106 static int i915_gem_object_needs_bit17_swizzle(struct drm_i915_gem_object *obj);
107 static void i915_gem_reset_fences(struct drm_device *dev);
108 static void i915_gem_lowmem(void *arg);
109
110 /* some bookkeeping */
111 static void i915_gem_info_add_obj(struct drm_i915_private *dev_priv,
112                                   size_t size)
113 {
114         dev_priv->mm.object_count++;
115         dev_priv->mm.object_memory += size;
116 }
117
118 static void i915_gem_info_remove_obj(struct drm_i915_private *dev_priv,
119                                      size_t size)
120 {
121         dev_priv->mm.object_count--;
122         dev_priv->mm.object_memory -= size;
123 }
124
125 static int
126 i915_gem_wait_for_error(struct drm_device *dev)
127 {
128         struct drm_i915_private *dev_priv = dev->dev_private;
129         struct completion *x = &dev_priv->error_completion;
130         int ret;
131
132         if (!atomic_read(&dev_priv->mm.wedged))
133                 return 0;
134
135         /*
136          * Only wait 10 seconds for the gpu reset to complete to avoid hanging
137          * userspace. If it takes that long something really bad is going on and
138          * we should simply try to bail out and fail as gracefully as possible.
139          */
140         ret = wait_for_completion_interruptible_timeout(x, 10*hz);
141         if (ret == 0) {
142                 DRM_ERROR("Timed out waiting for the gpu reset to complete\n");
143                 return -EIO;
144         } else if (ret < 0) {
145                 return ret;
146         }
147
148         if (atomic_read(&dev_priv->mm.wedged)) {
149                 /* GPU is hung, bump the completion count to account for
150                  * the token we just consumed so that we never hit zero and
151                  * end up waiting upon a subsequent completion event that
152                  * will never happen.
153                  */
154                 lockmgr(&x->wait.lock, LK_EXCLUSIVE);
155                 x->done++;
156                 lockmgr(&x->wait.lock, LK_RELEASE);
157         }
158         return 0;
159 }
160
161 int i915_mutex_lock_interruptible(struct drm_device *dev)
162 {
163         int ret;
164
165         ret = i915_gem_wait_for_error(dev);
166         if (ret)
167                 return ret;
168
169         ret = lockmgr(&dev->dev_struct_lock, LK_EXCLUSIVE|LK_SLEEPFAIL);
170         if (ret)
171                 return -EINTR;
172
173         WARN_ON(i915_verify_lists(dev));
174         return 0;
175 }
176
177 static inline bool
178 i915_gem_object_is_inactive(struct drm_i915_gem_object *obj)
179 {
180         return !obj->active;
181 }
182
183 int
184 i915_gem_init_ioctl(struct drm_device *dev, void *data,
185                     struct drm_file *file)
186 {
187         struct drm_i915_gem_init *args = data;
188
189         if (drm_core_check_feature(dev, DRIVER_MODESET))
190                 return -ENODEV;
191
192         if (args->gtt_start >= args->gtt_end ||
193             (args->gtt_end | args->gtt_start) & (PAGE_SIZE - 1))
194                 return -EINVAL;
195
196         /* GEM with user mode setting was never supported on ilk and later. */
197         if (INTEL_INFO(dev)->gen >= 5)
198                 return -ENODEV;
199
200         lockmgr(&dev->dev_lock, LK_EXCLUSIVE|LK_RETRY|LK_CANRECURSE);
201         i915_gem_do_init(dev, args->gtt_start, args->gtt_end, args->gtt_end);
202         lockmgr(&dev->dev_lock, LK_RELEASE);
203
204         return 0;
205 }
206
207 int
208 i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
209                             struct drm_file *file)
210 {
211         struct drm_i915_private *dev_priv = dev->dev_private;
212         struct drm_i915_gem_get_aperture *args = data;
213         struct drm_i915_gem_object *obj;
214         size_t pinned;
215
216         pinned = 0;
217         DRM_LOCK(dev);
218         list_for_each_entry(obj, &dev_priv->mm.bound_list, gtt_list)
219                 if (obj->pin_count)
220                         pinned += obj->gtt_space->size;
221         DRM_UNLOCK(dev);
222
223         args->aper_size = dev_priv->mm.gtt_total;
224         args->aper_available_size = args->aper_size - pinned;
225
226         return 0;
227 }
228
229 static int
230 i915_gem_create(struct drm_file *file,
231                 struct drm_device *dev,
232                 uint64_t size,
233                 uint32_t *handle_p)
234 {
235         struct drm_i915_gem_object *obj;
236         int ret;
237         u32 handle;
238
239         size = roundup(size, PAGE_SIZE);
240         if (size == 0)
241                 return -EINVAL;
242
243         /* Allocate the new object */
244         obj = i915_gem_alloc_object(dev, size);
245         if (obj == NULL)
246                 return -ENOMEM;
247
248         handle = 0;
249         ret = drm_gem_handle_create(file, &obj->base, &handle);
250         if (ret) {
251                 drm_gem_object_release(&obj->base);
252                 i915_gem_info_remove_obj(dev->dev_private, obj->base.size);
253                 drm_free(obj, M_DRM);
254                 return (-ret);
255         }
256
257         /* drop reference from allocate - handle holds it now */
258         drm_gem_object_unreference(&obj->base);
259         *handle_p = handle;
260         return 0;
261 }
262
263 int
264 i915_gem_dumb_create(struct drm_file *file,
265                      struct drm_device *dev,
266                      struct drm_mode_create_dumb *args)
267 {
268
269         /* have to work out size/pitch and return them */
270         args->pitch = roundup2(args->width * ((args->bpp + 7) / 8), 64);
271         args->size = args->pitch * args->height;
272         return i915_gem_create(file, dev,
273                                args->size, &args->handle);
274 }
275
276 int i915_gem_dumb_destroy(struct drm_file *file,
277                           struct drm_device *dev,
278                           uint32_t handle)
279 {
280
281         return drm_gem_handle_delete(file, handle);
282 }
283
284 /**
285  * Creates a new mm object and returns a handle to it.
286  */
287 int
288 i915_gem_create_ioctl(struct drm_device *dev, void *data,
289                       struct drm_file *file)
290 {
291         struct drm_i915_gem_create *args = data;
292
293         return i915_gem_create(file, dev,
294                                args->size, &args->handle);
295 }
296
297 static int i915_gem_object_needs_bit17_swizzle(struct drm_i915_gem_object *obj)
298 {
299         drm_i915_private_t *dev_priv = obj->base.dev->dev_private;
300
301         return dev_priv->mm.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_9_10_17 &&
302                 obj->tiling_mode != I915_TILING_NONE;
303 }
304
305 static inline void vm_page_reference(vm_page_t m)
306 {
307         vm_page_flag_set(m, PG_REFERENCED);
308 }
309
310 static int
311 i915_gem_shmem_pread(struct drm_device *dev,
312                      struct drm_i915_gem_object *obj,
313                      struct drm_i915_gem_pread *args,
314                      struct drm_file *file)
315 {
316         vm_object_t vm_obj;
317         vm_page_t m;
318         struct sf_buf *sf;
319         vm_offset_t mkva;
320         vm_pindex_t obj_pi;
321         int cnt, do_bit17_swizzling, length, obj_po, ret, swizzled_po;
322
323         do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
324
325         obj->dirty = 1;
326         vm_obj = obj->base.vm_obj;
327         ret = 0;
328
329         VM_OBJECT_LOCK(vm_obj);
330         vm_object_pip_add(vm_obj, 1);
331         while (args->size > 0) {
332                 obj_pi = OFF_TO_IDX(args->offset);
333                 obj_po = args->offset & PAGE_MASK;
334
335                 m = shmem_read_mapping_page(vm_obj, obj_pi);
336                 VM_OBJECT_UNLOCK(vm_obj);
337
338                 sf = sf_buf_alloc(m);
339                 mkva = sf_buf_kva(sf);
340                 length = min(args->size, PAGE_SIZE - obj_po);
341                 while (length > 0) {
342                         if (do_bit17_swizzling &&
343                             (VM_PAGE_TO_PHYS(m) & (1 << 17)) != 0) {
344                                 cnt = roundup2(obj_po + 1, 64);
345                                 cnt = min(cnt - obj_po, length);
346                                 swizzled_po = obj_po ^ 64;
347                         } else {
348                                 cnt = length;
349                                 swizzled_po = obj_po;
350                         }
351                         ret = -copyout_nofault(
352                             (char *)mkva + swizzled_po,
353                             (void *)(uintptr_t)args->data_ptr, cnt);
354                         if (ret != 0)
355                                 break;
356                         args->data_ptr += cnt;
357                         args->size -= cnt;
358                         length -= cnt;
359                         args->offset += cnt;
360                         obj_po += cnt;
361                 }
362                 sf_buf_free(sf);
363                 VM_OBJECT_LOCK(vm_obj);
364                 vm_page_reference(m);
365                 vm_page_busy_wait(m, FALSE, "i915gem");
366                 vm_page_unwire(m, 1);
367                 vm_page_wakeup(m);
368
369                 if (ret != 0)
370                         break;
371         }
372         vm_object_pip_wakeup(vm_obj);
373         VM_OBJECT_UNLOCK(vm_obj);
374
375         return (ret);
376 }
377
378 /**
379  * Reads data from the object referenced by handle.
380  *
381  * On error, the contents of *data are undefined.
382  */
383 int
384 i915_gem_pread_ioctl(struct drm_device *dev, void *data,
385                      struct drm_file *file)
386 {
387         struct drm_i915_gem_pread *args = data;
388         struct drm_i915_gem_object *obj;
389         int ret = 0;
390
391         if (args->size == 0)
392                 return 0;
393
394         ret = i915_mutex_lock_interruptible(dev);
395         if (ret)
396                 return ret;
397
398         obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
399         if (&obj->base == NULL) {
400                 ret = -ENOENT;
401                 goto unlock;
402         }
403
404         /* Bounds check source.  */
405         if (args->offset > obj->base.size ||
406             args->size > obj->base.size - args->offset) {
407                 ret = -EINVAL;
408                 goto out;
409         }
410
411         ret = i915_gem_shmem_pread(dev, obj, args, file);
412 out:
413         drm_gem_object_unreference(&obj->base);
414 unlock:
415         DRM_UNLOCK(dev);
416         return ret;
417 }
418
419 static int
420 i915_gem_gtt_write(struct drm_device *dev, struct drm_i915_gem_object *obj,
421     uint64_t data_ptr, uint64_t size, uint64_t offset, struct drm_file *file)
422 {
423         vm_offset_t mkva;
424         int ret;
425
426         /*
427          * Pass the unaligned physical address and size to pmap_mapdev_attr()
428          * so it can properly calculate whether an extra page needs to be
429          * mapped or not to cover the requested range.  The function will
430          * add the page offset into the returned mkva for us.
431          */
432         mkva = (vm_offset_t)pmap_mapdev_attr(dev->agp->base + obj->gtt_offset +
433             offset, size, PAT_WRITE_COMBINING);
434         ret = -copyin_nofault((void *)(uintptr_t)data_ptr, (char *)mkva, size);
435         pmap_unmapdev(mkva, size);
436         return ret;
437 }
438
439 static int
440 i915_gem_shmem_pwrite(struct drm_device *dev,
441                       struct drm_i915_gem_object *obj,
442                       struct drm_i915_gem_pwrite *args,
443                       struct drm_file *file)
444 {
445         vm_object_t vm_obj;
446         vm_page_t m;
447         struct sf_buf *sf;
448         vm_offset_t mkva;
449         vm_pindex_t obj_pi;
450         int cnt, do_bit17_swizzling, length, obj_po, ret, swizzled_po;
451
452         do_bit17_swizzling = 0;
453
454         obj->dirty = 1;
455         vm_obj = obj->base.vm_obj;
456         ret = 0;
457
458         VM_OBJECT_LOCK(vm_obj);
459         vm_object_pip_add(vm_obj, 1);
460         while (args->size > 0) {
461                 obj_pi = OFF_TO_IDX(args->offset);
462                 obj_po = args->offset & PAGE_MASK;
463
464                 m = shmem_read_mapping_page(vm_obj, obj_pi);
465                 VM_OBJECT_UNLOCK(vm_obj);
466
467                 sf = sf_buf_alloc(m);
468                 mkva = sf_buf_kva(sf);
469                 length = min(args->size, PAGE_SIZE - obj_po);
470                 while (length > 0) {
471                         if (do_bit17_swizzling &&
472                             (VM_PAGE_TO_PHYS(m) & (1 << 17)) != 0) {
473                                 cnt = roundup2(obj_po + 1, 64);
474                                 cnt = min(cnt - obj_po, length);
475                                 swizzled_po = obj_po ^ 64;
476                         } else {
477                                 cnt = length;
478                                 swizzled_po = obj_po;
479                         }
480                         ret = -copyin_nofault(
481                             (void *)(uintptr_t)args->data_ptr,
482                             (char *)mkva + swizzled_po, cnt);
483                         if (ret != 0)
484                                 break;
485                         args->data_ptr += cnt;
486                         args->size -= cnt;
487                         length -= cnt;
488                         args->offset += cnt;
489                         obj_po += cnt;
490                 }
491                 sf_buf_free(sf);
492                 VM_OBJECT_LOCK(vm_obj);
493                 vm_page_dirty(m);
494                 vm_page_reference(m);
495                 vm_page_busy_wait(m, FALSE, "i915gem");
496                 vm_page_unwire(m, 1);
497                 vm_page_wakeup(m);
498
499                 if (ret != 0)
500                         break;
501         }
502         vm_object_pip_wakeup(vm_obj);
503         VM_OBJECT_UNLOCK(vm_obj);
504
505         return (ret);
506 }
507
508 /**
509  * Writes data to the object referenced by handle.
510  *
511  * On error, the contents of the buffer that were to be modified are undefined.
512  */
513 int
514 i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
515                       struct drm_file *file)
516 {
517         struct drm_i915_gem_pwrite *args = data;
518         struct drm_i915_gem_object *obj;
519         vm_page_t *ma;
520         vm_offset_t start, end;
521         int npages, ret;
522
523         if (args->size == 0)
524                 return 0;
525
526         start = trunc_page(args->data_ptr);
527         end = round_page(args->data_ptr + args->size);
528         npages = howmany(end - start, PAGE_SIZE);
529         ma = kmalloc(npages * sizeof(vm_page_t), M_DRM, M_WAITOK |
530             M_ZERO);
531         npages = vm_fault_quick_hold_pages(&curproc->p_vmspace->vm_map,
532             (vm_offset_t)args->data_ptr, args->size,
533             VM_PROT_READ, ma, npages);
534         if (npages == -1) {
535                 ret = -EFAULT;
536                 goto free_ma;
537         }
538
539         ret = i915_mutex_lock_interruptible(dev);
540         if (ret != 0)
541                 goto unlocked;
542
543         obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
544         if (&obj->base == NULL) {
545                 ret = -ENOENT;
546                 goto unlock;
547         }
548
549         /* Bounds check destination. */
550         if (args->offset > obj->base.size ||
551             args->size > obj->base.size - args->offset) {
552                 ret = -EINVAL;
553                 goto out;
554         }
555
556         if (obj->phys_obj) {
557                 ret = i915_gem_phys_pwrite(dev, obj, args, file);
558         } else if (obj->gtt_space &&
559                     obj->base.write_domain != I915_GEM_DOMAIN_CPU) {
560                 ret = i915_gem_object_pin(obj, 0, true, false);
561                 if (ret != 0)
562                         goto out;
563                 ret = i915_gem_object_set_to_gtt_domain(obj, true);
564                 if (ret != 0)
565                         goto out_unpin;
566                 ret = i915_gem_object_put_fence(obj);
567                 if (ret != 0)
568                         goto out_unpin;
569                 ret = i915_gem_gtt_write(dev, obj, args->data_ptr, args->size,
570                     args->offset, file);
571 out_unpin:
572                 i915_gem_object_unpin(obj);
573         } else {
574                 ret = i915_gem_object_set_to_cpu_domain(obj, true);
575                 if (ret != 0)
576                         goto out;
577                 ret = i915_gem_shmem_pwrite(dev, obj, args, file);
578         }
579 out:
580         drm_gem_object_unreference(&obj->base);
581 unlock:
582         DRM_UNLOCK(dev);
583 unlocked:
584         vm_page_unhold_pages(ma, npages);
585 free_ma:
586         drm_free(ma, M_DRM);
587         return ret;
588 }
589
590 int
591 i915_gem_check_wedge(struct drm_i915_private *dev_priv,
592                      bool interruptible)
593 {
594         if (atomic_read(&dev_priv->mm.wedged)) {
595                 struct completion *x = &dev_priv->error_completion;
596                 bool recovery_complete;
597
598                 /* Give the error handler a chance to run. */
599                 lockmgr(&x->wait.lock, LK_EXCLUSIVE);
600                 recovery_complete = x->done > 0;
601                 lockmgr(&x->wait.lock, LK_RELEASE);
602
603                 /* Non-interruptible callers can't handle -EAGAIN, hence return
604                  * -EIO unconditionally for these. */
605                 if (!interruptible)
606                         return -EIO;
607
608                 /* Recovery complete, but still wedged means reset failure. */
609                 if (recovery_complete)
610                         return -EIO;
611
612                 return -EAGAIN;
613         }
614
615         return 0;
616 }
617
618 /*
619  * Compare seqno against outstanding lazy request. Emit a request if they are
620  * equal.
621  */
622 static int
623 i915_gem_check_olr(struct intel_ring_buffer *ring, u32 seqno)
624 {
625         int ret;
626
627         DRM_LOCK_ASSERT(ring->dev);
628
629         ret = 0;
630         if (seqno == ring->outstanding_lazy_request)
631                 ret = i915_add_request(ring, NULL, NULL);
632
633         return ret;
634 }
635
636 /**
637  * __wait_seqno - wait until execution of seqno has finished
638  * @ring: the ring expected to report seqno
639  * @seqno: duh!
640  * @interruptible: do an interruptible wait (normally yes)
641  * @timeout: in - how long to wait (NULL forever); out - how much time remaining
642  *
643  * Returns 0 if the seqno was found within the alloted time. Else returns the
644  * errno with remaining time filled in timeout argument.
645  */
646 static int __wait_seqno(struct intel_ring_buffer *ring, u32 seqno,
647                         bool interruptible, struct timespec *timeout)
648 {
649         drm_i915_private_t *dev_priv = ring->dev->dev_private;
650         struct timespec before, now, wait_time={1,0};
651         unsigned long timeout_jiffies;
652         long end;
653         bool wait_forever = true;
654         int ret;
655
656         if (i915_seqno_passed(ring->get_seqno(ring, true), seqno))
657                 return 0;
658
659         if (timeout != NULL) {
660                 wait_time = *timeout;
661                 wait_forever = false;
662         }
663
664         timeout_jiffies = timespec_to_jiffies(&wait_time);
665
666         if (WARN_ON(!ring->irq_get(ring)))
667                 return -ENODEV;
668
669         /* Record current time in case interrupted by signal, or wedged * */
670         getrawmonotonic(&before);
671
672 #define EXIT_COND \
673         (i915_seqno_passed(ring->get_seqno(ring, false), seqno) || \
674         atomic_read(&dev_priv->mm.wedged))
675         do {
676                 if (interruptible)
677                         end = wait_event_interruptible_timeout(ring->irq_queue,
678                                                                EXIT_COND,
679                                                                timeout_jiffies);
680                 else
681                         end = wait_event_timeout(ring->irq_queue, EXIT_COND,
682                                                  timeout_jiffies);
683
684                 ret = i915_gem_check_wedge(dev_priv, interruptible);
685                 if (ret)
686                         end = ret;
687         } while (end == 0 && wait_forever);
688
689         getrawmonotonic(&now);
690
691         ring->irq_put(ring);
692 #undef EXIT_COND
693
694         if (timeout) {
695                 struct timespec sleep_time = timespec_sub(now, before);
696                 *timeout = timespec_sub(*timeout, sleep_time);
697         }
698
699         switch (end) {
700         case -EIO:
701         case -EAGAIN: /* Wedged */
702         case -ERESTARTSYS: /* Signal */
703                 return (int)end;
704         case 0: /* Timeout */
705                 if (timeout)
706                         set_normalized_timespec(timeout, 0, 0);
707                 return -ETIMEDOUT;      /* -ETIME on Linux */
708         default: /* Completed */
709                 WARN_ON(end < 0); /* We're not aware of other errors */
710                 return 0;
711         }
712 }
713
714 /**
715  * Waits for a sequence number to be signaled, and cleans up the
716  * request and object lists appropriately for that event.
717  */
718 int
719 i915_wait_seqno(struct intel_ring_buffer *ring, uint32_t seqno)
720 {
721         struct drm_device *dev = ring->dev;
722         struct drm_i915_private *dev_priv = dev->dev_private;
723         int ret = 0;
724
725         DRM_LOCK_ASSERT(dev);
726         BUG_ON(seqno == 0);
727
728         ret = i915_gem_check_wedge(dev_priv, dev_priv->mm.interruptible);
729         if (ret)
730                 return ret;
731
732         ret = i915_gem_check_olr(ring, seqno);
733         if (ret)
734                 return ret;
735
736         ret = __wait_seqno(ring, seqno, dev_priv->mm.interruptible, NULL);
737
738         return ret;
739 }
740
741 /**
742  * Ensures that all rendering to the object has completed and the object is
743  * safe to unbind from the GTT or access from the CPU.
744  */
745 static __must_check int
746 i915_gem_object_wait_rendering(struct drm_i915_gem_object *obj,
747                                bool readonly)
748 {
749         struct intel_ring_buffer *ring = obj->ring;
750         u32 seqno;
751         int ret;
752
753         seqno = readonly ? obj->last_write_seqno : obj->last_read_seqno;
754         if (seqno == 0)
755                 return 0;
756
757         ret = i915_wait_seqno(ring, seqno);
758         if (ret)
759                 return ret;
760
761         i915_gem_retire_requests_ring(ring);
762
763         /* Manually manage the write flush as we may have not yet
764          * retired the buffer.
765          */
766         if (obj->last_write_seqno &&
767             i915_seqno_passed(seqno, obj->last_write_seqno)) {
768                 obj->last_write_seqno = 0;
769                 obj->base.write_domain &= ~I915_GEM_GPU_DOMAINS;
770         }
771
772         return 0;
773 }
774
775 /* A nonblocking variant of the above wait. This is a highly dangerous routine
776  * as the object state may change during this call.
777  */
778 static __must_check int
779 i915_gem_object_wait_rendering__nonblocking(struct drm_i915_gem_object *obj,
780                                             bool readonly)
781 {
782         struct drm_device *dev = obj->base.dev;
783         struct drm_i915_private *dev_priv = dev->dev_private;
784         struct intel_ring_buffer *ring = obj->ring;
785         u32 seqno;
786         int ret;
787
788         DRM_LOCK_ASSERT(dev);
789         BUG_ON(!dev_priv->mm.interruptible);
790
791         seqno = readonly ? obj->last_write_seqno : obj->last_read_seqno;
792         if (seqno == 0)
793                 return 0;
794
795         ret = i915_gem_check_wedge(dev_priv, true);
796         if (ret)
797                 return ret;
798
799         ret = i915_gem_check_olr(ring, seqno);
800         if (ret)
801                 return ret;
802
803         DRM_UNLOCK(dev);
804         ret = __wait_seqno(ring, seqno, true, NULL);
805         DRM_LOCK(dev);
806
807         i915_gem_retire_requests_ring(ring);
808
809         /* Manually manage the write flush as we may have not yet
810          * retired the buffer.
811          */
812         if (obj->last_write_seqno &&
813             i915_seqno_passed(seqno, obj->last_write_seqno)) {
814                 obj->last_write_seqno = 0;
815                 obj->base.write_domain &= ~I915_GEM_GPU_DOMAINS;
816         }
817
818         return ret;
819 }
820
821 /**
822  * Called when user space prepares to use an object with the CPU, either
823  * through the mmap ioctl's mapping or a GTT mapping.
824  */
825 int
826 i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
827                           struct drm_file *file)
828 {
829         struct drm_i915_gem_set_domain *args = data;
830         struct drm_i915_gem_object *obj;
831         uint32_t read_domains = args->read_domains;
832         uint32_t write_domain = args->write_domain;
833         int ret;
834
835         /* Only handle setting domains to types used by the CPU. */
836         if (write_domain & I915_GEM_GPU_DOMAINS)
837                 return -EINVAL;
838
839         if (read_domains & I915_GEM_GPU_DOMAINS)
840                 return -EINVAL;
841
842         /* Having something in the write domain implies it's in the read
843          * domain, and only that read domain.  Enforce that in the request.
844          */
845         if (write_domain != 0 && read_domains != write_domain)
846                 return -EINVAL;
847
848         ret = i915_mutex_lock_interruptible(dev);
849         if (ret)
850                 return ret;
851
852         obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
853         if (&obj->base == NULL) {
854                 ret = -ENOENT;
855                 goto unlock;
856         }
857
858         /* Try to flush the object off the GPU without holding the lock.
859          * We will repeat the flush holding the lock in the normal manner
860          * to catch cases where we are gazumped.
861          */
862         ret = i915_gem_object_wait_rendering__nonblocking(obj, !write_domain);
863         if (ret)
864                 goto unref;
865
866         if (read_domains & I915_GEM_DOMAIN_GTT) {
867                 ret = i915_gem_object_set_to_gtt_domain(obj, write_domain != 0);
868
869                 /* Silently promote "you're not bound, there was nothing to do"
870                  * to success, since the client was just asking us to
871                  * make sure everything was done.
872                  */
873                 if (ret == -EINVAL)
874                         ret = 0;
875         } else {
876                 ret = i915_gem_object_set_to_cpu_domain(obj, write_domain != 0);
877         }
878
879 unref:
880         drm_gem_object_unreference(&obj->base);
881 unlock:
882         DRM_UNLOCK(dev);
883         return ret;
884 }
885
886 /**
887  * Called when user space has done writes to this buffer
888  */
889 int
890 i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
891                          struct drm_file *file)
892 {
893         struct drm_i915_gem_sw_finish *args = data;
894         struct drm_i915_gem_object *obj;
895         int ret = 0;
896
897         ret = i915_mutex_lock_interruptible(dev);
898         if (ret)
899                 return ret;
900         obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
901         if (&obj->base == NULL) {
902                 ret = -ENOENT;
903                 goto unlock;
904         }
905
906         /* Pinned buffers may be scanout, so flush the cache */
907         if (obj->pin_count)
908                 i915_gem_object_flush_cpu_write_domain(obj);
909
910         drm_gem_object_unreference(&obj->base);
911 unlock:
912         DRM_UNLOCK(dev);
913         return ret;
914 }
915
916 /**
917  * Maps the contents of an object, returning the address it is mapped
918  * into.
919  *
920  * While the mapping holds a reference on the contents of the object, it doesn't
921  * imply a ref on the object itself.
922  */
923 int
924 i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
925                     struct drm_file *file)
926 {
927         struct drm_i915_gem_mmap *args = data;
928         struct drm_gem_object *obj;
929         struct proc *p = curproc;
930         vm_map_t map = &p->p_vmspace->vm_map;
931         vm_offset_t addr;
932         vm_size_t size;
933         int error = 0, rv;
934
935         obj = drm_gem_object_lookup(dev, file, args->handle);
936         if (obj == NULL)
937                 return -ENOENT;
938
939         if (args->size == 0)
940                 goto out;
941
942         size = round_page(args->size);
943         if (map->size + size > p->p_rlimit[RLIMIT_VMEM].rlim_cur) {
944                 error = ENOMEM;
945                 goto out;
946         }
947
948         addr = 0;
949         vm_object_hold(obj->vm_obj);
950         vm_object_reference_locked(obj->vm_obj);
951         vm_object_drop(obj->vm_obj);
952         rv = vm_map_find(map, obj->vm_obj, NULL,
953                          args->offset, &addr, args->size,
954                          PAGE_SIZE, /* align */
955                          TRUE, /* fitit */
956                          VM_MAPTYPE_NORMAL, /* maptype */
957                          VM_PROT_READ | VM_PROT_WRITE, /* prot */
958                          VM_PROT_READ | VM_PROT_WRITE, /* max */
959                          MAP_SHARED /* cow */);
960         if (rv != KERN_SUCCESS) {
961                 vm_object_deallocate(obj->vm_obj);
962                 error = -vm_mmap_to_errno(rv);
963         } else {
964                 args->addr_ptr = (uint64_t)addr;
965         }
966 out:
967         drm_gem_object_unreference(obj);
968         return (error);
969 }
970
971 /**
972  * i915_gem_release_mmap - remove physical page mappings
973  * @obj: obj in question
974  *
975  * Preserve the reservation of the mmapping with the DRM core code, but
976  * relinquish ownership of the pages back to the system.
977  *
978  * It is vital that we remove the page mapping if we have mapped a tiled
979  * object through the GTT and then lose the fence register due to
980  * resource pressure. Similarly if the object has been moved out of the
981  * aperture, than pages mapped into userspace must be revoked. Removing the
982  * mapping will then trigger a page fault on the next user access, allowing
983  * fixup by i915_gem_fault().
984  */
985 void
986 i915_gem_release_mmap(struct drm_i915_gem_object *obj)
987 {
988         vm_object_t devobj;
989         vm_page_t m;
990         int i, page_count;
991
992         if (!obj->fault_mappable)
993                 return;
994
995         devobj = cdev_pager_lookup(obj);
996         if (devobj != NULL) {
997                 page_count = OFF_TO_IDX(obj->base.size);
998
999                 VM_OBJECT_LOCK(devobj);
1000                 for (i = 0; i < page_count; i++) {
1001                         m = vm_page_lookup_busy_wait(devobj, i, TRUE, "915unm");
1002                         if (m == NULL)
1003                                 continue;
1004                         cdev_pager_free_page(devobj, m);
1005                 }
1006                 VM_OBJECT_UNLOCK(devobj);
1007                 vm_object_deallocate(devobj);
1008         }
1009
1010         obj->fault_mappable = false;
1011 }
1012
1013 static uint32_t
1014 i915_gem_get_gtt_size(struct drm_device *dev, uint32_t size, int tiling_mode)
1015 {
1016         uint32_t gtt_size;
1017
1018         if (INTEL_INFO(dev)->gen >= 4 ||
1019             tiling_mode == I915_TILING_NONE)
1020                 return size;
1021
1022         /* Previous chips need a power-of-two fence region when tiling */
1023         if (INTEL_INFO(dev)->gen == 3)
1024                 gtt_size = 1024*1024;
1025         else
1026                 gtt_size = 512*1024;
1027
1028         while (gtt_size < size)
1029                 gtt_size <<= 1;
1030
1031         return gtt_size;
1032 }
1033
1034 /**
1035  * i915_gem_get_gtt_alignment - return required GTT alignment for an object
1036  * @obj: object to check
1037  *
1038  * Return the required GTT alignment for an object, taking into account
1039  * potential fence register mapping.
1040  */
1041 static uint32_t
1042 i915_gem_get_gtt_alignment(struct drm_device *dev,
1043                            uint32_t size,
1044                            int tiling_mode)
1045 {
1046
1047         /*
1048          * Minimum alignment is 4k (GTT page size), but might be greater
1049          * if a fence register is needed for the object.
1050          */
1051         if (INTEL_INFO(dev)->gen >= 4 ||
1052             tiling_mode == I915_TILING_NONE)
1053                 return 4096;
1054
1055         /*
1056          * Previous chips need to be aligned to the size of the smallest
1057          * fence register that can contain the object.
1058          */
1059         return i915_gem_get_gtt_size(dev, size, tiling_mode);
1060 }
1061
1062 /**
1063  * i915_gem_get_unfenced_gtt_alignment - return required GTT alignment for an
1064  *                                       unfenced object
1065  * @dev: the device
1066  * @size: size of the object
1067  * @tiling_mode: tiling mode of the object
1068  *
1069  * Return the required GTT alignment for an object, only taking into account
1070  * unfenced tiled surface requirements.
1071  */
1072 uint32_t
1073 i915_gem_get_unfenced_gtt_alignment(struct drm_device *dev,
1074                                     uint32_t size,
1075                                     int tiling_mode)
1076 {
1077         /*
1078          * Minimum alignment is 4k (GTT page size) for sane hw.
1079          */
1080         if (INTEL_INFO(dev)->gen >= 4 || IS_G33(dev) ||
1081             tiling_mode == I915_TILING_NONE)
1082                 return 4096;
1083
1084         /* Previous hardware however needs to be aligned to a power-of-two
1085          * tile height. The simplest method for determining this is to reuse
1086          * the power-of-tile object size.
1087          */
1088         return i915_gem_get_gtt_size(dev, size, tiling_mode);
1089 }
1090
1091 int
1092 i915_gem_mmap_gtt(struct drm_file *file,
1093                   struct drm_device *dev,
1094                   uint32_t handle,
1095                   uint64_t *offset)
1096 {
1097         struct drm_i915_private *dev_priv = dev->dev_private;
1098         struct drm_i915_gem_object *obj;
1099         int ret;
1100
1101         ret = i915_mutex_lock_interruptible(dev);
1102         if (ret)
1103                 return ret;
1104
1105         obj = to_intel_bo(drm_gem_object_lookup(dev, file, handle));
1106         if (&obj->base == NULL) {
1107                 ret = -ENOENT;
1108                 goto unlock;
1109         }
1110
1111         if (obj->base.size > dev_priv->mm.gtt_mappable_end) {
1112                 ret = -E2BIG;
1113                 goto out;
1114         }
1115
1116         if (obj->madv != I915_MADV_WILLNEED) {
1117                 DRM_ERROR("Attempting to mmap a purgeable buffer\n");
1118                 ret = -EINVAL;
1119                 goto out;
1120         }
1121
1122         ret = drm_gem_create_mmap_offset(&obj->base);
1123         if (ret)
1124                 goto out;
1125
1126         *offset = DRM_GEM_MAPPING_OFF(obj->base.map_list.key) |
1127             DRM_GEM_MAPPING_KEY;
1128 out:
1129         drm_gem_object_unreference(&obj->base);
1130 unlock:
1131         DRM_UNLOCK(dev);
1132         return ret;
1133 }
1134
1135 /**
1136  * i915_gem_mmap_gtt_ioctl - prepare an object for GTT mmap'ing
1137  * @dev: DRM device
1138  * @data: GTT mapping ioctl data
1139  * @file: GEM object info
1140  *
1141  * Simply returns the fake offset to userspace so it can mmap it.
1142  * The mmap call will end up in drm_gem_mmap(), which will set things
1143  * up so we can get faults in the handler above.
1144  *
1145  * The fault handler will take care of binding the object into the GTT
1146  * (since it may have been evicted to make room for something), allocating
1147  * a fence register, and mapping the appropriate aperture address into
1148  * userspace.
1149  */
1150 int
1151 i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data,
1152                         struct drm_file *file)
1153 {
1154         struct drm_i915_gem_mmap_gtt *args = data;
1155
1156         return i915_gem_mmap_gtt(file, dev, args->handle, &args->offset);
1157 }
1158
1159 /* Immediately discard the backing storage */
1160 static void
1161 i915_gem_object_truncate(struct drm_i915_gem_object *obj)
1162 {
1163         vm_object_t vm_obj;
1164
1165         vm_obj = obj->base.vm_obj;
1166         VM_OBJECT_LOCK(vm_obj);
1167         vm_object_page_remove(vm_obj, 0, 0, false);
1168         VM_OBJECT_UNLOCK(vm_obj);
1169         obj->madv = __I915_MADV_PURGED;
1170 }
1171
1172 static inline int
1173 i915_gem_object_is_purgeable(struct drm_i915_gem_object *obj)
1174 {
1175         return obj->madv == I915_MADV_DONTNEED;
1176 }
1177
1178 static void
1179 i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj)
1180 {
1181         vm_page_t m;
1182         int page_count, i;
1183
1184         BUG_ON(obj->madv == __I915_MADV_PURGED);
1185
1186         if (obj->tiling_mode != I915_TILING_NONE)
1187                 i915_gem_object_save_bit_17_swizzle(obj);
1188         if (obj->madv == I915_MADV_DONTNEED)
1189                 obj->dirty = 0;
1190         page_count = obj->base.size / PAGE_SIZE;
1191         VM_OBJECT_LOCK(obj->base.vm_obj);
1192 #if GEM_PARANOID_CHECK_GTT
1193         i915_gem_assert_pages_not_mapped(obj->base.dev, obj->pages, page_count);
1194 #endif
1195         for (i = 0; i < page_count; i++) {
1196                 m = obj->pages[i];
1197                 if (obj->dirty)
1198                         vm_page_dirty(m);
1199                 if (obj->madv == I915_MADV_WILLNEED)
1200                         vm_page_reference(m);
1201                 vm_page_busy_wait(obj->pages[i], FALSE, "i915gem");
1202                 vm_page_unwire(obj->pages[i], 1);
1203                 vm_page_wakeup(obj->pages[i]);
1204         }
1205         VM_OBJECT_UNLOCK(obj->base.vm_obj);
1206         obj->dirty = 0;
1207         drm_free(obj->pages, M_DRM);
1208         obj->pages = NULL;
1209 }
1210
1211 static int
1212 i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
1213 {
1214         struct drm_device *dev;
1215         vm_object_t vm_obj;
1216         int page_count, i, j;
1217         struct vm_page *page;
1218
1219         dev = obj->base.dev;
1220         KASSERT(obj->pages == NULL, ("Obj already has pages"));
1221         page_count = obj->base.size / PAGE_SIZE;
1222         obj->pages = kmalloc(page_count * sizeof(vm_page_t), M_DRM,
1223             M_WAITOK);
1224
1225         vm_obj = obj->base.vm_obj;
1226         VM_OBJECT_LOCK(vm_obj);
1227
1228         for (i = 0; i < page_count; i++) {
1229                 page = shmem_read_mapping_page(vm_obj, i);
1230                 if (IS_ERR(page))
1231                         goto err_pages;
1232
1233                 obj->pages[i] = page;
1234         }
1235
1236         VM_OBJECT_UNLOCK(vm_obj);
1237         if (i915_gem_object_needs_bit17_swizzle(obj))
1238                 i915_gem_object_do_bit_17_swizzle(obj);
1239
1240         return 0;
1241
1242 err_pages:
1243         for (j = 0; j < i; j++) {
1244                 page = obj->pages[j];
1245                 vm_page_busy_wait(page, FALSE, "i915gem");
1246                 vm_page_unwire(page, 0);
1247                 vm_page_wakeup(page);
1248         }
1249         VM_OBJECT_UNLOCK(vm_obj);
1250         drm_free(obj->pages, M_DRM);
1251         obj->pages = NULL;
1252         return (-EIO);
1253 }
1254
1255 void
1256 i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
1257                                struct intel_ring_buffer *ring)
1258 {
1259         struct drm_device *dev = obj->base.dev;
1260         struct drm_i915_private *dev_priv = dev->dev_private;
1261         u32 seqno = intel_ring_get_seqno(ring);
1262
1263         BUG_ON(ring == NULL);
1264         obj->ring = ring;
1265
1266         /* Add a reference if we're newly entering the active list. */
1267         if (!obj->active) {
1268                 drm_gem_object_reference(&obj->base);
1269                 obj->active = 1;
1270         }
1271
1272         /* Move from whatever list we were on to the tail of execution. */
1273         list_move_tail(&obj->mm_list, &dev_priv->mm.active_list);
1274         list_move_tail(&obj->ring_list, &ring->active_list);
1275
1276         obj->last_read_seqno = seqno;
1277
1278         if (obj->fenced_gpu_access) {
1279                 obj->last_fenced_seqno = seqno;
1280
1281                 /* Bump MRU to take account of the delayed flush */
1282                 if (obj->fence_reg != I915_FENCE_REG_NONE) {
1283                         struct drm_i915_fence_reg *reg;
1284
1285                         reg = &dev_priv->fence_regs[obj->fence_reg];
1286                         list_move_tail(&reg->lru_list,
1287                                        &dev_priv->mm.fence_list);
1288                 }
1289         }
1290 }
1291
1292 static void
1293 i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj)
1294 {
1295         struct drm_device *dev = obj->base.dev;
1296         struct drm_i915_private *dev_priv = dev->dev_private;
1297
1298         BUG_ON(obj->base.write_domain & ~I915_GEM_GPU_DOMAINS);
1299         BUG_ON(!obj->active);
1300
1301         list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
1302
1303         list_del_init(&obj->ring_list);
1304         obj->ring = NULL;
1305
1306         obj->last_read_seqno = 0;
1307         obj->last_write_seqno = 0;
1308         obj->base.write_domain = 0;
1309
1310         obj->last_fenced_seqno = 0;
1311         obj->fenced_gpu_access = false;
1312
1313         obj->active = 0;
1314         drm_gem_object_unreference(&obj->base);
1315
1316         WARN_ON(i915_verify_lists(dev));
1317 }
1318
1319 static int
1320 i915_gem_handle_seqno_wrap(struct drm_device *dev)
1321 {
1322         struct drm_i915_private *dev_priv = dev->dev_private;
1323         struct intel_ring_buffer *ring;
1324         int ret, i, j;
1325
1326         /* The hardware uses various monotonic 32-bit counters, if we
1327          * detect that they will wraparound we need to idle the GPU
1328          * and reset those counters.
1329          */
1330         ret = 0;
1331         for_each_ring(ring, dev_priv, i) {
1332                 for (j = 0; j < ARRAY_SIZE(ring->sync_seqno); j++)
1333                         ret |= ring->sync_seqno[j] != 0;
1334         }
1335         if (ret == 0)
1336                 return ret;
1337
1338         ret = i915_gpu_idle(dev);
1339         if (ret)
1340                 return ret;
1341
1342         i915_gem_retire_requests(dev);
1343         for_each_ring(ring, dev_priv, i) {
1344                 for (j = 0; j < ARRAY_SIZE(ring->sync_seqno); j++)
1345                         ring->sync_seqno[j] = 0;
1346         }
1347
1348         return 0;
1349 }
1350
1351 int
1352 i915_gem_get_seqno(struct drm_device *dev, u32 *seqno)
1353 {
1354         struct drm_i915_private *dev_priv = dev->dev_private;
1355
1356         /* reserve 0 for non-seqno */
1357         if (dev_priv->next_seqno == 0) {
1358                 int ret = i915_gem_handle_seqno_wrap(dev);
1359                 if (ret)
1360                         return ret;
1361
1362                 dev_priv->next_seqno = 1;
1363         }
1364
1365         *seqno = dev_priv->next_seqno++;
1366         return 0;
1367 }
1368
1369 int
1370 i915_add_request(struct intel_ring_buffer *ring,
1371                  struct drm_file *file,
1372                  u32 *out_seqno)
1373 {
1374         drm_i915_private_t *dev_priv = ring->dev->dev_private;
1375         struct drm_i915_gem_request *request;
1376         u32 request_ring_position;
1377         int was_empty;
1378         int ret;
1379
1380         /*
1381          * Emit any outstanding flushes - execbuf can fail to emit the flush
1382          * after having emitted the batchbuffer command. Hence we need to fix
1383          * things up similar to emitting the lazy request. The difference here
1384          * is that the flush _must_ happen before the next request, no matter
1385          * what.
1386          */
1387         ret = intel_ring_flush_all_caches(ring);
1388         if (ret)
1389                 return ret;
1390
1391         request = kmalloc(sizeof(*request), M_DRM, M_WAITOK | M_ZERO);
1392         if (request == NULL)
1393                 return -ENOMEM;
1394
1395
1396         /* Record the position of the start of the request so that
1397          * should we detect the updated seqno part-way through the
1398          * GPU processing the request, we never over-estimate the
1399          * position of the head.
1400          */
1401         request_ring_position = intel_ring_get_tail(ring);
1402
1403         ret = ring->add_request(ring);
1404         if (ret) {
1405                 kfree(request, M_DRM);
1406                 return ret;
1407         }
1408
1409         request->seqno = intel_ring_get_seqno(ring);
1410         request->ring = ring;
1411         request->tail = request_ring_position;
1412         request->emitted_jiffies = jiffies;
1413         was_empty = list_empty(&ring->request_list);
1414         list_add_tail(&request->list, &ring->request_list);
1415         request->file_priv = NULL;
1416
1417         if (file) {
1418                 struct drm_i915_file_private *file_priv = file->driver_priv;
1419
1420                 spin_lock(&file_priv->mm.lock);
1421                 request->file_priv = file_priv;
1422                 list_add_tail(&request->client_list,
1423                               &file_priv->mm.request_list);
1424                 spin_unlock(&file_priv->mm.lock);
1425         }
1426
1427         ring->outstanding_lazy_request = 0;
1428
1429         if (!dev_priv->mm.suspended) {
1430                 if (i915_enable_hangcheck) {
1431                         mod_timer(&dev_priv->hangcheck_timer,
1432                                   round_jiffies_up(jiffies + DRM_I915_HANGCHECK_JIFFIES));
1433                 }
1434                 if (was_empty) {
1435                         queue_delayed_work(dev_priv->wq,
1436                                            &dev_priv->mm.retire_work,
1437                                            round_jiffies_up_relative(hz));
1438                         intel_mark_busy(dev_priv->dev);
1439                 }
1440         }
1441
1442         if (out_seqno)
1443                 *out_seqno = request->seqno;
1444         return 0;
1445 }
1446
1447 static inline void
1448 i915_gem_request_remove_from_client(struct drm_i915_gem_request *request)
1449 {
1450         struct drm_i915_file_private *file_priv = request->file_priv;
1451
1452         if (!file_priv)
1453                 return;
1454
1455         spin_lock(&file_priv->mm.lock);
1456         if (request->file_priv) {
1457                 list_del(&request->client_list);
1458                 request->file_priv = NULL;
1459         }
1460         spin_unlock(&file_priv->mm.lock);
1461 }
1462
1463 static void i915_gem_reset_ring_lists(struct drm_i915_private *dev_priv,
1464                                       struct intel_ring_buffer *ring)
1465 {
1466         while (!list_empty(&ring->request_list)) {
1467                 struct drm_i915_gem_request *request;
1468
1469                 request = list_first_entry(&ring->request_list,
1470                                            struct drm_i915_gem_request,
1471                                            list);
1472
1473                 list_del(&request->list);
1474                 i915_gem_request_remove_from_client(request);
1475                 drm_free(request, M_DRM);
1476         }
1477
1478         while (!list_empty(&ring->active_list)) {
1479                 struct drm_i915_gem_object *obj;
1480
1481                 obj = list_first_entry(&ring->active_list,
1482                                        struct drm_i915_gem_object,
1483                                        ring_list);
1484
1485                 i915_gem_object_move_to_inactive(obj);
1486         }
1487 }
1488
1489 static void i915_gem_reset_fences(struct drm_device *dev)
1490 {
1491         struct drm_i915_private *dev_priv = dev->dev_private;
1492         int i;
1493
1494         for (i = 0; i < dev_priv->num_fence_regs; i++) {
1495                 struct drm_i915_fence_reg *reg = &dev_priv->fence_regs[i];
1496
1497                 i915_gem_write_fence(dev, i, NULL);
1498
1499                 if (reg->obj)
1500                         i915_gem_object_fence_lost(reg->obj);
1501
1502                 reg->pin_count = 0;
1503                 reg->obj = NULL;
1504                 INIT_LIST_HEAD(&reg->lru_list);
1505         }
1506
1507         INIT_LIST_HEAD(&dev_priv->mm.fence_list);
1508 }
1509
1510 void i915_gem_reset(struct drm_device *dev)
1511 {
1512         struct drm_i915_private *dev_priv = dev->dev_private;
1513         struct drm_i915_gem_object *obj;
1514         struct intel_ring_buffer *ring;
1515         int i;
1516
1517         for_each_ring(ring, dev_priv, i)
1518                 i915_gem_reset_ring_lists(dev_priv, ring);
1519
1520         /* Move everything out of the GPU domains to ensure we do any
1521          * necessary invalidation upon reuse.
1522          */
1523         list_for_each_entry(obj,
1524                             &dev_priv->mm.inactive_list,
1525                             mm_list)
1526         {
1527                 obj->base.read_domains &= ~I915_GEM_GPU_DOMAINS;
1528         }
1529
1530         /* The fence registers are invalidated so clear them out */
1531         i915_gem_reset_fences(dev);
1532 }
1533
1534 /**
1535  * This function clears the request list as sequence numbers are passed.
1536  */
1537 void
1538 i915_gem_retire_requests_ring(struct intel_ring_buffer *ring)
1539 {
1540         uint32_t seqno;
1541
1542         if (list_empty(&ring->request_list))
1543                 return;
1544
1545         WARN_ON(i915_verify_lists(ring->dev));
1546
1547         seqno = ring->get_seqno(ring, true);
1548
1549         while (!list_empty(&ring->request_list)) {
1550                 struct drm_i915_gem_request *request;
1551
1552                 request = list_first_entry(&ring->request_list,
1553                                            struct drm_i915_gem_request,
1554                                            list);
1555
1556                 if (!i915_seqno_passed(seqno, request->seqno))
1557                         break;
1558
1559                 /* We know the GPU must have read the request to have
1560                  * sent us the seqno + interrupt, so use the position
1561                  * of tail of the request to update the last known position
1562                  * of the GPU head.
1563                  */
1564                 ring->last_retired_head = request->tail;
1565
1566                 list_del(&request->list);
1567                 i915_gem_request_remove_from_client(request);
1568                 kfree(request, M_DRM);
1569         }
1570
1571         /* Move any buffers on the active list that are no longer referenced
1572          * by the ringbuffer to the flushing/inactive lists as appropriate.
1573          */
1574         while (!list_empty(&ring->active_list)) {
1575                 struct drm_i915_gem_object *obj;
1576
1577                 obj = list_first_entry(&ring->active_list,
1578                                       struct drm_i915_gem_object,
1579                                       ring_list);
1580
1581                 if (!i915_seqno_passed(seqno, obj->last_read_seqno))
1582                         break;
1583
1584                 i915_gem_object_move_to_inactive(obj);
1585         }
1586
1587         if (unlikely(ring->trace_irq_seqno &&
1588                      i915_seqno_passed(seqno, ring->trace_irq_seqno))) {
1589                 ring->irq_put(ring);
1590                 ring->trace_irq_seqno = 0;
1591         }
1592
1593 }
1594
1595 void
1596 i915_gem_retire_requests(struct drm_device *dev)
1597 {
1598         drm_i915_private_t *dev_priv = dev->dev_private;
1599         struct intel_ring_buffer *ring;
1600         int i;
1601
1602         for_each_ring(ring, dev_priv, i)
1603                 i915_gem_retire_requests_ring(ring);
1604 }
1605
1606 static void
1607 i915_gem_retire_work_handler(struct work_struct *work)
1608 {
1609         drm_i915_private_t *dev_priv;
1610         struct drm_device *dev;
1611         struct intel_ring_buffer *ring;
1612         bool idle;
1613         int i;
1614
1615         dev_priv = container_of(work, drm_i915_private_t,
1616                                 mm.retire_work.work);
1617         dev = dev_priv->dev;
1618
1619         /* Come back later if the device is busy... */
1620         if (lockmgr(&dev->dev_struct_lock, LK_EXCLUSIVE|LK_NOWAIT)) {
1621                 queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work,
1622                                    round_jiffies_up_relative(hz));
1623                 return;
1624         }
1625
1626         i915_gem_retire_requests(dev);
1627
1628         /* Send a periodic flush down the ring so we don't hold onto GEM
1629          * objects indefinitely.
1630          */
1631         idle = true;
1632         for_each_ring(ring, dev_priv, i) {
1633                 if (ring->gpu_caches_dirty)
1634                         i915_add_request(ring, NULL, NULL);
1635
1636                 idle &= list_empty(&ring->request_list);
1637         }
1638
1639         if (!dev_priv->mm.suspended && !idle)
1640                 queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work,
1641                                    round_jiffies_up_relative(hz));
1642         if (idle)
1643                 intel_mark_idle(dev);
1644
1645         DRM_UNLOCK(dev);
1646 }
1647 /**
1648  * Ensures that an object will eventually get non-busy by flushing any required
1649  * write domains, emitting any outstanding lazy request and retiring and
1650  * completed requests.
1651  */
1652 static int
1653 i915_gem_object_flush_active(struct drm_i915_gem_object *obj)
1654 {
1655         int ret;
1656
1657         if (obj->active) {
1658                 ret = i915_gem_check_olr(obj->ring, obj->last_read_seqno);
1659                 if (ret)
1660                         return ret;
1661
1662                 i915_gem_retire_requests_ring(obj->ring);
1663         }
1664
1665         return 0;
1666 }
1667
1668 /**
1669  * i915_gem_wait_ioctl - implements DRM_IOCTL_I915_GEM_WAIT
1670  * @DRM_IOCTL_ARGS: standard ioctl arguments
1671  *
1672  * Returns 0 if successful, else an error is returned with the remaining time in
1673  * the timeout parameter.
1674  *  -ETIME: object is still busy after timeout
1675  *  -ERESTARTSYS: signal interrupted the wait
1676  *  -ENONENT: object doesn't exist
1677  * Also possible, but rare:
1678  *  -EAGAIN: GPU wedged
1679  *  -ENOMEM: damn
1680  *  -ENODEV: Internal IRQ fail
1681  *  -E?: The add request failed
1682  *
1683  * The wait ioctl with a timeout of 0 reimplements the busy ioctl. With any
1684  * non-zero timeout parameter the wait ioctl will wait for the given number of
1685  * nanoseconds on an object becoming unbusy. Since the wait itself does so
1686  * without holding struct_mutex the object may become re-busied before this
1687  * function completes. A similar but shorter * race condition exists in the busy
1688  * ioctl
1689  */
1690 int
1691 i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
1692 {
1693         struct drm_i915_gem_wait *args = data;
1694         struct drm_i915_gem_object *obj;
1695         struct intel_ring_buffer *ring = NULL;
1696         struct timespec timeout_stack, *timeout = NULL;
1697         u32 seqno = 0;
1698         int ret = 0;
1699
1700         if (args->timeout_ns >= 0) {
1701                 timeout_stack = ns_to_timespec(args->timeout_ns);
1702                 timeout = &timeout_stack;
1703         }
1704
1705         ret = i915_mutex_lock_interruptible(dev);
1706         if (ret)
1707                 return ret;
1708
1709         obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->bo_handle));
1710         if (&obj->base == NULL) {
1711                 DRM_UNLOCK(dev);
1712                 return -ENOENT;
1713         }
1714
1715         /* Need to make sure the object gets inactive eventually. */
1716         ret = i915_gem_object_flush_active(obj);
1717         if (ret)
1718                 goto out;
1719
1720         if (obj->active) {
1721                 seqno = obj->last_read_seqno;
1722                 ring = obj->ring;
1723         }
1724
1725         if (seqno == 0)
1726                  goto out;
1727
1728         /* Do this after OLR check to make sure we make forward progress polling
1729          * on this IOCTL with a 0 timeout (like busy ioctl)
1730          */
1731         if (!args->timeout_ns) {
1732                 ret = -ETIMEDOUT;
1733                 goto out;
1734         }
1735
1736         drm_gem_object_unreference(&obj->base);
1737         DRM_UNLOCK(dev);
1738
1739         ret = __wait_seqno(ring, seqno, true, timeout);
1740         if (timeout) {
1741                 WARN_ON(!timespec_valid(timeout));
1742                 args->timeout_ns = timespec_to_ns(timeout);
1743         }
1744         return ret;
1745
1746 out:
1747         drm_gem_object_unreference(&obj->base);
1748         DRM_UNLOCK(dev);
1749         return ret;
1750 }
1751
1752 /**
1753  * i915_gem_object_sync - sync an object to a ring.
1754  *
1755  * @obj: object which may be in use on another ring.
1756  * @to: ring we wish to use the object on. May be NULL.
1757  *
1758  * This code is meant to abstract object synchronization with the GPU.
1759  * Calling with NULL implies synchronizing the object with the CPU
1760  * rather than a particular GPU ring.
1761  *
1762  * Returns 0 if successful, else propagates up the lower layer error.
1763  */
1764 int
1765 i915_gem_object_sync(struct drm_i915_gem_object *obj,
1766                      struct intel_ring_buffer *to)
1767 {
1768         struct intel_ring_buffer *from = obj->ring;
1769         u32 seqno;
1770         int ret, idx;
1771
1772         if (from == NULL || to == from)
1773                 return 0;
1774
1775         if (to == NULL || !i915_semaphore_is_enabled(obj->base.dev))
1776                 return i915_gem_object_wait_rendering(obj, false);
1777
1778         idx = intel_ring_sync_index(from, to);
1779
1780         seqno = obj->last_read_seqno;
1781         if (seqno <= from->sync_seqno[idx])
1782                 return 0;
1783
1784         ret = i915_gem_check_olr(obj->ring, seqno);
1785         if (ret)
1786                 return ret;
1787
1788         ret = to->sync_to(to, from, seqno);
1789         if (!ret)
1790                 /* We use last_read_seqno because sync_to()
1791                  * might have just caused seqno wrap under
1792                  * the radar.
1793                  */
1794                 from->sync_seqno[idx] = obj->last_read_seqno;
1795
1796         return ret;
1797 }
1798
1799 static void i915_gem_object_finish_gtt(struct drm_i915_gem_object *obj)
1800 {
1801         u32 old_write_domain, old_read_domains;
1802
1803         /* Act a barrier for all accesses through the GTT */
1804         cpu_mfence();
1805
1806         /* Force a pagefault for domain tracking on next user access */
1807         i915_gem_release_mmap(obj);
1808
1809         if ((obj->base.read_domains & I915_GEM_DOMAIN_GTT) == 0)
1810                 return;
1811
1812         old_read_domains = obj->base.read_domains;
1813         old_write_domain = obj->base.write_domain;
1814
1815         obj->base.read_domains &= ~I915_GEM_DOMAIN_GTT;
1816         obj->base.write_domain &= ~I915_GEM_DOMAIN_GTT;
1817
1818 }
1819
1820 /**
1821  * Unbinds an object from the GTT aperture.
1822  */
1823 int
1824 i915_gem_object_unbind(struct drm_i915_gem_object *obj)
1825 {
1826         drm_i915_private_t *dev_priv = obj->base.dev->dev_private;
1827         int ret = 0;
1828
1829         if (obj->gtt_space == NULL)
1830                 return 0;
1831
1832         if (obj->pin_count)
1833                 return -EBUSY;
1834
1835         ret = i915_gem_object_finish_gpu(obj);
1836         if (ret)
1837                 return ret;
1838         /* Continue on if we fail due to EIO, the GPU is hung so we
1839          * should be safe and we need to cleanup or else we might
1840          * cause memory corruption through use-after-free.
1841          */
1842
1843         i915_gem_object_finish_gtt(obj);
1844
1845         /* Move the object to the CPU domain to ensure that
1846          * any possible CPU writes while it's not in the GTT
1847          * are flushed when we go to remap it.
1848          */
1849         if (ret == 0)
1850                 ret = i915_gem_object_set_to_cpu_domain(obj, 1);
1851         if (ret == -ERESTARTSYS)
1852                 return ret;
1853         if (ret) {
1854                 /* In the event of a disaster, abandon all caches and
1855                  * hope for the best.
1856                  */
1857                 i915_gem_clflush_object(obj);
1858                 obj->base.read_domains = obj->base.write_domain = I915_GEM_DOMAIN_CPU;
1859         }
1860
1861         /* release the fence reg _after_ flushing */
1862         ret = i915_gem_object_put_fence(obj);
1863         if (ret)
1864                 return ret;
1865
1866         if (obj->has_global_gtt_mapping)
1867                 i915_gem_gtt_unbind_object(obj);
1868         if (obj->has_aliasing_ppgtt_mapping) {
1869                 i915_ppgtt_unbind_object(dev_priv->mm.aliasing_ppgtt, obj);
1870                 obj->has_aliasing_ppgtt_mapping = 0;
1871         }
1872         i915_gem_gtt_finish_object(obj);
1873
1874         i915_gem_object_put_pages_gtt(obj);
1875
1876         list_del_init(&obj->gtt_list);
1877         list_del_init(&obj->mm_list);
1878         /* Avoid an unnecessary call to unbind on rebind. */
1879         obj->map_and_fenceable = true;
1880
1881         drm_mm_put_block(obj->gtt_space);
1882         obj->gtt_space = NULL;
1883         obj->gtt_offset = 0;
1884
1885         if (i915_gem_object_is_purgeable(obj))
1886                 i915_gem_object_truncate(obj);
1887
1888         return ret;
1889 }
1890
1891 int i915_gpu_idle(struct drm_device *dev)
1892 {
1893         drm_i915_private_t *dev_priv = dev->dev_private;
1894         struct intel_ring_buffer *ring;
1895         int ret, i;
1896
1897         /* Flush everything onto the inactive list. */
1898         for_each_ring(ring, dev_priv, i) {
1899                 ret = i915_switch_context(ring, NULL, DEFAULT_CONTEXT_ID);
1900                 if (ret)
1901                         return ret;
1902
1903                 ret = intel_ring_idle(ring);
1904                 if (ret)
1905                         return ret;
1906         }
1907
1908         return 0;
1909 }
1910
1911 static void sandybridge_write_fence_reg(struct drm_device *dev, int reg,
1912                                         struct drm_i915_gem_object *obj)
1913 {
1914         drm_i915_private_t *dev_priv = dev->dev_private;
1915         uint64_t val;
1916
1917         if (obj) {
1918                 u32 size = obj->gtt_space->size;
1919
1920                 val = (uint64_t)((obj->gtt_offset + size - 4096) &
1921                                  0xfffff000) << 32;
1922                 val |= obj->gtt_offset & 0xfffff000;
1923                 val |= (uint64_t)((obj->stride / 128) - 1) <<
1924                         SANDYBRIDGE_FENCE_PITCH_SHIFT;
1925
1926                 if (obj->tiling_mode == I915_TILING_Y)
1927                         val |= 1 << I965_FENCE_TILING_Y_SHIFT;
1928                 val |= I965_FENCE_REG_VALID;
1929         } else
1930                 val = 0;
1931
1932         I915_WRITE64(FENCE_REG_SANDYBRIDGE_0 + reg * 8, val);
1933         POSTING_READ(FENCE_REG_SANDYBRIDGE_0 + reg * 8);
1934 }
1935
1936 static void i965_write_fence_reg(struct drm_device *dev, int reg,
1937                                  struct drm_i915_gem_object *obj)
1938 {
1939         drm_i915_private_t *dev_priv = dev->dev_private;
1940         uint64_t val;
1941
1942         if (obj) {
1943                 u32 size = obj->gtt_space->size;
1944
1945                 val = (uint64_t)((obj->gtt_offset + size - 4096) &
1946                                  0xfffff000) << 32;
1947                 val |= obj->gtt_offset & 0xfffff000;
1948                 val |= ((obj->stride / 128) - 1) << I965_FENCE_PITCH_SHIFT;
1949                 if (obj->tiling_mode == I915_TILING_Y)
1950                         val |= 1 << I965_FENCE_TILING_Y_SHIFT;
1951                 val |= I965_FENCE_REG_VALID;
1952         } else
1953                 val = 0;
1954
1955         I915_WRITE64(FENCE_REG_965_0 + reg * 8, val);
1956         POSTING_READ(FENCE_REG_965_0 + reg * 8);
1957 }
1958
1959 static void i915_write_fence_reg(struct drm_device *dev, int reg,
1960                                  struct drm_i915_gem_object *obj)
1961 {
1962         drm_i915_private_t *dev_priv = dev->dev_private;
1963         u32 val;
1964
1965         if (obj) {
1966                 u32 size = obj->gtt_space->size;
1967                 int pitch_val;
1968                 int tile_width;
1969
1970                 WARN((obj->gtt_offset & ~I915_FENCE_START_MASK) ||
1971                      (size & -size) != size ||
1972                      (obj->gtt_offset & (size - 1)),
1973                      "object 0x%08x [fenceable? %d] not 1M or pot-size (0x%08x) aligned\n",
1974                      obj->gtt_offset, obj->map_and_fenceable, size);
1975
1976                 if (obj->tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev))
1977                         tile_width = 128;
1978                 else
1979                         tile_width = 512;
1980
1981                 /* Note: pitch better be a power of two tile widths */
1982                 pitch_val = obj->stride / tile_width;
1983                 pitch_val = ffs(pitch_val) - 1;
1984
1985                 val = obj->gtt_offset;
1986                 if (obj->tiling_mode == I915_TILING_Y)
1987                         val |= 1 << I830_FENCE_TILING_Y_SHIFT;
1988                 val |= I915_FENCE_SIZE_BITS(size);
1989                 val |= pitch_val << I830_FENCE_PITCH_SHIFT;
1990                 val |= I830_FENCE_REG_VALID;
1991         } else
1992                 val = 0;
1993
1994         if (reg < 8)
1995                 reg = FENCE_REG_830_0 + reg * 4;
1996         else
1997                 reg = FENCE_REG_945_8 + (reg - 8) * 4;
1998
1999         I915_WRITE(reg, val);
2000         POSTING_READ(reg);
2001 }
2002
2003 static void i830_write_fence_reg(struct drm_device *dev, int reg,
2004                                 struct drm_i915_gem_object *obj)
2005 {
2006         drm_i915_private_t *dev_priv = dev->dev_private;
2007         uint32_t val;
2008
2009         if (obj) {
2010                 u32 size = obj->gtt_space->size;
2011                 uint32_t pitch_val;
2012
2013                 WARN((obj->gtt_offset & ~I830_FENCE_START_MASK) ||
2014                      (size & -size) != size ||
2015                      (obj->gtt_offset & (size - 1)),
2016                      "object 0x%08x not 512K or pot-size 0x%08x aligned\n",
2017                      obj->gtt_offset, size);
2018
2019                 pitch_val = obj->stride / 128;
2020                 pitch_val = ffs(pitch_val) - 1;
2021
2022                 val = obj->gtt_offset;
2023                 if (obj->tiling_mode == I915_TILING_Y)
2024                         val |= 1 << I830_FENCE_TILING_Y_SHIFT;
2025                 val |= I830_FENCE_SIZE_BITS(size);
2026                 val |= pitch_val << I830_FENCE_PITCH_SHIFT;
2027                 val |= I830_FENCE_REG_VALID;
2028         } else
2029                 val = 0;
2030
2031         I915_WRITE(FENCE_REG_830_0 + reg * 4, val);
2032         POSTING_READ(FENCE_REG_830_0 + reg * 4);
2033 }
2034
2035 static void i915_gem_write_fence(struct drm_device *dev, int reg,
2036                                  struct drm_i915_gem_object *obj)
2037 {
2038         switch (INTEL_INFO(dev)->gen) {
2039         case 7:
2040         case 6: sandybridge_write_fence_reg(dev, reg, obj); break;
2041         case 5:
2042         case 4: i965_write_fence_reg(dev, reg, obj); break;
2043         case 3: i915_write_fence_reg(dev, reg, obj); break;
2044         case 2: i830_write_fence_reg(dev, reg, obj); break;
2045         default: break;
2046         }
2047 }
2048
2049 static inline int fence_number(struct drm_i915_private *dev_priv,
2050                                struct drm_i915_fence_reg *fence)
2051 {
2052         return fence - dev_priv->fence_regs;
2053 }
2054
2055 static void i915_gem_object_update_fence(struct drm_i915_gem_object *obj,
2056                                          struct drm_i915_fence_reg *fence,
2057                                          bool enable)
2058 {
2059         struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
2060         int reg = fence_number(dev_priv, fence);
2061
2062         i915_gem_write_fence(obj->base.dev, reg, enable ? obj : NULL);
2063
2064         if (enable) {
2065                 obj->fence_reg = reg;
2066                 fence->obj = obj;
2067                 list_move_tail(&fence->lru_list, &dev_priv->mm.fence_list);
2068         } else {
2069                 obj->fence_reg = I915_FENCE_REG_NONE;
2070                 fence->obj = NULL;
2071                 list_del_init(&fence->lru_list);
2072         }
2073 }
2074
2075 static int
2076 i915_gem_object_flush_fence(struct drm_i915_gem_object *obj)
2077 {
2078         if (obj->last_fenced_seqno) {
2079                 int ret = i915_wait_seqno(obj->ring, obj->last_fenced_seqno);
2080                 if (ret)
2081                         return ret;
2082
2083                 obj->last_fenced_seqno = 0;
2084         }
2085
2086         /* Ensure that all CPU reads are completed before installing a fence
2087          * and all writes before removing the fence.
2088          */
2089         if (obj->base.read_domains & I915_GEM_DOMAIN_GTT)
2090                 cpu_mfence();
2091
2092         obj->fenced_gpu_access = false;
2093         return 0;
2094 }
2095
2096 int
2097 i915_gem_object_put_fence(struct drm_i915_gem_object *obj)
2098 {
2099         struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
2100         int ret;
2101
2102         ret = i915_gem_object_flush_fence(obj);
2103         if (ret)
2104                 return ret;
2105
2106         if (obj->fence_reg == I915_FENCE_REG_NONE)
2107                 return 0;
2108
2109         i915_gem_object_update_fence(obj,
2110                                      &dev_priv->fence_regs[obj->fence_reg],
2111                                      false);
2112         i915_gem_object_fence_lost(obj);
2113
2114         return 0;
2115 }
2116
2117 static struct drm_i915_fence_reg *
2118 i915_find_fence_reg(struct drm_device *dev)
2119 {
2120         struct drm_i915_private *dev_priv = dev->dev_private;
2121         struct drm_i915_fence_reg *reg, *avail;
2122         int i;
2123
2124         /* First try to find a free reg */
2125         avail = NULL;
2126         for (i = dev_priv->fence_reg_start; i < dev_priv->num_fence_regs; i++) {
2127                 reg = &dev_priv->fence_regs[i];
2128                 if (!reg->obj)
2129                         return reg;
2130
2131                 if (!reg->pin_count)
2132                         avail = reg;
2133         }
2134
2135         if (avail == NULL)
2136                 return NULL;
2137
2138         /* None available, try to steal one or wait for a user to finish */
2139         list_for_each_entry(reg, &dev_priv->mm.fence_list, lru_list) {
2140                 if (reg->pin_count)
2141                         continue;
2142
2143                 return reg;
2144         }
2145
2146         return NULL;
2147 }
2148
2149 /**
2150  * i915_gem_object_get_fence - set up fencing for an object
2151  * @obj: object to map through a fence reg
2152  *
2153  * When mapping objects through the GTT, userspace wants to be able to write
2154  * to them without having to worry about swizzling if the object is tiled.
2155  * This function walks the fence regs looking for a free one for @obj,
2156  * stealing one if it can't find any.
2157  *
2158  * It then sets up the reg based on the object's properties: address, pitch
2159  * and tiling format.
2160  *
2161  * For an untiled surface, this removes any existing fence.
2162  */
2163 int
2164 i915_gem_object_get_fence(struct drm_i915_gem_object *obj)
2165 {
2166         struct drm_device *dev = obj->base.dev;
2167         struct drm_i915_private *dev_priv = dev->dev_private;
2168         bool enable = obj->tiling_mode != I915_TILING_NONE;
2169         struct drm_i915_fence_reg *reg;
2170         int ret;
2171
2172         /* Have we updated the tiling parameters upon the object and so
2173          * will need to serialise the write to the associated fence register?
2174          */
2175         if (obj->fence_dirty) {
2176                 ret = i915_gem_object_flush_fence(obj);
2177                 if (ret)
2178                         return ret;
2179         }
2180
2181         /* Just update our place in the LRU if our fence is getting reused. */
2182         if (obj->fence_reg != I915_FENCE_REG_NONE) {
2183                 reg = &dev_priv->fence_regs[obj->fence_reg];
2184                 if (!obj->fence_dirty) {
2185                         list_move_tail(&reg->lru_list,
2186                                        &dev_priv->mm.fence_list);
2187                         return 0;
2188                 }
2189         } else if (enable) {
2190                 reg = i915_find_fence_reg(dev);
2191                 if (reg == NULL)
2192                         return -EDEADLK;
2193
2194                 if (reg->obj) {
2195                         struct drm_i915_gem_object *old = reg->obj;
2196
2197                         ret = i915_gem_object_flush_fence(old);
2198                         if (ret)
2199                                 return ret;
2200
2201                         i915_gem_object_fence_lost(old);
2202                 }
2203         } else
2204                 return 0;
2205
2206         i915_gem_object_update_fence(obj, reg, enable);
2207         obj->fence_dirty = false;
2208
2209         return 0;
2210 }
2211
2212 static bool i915_gem_valid_gtt_space(struct drm_device *dev,
2213                                      struct drm_mm_node *gtt_space,
2214                                      unsigned long cache_level)
2215 {
2216         struct drm_mm_node *other;
2217
2218         /* On non-LLC machines we have to be careful when putting differing
2219          * types of snoopable memory together to avoid the prefetcher
2220          * crossing memory domains and dieing.
2221          */
2222         if (HAS_LLC(dev))
2223                 return true;
2224
2225         if (gtt_space == NULL)
2226                 return true;
2227
2228         if (list_empty(&gtt_space->node_list))
2229                 return true;
2230
2231         other = list_entry(gtt_space->node_list.prev, struct drm_mm_node, node_list);
2232         if (other->allocated && !other->hole_follows && other->color != cache_level)
2233                 return false;
2234
2235         other = list_entry(gtt_space->node_list.next, struct drm_mm_node, node_list);
2236         if (other->allocated && !gtt_space->hole_follows && other->color != cache_level)
2237                 return false;
2238
2239         return true;
2240 }
2241
2242 static void i915_gem_verify_gtt(struct drm_device *dev)
2243 {
2244 #if WATCH_GTT
2245         struct drm_i915_private *dev_priv = dev->dev_private;
2246         struct drm_i915_gem_object *obj;
2247         int err = 0;
2248
2249         list_for_each_entry(obj, &dev_priv->mm.gtt_list, gtt_list) {
2250                 if (obj->gtt_space == NULL) {
2251                         printk(KERN_ERR "object found on GTT list with no space reserved\n");
2252                         err++;
2253                         continue;
2254                 }
2255
2256                 if (obj->cache_level != obj->gtt_space->color) {
2257                         printk(KERN_ERR "object reserved space [%08lx, %08lx] with wrong color, cache_level=%x, color=%lx\n",
2258                                obj->gtt_space->start,
2259                                obj->gtt_space->start + obj->gtt_space->size,
2260                                obj->cache_level,
2261                                obj->gtt_space->color);
2262                         err++;
2263                         continue;
2264                 }
2265
2266                 if (!i915_gem_valid_gtt_space(dev,
2267                                               obj->gtt_space,
2268                                               obj->cache_level)) {
2269                         printk(KERN_ERR "invalid GTT space found at [%08lx, %08lx] - color=%x\n",
2270                                obj->gtt_space->start,
2271                                obj->gtt_space->start + obj->gtt_space->size,
2272                                obj->cache_level);
2273                         err++;
2274                         continue;
2275                 }
2276         }
2277
2278         WARN_ON(err);
2279 #endif
2280 }
2281
2282 /**
2283  * Finds free space in the GTT aperture and binds the object there.
2284  */
2285 static int
2286 i915_gem_object_bind_to_gtt(struct drm_i915_gem_object *obj,
2287                             unsigned alignment,
2288                             bool map_and_fenceable,
2289                             bool nonblocking)
2290 {
2291         struct drm_device *dev = obj->base.dev;
2292         drm_i915_private_t *dev_priv = dev->dev_private;
2293         struct drm_mm_node *free_space;
2294         uint32_t size, fence_size, fence_alignment, unfenced_alignment;
2295         bool mappable, fenceable;
2296         int ret;
2297
2298         if (obj->madv != I915_MADV_WILLNEED) {
2299                 DRM_ERROR("Attempting to bind a purgeable object\n");
2300                 return -EINVAL;
2301         }
2302
2303         fence_size = i915_gem_get_gtt_size(dev, obj->base.size,
2304             obj->tiling_mode);
2305         fence_alignment = i915_gem_get_gtt_alignment(dev, obj->base.size,
2306             obj->tiling_mode);
2307         unfenced_alignment = i915_gem_get_unfenced_gtt_alignment(dev,
2308             obj->base.size, obj->tiling_mode);
2309         if (alignment == 0)
2310                 alignment = map_and_fenceable ? fence_alignment :
2311                     unfenced_alignment;
2312         if (map_and_fenceable && (alignment & (fence_alignment - 1)) != 0) {
2313                 DRM_ERROR("Invalid object alignment requested %u\n", alignment);
2314                 return -EINVAL;
2315         }
2316
2317         size = map_and_fenceable ? fence_size : obj->base.size;
2318
2319         /* If the object is bigger than the entire aperture, reject it early
2320          * before evicting everything in a vain attempt to find space.
2321          */
2322         if (obj->base.size > (map_and_fenceable ?
2323             dev_priv->mm.gtt_mappable_end : dev_priv->mm.gtt_total)) {
2324                 DRM_ERROR(
2325 "Attempting to bind an object larger than the aperture\n");
2326                 return -E2BIG;
2327         }
2328
2329  search_free:
2330         if (map_and_fenceable)
2331                 free_space =
2332                         drm_mm_search_free_in_range_color(&dev_priv->mm.gtt_space,
2333                                                           size, alignment, obj->cache_level,
2334                                                           0, dev_priv->mm.gtt_mappable_end,
2335                                                           false);
2336         else
2337                 free_space = drm_mm_search_free_color(&dev_priv->mm.gtt_space,
2338                                                       size, alignment, obj->cache_level,
2339                                                       false);
2340
2341         if (free_space != NULL) {
2342                 if (map_and_fenceable)
2343                         obj->gtt_space =
2344                                 drm_mm_get_block_range_generic(free_space,
2345                                                                size, alignment, obj->cache_level,
2346                                                                0, dev_priv->mm.gtt_mappable_end,
2347                                                                false);
2348                 else
2349                         obj->gtt_space =
2350                                 drm_mm_get_block_generic(free_space,
2351                                                          size, alignment, obj->cache_level,
2352                                                          false);
2353         }
2354         if (obj->gtt_space == NULL) {
2355                 ret = i915_gem_evict_something(dev, size, alignment,
2356                                                obj->cache_level,
2357                                                map_and_fenceable,
2358                                                nonblocking);
2359                 if (ret)
2360                         return ret;
2361
2362                 goto search_free;
2363         }
2364
2365         /*
2366          * NOTE: i915_gem_object_get_pages_gtt() cannot
2367          *       return ENOMEM, since we used VM_ALLOC_RETRY.
2368          */
2369         ret = i915_gem_object_get_pages_gtt(obj);
2370         if (ret != 0) {
2371                 drm_mm_put_block(obj->gtt_space);
2372                 obj->gtt_space = NULL;
2373                 return ret;
2374         }
2375
2376         i915_gem_gtt_bind_object(obj, obj->cache_level);
2377         if (ret != 0) {
2378                 i915_gem_object_put_pages_gtt(obj);
2379                 drm_mm_put_block(obj->gtt_space);
2380                 obj->gtt_space = NULL;
2381                 if (i915_gem_evict_everything(dev))
2382                         return (ret);
2383                 goto search_free;
2384         }
2385
2386         list_add_tail(&obj->gtt_list, &dev_priv->mm.bound_list);
2387         list_add_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
2388
2389         obj->gtt_offset = obj->gtt_space->start;
2390
2391         fenceable =
2392                 obj->gtt_space->size == fence_size &&
2393                 (obj->gtt_space->start & (fence_alignment - 1)) == 0;
2394
2395         mappable =
2396                 obj->gtt_offset + obj->base.size <= dev_priv->mm.gtt_mappable_end;
2397         obj->map_and_fenceable = mappable && fenceable;
2398
2399         i915_gem_verify_gtt(dev);
2400         return 0;
2401 }
2402
2403 void
2404 i915_gem_clflush_object(struct drm_i915_gem_object *obj)
2405 {
2406
2407         /* If we don't have a page list set up, then we're not pinned
2408          * to GPU, and we can ignore the cache flush because it'll happen
2409          * again at bind time.
2410          */
2411         if (obj->pages == NULL)
2412                 return;
2413
2414         /* If the GPU is snooping the contents of the CPU cache,
2415          * we do not need to manually clear the CPU cache lines.  However,
2416          * the caches are only snooped when the render cache is
2417          * flushed/invalidated.  As we always have to emit invalidations
2418          * and flushes when moving into and out of the RENDER domain, correct
2419          * snooping behaviour occurs naturally as the result of our domain
2420          * tracking.
2421          */
2422         if (obj->cache_level != I915_CACHE_NONE)
2423                 return;
2424
2425         drm_clflush_pages(obj->pages, obj->base.size / PAGE_SIZE);
2426 }
2427
2428 /** Flushes the GTT write domain for the object if it's dirty. */
2429 static void
2430 i915_gem_object_flush_gtt_write_domain(struct drm_i915_gem_object *obj)
2431 {
2432         uint32_t old_write_domain;
2433
2434         if (obj->base.write_domain != I915_GEM_DOMAIN_GTT)
2435                 return;
2436
2437         /* No actual flushing is required for the GTT write domain.  Writes
2438          * to it immediately go to main memory as far as we know, so there's
2439          * no chipset flush.  It also doesn't land in render cache.
2440          *
2441          * However, we do have to enforce the order so that all writes through
2442          * the GTT land before any writes to the device, such as updates to
2443          * the GATT itself.
2444          */
2445         cpu_sfence();
2446
2447         old_write_domain = obj->base.write_domain;
2448         obj->base.write_domain = 0;
2449 }
2450
2451 /** Flushes the CPU write domain for the object if it's dirty. */
2452 static void
2453 i915_gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj)
2454 {
2455         uint32_t old_write_domain;
2456
2457         if (obj->base.write_domain != I915_GEM_DOMAIN_CPU)
2458                 return;
2459
2460         i915_gem_clflush_object(obj);
2461         intel_gtt_chipset_flush();
2462         old_write_domain = obj->base.write_domain;
2463         obj->base.write_domain = 0;
2464 }
2465
2466 /**
2467  * Moves a single object to the GTT read, and possibly write domain.
2468  *
2469  * This function returns when the move is complete, including waiting on
2470  * flushes to occur.
2471  */
2472 int
2473 i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
2474 {
2475         drm_i915_private_t *dev_priv = obj->base.dev->dev_private;
2476         uint32_t old_write_domain, old_read_domains;
2477         int ret;
2478
2479         /* Not valid to be called on unbound objects. */
2480         if (obj->gtt_space == NULL)
2481                 return -EINVAL;
2482
2483         if (obj->base.write_domain == I915_GEM_DOMAIN_GTT)
2484                 return 0;
2485
2486         ret = i915_gem_object_wait_rendering(obj, !write);
2487         if (ret)
2488                 return ret;
2489
2490         i915_gem_object_flush_cpu_write_domain(obj);
2491
2492         old_write_domain = obj->base.write_domain;
2493         old_read_domains = obj->base.read_domains;
2494
2495         /* It should now be out of any other write domains, and we can update
2496          * the domain values for our changes.
2497          */
2498         BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_GTT) != 0);
2499         obj->base.read_domains |= I915_GEM_DOMAIN_GTT;
2500         if (write) {
2501                 obj->base.read_domains = I915_GEM_DOMAIN_GTT;
2502                 obj->base.write_domain = I915_GEM_DOMAIN_GTT;
2503                 obj->dirty = 1;
2504         }
2505
2506         /* And bump the LRU for this access */
2507         if (i915_gem_object_is_inactive(obj))
2508                 list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
2509
2510         return 0;
2511 }
2512
2513 int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
2514                                     enum i915_cache_level cache_level)
2515 {
2516         struct drm_device *dev = obj->base.dev;
2517         drm_i915_private_t *dev_priv = dev->dev_private;
2518         int ret;
2519
2520         if (obj->cache_level == cache_level)
2521                 return 0;
2522
2523         if (obj->pin_count) {
2524                 DRM_DEBUG("can not change the cache level of pinned objects\n");
2525                 return -EBUSY;
2526         }
2527
2528         if (!i915_gem_valid_gtt_space(dev, obj->gtt_space, cache_level)) {
2529                 ret = i915_gem_object_unbind(obj);
2530                 if (ret)
2531                         return ret;
2532         }
2533
2534         if (obj->gtt_space) {
2535                 ret = i915_gem_object_finish_gpu(obj);
2536                 if (ret)
2537                         return ret;
2538
2539                 i915_gem_object_finish_gtt(obj);
2540
2541                 /* Before SandyBridge, you could not use tiling or fence
2542                  * registers with snooped memory, so relinquish any fences
2543                  * currently pointing to our region in the aperture.
2544                  */
2545                 if (INTEL_INFO(dev)->gen < 6) {
2546                         ret = i915_gem_object_put_fence(obj);
2547                         if (ret)
2548                                 return ret;
2549                 }
2550
2551                 if (obj->has_global_gtt_mapping)
2552                         i915_gem_gtt_bind_object(obj, cache_level);
2553                 if (obj->has_aliasing_ppgtt_mapping)
2554                         i915_ppgtt_bind_object(dev_priv->mm.aliasing_ppgtt,
2555                                                obj, cache_level);
2556
2557                 obj->gtt_space->color = cache_level;
2558         }
2559
2560         if (cache_level == I915_CACHE_NONE) {
2561                 u32 old_read_domains, old_write_domain;
2562
2563                 /* If we're coming from LLC cached, then we haven't
2564                  * actually been tracking whether the data is in the
2565                  * CPU cache or not, since we only allow one bit set
2566                  * in obj->write_domain and have been skipping the clflushes.
2567                  * Just set it to the CPU cache for now.
2568                  */
2569                 KASSERT((obj->base.write_domain & ~I915_GEM_DOMAIN_CPU) == 0,
2570                     ("obj %p in CPU write domain", obj));
2571                 KASSERT((obj->base.read_domains & ~I915_GEM_DOMAIN_CPU) == 0,
2572                     ("obj %p in CPU read domain", obj));
2573
2574                 old_read_domains = obj->base.read_domains;
2575                 old_write_domain = obj->base.write_domain;
2576
2577                 obj->base.read_domains = I915_GEM_DOMAIN_CPU;
2578                 obj->base.write_domain = I915_GEM_DOMAIN_CPU;
2579
2580         }
2581
2582         obj->cache_level = cache_level;
2583         i915_gem_verify_gtt(dev);
2584         return 0;
2585 }
2586
2587 int i915_gem_get_caching_ioctl(struct drm_device *dev, void *data,
2588                                struct drm_file *file)
2589 {
2590         struct drm_i915_gem_caching *args = data;
2591         struct drm_i915_gem_object *obj;
2592         int ret;
2593
2594         ret = i915_mutex_lock_interruptible(dev);
2595         if (ret)
2596                 return ret;
2597
2598         obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
2599         if (&obj->base == NULL) {
2600                 ret = -ENOENT;
2601                 goto unlock;
2602         }
2603
2604         args->caching = obj->cache_level != I915_CACHE_NONE;
2605
2606         drm_gem_object_unreference(&obj->base);
2607 unlock:
2608         DRM_UNLOCK(dev);
2609         return ret;
2610 }
2611
2612 int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
2613                                struct drm_file *file)
2614 {
2615         struct drm_i915_gem_caching *args = data;
2616         struct drm_i915_gem_object *obj;
2617         enum i915_cache_level level;
2618         int ret;
2619
2620         switch (args->caching) {
2621         case I915_CACHING_NONE:
2622                 level = I915_CACHE_NONE;
2623                 break;
2624         case I915_CACHING_CACHED:
2625                 level = I915_CACHE_LLC;
2626                 break;
2627         default:
2628                 return -EINVAL;
2629         }
2630
2631         ret = i915_mutex_lock_interruptible(dev);
2632         if (ret)
2633                 return ret;
2634
2635         obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
2636         if (&obj->base == NULL) {
2637                 ret = -ENOENT;
2638                 goto unlock;
2639         }
2640
2641         ret = i915_gem_object_set_cache_level(obj, level);
2642
2643         drm_gem_object_unreference(&obj->base);
2644 unlock:
2645         DRM_UNLOCK(dev);
2646         return ret;
2647 }
2648
2649 /*
2650  * Prepare buffer for display plane (scanout, cursors, etc).
2651  * Can be called from an uninterruptible phase (modesetting) and allows
2652  * any flushes to be pipelined (for pageflips).
2653  */
2654 int
2655 i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
2656                                      u32 alignment,
2657                                      struct intel_ring_buffer *pipelined)
2658 {
2659         u32 old_read_domains, old_write_domain;
2660         int ret;
2661
2662         if (pipelined != obj->ring) {
2663                 ret = i915_gem_object_sync(obj, pipelined);
2664                 if (ret)
2665                         return ret;
2666         }
2667
2668         /* The display engine is not coherent with the LLC cache on gen6.  As
2669          * a result, we make sure that the pinning that is about to occur is
2670          * done with uncached PTEs. This is lowest common denominator for all
2671          * chipsets.
2672          *
2673          * However for gen6+, we could do better by using the GFDT bit instead
2674          * of uncaching, which would allow us to flush all the LLC-cached data
2675          * with that bit in the PTE to main memory with just one PIPE_CONTROL.
2676          */
2677         ret = i915_gem_object_set_cache_level(obj, I915_CACHE_NONE);
2678         if (ret)
2679                 return ret;
2680
2681         /* As the user may map the buffer once pinned in the display plane
2682          * (e.g. libkms for the bootup splash), we have to ensure that we
2683          * always use map_and_fenceable for all scanout buffers.
2684          */
2685         ret = i915_gem_object_pin(obj, alignment, true, false);
2686         if (ret)
2687                 return ret;
2688
2689         i915_gem_object_flush_cpu_write_domain(obj);
2690
2691         old_write_domain = obj->base.write_domain;
2692         old_read_domains = obj->base.read_domains;
2693
2694         /* It should now be out of any other write domains, and we can update
2695          * the domain values for our changes.
2696          */
2697         obj->base.write_domain = 0;
2698         obj->base.read_domains |= I915_GEM_DOMAIN_GTT;
2699
2700         return 0;
2701 }
2702
2703 int
2704 i915_gem_object_finish_gpu(struct drm_i915_gem_object *obj)
2705 {
2706         int ret;
2707
2708         if ((obj->base.read_domains & I915_GEM_GPU_DOMAINS) == 0)
2709                 return 0;
2710
2711         ret = i915_gem_object_wait_rendering(obj, false);
2712         if (ret)
2713                 return ret;
2714
2715         /* Ensure that we invalidate the GPU's caches and TLBs. */
2716         obj->base.read_domains &= ~I915_GEM_GPU_DOMAINS;
2717         return 0;
2718 }
2719
2720 /**
2721  * Moves a single object to the CPU read, and possibly write domain.
2722  *
2723  * This function returns when the move is complete, including waiting on
2724  * flushes to occur.
2725  */
2726 int
2727 i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write)
2728 {
2729         uint32_t old_write_domain, old_read_domains;
2730         int ret;
2731
2732         if (obj->base.write_domain == I915_GEM_DOMAIN_CPU)
2733                 return 0;
2734
2735         ret = i915_gem_object_wait_rendering(obj, !write);
2736         if (ret)
2737                 return ret;
2738
2739         i915_gem_object_flush_gtt_write_domain(obj);
2740
2741         old_write_domain = obj->base.write_domain;
2742         old_read_domains = obj->base.read_domains;
2743
2744         /* Flush the CPU cache if it's still invalid. */
2745         if ((obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0) {
2746                 i915_gem_clflush_object(obj);
2747
2748                 obj->base.read_domains |= I915_GEM_DOMAIN_CPU;
2749         }
2750
2751         /* It should now be out of any other write domains, and we can update
2752          * the domain values for our changes.
2753          */
2754         BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_CPU) != 0);
2755
2756         /* If we're writing through the CPU, then the GPU read domains will
2757          * need to be invalidated at next use.
2758          */
2759         if (write) {
2760                 obj->base.read_domains = I915_GEM_DOMAIN_CPU;
2761                 obj->base.write_domain = I915_GEM_DOMAIN_CPU;
2762         }
2763
2764         return 0;
2765 }
2766
2767 /* Throttle our rendering by waiting until the ring has completed our requests
2768  * emitted over 20 msec ago.
2769  *
2770  * Note that if we were to use the current jiffies each time around the loop,
2771  * we wouldn't escape the function with any frames outstanding if the time to
2772  * render a frame was over 20ms.
2773  *
2774  * This should get us reasonable parallelism between CPU and GPU but also
2775  * relatively low latency when blocking on a particular request to finish.
2776  */
2777 static int
2778 i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
2779 {
2780         struct drm_i915_private *dev_priv = dev->dev_private;
2781         struct drm_i915_file_private *file_priv = file->driver_priv;
2782         unsigned long recent_enough = ticks - (20 * hz / 1000);
2783         struct drm_i915_gem_request *request;
2784         struct intel_ring_buffer *ring = NULL;
2785         u32 seqno = 0;
2786         int ret;
2787
2788         if (atomic_read(&dev_priv->mm.wedged))
2789                 return -EIO;
2790
2791         spin_lock(&file_priv->mm.lock);
2792         list_for_each_entry(request, &file_priv->mm.request_list, client_list) {
2793                 if (time_after_eq(request->emitted_jiffies, recent_enough))
2794                         break;
2795
2796                 ring = request->ring;
2797                 seqno = request->seqno;
2798         }
2799         spin_unlock(&file_priv->mm.lock);
2800
2801         if (seqno == 0)
2802                 return 0;
2803
2804         ret = __wait_seqno(ring, seqno, true, NULL);
2805
2806         if (ret == 0)
2807                 queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, 0);
2808
2809         return ret;
2810 }
2811
2812 int
2813 i915_gem_object_pin(struct drm_i915_gem_object *obj,
2814                     uint32_t alignment,
2815                     bool map_and_fenceable,
2816                     bool nonblocking)
2817 {
2818         int ret;
2819
2820         if (WARN_ON(obj->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT))
2821                 return -EBUSY;
2822
2823         if (obj->gtt_space != NULL) {
2824                 if ((alignment && obj->gtt_offset & (alignment - 1)) ||
2825                     (map_and_fenceable && !obj->map_and_fenceable)) {
2826                         WARN(obj->pin_count,
2827                              "bo is already pinned with incorrect alignment:"
2828                              " offset=%x, req.alignment=%x, req.map_and_fenceable=%d,"
2829                              " obj->map_and_fenceable=%d\n",
2830                              obj->gtt_offset, alignment,
2831                              map_and_fenceable,
2832                              obj->map_and_fenceable);
2833                         ret = i915_gem_object_unbind(obj);
2834                         if (ret)
2835                                 return ret;
2836                 }
2837         }
2838
2839         if (obj->gtt_space == NULL) {
2840                 struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
2841
2842                 ret = i915_gem_object_bind_to_gtt(obj, alignment,
2843                                                   map_and_fenceable,
2844                                                   nonblocking);
2845                 if (ret)
2846                         return ret;
2847
2848                 if (!dev_priv->mm.aliasing_ppgtt)
2849                         i915_gem_gtt_bind_object(obj, obj->cache_level);
2850         }
2851
2852         if (!obj->has_global_gtt_mapping && map_and_fenceable)
2853                 i915_gem_gtt_bind_object(obj, obj->cache_level);
2854
2855         obj->pin_count++;
2856         obj->pin_mappable |= map_and_fenceable;
2857
2858         return 0;
2859 }
2860
2861 void
2862 i915_gem_object_unpin(struct drm_i915_gem_object *obj)
2863 {
2864         BUG_ON(obj->pin_count == 0);
2865         BUG_ON(obj->gtt_space == NULL);
2866
2867         if (--obj->pin_count == 0)
2868                 obj->pin_mappable = false;
2869 }
2870
2871 int
2872 i915_gem_pin_ioctl(struct drm_device *dev, void *data,
2873                    struct drm_file *file)
2874 {
2875         struct drm_i915_gem_pin *args = data;
2876         struct drm_i915_gem_object *obj;
2877         int ret;
2878
2879         ret = i915_mutex_lock_interruptible(dev);
2880         if (ret)
2881                 return ret;
2882
2883         obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
2884         if (&obj->base == NULL) {
2885                 ret = -ENOENT;
2886                 goto unlock;
2887         }
2888
2889         if (obj->madv != I915_MADV_WILLNEED) {
2890                 DRM_ERROR("Attempting to pin a purgeable buffer\n");
2891                 ret = -EINVAL;
2892                 goto out;
2893         }
2894
2895         if (obj->pin_filp != NULL && obj->pin_filp != file) {
2896                 DRM_ERROR("Already pinned in i915_gem_pin_ioctl(): %d\n",
2897                           args->handle);
2898                 ret = -EINVAL;
2899                 goto out;
2900         }
2901
2902         if (obj->user_pin_count == 0) {
2903                 ret = i915_gem_object_pin(obj, args->alignment, true, false);
2904                 if (ret)
2905                         goto out;
2906         }
2907
2908         obj->user_pin_count++;
2909         obj->pin_filp = file;
2910
2911         /* XXX - flush the CPU caches for pinned objects
2912          * as the X server doesn't manage domains yet
2913          */
2914         i915_gem_object_flush_cpu_write_domain(obj);
2915         args->offset = obj->gtt_offset;
2916 out:
2917         drm_gem_object_unreference(&obj->base);
2918 unlock:
2919         DRM_UNLOCK(dev);
2920         return ret;
2921 }
2922
2923 int
2924 i915_gem_unpin_ioctl(struct drm_device *dev, void *data,
2925                      struct drm_file *file)
2926 {
2927         struct drm_i915_gem_pin *args = data;
2928         struct drm_i915_gem_object *obj;
2929         int ret;
2930
2931         ret = i915_mutex_lock_interruptible(dev);
2932         if (ret)
2933                 return ret;
2934
2935         obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
2936         if (&obj->base == NULL) {
2937                 ret = -ENOENT;
2938                 goto unlock;
2939         }
2940
2941         if (obj->pin_filp != file) {
2942                 DRM_ERROR("Not pinned by caller in i915_gem_pin_ioctl(): %d\n",
2943                           args->handle);
2944                 ret = -EINVAL;
2945                 goto out;
2946         }
2947         obj->user_pin_count--;
2948         if (obj->user_pin_count == 0) {
2949                 obj->pin_filp = NULL;
2950                 i915_gem_object_unpin(obj);
2951         }
2952
2953 out:
2954         drm_gem_object_unreference(&obj->base);
2955 unlock:
2956         DRM_UNLOCK(dev);
2957         return (ret);
2958 }
2959
2960 int
2961 i915_gem_busy_ioctl(struct drm_device *dev, void *data,
2962                     struct drm_file *file)
2963 {
2964         struct drm_i915_gem_busy *args = data;
2965         struct drm_i915_gem_object *obj;
2966         int ret;
2967
2968         ret = i915_mutex_lock_interruptible(dev);
2969         if (ret)
2970                 return ret;
2971
2972         obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
2973         if (&obj->base == NULL) {
2974                 ret = -ENOENT;
2975                 goto unlock;
2976         }
2977
2978         /* Count all active objects as busy, even if they are currently not used
2979          * by the gpu. Users of this interface expect objects to eventually
2980          * become non-busy without any further actions, therefore emit any
2981          * necessary flushes here.
2982          */
2983         ret = i915_gem_object_flush_active(obj);
2984
2985         args->busy = obj->active;
2986         if (obj->ring) {
2987                 args->busy |= intel_ring_flag(obj->ring) << 17;
2988         }
2989
2990         drm_gem_object_unreference(&obj->base);
2991 unlock:
2992         DRM_UNLOCK(dev);
2993         return ret;
2994 }
2995
2996 int
2997 i915_gem_throttle_ioctl(struct drm_device *dev, void *data,
2998                         struct drm_file *file_priv)
2999 {
3000         return i915_gem_ring_throttle(dev, file_priv);
3001 }
3002
3003 int
3004 i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
3005                        struct drm_file *file_priv)
3006 {
3007         struct drm_i915_gem_madvise *args = data;
3008         struct drm_i915_gem_object *obj;
3009         int ret;
3010
3011         switch (args->madv) {
3012         case I915_MADV_DONTNEED:
3013         case I915_MADV_WILLNEED:
3014             break;
3015         default:
3016             return -EINVAL;
3017         }
3018
3019         ret = i915_mutex_lock_interruptible(dev);
3020         if (ret)
3021                 return ret;
3022
3023         obj = to_intel_bo(drm_gem_object_lookup(dev, file_priv, args->handle));
3024         if (&obj->base == NULL) {
3025                 ret = -ENOENT;
3026                 goto unlock;
3027         }
3028
3029         if (obj->pin_count) {
3030                 ret = -EINVAL;
3031                 goto out;
3032         }
3033
3034         if (obj->madv != __I915_MADV_PURGED)
3035                 obj->madv = args->madv;
3036
3037         /* if the object is no longer attached, discard its backing storage */
3038         if (i915_gem_object_is_purgeable(obj) && obj->pages == NULL)
3039                 i915_gem_object_truncate(obj);
3040
3041         args->retained = obj->madv != __I915_MADV_PURGED;
3042
3043 out:
3044         drm_gem_object_unreference(&obj->base);
3045 unlock:
3046         DRM_UNLOCK(dev);
3047         return ret;
3048 }
3049
3050 void i915_gem_object_init(struct drm_i915_gem_object *obj,
3051                           const struct drm_i915_gem_object_ops *ops)
3052 {
3053         INIT_LIST_HEAD(&obj->mm_list);
3054         INIT_LIST_HEAD(&obj->gtt_list);
3055         INIT_LIST_HEAD(&obj->ring_list);
3056         INIT_LIST_HEAD(&obj->exec_list);
3057
3058         obj->ops = ops;
3059
3060         obj->fence_reg = I915_FENCE_REG_NONE;
3061         obj->madv = I915_MADV_WILLNEED;
3062         /* Avoid an unnecessary call to unbind on the first bind. */
3063         obj->map_and_fenceable = true;
3064
3065         i915_gem_info_add_obj(obj->base.dev->dev_private, obj->base.size);
3066 }
3067
3068 static const struct drm_i915_gem_object_ops i915_gem_object_ops = {
3069         .get_pages = i915_gem_object_get_pages_gtt,
3070         .put_pages = i915_gem_object_put_pages_gtt,
3071 };
3072
3073 struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
3074                                                   size_t size)
3075 {
3076         struct drm_i915_gem_object *obj;
3077 #if 0
3078         struct address_space *mapping;
3079         u32 mask;
3080 #endif
3081
3082         obj = kmalloc(sizeof(*obj), M_DRM, M_WAITOK | M_ZERO);
3083         if (obj == NULL)
3084                 return NULL;
3085
3086         if (drm_gem_object_init(dev, &obj->base, size) != 0) {
3087                 kfree(obj, M_DRM);
3088                 return NULL;
3089         }
3090
3091 #if 0
3092         mask = GFP_HIGHUSER | __GFP_RECLAIMABLE;
3093         if (IS_CRESTLINE(dev) || IS_BROADWATER(dev)) {
3094                 /* 965gm cannot relocate objects above 4GiB. */
3095                 mask &= ~__GFP_HIGHMEM;
3096                 mask |= __GFP_DMA32;
3097         }
3098
3099         mapping = obj->base.filp->f_path.dentry->d_inode->i_mapping;
3100         mapping_set_gfp_mask(mapping, mask);
3101 #endif
3102
3103         i915_gem_object_init(obj, &i915_gem_object_ops);
3104
3105         obj->base.write_domain = I915_GEM_DOMAIN_CPU;
3106         obj->base.read_domains = I915_GEM_DOMAIN_CPU;
3107
3108         if (HAS_LLC(dev)) {
3109                 /* On some devices, we can have the GPU use the LLC (the CPU
3110                  * cache) for about a 10% performance improvement
3111                  * compared to uncached.  Graphics requests other than
3112                  * display scanout are coherent with the CPU in
3113                  * accessing this cache.  This means in this mode we
3114                  * don't need to clflush on the CPU side, and on the
3115                  * GPU side we only need to flush internal caches to
3116                  * get data visible to the CPU.
3117                  *
3118                  * However, we maintain the display planes as UC, and so
3119                  * need to rebind when first used as such.
3120                  */
3121                 obj->cache_level = I915_CACHE_LLC;
3122         } else
3123                 obj->cache_level = I915_CACHE_NONE;
3124
3125         return obj;
3126 }
3127
3128 int i915_gem_init_object(struct drm_gem_object *obj)
3129 {
3130         BUG();
3131
3132         return 0;
3133 }
3134
3135 void i915_gem_free_object(struct drm_gem_object *gem_obj)
3136 {
3137         struct drm_i915_gem_object *obj = to_intel_bo(gem_obj);
3138         struct drm_device *dev = obj->base.dev;
3139         drm_i915_private_t *dev_priv = dev->dev_private;
3140
3141         if (obj->phys_obj)
3142                 i915_gem_detach_phys_object(dev, obj);
3143
3144         obj->pin_count = 0;
3145         if (WARN_ON(i915_gem_object_unbind(obj) == -ERESTARTSYS)) {
3146                 bool was_interruptible;
3147
3148                 was_interruptible = dev_priv->mm.interruptible;
3149                 dev_priv->mm.interruptible = false;
3150
3151                 WARN_ON(i915_gem_object_unbind(obj));
3152
3153                 dev_priv->mm.interruptible = was_interruptible;
3154         }
3155
3156         drm_gem_free_mmap_offset(&obj->base);
3157
3158         drm_gem_object_release(&obj->base);
3159         i915_gem_info_remove_obj(dev_priv, obj->base.size);
3160
3161         drm_free(obj->bit_17, M_DRM);
3162         drm_free(obj, M_DRM);
3163 }
3164
3165 int
3166 i915_gem_do_init(struct drm_device *dev, unsigned long start,
3167     unsigned long mappable_end, unsigned long end)
3168 {
3169         drm_i915_private_t *dev_priv;
3170         unsigned long mappable;
3171         int error;
3172
3173         dev_priv = dev->dev_private;
3174         mappable = min(end, mappable_end) - start;
3175
3176         drm_mm_init(&dev_priv->mm.gtt_space, start, end - start);
3177
3178         dev_priv->mm.gtt_start = start;
3179         dev_priv->mm.gtt_mappable_end = mappable_end;
3180         dev_priv->mm.gtt_end = end;
3181         dev_priv->mm.gtt_total = end - start;
3182         dev_priv->mm.mappable_gtt_total = mappable;
3183
3184         /* Take over this portion of the GTT */
3185         intel_gtt_clear_range(start / PAGE_SIZE, (end-start) / PAGE_SIZE);
3186         device_printf(dev->dev,
3187             "taking over the fictitious range 0x%lx-0x%lx\n",
3188             dev->agp->base + start, dev->agp->base + start + mappable);
3189         error = -vm_phys_fictitious_reg_range(dev->agp->base + start,
3190             dev->agp->base + start + mappable, VM_MEMATTR_WRITE_COMBINING);
3191         return (error);
3192 }
3193
3194 int
3195 i915_gem_idle(struct drm_device *dev)
3196 {
3197         drm_i915_private_t *dev_priv = dev->dev_private;
3198         int ret;
3199
3200         DRM_LOCK(dev);
3201
3202         if (dev_priv->mm.suspended) {
3203                 DRM_UNLOCK(dev);
3204                 return 0;
3205         }
3206
3207         ret = i915_gpu_idle(dev);
3208         if (ret) {
3209                 DRM_UNLOCK(dev);
3210                 return ret;
3211         }
3212         i915_gem_retire_requests(dev);
3213
3214         /* Under UMS, be paranoid and evict. */
3215         if (!drm_core_check_feature(dev, DRIVER_MODESET))
3216                 i915_gem_evict_everything(dev);
3217
3218         i915_gem_reset_fences(dev);
3219
3220         /* Hack!  Don't let anybody do execbuf while we don't control the chip.
3221          * We need to replace this with a semaphore, or something.
3222          * And not confound mm.suspended!
3223          */
3224         dev_priv->mm.suspended = 1;
3225         del_timer_sync(&dev_priv->hangcheck_timer);
3226
3227         i915_kernel_lost_context(dev);
3228         i915_gem_cleanup_ringbuffer(dev);
3229
3230         DRM_UNLOCK(dev);
3231
3232         /* Cancel the retire work handler, which should be idle now. */
3233         cancel_delayed_work_sync(&dev_priv->mm.retire_work);
3234
3235         return 0;
3236 }
3237
3238 void i915_gem_l3_remap(struct drm_device *dev)
3239 {
3240         drm_i915_private_t *dev_priv = dev->dev_private;
3241         u32 misccpctl;
3242         int i;
3243
3244         if (!HAS_L3_GPU_CACHE(dev))
3245                 return;
3246
3247         if (!dev_priv->l3_parity.remap_info)
3248                 return;
3249
3250         misccpctl = I915_READ(GEN7_MISCCPCTL);
3251         I915_WRITE(GEN7_MISCCPCTL, misccpctl & ~GEN7_DOP_CLOCK_GATE_ENABLE);
3252         POSTING_READ(GEN7_MISCCPCTL);
3253
3254         for (i = 0; i < GEN7_L3LOG_SIZE; i += 4) {
3255                 u32 remap = I915_READ(GEN7_L3LOG_BASE + i);
3256                 if (remap && remap != dev_priv->l3_parity.remap_info[i/4])
3257                         DRM_DEBUG("0x%x was already programmed to %x\n",
3258                                   GEN7_L3LOG_BASE + i, remap);
3259                 if (remap && !dev_priv->l3_parity.remap_info[i/4])
3260                         DRM_DEBUG_DRIVER("Clearing remapped register\n");
3261                 I915_WRITE(GEN7_L3LOG_BASE + i, dev_priv->l3_parity.remap_info[i/4]);
3262         }
3263
3264         /* Make sure all the writes land before disabling dop clock gating */
3265         POSTING_READ(GEN7_L3LOG_BASE);
3266
3267         I915_WRITE(GEN7_MISCCPCTL, misccpctl);
3268 }
3269
3270 void i915_gem_init_swizzling(struct drm_device *dev)
3271 {
3272         drm_i915_private_t *dev_priv = dev->dev_private;
3273
3274         if (INTEL_INFO(dev)->gen < 5 ||
3275             dev_priv->mm.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_NONE)
3276                 return;
3277
3278         I915_WRITE(DISP_ARB_CTL, I915_READ(DISP_ARB_CTL) |
3279                                  DISP_TILE_SURFACE_SWIZZLING);
3280
3281         if (IS_GEN5(dev))
3282                 return;
3283
3284         I915_WRITE(TILECTL, I915_READ(TILECTL) | TILECTL_SWZCTL);
3285         if (IS_GEN6(dev))
3286                 I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_SNB));
3287         else
3288                 I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_IVB));
3289 }
3290
3291 static bool
3292 intel_enable_blt(struct drm_device *dev)
3293 {
3294         int revision;
3295
3296         if (!HAS_BLT(dev))
3297                 return false;
3298
3299         /* The blitter was dysfunctional on early prototypes */
3300         revision = pci_read_config(dev->dev, PCIR_REVID, 1);
3301         if (IS_GEN6(dev) && revision < 8) {
3302                 DRM_INFO("BLT not supported on this pre-production hardware;"
3303                          " graphics performance will be degraded.\n");
3304                 return false;
3305         }
3306
3307         return true;
3308 }
3309
3310 int
3311 i915_gem_init_hw(struct drm_device *dev)
3312 {
3313         drm_i915_private_t *dev_priv = dev->dev_private;
3314         int ret;
3315
3316         if (IS_HASWELL(dev) && (I915_READ(0x120010) == 1))
3317                 I915_WRITE(0x9008, I915_READ(0x9008) | 0xf0000);
3318
3319         i915_gem_l3_remap(dev);
3320
3321         i915_gem_init_swizzling(dev);
3322
3323         ret = intel_init_render_ring_buffer(dev);
3324         if (ret)
3325                 return ret;
3326
3327         if (HAS_BSD(dev)) {
3328                 ret = intel_init_bsd_ring_buffer(dev);
3329                 if (ret)
3330                         goto cleanup_render_ring;
3331         }
3332
3333         if (intel_enable_blt(dev)) {
3334                 ret = intel_init_blt_ring_buffer(dev);
3335                 if (ret)
3336                         goto cleanup_bsd_ring;
3337         }
3338
3339         dev_priv->next_seqno = 1;
3340
3341         /*
3342          * XXX: There was some w/a described somewhere suggesting loading
3343          * contexts before PPGTT.
3344          */
3345         i915_gem_context_init(dev);
3346         i915_gem_init_ppgtt(dev);
3347
3348         return 0;
3349
3350 cleanup_bsd_ring:
3351         intel_cleanup_ring_buffer(&dev_priv->ring[VCS]);
3352 cleanup_render_ring:
3353         intel_cleanup_ring_buffer(&dev_priv->ring[RCS]);
3354         return ret;
3355 }
3356
3357 static bool
3358 intel_enable_ppgtt(struct drm_device *dev)
3359 {
3360         if (i915_enable_ppgtt >= 0)
3361                 return i915_enable_ppgtt;
3362
3363         /* Disable ppgtt on SNB if VT-d is on. */
3364         if (INTEL_INFO(dev)->gen == 6 && intel_iommu_enabled)
3365                 return false;
3366
3367         return true;
3368 }
3369
3370 int i915_gem_init(struct drm_device *dev)
3371 {
3372         struct drm_i915_private *dev_priv = dev->dev_private;
3373         unsigned long prealloc_size, gtt_size, mappable_size;
3374         int ret;
3375
3376         prealloc_size = dev_priv->mm.gtt->stolen_size;
3377         gtt_size = dev_priv->mm.gtt->gtt_total_entries << PAGE_SHIFT;
3378         mappable_size = dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
3379
3380         /* Basic memrange allocator for stolen space */
3381         drm_mm_init(&dev_priv->mm.stolen, 0, prealloc_size);
3382
3383         DRM_LOCK(dev);
3384         if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) {
3385                 /* PPGTT pdes are stolen from global gtt ptes, so shrink the
3386                  * aperture accordingly when using aliasing ppgtt. */
3387                 gtt_size -= I915_PPGTT_PD_ENTRIES*PAGE_SIZE;
3388                 /* For paranoia keep the guard page in between. */
3389                 gtt_size -= PAGE_SIZE;
3390
3391                 i915_gem_do_init(dev, 0, mappable_size, gtt_size);
3392
3393                 ret = i915_gem_init_aliasing_ppgtt(dev);
3394                 if (ret) {
3395                         DRM_UNLOCK(dev);
3396                         return ret;
3397                 }
3398         } else {
3399                 /* Let GEM Manage all of the aperture.
3400                  *
3401                  * However, leave one page at the end still bound to the scratch
3402                  * page.  There are a number of places where the hardware
3403                  * apparently prefetches past the end of the object, and we've
3404                  * seen multiple hangs with the GPU head pointer stuck in a
3405                  * batchbuffer bound at the last page of the aperture.  One page
3406                  * should be enough to keep any prefetching inside of the
3407                  * aperture.
3408                  */
3409                 i915_gem_do_init(dev, 0, mappable_size, gtt_size - PAGE_SIZE);
3410         }
3411
3412         ret = i915_gem_init_hw(dev);
3413         DRM_UNLOCK(dev);
3414         if (ret) {
3415                 i915_gem_cleanup_aliasing_ppgtt(dev);
3416                 return ret;
3417         }
3418
3419 #if 0
3420         /* Try to set up FBC with a reasonable compressed buffer size */
3421         if (I915_HAS_FBC(dev) && i915_powersave) {
3422                 int cfb_size;
3423
3424                 /* Leave 1M for line length buffer & misc. */
3425
3426                 /* Try to get a 32M buffer... */
3427                 if (prealloc_size > (36*1024*1024))
3428                         cfb_size = 32*1024*1024;
3429                 else /* fall back to 7/8 of the stolen space */
3430                         cfb_size = prealloc_size * 7 / 8;
3431                 i915_setup_compression(dev, cfb_size);
3432         }
3433 #endif
3434
3435         /* Allow hardware batchbuffers unless told otherwise, but not for KMS. */
3436         if (!drm_core_check_feature(dev, DRIVER_MODESET))
3437                 dev_priv->dri1.allow_batchbuffer = 1;
3438         return 0;
3439 }
3440
3441 void
3442 i915_gem_cleanup_ringbuffer(struct drm_device *dev)
3443 {
3444         drm_i915_private_t *dev_priv = dev->dev_private;
3445         struct intel_ring_buffer *ring;
3446         int i;
3447
3448         for_each_ring(ring, dev_priv, i)
3449                 intel_cleanup_ring_buffer(ring);
3450 }
3451
3452 int
3453 i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
3454                        struct drm_file *file_priv)
3455 {
3456         drm_i915_private_t *dev_priv = dev->dev_private;
3457         int ret;
3458
3459         if (drm_core_check_feature(dev, DRIVER_MODESET))
3460                 return 0;
3461
3462         if (atomic_read(&dev_priv->mm.wedged)) {
3463                 DRM_ERROR("Reenabling wedged hardware, good luck\n");
3464                 atomic_set(&dev_priv->mm.wedged, 0);
3465         }
3466
3467         DRM_LOCK(dev);
3468         dev_priv->mm.suspended = 0;
3469
3470         ret = i915_gem_init_hw(dev);
3471         if (ret != 0) {
3472                 DRM_UNLOCK(dev);
3473                 return ret;
3474         }
3475
3476         KASSERT(list_empty(&dev_priv->mm.active_list), ("active list"));
3477         DRM_UNLOCK(dev);
3478
3479         ret = drm_irq_install(dev);
3480         if (ret)
3481                 goto cleanup_ringbuffer;
3482
3483         return 0;
3484
3485 cleanup_ringbuffer:
3486         DRM_LOCK(dev);
3487         i915_gem_cleanup_ringbuffer(dev);
3488         dev_priv->mm.suspended = 1;
3489         DRM_UNLOCK(dev);
3490
3491         return ret;
3492 }
3493
3494 int
3495 i915_gem_leavevt_ioctl(struct drm_device *dev, void *data,
3496                        struct drm_file *file_priv)
3497 {
3498         if (drm_core_check_feature(dev, DRIVER_MODESET))
3499                 return 0;
3500
3501         drm_irq_uninstall(dev);
3502         return i915_gem_idle(dev);
3503 }
3504
3505 void
3506 i915_gem_lastclose(struct drm_device *dev)
3507 {
3508         int ret;
3509
3510         if (drm_core_check_feature(dev, DRIVER_MODESET))
3511                 return;
3512
3513         ret = i915_gem_idle(dev);
3514         if (ret)
3515                 DRM_ERROR("failed to idle hardware: %d\n", ret);
3516 }
3517
3518 static void
3519 init_ring_lists(struct intel_ring_buffer *ring)
3520 {
3521         INIT_LIST_HEAD(&ring->active_list);
3522         INIT_LIST_HEAD(&ring->request_list);
3523 }
3524
3525 void
3526 i915_gem_load(struct drm_device *dev)
3527 {
3528         int i;
3529         drm_i915_private_t *dev_priv = dev->dev_private;
3530
3531         INIT_LIST_HEAD(&dev_priv->mm.active_list);
3532         INIT_LIST_HEAD(&dev_priv->mm.inactive_list);
3533         INIT_LIST_HEAD(&dev_priv->mm.fence_list);
3534         INIT_LIST_HEAD(&dev_priv->mm.bound_list);
3535         for (i = 0; i < I915_NUM_RINGS; i++)
3536                 init_ring_lists(&dev_priv->ring[i]);
3537         for (i = 0; i < I915_MAX_NUM_FENCES; i++)
3538                 INIT_LIST_HEAD(&dev_priv->fence_regs[i].lru_list);
3539         INIT_DELAYED_WORK(&dev_priv->mm.retire_work,
3540                           i915_gem_retire_work_handler);
3541         init_completion(&dev_priv->error_completion);
3542
3543         /* On GEN3 we really need to make sure the ARB C3 LP bit is set */
3544         if (IS_GEN3(dev)) {
3545                 I915_WRITE(MI_ARB_STATE,
3546                            _MASKED_BIT_ENABLE(MI_ARB_C3_LP_WRITE_ENABLE));
3547         }
3548
3549         dev_priv->relative_constants_mode = I915_EXEC_CONSTANTS_REL_GENERAL;
3550
3551         /* Old X drivers will take 0-2 for front, back, depth buffers */
3552         if (!drm_core_check_feature(dev, DRIVER_MODESET))
3553                 dev_priv->fence_reg_start = 3;
3554
3555         if (INTEL_INFO(dev)->gen >= 4 || IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
3556                 dev_priv->num_fence_regs = 16;
3557         else
3558                 dev_priv->num_fence_regs = 8;
3559
3560         /* Initialize fence registers to zero */
3561         i915_gem_reset_fences(dev);
3562
3563         i915_gem_detect_bit_6_swizzle(dev);
3564         init_waitqueue_head(&dev_priv->pending_flip_queue);
3565
3566         dev_priv->mm.interruptible = true;
3567
3568 #if 0
3569         dev_priv->mm.inactive_shrinker.shrink = i915_gem_inactive_shrink;
3570         dev_priv->mm.inactive_shrinker.seeks = DEFAULT_SEEKS;
3571         register_shrinker(&dev_priv->mm.inactive_shrinker);
3572 #else
3573         dev_priv->mm.i915_lowmem = EVENTHANDLER_REGISTER(vm_lowmem,
3574             i915_gem_lowmem, dev, EVENTHANDLER_PRI_ANY);
3575 #endif
3576 }
3577
3578 /*
3579  * Create a physically contiguous memory object for this object
3580  * e.g. for cursor + overlay regs
3581  */
3582 static int i915_gem_init_phys_object(struct drm_device *dev,
3583                                      int id, int size, int align)
3584 {
3585         drm_i915_private_t *dev_priv = dev->dev_private;
3586         struct drm_i915_gem_phys_object *phys_obj;
3587         int ret;
3588
3589         if (dev_priv->mm.phys_objs[id - 1] || !size)
3590                 return 0;
3591
3592         phys_obj = kmalloc(sizeof(struct drm_i915_gem_phys_object), M_DRM,
3593             M_WAITOK | M_ZERO);
3594         if (!phys_obj)
3595                 return -ENOMEM;
3596
3597         phys_obj->id = id;
3598
3599         phys_obj->handle = drm_pci_alloc(dev, size, align, ~0);
3600         if (!phys_obj->handle) {
3601                 ret = -ENOMEM;
3602                 goto kfree_obj;
3603         }
3604         pmap_change_attr((vm_offset_t)phys_obj->handle->vaddr,
3605             size / PAGE_SIZE, PAT_WRITE_COMBINING);
3606
3607         dev_priv->mm.phys_objs[id - 1] = phys_obj;
3608
3609         return 0;
3610
3611 kfree_obj:
3612         drm_free(phys_obj, M_DRM);
3613         return ret;
3614 }
3615
3616 static void i915_gem_free_phys_object(struct drm_device *dev, int id)
3617 {
3618         drm_i915_private_t *dev_priv = dev->dev_private;
3619         struct drm_i915_gem_phys_object *phys_obj;
3620
3621         if (!dev_priv->mm.phys_objs[id - 1])
3622                 return;
3623
3624         phys_obj = dev_priv->mm.phys_objs[id - 1];
3625         if (phys_obj->cur_obj) {
3626                 i915_gem_detach_phys_object(dev, phys_obj->cur_obj);
3627         }
3628
3629         drm_pci_free(dev, phys_obj->handle);
3630         drm_free(phys_obj, M_DRM);
3631         dev_priv->mm.phys_objs[id - 1] = NULL;
3632 }
3633
3634 void i915_gem_free_all_phys_object(struct drm_device *dev)
3635 {
3636         int i;
3637
3638         for (i = I915_GEM_PHYS_CURSOR_0; i <= I915_MAX_PHYS_OBJECT; i++)
3639                 i915_gem_free_phys_object(dev, i);
3640 }
3641
3642 void i915_gem_detach_phys_object(struct drm_device *dev,
3643                                  struct drm_i915_gem_object *obj)
3644 {
3645         struct vm_object *mapping = obj->base.vm_obj;
3646         char *vaddr;
3647         int i;
3648         int page_count;
3649
3650         if (!obj->phys_obj)
3651                 return;
3652         vaddr = obj->phys_obj->handle->vaddr;
3653
3654         page_count = obj->base.size / PAGE_SIZE;
3655         VM_OBJECT_LOCK(obj->base.vm_obj);
3656         for (i = 0; i < page_count; i++) {
3657                 struct vm_page *page = shmem_read_mapping_page(mapping, i);
3658                 if (!IS_ERR(page)) {
3659                         VM_OBJECT_UNLOCK(obj->base.vm_obj);
3660                         char *dst = kmap_atomic(page);
3661                         memcpy(dst, vaddr + i*PAGE_SIZE, PAGE_SIZE);
3662                         kunmap_atomic(dst);
3663
3664                         drm_clflush_pages(&page, 1);
3665
3666 #if 0
3667                         set_page_dirty(page);
3668                         mark_page_accessed(page);
3669                         page_cache_release(page);
3670 #endif
3671                         VM_OBJECT_LOCK(obj->base.vm_obj);
3672                         vm_page_reference(page);
3673                         vm_page_dirty(page);
3674                         vm_page_busy_wait(page, FALSE, "i915gem");
3675                         vm_page_unwire(page, 0);
3676                         vm_page_wakeup(page);
3677                 }
3678         }
3679         VM_OBJECT_UNLOCK(obj->base.vm_obj);
3680         intel_gtt_chipset_flush();
3681
3682         obj->phys_obj->cur_obj = NULL;
3683         obj->phys_obj = NULL;
3684 }
3685
3686 int
3687 i915_gem_attach_phys_object(struct drm_device *dev,
3688                             struct drm_i915_gem_object *obj,
3689                             int id,
3690                             int align)
3691 {
3692         struct vm_object *mapping = obj->base.vm_obj;
3693         drm_i915_private_t *dev_priv = dev->dev_private;
3694         int ret = 0;
3695         int page_count;
3696         int i;
3697
3698         if (id > I915_MAX_PHYS_OBJECT)
3699                 return -EINVAL;
3700
3701         if (obj->phys_obj) {
3702                 if (obj->phys_obj->id == id)
3703                         return 0;
3704                 i915_gem_detach_phys_object(dev, obj);
3705         }
3706
3707         /* create a new object */
3708         if (!dev_priv->mm.phys_objs[id - 1]) {
3709                 ret = i915_gem_init_phys_object(dev, id,
3710                                                 obj->base.size, align);
3711                 if (ret) {
3712                         DRM_ERROR("failed to init phys object %d size: %zu\n",
3713                                   id, obj->base.size);
3714                         return ret;
3715                 }
3716         }
3717
3718         /* bind to the object */
3719         obj->phys_obj = dev_priv->mm.phys_objs[id - 1];
3720         obj->phys_obj->cur_obj = obj;
3721
3722         page_count = obj->base.size / PAGE_SIZE;
3723
3724         VM_OBJECT_LOCK(obj->base.vm_obj);
3725         for (i = 0; i < page_count; i++) {
3726                 struct vm_page *page;
3727                 char *dst, *src;
3728
3729                 page = shmem_read_mapping_page(mapping, i);
3730                 VM_OBJECT_UNLOCK(obj->base.vm_obj);
3731                 if (IS_ERR(page))
3732                         return PTR_ERR(page);
3733
3734                 src = kmap_atomic(page);
3735                 dst = (char*)obj->phys_obj->handle->vaddr + (i * PAGE_SIZE);
3736                 memcpy(dst, src, PAGE_SIZE);
3737                 kunmap_atomic(src);
3738
3739 #if 0
3740                 mark_page_accessed(page);
3741                 page_cache_release(page);
3742 #endif
3743                 VM_OBJECT_LOCK(obj->base.vm_obj);
3744                 vm_page_reference(page);
3745                 vm_page_busy_wait(page, FALSE, "i915gem");
3746                 vm_page_unwire(page, 0);
3747                 vm_page_wakeup(page);
3748         }
3749         VM_OBJECT_UNLOCK(obj->base.vm_obj);
3750
3751         return 0;
3752 }
3753
3754 static int
3755 i915_gem_phys_pwrite(struct drm_device *dev,
3756                      struct drm_i915_gem_object *obj,
3757                      struct drm_i915_gem_pwrite *args,
3758                      struct drm_file *file_priv)
3759 {
3760         void *vaddr = (char *)obj->phys_obj->handle->vaddr + args->offset;
3761         char __user *user_data = (char __user *) (uintptr_t) args->data_ptr;
3762
3763         if (copyin_nofault(user_data, vaddr, args->size) != 0) {
3764                 unsigned long unwritten;
3765
3766                 /* The physical object once assigned is fixed for the lifetime
3767                  * of the obj, so we can safely drop the lock and continue
3768                  * to access vaddr.
3769                  */
3770                 DRM_UNLOCK(dev);
3771                 unwritten = copy_from_user(vaddr, user_data, args->size);
3772                 DRM_LOCK(dev);
3773                 if (unwritten)
3774                         return -EFAULT;
3775         }
3776
3777         i915_gem_chipset_flush(dev);
3778         return 0;
3779 }
3780
3781 void i915_gem_release(struct drm_device *dev, struct drm_file *file)
3782 {
3783         struct drm_i915_file_private *file_priv = file->driver_priv;
3784
3785         /* Clean up our request list when the client is going away, so that
3786          * later retire_requests won't dereference our soon-to-be-gone
3787          * file_priv.
3788          */
3789         spin_lock(&file_priv->mm.lock);
3790         while (!list_empty(&file_priv->mm.request_list)) {
3791                 struct drm_i915_gem_request *request;
3792
3793                 request = list_first_entry(&file_priv->mm.request_list,
3794                                            struct drm_i915_gem_request,
3795                                            client_list);
3796                 list_del(&request->client_list);
3797                 request->file_priv = NULL;
3798         }
3799         spin_unlock(&file_priv->mm.lock);
3800 }
3801
3802 static int
3803 i915_gem_pager_ctor(void *handle, vm_ooffset_t size, vm_prot_t prot,
3804     vm_ooffset_t foff, struct ucred *cred, u_short *color)
3805 {
3806
3807         *color = 0; /* XXXKIB */
3808         return (0);
3809 }
3810
3811 int i915_intr_pf;
3812
3813 static int
3814 i915_gem_pager_fault(vm_object_t vm_obj, vm_ooffset_t offset, int prot,
3815     vm_page_t *mres)
3816 {
3817         struct drm_gem_object *gem_obj;
3818         struct drm_i915_gem_object *obj;
3819         struct drm_device *dev;
3820         drm_i915_private_t *dev_priv;
3821         vm_page_t m, oldm;
3822         int cause, ret;
3823         bool write;
3824
3825         gem_obj = vm_obj->handle;
3826         obj = to_intel_bo(gem_obj);
3827         dev = obj->base.dev;
3828         dev_priv = dev->dev_private;
3829 #if 0
3830         write = (prot & VM_PROT_WRITE) != 0;
3831 #else
3832         write = true;
3833 #endif
3834         vm_object_pip_add(vm_obj, 1);
3835
3836         /*
3837          * Remove the placeholder page inserted by vm_fault() from the
3838          * object before dropping the object lock. If
3839          * i915_gem_release_mmap() is active in parallel on this gem
3840          * object, then it owns the drm device sx and might find the
3841          * placeholder already. Then, since the page is busy,
3842          * i915_gem_release_mmap() sleeps waiting for the busy state
3843          * of the page cleared. We will be not able to acquire drm
3844          * device lock until i915_gem_release_mmap() is able to make a
3845          * progress.
3846          */
3847         if (*mres != NULL) {
3848                 oldm = *mres;
3849                 vm_page_remove(oldm);
3850                 *mres = NULL;
3851         } else
3852                 oldm = NULL;
3853 retry:
3854         VM_OBJECT_UNLOCK(vm_obj);
3855 unlocked_vmobj:
3856         cause = ret = 0;
3857         m = NULL;
3858
3859         if (i915_intr_pf) {
3860                 ret = i915_mutex_lock_interruptible(dev);
3861                 if (ret != 0) {
3862                         cause = 10;
3863                         goto out;
3864                 }
3865         } else
3866                 DRM_LOCK(dev);
3867
3868         /*
3869          * Since the object lock was dropped, other thread might have
3870          * faulted on the same GTT address and instantiated the
3871          * mapping for the page.  Recheck.
3872          */
3873         VM_OBJECT_LOCK(vm_obj);
3874         m = vm_page_lookup(vm_obj, OFF_TO_IDX(offset));
3875         if (m != NULL) {
3876                 if ((m->flags & PG_BUSY) != 0) {
3877                         DRM_UNLOCK(dev);
3878 #if 0 /* XXX */
3879                         vm_page_sleep(m, "915pee");
3880 #endif
3881                         goto retry;
3882                 }
3883                 goto have_page;
3884         } else
3885                 VM_OBJECT_UNLOCK(vm_obj);
3886
3887         /* Now bind it into the GTT if needed */
3888         if (!obj->map_and_fenceable) {
3889                 ret = i915_gem_object_unbind(obj);
3890                 if (ret != 0) {
3891                         cause = 20;
3892                         goto unlock;
3893                 }
3894         }
3895         if (!obj->gtt_space) {
3896                 ret = i915_gem_object_bind_to_gtt(obj, 0, true, false);
3897                 if (ret != 0) {
3898                         cause = 30;
3899                         goto unlock;
3900                 }
3901
3902                 ret = i915_gem_object_set_to_gtt_domain(obj, write);
3903                 if (ret != 0) {
3904                         cause = 40;
3905                         goto unlock;
3906                 }
3907         }
3908
3909         if (obj->tiling_mode == I915_TILING_NONE)
3910                 ret = i915_gem_object_put_fence(obj);
3911         else
3912                 ret = i915_gem_object_get_fence(obj);
3913         if (ret != 0) {
3914                 cause = 50;
3915                 goto unlock;
3916         }
3917
3918         if (i915_gem_object_is_inactive(obj))
3919                 list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
3920
3921         obj->fault_mappable = true;
3922         VM_OBJECT_LOCK(vm_obj);
3923         m = vm_phys_fictitious_to_vm_page(dev->agp->base + obj->gtt_offset +
3924             offset);
3925         if (m == NULL) {
3926                 cause = 60;
3927                 ret = -EFAULT;
3928                 goto unlock;
3929         }
3930         KASSERT((m->flags & PG_FICTITIOUS) != 0,
3931             ("not fictitious %p", m));
3932         KASSERT(m->wire_count == 1, ("wire_count not 1 %p", m));
3933
3934         if ((m->flags & PG_BUSY) != 0) {
3935                 DRM_UNLOCK(dev);
3936 #if 0 /* XXX */
3937                 vm_page_sleep(m, "915pbs");
3938 #endif
3939                 goto retry;
3940         }
3941         m->valid = VM_PAGE_BITS_ALL;
3942         vm_page_insert(m, vm_obj, OFF_TO_IDX(offset));
3943 have_page:
3944         *mres = m;
3945         vm_page_busy_try(m, false);
3946
3947         DRM_UNLOCK(dev);
3948         if (oldm != NULL) {
3949                 vm_page_free(oldm);
3950         }
3951         vm_object_pip_wakeup(vm_obj);
3952         return (VM_PAGER_OK);
3953
3954 unlock:
3955         DRM_UNLOCK(dev);
3956 out:
3957         KASSERT(ret != 0, ("i915_gem_pager_fault: wrong return"));
3958         if (ret == -EAGAIN || ret == -EIO || ret == -EINTR) {
3959                 goto unlocked_vmobj;
3960         }
3961         VM_OBJECT_LOCK(vm_obj);
3962         vm_object_pip_wakeup(vm_obj);
3963         return (VM_PAGER_ERROR);
3964 }
3965
3966 static void
3967 i915_gem_pager_dtor(void *handle)
3968 {
3969         struct drm_gem_object *obj;
3970         struct drm_device *dev;
3971
3972         obj = handle;
3973         dev = obj->dev;
3974
3975         DRM_LOCK(dev);
3976         drm_gem_free_mmap_offset(obj);
3977         i915_gem_release_mmap(to_intel_bo(obj));
3978         drm_gem_object_unreference(obj);
3979         DRM_UNLOCK(dev);
3980 }
3981
3982 struct cdev_pager_ops i915_gem_pager_ops = {
3983         .cdev_pg_fault  = i915_gem_pager_fault,
3984         .cdev_pg_ctor   = i915_gem_pager_ctor,
3985         .cdev_pg_dtor   = i915_gem_pager_dtor
3986 };
3987
3988 #define GEM_PARANOID_CHECK_GTT 0
3989 #if GEM_PARANOID_CHECK_GTT
3990 static void
3991 i915_gem_assert_pages_not_mapped(struct drm_device *dev, vm_page_t *ma,
3992     int page_count)
3993 {
3994         struct drm_i915_private *dev_priv;
3995         vm_paddr_t pa;
3996         unsigned long start, end;
3997         u_int i;
3998         int j;
3999
4000         dev_priv = dev->dev_private;
4001         start = OFF_TO_IDX(dev_priv->mm.gtt_start);
4002         end = OFF_TO_IDX(dev_priv->mm.gtt_end);
4003         for (i = start; i < end; i++) {
4004                 pa = intel_gtt_read_pte_paddr(i);
4005                 for (j = 0; j < page_count; j++) {
4006                         if (pa == VM_PAGE_TO_PHYS(ma[j])) {
4007                                 panic("Page %p in GTT pte index %d pte %x",
4008                                     ma[i], i, intel_gtt_read_pte(i));
4009                         }
4010                 }
4011         }
4012 }
4013 #endif
4014
4015 static int
4016 i915_gpu_is_active(struct drm_device *dev)
4017 {
4018         drm_i915_private_t *dev_priv = dev->dev_private;
4019
4020         return !list_empty(&dev_priv->mm.active_list);
4021 }
4022
4023 static void
4024 i915_gem_lowmem(void *arg)
4025 {
4026         struct drm_device *dev;
4027         struct drm_i915_private *dev_priv;
4028         struct drm_i915_gem_object *obj, *next;
4029         int cnt, cnt_fail, cnt_total;
4030
4031         dev = arg;
4032         dev_priv = dev->dev_private;
4033
4034         if (lockmgr(&dev->dev_struct_lock, LK_EXCLUSIVE|LK_NOWAIT))
4035                 return;
4036
4037 rescan:
4038         /* first scan for clean buffers */
4039         i915_gem_retire_requests(dev);
4040
4041         cnt_total = cnt_fail = cnt = 0;
4042
4043         list_for_each_entry_safe(obj, next, &dev_priv->mm.inactive_list,
4044             mm_list) {
4045                 if (i915_gem_object_is_purgeable(obj)) {
4046                         if (i915_gem_object_unbind(obj) != 0)
4047                                 cnt_total++;
4048                 } else
4049                         cnt_total++;
4050         }
4051
4052         /* second pass, evict/count anything still on the inactive list */
4053         list_for_each_entry_safe(obj, next, &dev_priv->mm.inactive_list,
4054             mm_list) {
4055                 if (i915_gem_object_unbind(obj) == 0)
4056                         cnt++;
4057                 else
4058                         cnt_fail++;
4059         }
4060
4061         if (cnt_fail > cnt_total / 100 && i915_gpu_is_active(dev)) {
4062                 /*
4063                  * We are desperate for pages, so as a last resort, wait
4064                  * for the GPU to finish and discard whatever we can.
4065                  * This has a dramatic impact to reduce the number of
4066                  * OOM-killer events whilst running the GPU aggressively.
4067                  */
4068                 if (i915_gpu_idle(dev) == 0)
4069                         goto rescan;
4070         }
4071         DRM_UNLOCK(dev);
4072 }
4073
4074 void
4075 i915_gem_unload(struct drm_device *dev)
4076 {
4077         struct drm_i915_private *dev_priv;
4078
4079         dev_priv = dev->dev_private;
4080         EVENTHANDLER_DEREGISTER(vm_lowmem, dev_priv->mm.i915_lowmem);
4081 }