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