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