xref: /openbmc/linux/drivers/gpu/drm/i915/i915_gem.c (revision 1f0214a8)
1 /*
2  * Copyright © 2008-2015 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 <linux/dma-fence-array.h>
29 #include <linux/kthread.h>
30 #include <linux/dma-resv.h>
31 #include <linux/shmem_fs.h>
32 #include <linux/slab.h>
33 #include <linux/stop_machine.h>
34 #include <linux/swap.h>
35 #include <linux/pci.h>
36 #include <linux/dma-buf.h>
37 #include <linux/mman.h>
38 
39 #include <drm/drm_cache.h>
40 #include <drm/drm_vma_manager.h>
41 
42 #include "display/intel_display.h"
43 #include "display/intel_frontbuffer.h"
44 
45 #include "gem/i915_gem_clflush.h"
46 #include "gem/i915_gem_context.h"
47 #include "gem/i915_gem_ioctls.h"
48 #include "gem/i915_gem_mman.h"
49 #include "gem/i915_gem_pm.h"
50 #include "gem/i915_gem_region.h"
51 #include "gem/i915_gem_userptr.h"
52 #include "gt/intel_engine_user.h"
53 #include "gt/intel_gt.h"
54 #include "gt/intel_gt_pm.h"
55 #include "gt/intel_workarounds.h"
56 
57 #include "i915_drv.h"
58 #include "i915_file_private.h"
59 #include "i915_trace.h"
60 #include "i915_vgpu.h"
61 #include "intel_pm.h"
62 
63 static int
64 insert_mappable_node(struct i915_ggtt *ggtt, struct drm_mm_node *node, u32 size)
65 {
66 	int err;
67 
68 	err = mutex_lock_interruptible(&ggtt->vm.mutex);
69 	if (err)
70 		return err;
71 
72 	memset(node, 0, sizeof(*node));
73 	err = drm_mm_insert_node_in_range(&ggtt->vm.mm, node,
74 					  size, 0, I915_COLOR_UNEVICTABLE,
75 					  0, ggtt->mappable_end,
76 					  DRM_MM_INSERT_LOW);
77 
78 	mutex_unlock(&ggtt->vm.mutex);
79 
80 	return err;
81 }
82 
83 static void
84 remove_mappable_node(struct i915_ggtt *ggtt, struct drm_mm_node *node)
85 {
86 	mutex_lock(&ggtt->vm.mutex);
87 	drm_mm_remove_node(node);
88 	mutex_unlock(&ggtt->vm.mutex);
89 }
90 
91 int
92 i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
93 			    struct drm_file *file)
94 {
95 	struct drm_i915_private *i915 = to_i915(dev);
96 	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
97 	struct drm_i915_gem_get_aperture *args = data;
98 	struct i915_vma *vma;
99 	u64 pinned;
100 
101 	if (mutex_lock_interruptible(&ggtt->vm.mutex))
102 		return -EINTR;
103 
104 	pinned = ggtt->vm.reserved;
105 	list_for_each_entry(vma, &ggtt->vm.bound_list, vm_link)
106 		if (i915_vma_is_pinned(vma))
107 			pinned += vma->node.size;
108 
109 	mutex_unlock(&ggtt->vm.mutex);
110 
111 	args->aper_size = ggtt->vm.total;
112 	args->aper_available_size = args->aper_size - pinned;
113 
114 	return 0;
115 }
116 
117 int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
118 			   unsigned long flags)
119 {
120 	struct intel_runtime_pm *rpm = &to_i915(obj->base.dev)->runtime_pm;
121 	LIST_HEAD(still_in_list);
122 	intel_wakeref_t wakeref;
123 	struct i915_vma *vma;
124 	int ret;
125 
126 	assert_object_held(obj);
127 
128 	if (list_empty(&obj->vma.list))
129 		return 0;
130 
131 	/*
132 	 * As some machines use ACPI to handle runtime-resume callbacks, and
133 	 * ACPI is quite kmalloc happy, we cannot resume beneath the vm->mutex
134 	 * as they are required by the shrinker. Ergo, we wake the device up
135 	 * first just in case.
136 	 */
137 	wakeref = intel_runtime_pm_get(rpm);
138 
139 try_again:
140 	ret = 0;
141 	spin_lock(&obj->vma.lock);
142 	while (!ret && (vma = list_first_entry_or_null(&obj->vma.list,
143 						       struct i915_vma,
144 						       obj_link))) {
145 		struct i915_address_space *vm = vma->vm;
146 
147 		list_move_tail(&vma->obj_link, &still_in_list);
148 		if (!i915_vma_is_bound(vma, I915_VMA_BIND_MASK))
149 			continue;
150 
151 		if (flags & I915_GEM_OBJECT_UNBIND_TEST) {
152 			ret = -EBUSY;
153 			break;
154 		}
155 
156 		ret = -EAGAIN;
157 		if (!i915_vm_tryopen(vm))
158 			break;
159 
160 		/* Prevent vma being freed by i915_vma_parked as we unbind */
161 		vma = __i915_vma_get(vma);
162 		spin_unlock(&obj->vma.lock);
163 
164 		if (vma) {
165 			bool vm_trylock = !!(flags & I915_GEM_OBJECT_UNBIND_VM_TRYLOCK);
166 			ret = -EBUSY;
167 			if (flags & I915_GEM_OBJECT_UNBIND_ASYNC) {
168 				assert_object_held(vma->obj);
169 				ret = i915_vma_unbind_async(vma, vm_trylock);
170 			}
171 
172 			if (ret == -EBUSY && (flags & I915_GEM_OBJECT_UNBIND_ACTIVE ||
173 					      !i915_vma_is_active(vma))) {
174 				if (vm_trylock) {
175 					if (mutex_trylock(&vma->vm->mutex)) {
176 						ret = __i915_vma_unbind(vma);
177 						mutex_unlock(&vma->vm->mutex);
178 					} else {
179 						ret = -EBUSY;
180 					}
181 				} else {
182 					ret = i915_vma_unbind(vma);
183 				}
184 			}
185 
186 			__i915_vma_put(vma);
187 		}
188 
189 		i915_vm_close(vm);
190 		spin_lock(&obj->vma.lock);
191 	}
192 	list_splice_init(&still_in_list, &obj->vma.list);
193 	spin_unlock(&obj->vma.lock);
194 
195 	if (ret == -EAGAIN && flags & I915_GEM_OBJECT_UNBIND_BARRIER) {
196 		rcu_barrier(); /* flush the i915_vm_release() */
197 		goto try_again;
198 	}
199 
200 	intel_runtime_pm_put(rpm, wakeref);
201 
202 	return ret;
203 }
204 
205 static int
206 shmem_pread(struct page *page, int offset, int len, char __user *user_data,
207 	    bool needs_clflush)
208 {
209 	char *vaddr;
210 	int ret;
211 
212 	vaddr = kmap(page);
213 
214 	if (needs_clflush)
215 		drm_clflush_virt_range(vaddr + offset, len);
216 
217 	ret = __copy_to_user(user_data, vaddr + offset, len);
218 
219 	kunmap(page);
220 
221 	return ret ? -EFAULT : 0;
222 }
223 
224 static int
225 i915_gem_shmem_pread(struct drm_i915_gem_object *obj,
226 		     struct drm_i915_gem_pread *args)
227 {
228 	unsigned int needs_clflush;
229 	unsigned int idx, offset;
230 	char __user *user_data;
231 	u64 remain;
232 	int ret;
233 
234 	ret = i915_gem_object_lock_interruptible(obj, NULL);
235 	if (ret)
236 		return ret;
237 
238 	ret = i915_gem_object_pin_pages(obj);
239 	if (ret)
240 		goto err_unlock;
241 
242 	ret = i915_gem_object_prepare_read(obj, &needs_clflush);
243 	if (ret)
244 		goto err_unpin;
245 
246 	i915_gem_object_finish_access(obj);
247 	i915_gem_object_unlock(obj);
248 
249 	remain = args->size;
250 	user_data = u64_to_user_ptr(args->data_ptr);
251 	offset = offset_in_page(args->offset);
252 	for (idx = args->offset >> PAGE_SHIFT; remain; idx++) {
253 		struct page *page = i915_gem_object_get_page(obj, idx);
254 		unsigned int length = min_t(u64, remain, PAGE_SIZE - offset);
255 
256 		ret = shmem_pread(page, offset, length, user_data,
257 				  needs_clflush);
258 		if (ret)
259 			break;
260 
261 		remain -= length;
262 		user_data += length;
263 		offset = 0;
264 	}
265 
266 	i915_gem_object_unpin_pages(obj);
267 	return ret;
268 
269 err_unpin:
270 	i915_gem_object_unpin_pages(obj);
271 err_unlock:
272 	i915_gem_object_unlock(obj);
273 	return ret;
274 }
275 
276 static inline bool
277 gtt_user_read(struct io_mapping *mapping,
278 	      loff_t base, int offset,
279 	      char __user *user_data, int length)
280 {
281 	void __iomem *vaddr;
282 	unsigned long unwritten;
283 
284 	/* We can use the cpu mem copy function because this is X86. */
285 	vaddr = io_mapping_map_atomic_wc(mapping, base);
286 	unwritten = __copy_to_user_inatomic(user_data,
287 					    (void __force *)vaddr + offset,
288 					    length);
289 	io_mapping_unmap_atomic(vaddr);
290 	if (unwritten) {
291 		vaddr = io_mapping_map_wc(mapping, base, PAGE_SIZE);
292 		unwritten = copy_to_user(user_data,
293 					 (void __force *)vaddr + offset,
294 					 length);
295 		io_mapping_unmap(vaddr);
296 	}
297 	return unwritten;
298 }
299 
300 static struct i915_vma *i915_gem_gtt_prepare(struct drm_i915_gem_object *obj,
301 					     struct drm_mm_node *node,
302 					     bool write)
303 {
304 	struct drm_i915_private *i915 = to_i915(obj->base.dev);
305 	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
306 	struct i915_vma *vma;
307 	struct i915_gem_ww_ctx ww;
308 	int ret;
309 
310 	i915_gem_ww_ctx_init(&ww, true);
311 retry:
312 	vma = ERR_PTR(-ENODEV);
313 	ret = i915_gem_object_lock(obj, &ww);
314 	if (ret)
315 		goto err_ww;
316 
317 	ret = i915_gem_object_set_to_gtt_domain(obj, write);
318 	if (ret)
319 		goto err_ww;
320 
321 	if (!i915_gem_object_is_tiled(obj))
322 		vma = i915_gem_object_ggtt_pin_ww(obj, &ww, NULL, 0, 0,
323 						  PIN_MAPPABLE |
324 						  PIN_NONBLOCK /* NOWARN */ |
325 						  PIN_NOEVICT);
326 	if (vma == ERR_PTR(-EDEADLK)) {
327 		ret = -EDEADLK;
328 		goto err_ww;
329 	} else if (!IS_ERR(vma)) {
330 		node->start = i915_ggtt_offset(vma);
331 		node->flags = 0;
332 	} else {
333 		ret = insert_mappable_node(ggtt, node, PAGE_SIZE);
334 		if (ret)
335 			goto err_ww;
336 		GEM_BUG_ON(!drm_mm_node_allocated(node));
337 		vma = NULL;
338 	}
339 
340 	ret = i915_gem_object_pin_pages(obj);
341 	if (ret) {
342 		if (drm_mm_node_allocated(node)) {
343 			ggtt->vm.clear_range(&ggtt->vm, node->start, node->size);
344 			remove_mappable_node(ggtt, node);
345 		} else {
346 			i915_vma_unpin(vma);
347 		}
348 	}
349 
350 err_ww:
351 	if (ret == -EDEADLK) {
352 		ret = i915_gem_ww_ctx_backoff(&ww);
353 		if (!ret)
354 			goto retry;
355 	}
356 	i915_gem_ww_ctx_fini(&ww);
357 
358 	return ret ? ERR_PTR(ret) : vma;
359 }
360 
361 static void i915_gem_gtt_cleanup(struct drm_i915_gem_object *obj,
362 				 struct drm_mm_node *node,
363 				 struct i915_vma *vma)
364 {
365 	struct drm_i915_private *i915 = to_i915(obj->base.dev);
366 	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
367 
368 	i915_gem_object_unpin_pages(obj);
369 	if (drm_mm_node_allocated(node)) {
370 		ggtt->vm.clear_range(&ggtt->vm, node->start, node->size);
371 		remove_mappable_node(ggtt, node);
372 	} else {
373 		i915_vma_unpin(vma);
374 	}
375 }
376 
377 static int
378 i915_gem_gtt_pread(struct drm_i915_gem_object *obj,
379 		   const struct drm_i915_gem_pread *args)
380 {
381 	struct drm_i915_private *i915 = to_i915(obj->base.dev);
382 	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
383 	intel_wakeref_t wakeref;
384 	struct drm_mm_node node;
385 	void __user *user_data;
386 	struct i915_vma *vma;
387 	u64 remain, offset;
388 	int ret = 0;
389 
390 	wakeref = intel_runtime_pm_get(&i915->runtime_pm);
391 
392 	vma = i915_gem_gtt_prepare(obj, &node, false);
393 	if (IS_ERR(vma)) {
394 		ret = PTR_ERR(vma);
395 		goto out_rpm;
396 	}
397 
398 	user_data = u64_to_user_ptr(args->data_ptr);
399 	remain = args->size;
400 	offset = args->offset;
401 
402 	while (remain > 0) {
403 		/* Operation in this page
404 		 *
405 		 * page_base = page offset within aperture
406 		 * page_offset = offset within page
407 		 * page_length = bytes to copy for this page
408 		 */
409 		u32 page_base = node.start;
410 		unsigned page_offset = offset_in_page(offset);
411 		unsigned page_length = PAGE_SIZE - page_offset;
412 		page_length = remain < page_length ? remain : page_length;
413 		if (drm_mm_node_allocated(&node)) {
414 			ggtt->vm.insert_page(&ggtt->vm,
415 					     i915_gem_object_get_dma_address(obj, offset >> PAGE_SHIFT),
416 					     node.start, I915_CACHE_NONE, 0);
417 		} else {
418 			page_base += offset & PAGE_MASK;
419 		}
420 
421 		if (gtt_user_read(&ggtt->iomap, page_base, page_offset,
422 				  user_data, page_length)) {
423 			ret = -EFAULT;
424 			break;
425 		}
426 
427 		remain -= page_length;
428 		user_data += page_length;
429 		offset += page_length;
430 	}
431 
432 	i915_gem_gtt_cleanup(obj, &node, vma);
433 out_rpm:
434 	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
435 	return ret;
436 }
437 
438 /**
439  * Reads data from the object referenced by handle.
440  * @dev: drm device pointer
441  * @data: ioctl data blob
442  * @file: drm file pointer
443  *
444  * On error, the contents of *data are undefined.
445  */
446 int
447 i915_gem_pread_ioctl(struct drm_device *dev, void *data,
448 		     struct drm_file *file)
449 {
450 	struct drm_i915_private *i915 = to_i915(dev);
451 	struct drm_i915_gem_pread *args = data;
452 	struct drm_i915_gem_object *obj;
453 	int ret;
454 
455 	/* PREAD is disallowed for all platforms after TGL-LP.  This also
456 	 * covers all platforms with local memory.
457 	 */
458 	if (GRAPHICS_VER(i915) >= 12 && !IS_TIGERLAKE(i915))
459 		return -EOPNOTSUPP;
460 
461 	if (args->size == 0)
462 		return 0;
463 
464 	if (!access_ok(u64_to_user_ptr(args->data_ptr),
465 		       args->size))
466 		return -EFAULT;
467 
468 	obj = i915_gem_object_lookup(file, args->handle);
469 	if (!obj)
470 		return -ENOENT;
471 
472 	/* Bounds check source.  */
473 	if (range_overflows_t(u64, args->offset, args->size, obj->base.size)) {
474 		ret = -EINVAL;
475 		goto out;
476 	}
477 
478 	trace_i915_gem_object_pread(obj, args->offset, args->size);
479 	ret = -ENODEV;
480 	if (obj->ops->pread)
481 		ret = obj->ops->pread(obj, args);
482 	if (ret != -ENODEV)
483 		goto out;
484 
485 	ret = i915_gem_object_wait(obj,
486 				   I915_WAIT_INTERRUPTIBLE,
487 				   MAX_SCHEDULE_TIMEOUT);
488 	if (ret)
489 		goto out;
490 
491 	ret = i915_gem_shmem_pread(obj, args);
492 	if (ret == -EFAULT || ret == -ENODEV)
493 		ret = i915_gem_gtt_pread(obj, args);
494 
495 out:
496 	i915_gem_object_put(obj);
497 	return ret;
498 }
499 
500 /* This is the fast write path which cannot handle
501  * page faults in the source data
502  */
503 
504 static inline bool
505 ggtt_write(struct io_mapping *mapping,
506 	   loff_t base, int offset,
507 	   char __user *user_data, int length)
508 {
509 	void __iomem *vaddr;
510 	unsigned long unwritten;
511 
512 	/* We can use the cpu mem copy function because this is X86. */
513 	vaddr = io_mapping_map_atomic_wc(mapping, base);
514 	unwritten = __copy_from_user_inatomic_nocache((void __force *)vaddr + offset,
515 						      user_data, length);
516 	io_mapping_unmap_atomic(vaddr);
517 	if (unwritten) {
518 		vaddr = io_mapping_map_wc(mapping, base, PAGE_SIZE);
519 		unwritten = copy_from_user((void __force *)vaddr + offset,
520 					   user_data, length);
521 		io_mapping_unmap(vaddr);
522 	}
523 
524 	return unwritten;
525 }
526 
527 /**
528  * This is the fast pwrite path, where we copy the data directly from the
529  * user into the GTT, uncached.
530  * @obj: i915 GEM object
531  * @args: pwrite arguments structure
532  */
533 static int
534 i915_gem_gtt_pwrite_fast(struct drm_i915_gem_object *obj,
535 			 const struct drm_i915_gem_pwrite *args)
536 {
537 	struct drm_i915_private *i915 = to_i915(obj->base.dev);
538 	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
539 	struct intel_runtime_pm *rpm = &i915->runtime_pm;
540 	intel_wakeref_t wakeref;
541 	struct drm_mm_node node;
542 	struct i915_vma *vma;
543 	u64 remain, offset;
544 	void __user *user_data;
545 	int ret = 0;
546 
547 	if (i915_gem_object_has_struct_page(obj)) {
548 		/*
549 		 * Avoid waking the device up if we can fallback, as
550 		 * waking/resuming is very slow (worst-case 10-100 ms
551 		 * depending on PCI sleeps and our own resume time).
552 		 * This easily dwarfs any performance advantage from
553 		 * using the cache bypass of indirect GGTT access.
554 		 */
555 		wakeref = intel_runtime_pm_get_if_in_use(rpm);
556 		if (!wakeref)
557 			return -EFAULT;
558 	} else {
559 		/* No backing pages, no fallback, we must force GGTT access */
560 		wakeref = intel_runtime_pm_get(rpm);
561 	}
562 
563 	vma = i915_gem_gtt_prepare(obj, &node, true);
564 	if (IS_ERR(vma)) {
565 		ret = PTR_ERR(vma);
566 		goto out_rpm;
567 	}
568 
569 	i915_gem_object_invalidate_frontbuffer(obj, ORIGIN_CPU);
570 
571 	user_data = u64_to_user_ptr(args->data_ptr);
572 	offset = args->offset;
573 	remain = args->size;
574 	while (remain) {
575 		/* Operation in this page
576 		 *
577 		 * page_base = page offset within aperture
578 		 * page_offset = offset within page
579 		 * page_length = bytes to copy for this page
580 		 */
581 		u32 page_base = node.start;
582 		unsigned int page_offset = offset_in_page(offset);
583 		unsigned int page_length = PAGE_SIZE - page_offset;
584 		page_length = remain < page_length ? remain : page_length;
585 		if (drm_mm_node_allocated(&node)) {
586 			/* flush the write before we modify the GGTT */
587 			intel_gt_flush_ggtt_writes(ggtt->vm.gt);
588 			ggtt->vm.insert_page(&ggtt->vm,
589 					     i915_gem_object_get_dma_address(obj, offset >> PAGE_SHIFT),
590 					     node.start, I915_CACHE_NONE, 0);
591 			wmb(); /* flush modifications to the GGTT (insert_page) */
592 		} else {
593 			page_base += offset & PAGE_MASK;
594 		}
595 		/* If we get a fault while copying data, then (presumably) our
596 		 * source page isn't available.  Return the error and we'll
597 		 * retry in the slow path.
598 		 * If the object is non-shmem backed, we retry again with the
599 		 * path that handles page fault.
600 		 */
601 		if (ggtt_write(&ggtt->iomap, page_base, page_offset,
602 			       user_data, page_length)) {
603 			ret = -EFAULT;
604 			break;
605 		}
606 
607 		remain -= page_length;
608 		user_data += page_length;
609 		offset += page_length;
610 	}
611 
612 	intel_gt_flush_ggtt_writes(ggtt->vm.gt);
613 	i915_gem_object_flush_frontbuffer(obj, ORIGIN_CPU);
614 
615 	i915_gem_gtt_cleanup(obj, &node, vma);
616 out_rpm:
617 	intel_runtime_pm_put(rpm, wakeref);
618 	return ret;
619 }
620 
621 /* Per-page copy function for the shmem pwrite fastpath.
622  * Flushes invalid cachelines before writing to the target if
623  * needs_clflush_before is set and flushes out any written cachelines after
624  * writing if needs_clflush is set.
625  */
626 static int
627 shmem_pwrite(struct page *page, int offset, int len, char __user *user_data,
628 	     bool needs_clflush_before,
629 	     bool needs_clflush_after)
630 {
631 	char *vaddr;
632 	int ret;
633 
634 	vaddr = kmap(page);
635 
636 	if (needs_clflush_before)
637 		drm_clflush_virt_range(vaddr + offset, len);
638 
639 	ret = __copy_from_user(vaddr + offset, user_data, len);
640 	if (!ret && needs_clflush_after)
641 		drm_clflush_virt_range(vaddr + offset, len);
642 
643 	kunmap(page);
644 
645 	return ret ? -EFAULT : 0;
646 }
647 
648 static int
649 i915_gem_shmem_pwrite(struct drm_i915_gem_object *obj,
650 		      const struct drm_i915_gem_pwrite *args)
651 {
652 	unsigned int partial_cacheline_write;
653 	unsigned int needs_clflush;
654 	unsigned int offset, idx;
655 	void __user *user_data;
656 	u64 remain;
657 	int ret;
658 
659 	ret = i915_gem_object_lock_interruptible(obj, NULL);
660 	if (ret)
661 		return ret;
662 
663 	ret = i915_gem_object_pin_pages(obj);
664 	if (ret)
665 		goto err_unlock;
666 
667 	ret = i915_gem_object_prepare_write(obj, &needs_clflush);
668 	if (ret)
669 		goto err_unpin;
670 
671 	i915_gem_object_finish_access(obj);
672 	i915_gem_object_unlock(obj);
673 
674 	/* If we don't overwrite a cacheline completely we need to be
675 	 * careful to have up-to-date data by first clflushing. Don't
676 	 * overcomplicate things and flush the entire patch.
677 	 */
678 	partial_cacheline_write = 0;
679 	if (needs_clflush & CLFLUSH_BEFORE)
680 		partial_cacheline_write = boot_cpu_data.x86_clflush_size - 1;
681 
682 	user_data = u64_to_user_ptr(args->data_ptr);
683 	remain = args->size;
684 	offset = offset_in_page(args->offset);
685 	for (idx = args->offset >> PAGE_SHIFT; remain; idx++) {
686 		struct page *page = i915_gem_object_get_page(obj, idx);
687 		unsigned int length = min_t(u64, remain, PAGE_SIZE - offset);
688 
689 		ret = shmem_pwrite(page, offset, length, user_data,
690 				   (offset | length) & partial_cacheline_write,
691 				   needs_clflush & CLFLUSH_AFTER);
692 		if (ret)
693 			break;
694 
695 		remain -= length;
696 		user_data += length;
697 		offset = 0;
698 	}
699 
700 	i915_gem_object_flush_frontbuffer(obj, ORIGIN_CPU);
701 
702 	i915_gem_object_unpin_pages(obj);
703 	return ret;
704 
705 err_unpin:
706 	i915_gem_object_unpin_pages(obj);
707 err_unlock:
708 	i915_gem_object_unlock(obj);
709 	return ret;
710 }
711 
712 /**
713  * Writes data to the object referenced by handle.
714  * @dev: drm device
715  * @data: ioctl data blob
716  * @file: drm file
717  *
718  * On error, the contents of the buffer that were to be modified are undefined.
719  */
720 int
721 i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
722 		      struct drm_file *file)
723 {
724 	struct drm_i915_private *i915 = to_i915(dev);
725 	struct drm_i915_gem_pwrite *args = data;
726 	struct drm_i915_gem_object *obj;
727 	int ret;
728 
729 	/* PWRITE is disallowed for all platforms after TGL-LP.  This also
730 	 * covers all platforms with local memory.
731 	 */
732 	if (GRAPHICS_VER(i915) >= 12 && !IS_TIGERLAKE(i915))
733 		return -EOPNOTSUPP;
734 
735 	if (args->size == 0)
736 		return 0;
737 
738 	if (!access_ok(u64_to_user_ptr(args->data_ptr), args->size))
739 		return -EFAULT;
740 
741 	obj = i915_gem_object_lookup(file, args->handle);
742 	if (!obj)
743 		return -ENOENT;
744 
745 	/* Bounds check destination. */
746 	if (range_overflows_t(u64, args->offset, args->size, obj->base.size)) {
747 		ret = -EINVAL;
748 		goto err;
749 	}
750 
751 	/* Writes not allowed into this read-only object */
752 	if (i915_gem_object_is_readonly(obj)) {
753 		ret = -EINVAL;
754 		goto err;
755 	}
756 
757 	trace_i915_gem_object_pwrite(obj, args->offset, args->size);
758 
759 	ret = -ENODEV;
760 	if (obj->ops->pwrite)
761 		ret = obj->ops->pwrite(obj, args);
762 	if (ret != -ENODEV)
763 		goto err;
764 
765 	ret = i915_gem_object_wait(obj,
766 				   I915_WAIT_INTERRUPTIBLE |
767 				   I915_WAIT_ALL,
768 				   MAX_SCHEDULE_TIMEOUT);
769 	if (ret)
770 		goto err;
771 
772 	ret = -EFAULT;
773 	/* We can only do the GTT pwrite on untiled buffers, as otherwise
774 	 * it would end up going through the fenced access, and we'll get
775 	 * different detiling behavior between reading and writing.
776 	 * pread/pwrite currently are reading and writing from the CPU
777 	 * perspective, requiring manual detiling by the client.
778 	 */
779 	if (!i915_gem_object_has_struct_page(obj) ||
780 	    i915_gem_cpu_write_needs_clflush(obj))
781 		/* Note that the gtt paths might fail with non-page-backed user
782 		 * pointers (e.g. gtt mappings when moving data between
783 		 * textures). Fallback to the shmem path in that case.
784 		 */
785 		ret = i915_gem_gtt_pwrite_fast(obj, args);
786 
787 	if (ret == -EFAULT || ret == -ENOSPC) {
788 		if (i915_gem_object_has_struct_page(obj))
789 			ret = i915_gem_shmem_pwrite(obj, args);
790 	}
791 
792 err:
793 	i915_gem_object_put(obj);
794 	return ret;
795 }
796 
797 /**
798  * Called when user space has done writes to this buffer
799  * @dev: drm device
800  * @data: ioctl data blob
801  * @file: drm file
802  */
803 int
804 i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
805 			 struct drm_file *file)
806 {
807 	struct drm_i915_gem_sw_finish *args = data;
808 	struct drm_i915_gem_object *obj;
809 
810 	obj = i915_gem_object_lookup(file, args->handle);
811 	if (!obj)
812 		return -ENOENT;
813 
814 	/*
815 	 * Proxy objects are barred from CPU access, so there is no
816 	 * need to ban sw_finish as it is a nop.
817 	 */
818 
819 	/* Pinned buffers may be scanout, so flush the cache */
820 	i915_gem_object_flush_if_display(obj);
821 	i915_gem_object_put(obj);
822 
823 	return 0;
824 }
825 
826 void i915_gem_runtime_suspend(struct drm_i915_private *i915)
827 {
828 	struct drm_i915_gem_object *obj, *on;
829 	int i;
830 
831 	/*
832 	 * Only called during RPM suspend. All users of the userfault_list
833 	 * must be holding an RPM wakeref to ensure that this can not
834 	 * run concurrently with themselves (and use the struct_mutex for
835 	 * protection between themselves).
836 	 */
837 
838 	list_for_each_entry_safe(obj, on,
839 				 &to_gt(i915)->ggtt->userfault_list, userfault_link)
840 		__i915_gem_object_release_mmap_gtt(obj);
841 
842 	/*
843 	 * The fence will be lost when the device powers down. If any were
844 	 * in use by hardware (i.e. they are pinned), we should not be powering
845 	 * down! All other fences will be reacquired by the user upon waking.
846 	 */
847 	for (i = 0; i < to_gt(i915)->ggtt->num_fences; i++) {
848 		struct i915_fence_reg *reg = &to_gt(i915)->ggtt->fence_regs[i];
849 
850 		/*
851 		 * Ideally we want to assert that the fence register is not
852 		 * live at this point (i.e. that no piece of code will be
853 		 * trying to write through fence + GTT, as that both violates
854 		 * our tracking of activity and associated locking/barriers,
855 		 * but also is illegal given that the hw is powered down).
856 		 *
857 		 * Previously we used reg->pin_count as a "liveness" indicator.
858 		 * That is not sufficient, and we need a more fine-grained
859 		 * tool if we want to have a sanity check here.
860 		 */
861 
862 		if (!reg->vma)
863 			continue;
864 
865 		GEM_BUG_ON(i915_vma_has_userfault(reg->vma));
866 		reg->dirty = true;
867 	}
868 }
869 
870 static void discard_ggtt_vma(struct i915_vma *vma)
871 {
872 	struct drm_i915_gem_object *obj = vma->obj;
873 
874 	spin_lock(&obj->vma.lock);
875 	if (!RB_EMPTY_NODE(&vma->obj_node)) {
876 		rb_erase(&vma->obj_node, &obj->vma.tree);
877 		RB_CLEAR_NODE(&vma->obj_node);
878 	}
879 	spin_unlock(&obj->vma.lock);
880 }
881 
882 struct i915_vma *
883 i915_gem_object_ggtt_pin_ww(struct drm_i915_gem_object *obj,
884 			    struct i915_gem_ww_ctx *ww,
885 			    const struct i915_ggtt_view *view,
886 			    u64 size, u64 alignment, u64 flags)
887 {
888 	struct drm_i915_private *i915 = to_i915(obj->base.dev);
889 	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
890 	struct i915_vma *vma;
891 	int ret;
892 
893 	GEM_WARN_ON(!ww);
894 
895 	if (flags & PIN_MAPPABLE &&
896 	    (!view || view->type == I915_GGTT_VIEW_NORMAL)) {
897 		/*
898 		 * If the required space is larger than the available
899 		 * aperture, we will not able to find a slot for the
900 		 * object and unbinding the object now will be in
901 		 * vain. Worse, doing so may cause us to ping-pong
902 		 * the object in and out of the Global GTT and
903 		 * waste a lot of cycles under the mutex.
904 		 */
905 		if (obj->base.size > ggtt->mappable_end)
906 			return ERR_PTR(-E2BIG);
907 
908 		/*
909 		 * If NONBLOCK is set the caller is optimistically
910 		 * trying to cache the full object within the mappable
911 		 * aperture, and *must* have a fallback in place for
912 		 * situations where we cannot bind the object. We
913 		 * can be a little more lax here and use the fallback
914 		 * more often to avoid costly migrations of ourselves
915 		 * and other objects within the aperture.
916 		 *
917 		 * Half-the-aperture is used as a simple heuristic.
918 		 * More interesting would to do search for a free
919 		 * block prior to making the commitment to unbind.
920 		 * That caters for the self-harm case, and with a
921 		 * little more heuristics (e.g. NOFAULT, NOEVICT)
922 		 * we could try to minimise harm to others.
923 		 */
924 		if (flags & PIN_NONBLOCK &&
925 		    obj->base.size > ggtt->mappable_end / 2)
926 			return ERR_PTR(-ENOSPC);
927 	}
928 
929 new_vma:
930 	vma = i915_vma_instance(obj, &ggtt->vm, view);
931 	if (IS_ERR(vma))
932 		return vma;
933 
934 	if (i915_vma_misplaced(vma, size, alignment, flags)) {
935 		if (flags & PIN_NONBLOCK) {
936 			if (i915_vma_is_pinned(vma) || i915_vma_is_active(vma))
937 				return ERR_PTR(-ENOSPC);
938 
939 			if (flags & PIN_MAPPABLE &&
940 			    vma->fence_size > ggtt->mappable_end / 2)
941 				return ERR_PTR(-ENOSPC);
942 		}
943 
944 		if (i915_vma_is_pinned(vma) || i915_vma_is_active(vma)) {
945 			discard_ggtt_vma(vma);
946 			goto new_vma;
947 		}
948 
949 		ret = i915_vma_unbind(vma);
950 		if (ret)
951 			return ERR_PTR(ret);
952 	}
953 
954 	ret = i915_vma_pin_ww(vma, ww, size, alignment, flags | PIN_GLOBAL);
955 
956 	if (ret)
957 		return ERR_PTR(ret);
958 
959 	if (vma->fence && !i915_gem_object_is_tiled(obj)) {
960 		mutex_lock(&ggtt->vm.mutex);
961 		i915_vma_revoke_fence(vma);
962 		mutex_unlock(&ggtt->vm.mutex);
963 	}
964 
965 	ret = i915_vma_wait_for_bind(vma);
966 	if (ret) {
967 		i915_vma_unpin(vma);
968 		return ERR_PTR(ret);
969 	}
970 
971 	return vma;
972 }
973 
974 struct i915_vma * __must_check
975 i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
976 			 const struct i915_ggtt_view *view,
977 			 u64 size, u64 alignment, u64 flags)
978 {
979 	struct i915_gem_ww_ctx ww;
980 	struct i915_vma *ret;
981 	int err;
982 
983 	for_i915_gem_ww(&ww, err, true) {
984 		err = i915_gem_object_lock(obj, &ww);
985 		if (err)
986 			continue;
987 
988 		ret = i915_gem_object_ggtt_pin_ww(obj, &ww, view, size,
989 						  alignment, flags);
990 		if (IS_ERR(ret))
991 			err = PTR_ERR(ret);
992 	}
993 
994 	return err ? ERR_PTR(err) : ret;
995 }
996 
997 int
998 i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
999 		       struct drm_file *file_priv)
1000 {
1001 	struct drm_i915_private *i915 = to_i915(dev);
1002 	struct drm_i915_gem_madvise *args = data;
1003 	struct drm_i915_gem_object *obj;
1004 	int err;
1005 
1006 	switch (args->madv) {
1007 	case I915_MADV_DONTNEED:
1008 	case I915_MADV_WILLNEED:
1009 	    break;
1010 	default:
1011 	    return -EINVAL;
1012 	}
1013 
1014 	obj = i915_gem_object_lookup(file_priv, args->handle);
1015 	if (!obj)
1016 		return -ENOENT;
1017 
1018 	err = i915_gem_object_lock_interruptible(obj, NULL);
1019 	if (err)
1020 		goto out;
1021 
1022 	if (i915_gem_object_has_pages(obj) &&
1023 	    i915_gem_object_is_tiled(obj) &&
1024 	    i915->quirks & QUIRK_PIN_SWIZZLED_PAGES) {
1025 		if (obj->mm.madv == I915_MADV_WILLNEED) {
1026 			GEM_BUG_ON(!i915_gem_object_has_tiling_quirk(obj));
1027 			i915_gem_object_clear_tiling_quirk(obj);
1028 			i915_gem_object_make_shrinkable(obj);
1029 		}
1030 		if (args->madv == I915_MADV_WILLNEED) {
1031 			GEM_BUG_ON(i915_gem_object_has_tiling_quirk(obj));
1032 			i915_gem_object_make_unshrinkable(obj);
1033 			i915_gem_object_set_tiling_quirk(obj);
1034 		}
1035 	}
1036 
1037 	if (obj->mm.madv != __I915_MADV_PURGED) {
1038 		obj->mm.madv = args->madv;
1039 		if (obj->ops->adjust_lru)
1040 			obj->ops->adjust_lru(obj);
1041 	}
1042 
1043 	if (i915_gem_object_has_pages(obj) ||
1044 	    i915_gem_object_has_self_managed_shrink_list(obj)) {
1045 		unsigned long flags;
1046 
1047 		spin_lock_irqsave(&i915->mm.obj_lock, flags);
1048 		if (!list_empty(&obj->mm.link)) {
1049 			struct list_head *list;
1050 
1051 			if (obj->mm.madv != I915_MADV_WILLNEED)
1052 				list = &i915->mm.purge_list;
1053 			else
1054 				list = &i915->mm.shrink_list;
1055 			list_move_tail(&obj->mm.link, list);
1056 
1057 		}
1058 		spin_unlock_irqrestore(&i915->mm.obj_lock, flags);
1059 	}
1060 
1061 	/* if the object is no longer attached, discard its backing storage */
1062 	if (obj->mm.madv == I915_MADV_DONTNEED &&
1063 	    !i915_gem_object_has_pages(obj))
1064 		i915_gem_object_truncate(obj);
1065 
1066 	args->retained = obj->mm.madv != __I915_MADV_PURGED;
1067 
1068 	i915_gem_object_unlock(obj);
1069 out:
1070 	i915_gem_object_put(obj);
1071 	return err;
1072 }
1073 
1074 int i915_gem_init(struct drm_i915_private *dev_priv)
1075 {
1076 	int ret;
1077 
1078 	/* We need to fallback to 4K pages if host doesn't support huge gtt. */
1079 	if (intel_vgpu_active(dev_priv) && !intel_vgpu_has_huge_gtt(dev_priv))
1080 		mkwrite_device_info(dev_priv)->page_sizes =
1081 			I915_GTT_PAGE_SIZE_4K;
1082 
1083 	ret = i915_gem_init_userptr(dev_priv);
1084 	if (ret)
1085 		return ret;
1086 
1087 	intel_uc_fetch_firmwares(&to_gt(dev_priv)->uc);
1088 	intel_wopcm_init(&dev_priv->wopcm);
1089 
1090 	ret = i915_init_ggtt(dev_priv);
1091 	if (ret) {
1092 		GEM_BUG_ON(ret == -EIO);
1093 		goto err_unlock;
1094 	}
1095 
1096 	/*
1097 	 * Despite its name intel_init_clock_gating applies both display
1098 	 * clock gating workarounds; GT mmio workarounds and the occasional
1099 	 * GT power context workaround. Worse, sometimes it includes a context
1100 	 * register workaround which we need to apply before we record the
1101 	 * default HW state for all contexts.
1102 	 *
1103 	 * FIXME: break up the workarounds and apply them at the right time!
1104 	 */
1105 	intel_init_clock_gating(dev_priv);
1106 
1107 	ret = intel_gt_init(to_gt(dev_priv));
1108 	if (ret)
1109 		goto err_unlock;
1110 
1111 	return 0;
1112 
1113 	/*
1114 	 * Unwinding is complicated by that we want to handle -EIO to mean
1115 	 * disable GPU submission but keep KMS alive. We want to mark the
1116 	 * HW as irrevisibly wedged, but keep enough state around that the
1117 	 * driver doesn't explode during runtime.
1118 	 */
1119 err_unlock:
1120 	i915_gem_drain_workqueue(dev_priv);
1121 
1122 	if (ret != -EIO)
1123 		intel_uc_cleanup_firmwares(&to_gt(dev_priv)->uc);
1124 
1125 	if (ret == -EIO) {
1126 		/*
1127 		 * Allow engines or uC initialisation to fail by marking the GPU
1128 		 * as wedged. But we only want to do this when the GPU is angry,
1129 		 * for all other failure, such as an allocation failure, bail.
1130 		 */
1131 		if (!intel_gt_is_wedged(to_gt(dev_priv))) {
1132 			i915_probe_error(dev_priv,
1133 					 "Failed to initialize GPU, declaring it wedged!\n");
1134 			intel_gt_set_wedged(to_gt(dev_priv));
1135 		}
1136 
1137 		/* Minimal basic recovery for KMS */
1138 		ret = i915_ggtt_enable_hw(dev_priv);
1139 		i915_ggtt_resume(to_gt(dev_priv)->ggtt);
1140 		intel_init_clock_gating(dev_priv);
1141 	}
1142 
1143 	i915_gem_drain_freed_objects(dev_priv);
1144 
1145 	return ret;
1146 }
1147 
1148 void i915_gem_driver_register(struct drm_i915_private *i915)
1149 {
1150 	i915_gem_driver_register__shrinker(i915);
1151 
1152 	intel_engines_driver_register(i915);
1153 }
1154 
1155 void i915_gem_driver_unregister(struct drm_i915_private *i915)
1156 {
1157 	i915_gem_driver_unregister__shrinker(i915);
1158 }
1159 
1160 void i915_gem_driver_remove(struct drm_i915_private *dev_priv)
1161 {
1162 	intel_wakeref_auto_fini(&to_gt(dev_priv)->ggtt->userfault_wakeref);
1163 
1164 	i915_gem_suspend_late(dev_priv);
1165 	intel_gt_driver_remove(to_gt(dev_priv));
1166 	dev_priv->uabi_engines = RB_ROOT;
1167 
1168 	/* Flush any outstanding unpin_work. */
1169 	i915_gem_drain_workqueue(dev_priv);
1170 
1171 	i915_gem_drain_freed_objects(dev_priv);
1172 }
1173 
1174 void i915_gem_driver_release(struct drm_i915_private *dev_priv)
1175 {
1176 	intel_gt_driver_release(to_gt(dev_priv));
1177 
1178 	intel_uc_cleanup_firmwares(&to_gt(dev_priv)->uc);
1179 
1180 	i915_gem_drain_freed_objects(dev_priv);
1181 
1182 	drm_WARN_ON(&dev_priv->drm, !list_empty(&dev_priv->gem.contexts.list));
1183 }
1184 
1185 static void i915_gem_init__mm(struct drm_i915_private *i915)
1186 {
1187 	spin_lock_init(&i915->mm.obj_lock);
1188 
1189 	init_llist_head(&i915->mm.free_list);
1190 
1191 	INIT_LIST_HEAD(&i915->mm.purge_list);
1192 	INIT_LIST_HEAD(&i915->mm.shrink_list);
1193 
1194 	i915_gem_init__objects(i915);
1195 }
1196 
1197 void i915_gem_init_early(struct drm_i915_private *dev_priv)
1198 {
1199 	i915_gem_init__mm(dev_priv);
1200 	i915_gem_init__contexts(dev_priv);
1201 
1202 	spin_lock_init(&dev_priv->fb_tracking.lock);
1203 }
1204 
1205 void i915_gem_cleanup_early(struct drm_i915_private *dev_priv)
1206 {
1207 	i915_gem_drain_freed_objects(dev_priv);
1208 	GEM_BUG_ON(!llist_empty(&dev_priv->mm.free_list));
1209 	GEM_BUG_ON(atomic_read(&dev_priv->mm.free_count));
1210 	drm_WARN_ON(&dev_priv->drm, dev_priv->mm.shrink_count);
1211 }
1212 
1213 int i915_gem_open(struct drm_i915_private *i915, struct drm_file *file)
1214 {
1215 	struct drm_i915_file_private *file_priv;
1216 	int ret;
1217 
1218 	DRM_DEBUG("\n");
1219 
1220 	file_priv = kzalloc(sizeof(*file_priv), GFP_KERNEL);
1221 	if (!file_priv)
1222 		return -ENOMEM;
1223 
1224 	file->driver_priv = file_priv;
1225 	file_priv->dev_priv = i915;
1226 	file_priv->file = file;
1227 
1228 	file_priv->bsd_engine = -1;
1229 	file_priv->hang_timestamp = jiffies;
1230 
1231 	ret = i915_gem_context_open(i915, file);
1232 	if (ret)
1233 		kfree(file_priv);
1234 
1235 	return ret;
1236 }
1237 
1238 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
1239 #include "selftests/mock_gem_device.c"
1240 #include "selftests/i915_gem.c"
1241 #endif
1242