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