i915_gem.c 60.6 KB
Newer Older
1
/*
2
 * Copyright © 2008-2015 Intel Corporation
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 *
 * Authors:
 *    Eric Anholt <eric@anholt.net>
 *
 */

28
#include <drm/drm_vma_manager.h>
29
#include <drm/i915_drm.h>
30
#include <linux/dma-fence-array.h>
31
#include <linux/kthread.h>
32
#include <linux/reservation.h>
33
#include <linux/shmem_fs.h>
34
#include <linux/slab.h>
35
#include <linux/stop_machine.h>
36
#include <linux/swap.h>
J
Jesse Barnes 已提交
37
#include <linux/pci.h>
38
#include <linux/dma-buf.h>
39
#include <linux/mman.h>
40

41 42
#include "gem/i915_gem_clflush.h"
#include "gem/i915_gem_context.h"
43
#include "gem/i915_gem_ioctls.h"
44 45
#include "gem/i915_gem_pm.h"
#include "gem/i915_gemfs.h"
46 47
#include "gt/intel_engine_pm.h"
#include "gt/intel_gt_pm.h"
48 49 50 51
#include "gt/intel_mocs.h"
#include "gt/intel_reset.h"
#include "gt/intel_workarounds.h"

52 53 54 55
#include "i915_drv.h"
#include "i915_trace.h"
#include "i915_vgpu.h"

56
#include "intel_display.h"
57 58
#include "intel_drv.h"
#include "intel_frontbuffer.h"
59
#include "intel_pm.h"
60

61
static int
62
insert_mappable_node(struct i915_ggtt *ggtt,
63 64 65
                     struct drm_mm_node *node, u32 size)
{
	memset(node, 0, sizeof(*node));
66
	return drm_mm_insert_node_in_range(&ggtt->vm.mm, node,
67 68 69
					   size, 0, I915_COLOR_UNEVICTABLE,
					   0, ggtt->mappable_end,
					   DRM_MM_INSERT_LOW);
70 71 72 73 74 75 76 77
}

static void
remove_mappable_node(struct drm_mm_node *node)
{
	drm_mm_remove_node(node);
}

78 79
int
i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
80
			    struct drm_file *file)
81
{
82
	struct i915_ggtt *ggtt = &to_i915(dev)->ggtt;
83
	struct drm_i915_gem_get_aperture *args = data;
84
	struct i915_vma *vma;
85
	u64 pinned;
86

87 88
	mutex_lock(&ggtt->vm.mutex);

89
	pinned = ggtt->vm.reserved;
90
	list_for_each_entry(vma, &ggtt->vm.bound_list, vm_link)
91
		if (i915_vma_is_pinned(vma))
92
			pinned += vma->node.size;
93 94

	mutex_unlock(&ggtt->vm.mutex);
95

96
	args->aper_size = ggtt->vm.total;
97
	args->aper_available_size = args->aper_size - pinned;
98

99 100 101
	return 0;
}

102
int i915_gem_object_unbind(struct drm_i915_gem_object *obj)
103 104 105
{
	struct i915_vma *vma;
	LIST_HEAD(still_in_list);
106 107 108
	int ret;

	lockdep_assert_held(&obj->base.dev->struct_mutex);
109

110 111 112 113
	/* Closed vma are removed from the obj->vma_list - but they may
	 * still have an active binding on the object. To remove those we
	 * must wait for all rendering to complete to the object (as unbinding
	 * must anyway), and retire the requests.
114
	 */
115
	ret = i915_gem_object_set_to_cpu_domain(obj, false);
116 117 118
	if (ret)
		return ret;

119 120 121 122
	spin_lock(&obj->vma.lock);
	while (!ret && (vma = list_first_entry_or_null(&obj->vma.list,
						       struct i915_vma,
						       obj_link))) {
123
		list_move_tail(&vma->obj_link, &still_in_list);
124 125
		spin_unlock(&obj->vma.lock);

126
		ret = i915_vma_unbind(vma);
127 128

		spin_lock(&obj->vma.lock);
129
	}
130 131
	list_splice(&still_in_list, &obj->vma.list);
	spin_unlock(&obj->vma.lock);
132 133 134 135

	return ret;
}

136 137 138
static long
i915_gem_object_wait_fence(struct dma_fence *fence,
			   unsigned int flags,
139
			   long timeout)
140
{
141
	struct i915_request *rq;
142

143
	BUILD_BUG_ON(I915_WAIT_INTERRUPTIBLE != 0x1);
144

145 146 147 148 149 150 151 152 153
	if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
		return timeout;

	if (!dma_fence_is_i915(fence))
		return dma_fence_wait_timeout(fence,
					      flags & I915_WAIT_INTERRUPTIBLE,
					      timeout);

	rq = to_request(fence);
154
	if (i915_request_completed(rq))
155 156
		goto out;

157
	timeout = i915_request_wait(rq, flags, timeout);
158 159

out:
160 161
	if (flags & I915_WAIT_LOCKED && i915_request_completed(rq))
		i915_request_retire_upto(rq);
162 163 164 165 166 167 168

	return timeout;
}

static long
i915_gem_object_wait_reservation(struct reservation_object *resv,
				 unsigned int flags,
169
				 long timeout)
170
{
171
	unsigned int seq = __read_seqcount_begin(&resv->seq);
172
	struct dma_fence *excl;
173
	bool prune_fences = false;
174 175 176 177

	if (flags & I915_WAIT_ALL) {
		struct dma_fence **shared;
		unsigned int count, i;
178 179
		int ret;

180 181
		ret = reservation_object_get_fences_rcu(resv,
							&excl, &count, &shared);
182 183 184
		if (ret)
			return ret;

185 186
		for (i = 0; i < count; i++) {
			timeout = i915_gem_object_wait_fence(shared[i],
187
							     flags, timeout);
188
			if (timeout < 0)
189
				break;
190

191 192 193 194 195 196
			dma_fence_put(shared[i]);
		}

		for (; i < count; i++)
			dma_fence_put(shared[i]);
		kfree(shared);
197

198 199 200 201 202 203 204 205 206
		/*
		 * If both shared fences and an exclusive fence exist,
		 * then by construction the shared fences must be later
		 * than the exclusive fence. If we successfully wait for
		 * all the shared fences, we know that the exclusive fence
		 * must all be signaled. If all the shared fences are
		 * signaled, we can prune the array and recover the
		 * floating references on the fences/requests.
		 */
207
		prune_fences = count && timeout >= 0;
208 209
	} else {
		excl = reservation_object_get_excl_rcu(resv);
210 211
	}

212
	if (excl && timeout >= 0)
213
		timeout = i915_gem_object_wait_fence(excl, flags, timeout);
214 215 216

	dma_fence_put(excl);

217 218
	/*
	 * Opportunistically prune the fences iff we know they have *all* been
219 220 221
	 * signaled and that the reservation object has not been changed (i.e.
	 * no new fences have been added).
	 */
222
	if (prune_fences && !__read_seqcount_retry(&resv->seq, seq)) {
223 224 225 226 227
		if (reservation_object_trylock(resv)) {
			if (!__read_seqcount_retry(&resv->seq, seq))
				reservation_object_add_excl_fence(resv, NULL);
			reservation_object_unlock(resv);
		}
228 229
	}

230
	return timeout;
231 232
}

233 234
static void __fence_set_priority(struct dma_fence *fence,
				 const struct i915_sched_attr *attr)
235
{
236
	struct i915_request *rq;
237 238
	struct intel_engine_cs *engine;

239
	if (dma_fence_is_signaled(fence) || !dma_fence_is_i915(fence))
240 241 242 243 244
		return;

	rq = to_request(fence);
	engine = rq->engine;

245 246
	local_bh_disable();
	rcu_read_lock(); /* RCU serialisation for set-wedged protection */
247
	if (engine->schedule)
248
		engine->schedule(rq, attr);
249
	rcu_read_unlock();
250
	local_bh_enable(); /* kick the tasklets if queues were reprioritised */
251 252
}

253 254
static void fence_set_priority(struct dma_fence *fence,
			       const struct i915_sched_attr *attr)
255 256 257 258 259 260 261
{
	/* Recurse once into a fence-array */
	if (dma_fence_is_array(fence)) {
		struct dma_fence_array *array = to_dma_fence_array(fence);
		int i;

		for (i = 0; i < array->num_fences; i++)
262
			__fence_set_priority(array->fences[i], attr);
263
	} else {
264
		__fence_set_priority(fence, attr);
265 266 267 268 269 270
	}
}

int
i915_gem_object_wait_priority(struct drm_i915_gem_object *obj,
			      unsigned int flags,
271
			      const struct i915_sched_attr *attr)
272 273 274 275 276 277 278 279 280 281 282 283 284 285
{
	struct dma_fence *excl;

	if (flags & I915_WAIT_ALL) {
		struct dma_fence **shared;
		unsigned int count, i;
		int ret;

		ret = reservation_object_get_fences_rcu(obj->resv,
							&excl, &count, &shared);
		if (ret)
			return ret;

		for (i = 0; i < count; i++) {
286
			fence_set_priority(shared[i], attr);
287 288 289 290 291 292 293 294 295
			dma_fence_put(shared[i]);
		}

		kfree(shared);
	} else {
		excl = reservation_object_get_excl_rcu(obj->resv);
	}

	if (excl) {
296
		fence_set_priority(excl, attr);
297 298 299 300 301
		dma_fence_put(excl);
	}
	return 0;
}

302 303 304 305 306
/**
 * Waits for rendering to the object to be completed
 * @obj: i915 gem object
 * @flags: how to wait (under a lock, for all rendering or just for writes etc)
 * @timeout: how long to wait
307
 */
308 309 310
int
i915_gem_object_wait(struct drm_i915_gem_object *obj,
		     unsigned int flags,
311
		     long timeout)
312
{
313 314
	might_sleep();
	GEM_BUG_ON(timeout < 0);
315

316
	timeout = i915_gem_object_wait_reservation(obj->resv, flags, timeout);
317
	return timeout < 0 ? timeout : 0;
318 319
}

320 321 322
static int
i915_gem_phys_pwrite(struct drm_i915_gem_object *obj,
		     struct drm_i915_gem_pwrite *args,
323
		     struct drm_file *file)
324 325
{
	void *vaddr = obj->phys_handle->vaddr + args->offset;
326
	char __user *user_data = u64_to_user_ptr(args->data_ptr);
327 328 329 330

	/* We manually control the domain here and pretend that it
	 * remains coherent i.e. in the GTT domain, like shmem_pwrite.
	 */
331
	intel_fb_obj_invalidate(obj, ORIGIN_CPU);
332 333
	if (copy_from_user(vaddr, user_data, args->size))
		return -EFAULT;
334

335
	drm_clflush_virt_range(vaddr, args->size);
336
	i915_gem_chipset_flush(to_i915(obj->base.dev));
337

338
	intel_fb_obj_flush(obj, ORIGIN_CPU);
339
	return 0;
340 341
}

342 343
static int
i915_gem_create(struct drm_file *file,
344
		struct drm_i915_private *dev_priv,
345
		u64 *size_p,
346
		u32 *handle_p)
347
{
348
	struct drm_i915_gem_object *obj;
349
	u32 handle;
350 351
	u64 size;
	int ret;
352

353
	size = round_up(*size_p, PAGE_SIZE);
354 355
	if (size == 0)
		return -EINVAL;
356 357

	/* Allocate the new object */
358
	obj = i915_gem_object_create_shmem(dev_priv, size);
359 360
	if (IS_ERR(obj))
		return PTR_ERR(obj);
361

362
	ret = drm_gem_handle_create(file, &obj->base, &handle);
363
	/* drop reference from allocate - handle holds it now */
C
Chris Wilson 已提交
364
	i915_gem_object_put(obj);
365 366
	if (ret)
		return ret;
367

368
	*handle_p = handle;
369
	*size_p = size;
370 371 372
	return 0;
}

373 374 375 376 377
int
i915_gem_dumb_create(struct drm_file *file,
		     struct drm_device *dev,
		     struct drm_mode_create_dumb *args)
{
378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394
	int cpp = DIV_ROUND_UP(args->bpp, 8);
	u32 format;

	switch (cpp) {
	case 1:
		format = DRM_FORMAT_C8;
		break;
	case 2:
		format = DRM_FORMAT_RGB565;
		break;
	case 4:
		format = DRM_FORMAT_XRGB8888;
		break;
	default:
		return -EINVAL;
	}

395
	/* have to work out size/pitch and return them */
396 397 398 399 400 401 402
	args->pitch = ALIGN(args->width * cpp, 64);

	/* align stride to page size so that we can remap */
	if (args->pitch > intel_plane_fb_max_stride(to_i915(dev), format,
						    DRM_FORMAT_MOD_LINEAR))
		args->pitch = ALIGN(args->pitch, 4096);

403
	args->size = args->pitch * args->height;
404
	return i915_gem_create(file, to_i915(dev),
405
			       &args->size, &args->handle);
406 407 408 409
}

/**
 * Creates a new mm object and returns a handle to it.
410 411 412
 * @dev: drm device pointer
 * @data: ioctl data blob
 * @file: drm file pointer
413 414 415 416 417
 */
int
i915_gem_create_ioctl(struct drm_device *dev, void *data,
		      struct drm_file *file)
{
418
	struct drm_i915_private *dev_priv = to_i915(dev);
419
	struct drm_i915_gem_create *args = data;
420

421
	i915_gem_flush_free_objects(dev_priv);
422

423
	return i915_gem_create(file, dev_priv,
424
			       &args->size, &args->handle);
425 426
}

427
void i915_gem_flush_ggtt_writes(struct drm_i915_private *dev_priv)
428
{
429 430
	intel_wakeref_t wakeref;

431 432 433 434 435
	/*
	 * No actual flushing is required for the GTT write domain for reads
	 * from the GTT domain. Writes to it "immediately" go to main memory
	 * as far as we know, so there's no chipset flush. It also doesn't
	 * land in the GPU render cache.
436 437 438 439 440 441 442 443 444 445
	 *
	 * However, we do have to enforce the order so that all writes through
	 * the GTT land before any writes to the device, such as updates to
	 * the GATT itself.
	 *
	 * We also have to wait a bit for the writes to land from the GTT.
	 * An uncached read (i.e. mmio) seems to be ideal for the round-trip
	 * timing. This issue has only been observed when switching quickly
	 * between GTT writes and CPU reads from inside the kernel on recent hw,
	 * and it appears to only affect discrete GTT blocks (i.e. on LLC
446 447
	 * system agents we cannot reproduce this behaviour, until Cannonlake
	 * that was!).
448
	 */
449

450 451 452 453 454
	wmb();

	if (INTEL_INFO(dev_priv)->has_coherent_ggtt)
		return;

455
	i915_gem_chipset_flush(dev_priv);
456

457 458
	with_intel_runtime_pm(dev_priv, wakeref) {
		spin_lock_irq(&dev_priv->uncore.lock);
459

460
		POSTING_READ_FW(RING_HEAD(RENDER_RING_BASE));
461

462 463
		spin_unlock_irq(&dev_priv->uncore.lock);
	}
464 465
}

466
static int
467 468
shmem_pread(struct page *page, int offset, int len, char __user *user_data,
	    bool needs_clflush)
469 470 471 472 473 474
{
	char *vaddr;
	int ret;

	vaddr = kmap(page);

475 476
	if (needs_clflush)
		drm_clflush_virt_range(vaddr + offset, len);
477

478
	ret = __copy_to_user(user_data, vaddr + offset, len);
479

480
	kunmap(page);
481

482
	return ret ? -EFAULT : 0;
483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498
}

static int
i915_gem_shmem_pread(struct drm_i915_gem_object *obj,
		     struct drm_i915_gem_pread *args)
{
	char __user *user_data;
	u64 remain;
	unsigned int needs_clflush;
	unsigned int idx, offset;
	int ret;

	ret = mutex_lock_interruptible(&obj->base.dev->struct_mutex);
	if (ret)
		return ret;

499
	ret = i915_gem_object_prepare_read(obj, &needs_clflush);
500 501 502 503 504 505 506 507 508
	mutex_unlock(&obj->base.dev->struct_mutex);
	if (ret)
		return ret;

	remain = args->size;
	user_data = u64_to_user_ptr(args->data_ptr);
	offset = offset_in_page(args->offset);
	for (idx = args->offset >> PAGE_SHIFT; remain; idx++) {
		struct page *page = i915_gem_object_get_page(obj, idx);
509
		unsigned int length = min_t(u64, remain, PAGE_SIZE - offset);
510 511 512 513 514 515 516 517 518 519 520

		ret = shmem_pread(page, offset, length, user_data,
				  needs_clflush);
		if (ret)
			break;

		remain -= length;
		user_data += length;
		offset = 0;
	}

521
	i915_gem_object_finish_access(obj);
522 523 524 525 526 527 528
	return ret;
}

static inline bool
gtt_user_read(struct io_mapping *mapping,
	      loff_t base, int offset,
	      char __user *user_data, int length)
529
{
530
	void __iomem *vaddr;
531
	unsigned long unwritten;
532 533

	/* We can use the cpu mem copy function because this is X86. */
534 535 536 537
	vaddr = io_mapping_map_atomic_wc(mapping, base);
	unwritten = __copy_to_user_inatomic(user_data,
					    (void __force *)vaddr + offset,
					    length);
538 539
	io_mapping_unmap_atomic(vaddr);
	if (unwritten) {
540 541 542 543
		vaddr = io_mapping_map_wc(mapping, base, PAGE_SIZE);
		unwritten = copy_to_user(user_data,
					 (void __force *)vaddr + offset,
					 length);
544 545
		io_mapping_unmap(vaddr);
	}
546 547 548 549
	return unwritten;
}

static int
550 551
i915_gem_gtt_pread(struct drm_i915_gem_object *obj,
		   const struct drm_i915_gem_pread *args)
552
{
553 554
	struct drm_i915_private *i915 = to_i915(obj->base.dev);
	struct i915_ggtt *ggtt = &i915->ggtt;
555
	intel_wakeref_t wakeref;
556
	struct drm_mm_node node;
557 558 559
	struct i915_vma *vma;
	void __user *user_data;
	u64 remain, offset;
560 561
	int ret;

562 563 564 565
	ret = mutex_lock_interruptible(&i915->drm.struct_mutex);
	if (ret)
		return ret;

566
	wakeref = intel_runtime_pm_get(i915);
567
	vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0,
568 569 570
				       PIN_MAPPABLE |
				       PIN_NONFAULT |
				       PIN_NONBLOCK);
571 572 573
	if (!IS_ERR(vma)) {
		node.start = i915_ggtt_offset(vma);
		node.allocated = false;
574
		ret = i915_vma_put_fence(vma);
575 576 577 578 579
		if (ret) {
			i915_vma_unpin(vma);
			vma = ERR_PTR(ret);
		}
	}
C
Chris Wilson 已提交
580
	if (IS_ERR(vma)) {
581
		ret = insert_mappable_node(ggtt, &node, PAGE_SIZE);
582
		if (ret)
583 584
			goto out_unlock;
		GEM_BUG_ON(!node.allocated);
585 586 587 588 589 590
	}

	ret = i915_gem_object_set_to_gtt_domain(obj, false);
	if (ret)
		goto out_unpin;

591
	mutex_unlock(&i915->drm.struct_mutex);
592

593 594 595
	user_data = u64_to_user_ptr(args->data_ptr);
	remain = args->size;
	offset = args->offset;
596 597 598 599 600 601 602 603 604 605 606 607 608 609

	while (remain > 0) {
		/* Operation in this page
		 *
		 * page_base = page offset within aperture
		 * page_offset = offset within page
		 * page_length = bytes to copy for this page
		 */
		u32 page_base = node.start;
		unsigned page_offset = offset_in_page(offset);
		unsigned page_length = PAGE_SIZE - page_offset;
		page_length = remain < page_length ? remain : page_length;
		if (node.allocated) {
			wmb();
610 611 612
			ggtt->vm.insert_page(&ggtt->vm,
					     i915_gem_object_get_dma_address(obj, offset >> PAGE_SHIFT),
					     node.start, I915_CACHE_NONE, 0);
613 614 615 616
			wmb();
		} else {
			page_base += offset & PAGE_MASK;
		}
617

618
		if (gtt_user_read(&ggtt->iomap, page_base, page_offset,
619
				  user_data, page_length)) {
620 621 622 623 624 625 626 627 628
			ret = -EFAULT;
			break;
		}

		remain -= page_length;
		user_data += page_length;
		offset += page_length;
	}

629
	mutex_lock(&i915->drm.struct_mutex);
630 631 632
out_unpin:
	if (node.allocated) {
		wmb();
633
		ggtt->vm.clear_range(&ggtt->vm, node.start, node.size);
634 635
		remove_mappable_node(&node);
	} else {
C
Chris Wilson 已提交
636
		i915_vma_unpin(vma);
637
	}
638
out_unlock:
639
	intel_runtime_pm_put(i915, wakeref);
640
	mutex_unlock(&i915->drm.struct_mutex);
641

642 643 644
	return ret;
}

645 646
/**
 * Reads data from the object referenced by handle.
647 648 649
 * @dev: drm device pointer
 * @data: ioctl data blob
 * @file: drm file pointer
650 651 652 653 654
 *
 * On error, the contents of *data are undefined.
 */
int
i915_gem_pread_ioctl(struct drm_device *dev, void *data,
655
		     struct drm_file *file)
656 657
{
	struct drm_i915_gem_pread *args = data;
658
	struct drm_i915_gem_object *obj;
659
	int ret;
660

661 662 663
	if (args->size == 0)
		return 0;

664
	if (!access_ok(u64_to_user_ptr(args->data_ptr),
665 666 667
		       args->size))
		return -EFAULT;

668
	obj = i915_gem_object_lookup(file, args->handle);
669 670
	if (!obj)
		return -ENOENT;
671

672
	/* Bounds check source.  */
673
	if (range_overflows_t(u64, args->offset, args->size, obj->base.size)) {
C
Chris Wilson 已提交
674
		ret = -EINVAL;
675
		goto out;
C
Chris Wilson 已提交
676 677
	}

C
Chris Wilson 已提交
678 679
	trace_i915_gem_object_pread(obj, args->offset, args->size);

680 681
	ret = i915_gem_object_wait(obj,
				   I915_WAIT_INTERRUPTIBLE,
682
				   MAX_SCHEDULE_TIMEOUT);
683
	if (ret)
684
		goto out;
685

686
	ret = i915_gem_object_pin_pages(obj);
687
	if (ret)
688
		goto out;
689

690
	ret = i915_gem_shmem_pread(obj, args);
691
	if (ret == -EFAULT || ret == -ENODEV)
692
		ret = i915_gem_gtt_pread(obj, args);
693

694 695
	i915_gem_object_unpin_pages(obj);
out:
C
Chris Wilson 已提交
696
	i915_gem_object_put(obj);
697
	return ret;
698 699
}

700 701
/* This is the fast write path which cannot handle
 * page faults in the source data
702
 */
703

704 705 706 707
static inline bool
ggtt_write(struct io_mapping *mapping,
	   loff_t base, int offset,
	   char __user *user_data, int length)
708
{
709
	void __iomem *vaddr;
710
	unsigned long unwritten;
711

712
	/* We can use the cpu mem copy function because this is X86. */
713 714
	vaddr = io_mapping_map_atomic_wc(mapping, base);
	unwritten = __copy_from_user_inatomic_nocache((void __force *)vaddr + offset,
715
						      user_data, length);
716 717
	io_mapping_unmap_atomic(vaddr);
	if (unwritten) {
718 719 720
		vaddr = io_mapping_map_wc(mapping, base, PAGE_SIZE);
		unwritten = copy_from_user((void __force *)vaddr + offset,
					   user_data, length);
721 722
		io_mapping_unmap(vaddr);
	}
723 724 725 726

	return unwritten;
}

727 728 729
/**
 * This is the fast pwrite path, where we copy the data directly from the
 * user into the GTT, uncached.
730
 * @obj: i915 GEM object
731
 * @args: pwrite arguments structure
732
 */
733
static int
734 735
i915_gem_gtt_pwrite_fast(struct drm_i915_gem_object *obj,
			 const struct drm_i915_gem_pwrite *args)
736
{
737
	struct drm_i915_private *i915 = to_i915(obj->base.dev);
738
	struct i915_ggtt *ggtt = &i915->ggtt;
739
	intel_wakeref_t wakeref;
740
	struct drm_mm_node node;
741 742 743
	struct i915_vma *vma;
	u64 remain, offset;
	void __user *user_data;
744
	int ret;
745

746 747 748
	ret = mutex_lock_interruptible(&i915->drm.struct_mutex);
	if (ret)
		return ret;
D
Daniel Vetter 已提交
749

750 751 752 753 754 755 756 757
	if (i915_gem_object_has_struct_page(obj)) {
		/*
		 * Avoid waking the device up if we can fallback, as
		 * waking/resuming is very slow (worst-case 10-100 ms
		 * depending on PCI sleeps and our own resume time).
		 * This easily dwarfs any performance advantage from
		 * using the cache bypass of indirect GGTT access.
		 */
758 759
		wakeref = intel_runtime_pm_get_if_in_use(i915);
		if (!wakeref) {
760 761 762 763 764
			ret = -EFAULT;
			goto out_unlock;
		}
	} else {
		/* No backing pages, no fallback, we must force GGTT access */
765
		wakeref = intel_runtime_pm_get(i915);
766 767
	}

C
Chris Wilson 已提交
768
	vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0,
769 770 771
				       PIN_MAPPABLE |
				       PIN_NONFAULT |
				       PIN_NONBLOCK);
772 773 774
	if (!IS_ERR(vma)) {
		node.start = i915_ggtt_offset(vma);
		node.allocated = false;
775
		ret = i915_vma_put_fence(vma);
776 777 778 779 780
		if (ret) {
			i915_vma_unpin(vma);
			vma = ERR_PTR(ret);
		}
	}
C
Chris Wilson 已提交
781
	if (IS_ERR(vma)) {
782
		ret = insert_mappable_node(ggtt, &node, PAGE_SIZE);
783
		if (ret)
784
			goto out_rpm;
785
		GEM_BUG_ON(!node.allocated);
786
	}
D
Daniel Vetter 已提交
787 788 789 790 791

	ret = i915_gem_object_set_to_gtt_domain(obj, true);
	if (ret)
		goto out_unpin;

792 793
	mutex_unlock(&i915->drm.struct_mutex);

794
	intel_fb_obj_invalidate(obj, ORIGIN_CPU);
795

796 797 798 799
	user_data = u64_to_user_ptr(args->data_ptr);
	offset = args->offset;
	remain = args->size;
	while (remain) {
800 801
		/* Operation in this page
		 *
802 803 804
		 * page_base = page offset within aperture
		 * page_offset = offset within page
		 * page_length = bytes to copy for this page
805
		 */
806
		u32 page_base = node.start;
807 808
		unsigned int page_offset = offset_in_page(offset);
		unsigned int page_length = PAGE_SIZE - page_offset;
809 810 811
		page_length = remain < page_length ? remain : page_length;
		if (node.allocated) {
			wmb(); /* flush the write before we modify the GGTT */
812 813 814
			ggtt->vm.insert_page(&ggtt->vm,
					     i915_gem_object_get_dma_address(obj, offset >> PAGE_SHIFT),
					     node.start, I915_CACHE_NONE, 0);
815 816 817 818
			wmb(); /* flush modifications to the GGTT (insert_page) */
		} else {
			page_base += offset & PAGE_MASK;
		}
819
		/* If we get a fault while copying data, then (presumably) our
820 821
		 * source page isn't available.  Return the error and we'll
		 * retry in the slow path.
822 823
		 * If the object is non-shmem backed, we retry again with the
		 * path that handles page fault.
824
		 */
825
		if (ggtt_write(&ggtt->iomap, page_base, page_offset,
826 827 828
			       user_data, page_length)) {
			ret = -EFAULT;
			break;
D
Daniel Vetter 已提交
829
		}
830

831 832 833
		remain -= page_length;
		user_data += page_length;
		offset += page_length;
834
	}
835
	intel_fb_obj_flush(obj, ORIGIN_CPU);
836 837

	mutex_lock(&i915->drm.struct_mutex);
D
Daniel Vetter 已提交
838
out_unpin:
839 840
	if (node.allocated) {
		wmb();
841
		ggtt->vm.clear_range(&ggtt->vm, node.start, node.size);
842 843
		remove_mappable_node(&node);
	} else {
C
Chris Wilson 已提交
844
		i915_vma_unpin(vma);
845
	}
846
out_rpm:
847
	intel_runtime_pm_put(i915, wakeref);
848
out_unlock:
849
	mutex_unlock(&i915->drm.struct_mutex);
850
	return ret;
851 852
}

853 854 855 856 857
/* Per-page copy function for the shmem pwrite fastpath.
 * Flushes invalid cachelines before writing to the target if
 * needs_clflush_before is set and flushes out any written cachelines after
 * writing if needs_clflush is set.
 */
858
static int
859 860 861
shmem_pwrite(struct page *page, int offset, int len, char __user *user_data,
	     bool needs_clflush_before,
	     bool needs_clflush_after)
862
{
863
	char *vaddr;
864 865
	int ret;

866
	vaddr = kmap(page);
867

868 869
	if (needs_clflush_before)
		drm_clflush_virt_range(vaddr + offset, len);
870

871 872 873
	ret = __copy_from_user(vaddr + offset, user_data, len);
	if (!ret && needs_clflush_after)
		drm_clflush_virt_range(vaddr + offset, len);
874

875 876 877
	kunmap(page);

	return ret ? -EFAULT : 0;
878 879 880 881 882 883 884 885 886 887
}

static int
i915_gem_shmem_pwrite(struct drm_i915_gem_object *obj,
		      const struct drm_i915_gem_pwrite *args)
{
	struct drm_i915_private *i915 = to_i915(obj->base.dev);
	void __user *user_data;
	u64 remain;
	unsigned int partial_cacheline_write;
888
	unsigned int needs_clflush;
889 890
	unsigned int offset, idx;
	int ret;
891

892
	ret = mutex_lock_interruptible(&i915->drm.struct_mutex);
893 894 895
	if (ret)
		return ret;

896
	ret = i915_gem_object_prepare_write(obj, &needs_clflush);
897 898 899
	mutex_unlock(&i915->drm.struct_mutex);
	if (ret)
		return ret;
900

901 902 903 904 905 906 907
	/* If we don't overwrite a cacheline completely we need to be
	 * careful to have up-to-date data by first clflushing. Don't
	 * overcomplicate things and flush the entire patch.
	 */
	partial_cacheline_write = 0;
	if (needs_clflush & CLFLUSH_BEFORE)
		partial_cacheline_write = boot_cpu_data.x86_clflush_size - 1;
908

909 910 911 912 913
	user_data = u64_to_user_ptr(args->data_ptr);
	remain = args->size;
	offset = offset_in_page(args->offset);
	for (idx = args->offset >> PAGE_SHIFT; remain; idx++) {
		struct page *page = i915_gem_object_get_page(obj, idx);
914
		unsigned int length = min_t(u64, remain, PAGE_SIZE - offset);
915

916 917 918
		ret = shmem_pwrite(page, offset, length, user_data,
				   (offset | length) & partial_cacheline_write,
				   needs_clflush & CLFLUSH_AFTER);
919
		if (ret)
920
			break;
921

922 923 924
		remain -= length;
		user_data += length;
		offset = 0;
925
	}
926

927
	intel_fb_obj_flush(obj, ORIGIN_CPU);
928
	i915_gem_object_finish_access(obj);
929
	return ret;
930 931 932 933
}

/**
 * Writes data to the object referenced by handle.
934 935 936
 * @dev: drm device
 * @data: ioctl data blob
 * @file: drm file
937 938 939 940 941
 *
 * On error, the contents of the buffer that were to be modified are undefined.
 */
int
i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
942
		      struct drm_file *file)
943 944
{
	struct drm_i915_gem_pwrite *args = data;
945
	struct drm_i915_gem_object *obj;
946 947 948 949 950
	int ret;

	if (args->size == 0)
		return 0;

951
	if (!access_ok(u64_to_user_ptr(args->data_ptr), args->size))
952 953
		return -EFAULT;

954
	obj = i915_gem_object_lookup(file, args->handle);
955 956
	if (!obj)
		return -ENOENT;
957

958
	/* Bounds check destination. */
959
	if (range_overflows_t(u64, args->offset, args->size, obj->base.size)) {
C
Chris Wilson 已提交
960
		ret = -EINVAL;
961
		goto err;
C
Chris Wilson 已提交
962 963
	}

964 965 966 967 968 969
	/* Writes not allowed into this read-only object */
	if (i915_gem_object_is_readonly(obj)) {
		ret = -EINVAL;
		goto err;
	}

C
Chris Wilson 已提交
970 971
	trace_i915_gem_object_pwrite(obj, args->offset, args->size);

972 973 974 975 976 977
	ret = -ENODEV;
	if (obj->ops->pwrite)
		ret = obj->ops->pwrite(obj, args);
	if (ret != -ENODEV)
		goto err;

978 979 980
	ret = i915_gem_object_wait(obj,
				   I915_WAIT_INTERRUPTIBLE |
				   I915_WAIT_ALL,
981
				   MAX_SCHEDULE_TIMEOUT);
982 983 984
	if (ret)
		goto err;

985
	ret = i915_gem_object_pin_pages(obj);
986
	if (ret)
987
		goto err;
988

D
Daniel Vetter 已提交
989
	ret = -EFAULT;
990 991 992 993 994 995
	/* We can only do the GTT pwrite on untiled buffers, as otherwise
	 * it would end up going through the fenced access, and we'll get
	 * different detiling behavior between reading and writing.
	 * pread/pwrite currently are reading and writing from the CPU
	 * perspective, requiring manual detiling by the client.
	 */
996
	if (!i915_gem_object_has_struct_page(obj) ||
997
	    cpu_write_needs_clflush(obj))
D
Daniel Vetter 已提交
998 999
		/* Note that the gtt paths might fail with non-page-backed user
		 * pointers (e.g. gtt mappings when moving data between
1000 1001
		 * textures). Fallback to the shmem path in that case.
		 */
1002
		ret = i915_gem_gtt_pwrite_fast(obj, args);
1003

1004
	if (ret == -EFAULT || ret == -ENOSPC) {
1005 1006
		if (obj->phys_handle)
			ret = i915_gem_phys_pwrite(obj, args, file);
1007
		else
1008
			ret = i915_gem_shmem_pwrite(obj, args);
1009
	}
1010

1011
	i915_gem_object_unpin_pages(obj);
1012
err:
C
Chris Wilson 已提交
1013
	i915_gem_object_put(obj);
1014
	return ret;
1015 1016 1017 1018
}

/**
 * Called when user space has done writes to this buffer
1019 1020 1021
 * @dev: drm device
 * @data: ioctl data blob
 * @file: drm file
1022 1023 1024
 */
int
i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
1025
			 struct drm_file *file)
1026 1027
{
	struct drm_i915_gem_sw_finish *args = data;
1028
	struct drm_i915_gem_object *obj;
1029

1030
	obj = i915_gem_object_lookup(file, args->handle);
1031 1032
	if (!obj)
		return -ENOENT;
1033

T
Tina Zhang 已提交
1034 1035 1036 1037 1038
	/*
	 * Proxy objects are barred from CPU access, so there is no
	 * need to ban sw_finish as it is a nop.
	 */

1039
	/* Pinned buffers may be scanout, so flush the cache */
1040
	i915_gem_object_flush_if_display(obj);
C
Chris Wilson 已提交
1041
	i915_gem_object_put(obj);
1042 1043

	return 0;
1044 1045
}

1046
void i915_gem_runtime_suspend(struct drm_i915_private *dev_priv)
1047
{
1048
	struct drm_i915_gem_object *obj, *on;
1049
	int i;
1050

1051 1052 1053 1054 1055 1056
	/*
	 * Only called during RPM suspend. All users of the userfault_list
	 * must be holding an RPM wakeref to ensure that this can not
	 * run concurrently with themselves (and use the struct_mutex for
	 * protection between themselves).
	 */
1057

1058
	list_for_each_entry_safe(obj, on,
1059 1060
				 &dev_priv->mm.userfault_list, userfault_link)
		__i915_gem_object_release_mmap(obj);
1061 1062 1063 1064 1065 1066 1067 1068

	/* The fence will be lost when the device powers down. If any were
	 * in use by hardware (i.e. they are pinned), we should not be powering
	 * down! All other fences will be reacquired by the user upon waking.
	 */
	for (i = 0; i < dev_priv->num_fence_regs; i++) {
		struct drm_i915_fence_reg *reg = &dev_priv->fence_regs[i];

1069 1070 1071 1072 1073 1074 1075 1076 1077 1078
		/* Ideally we want to assert that the fence register is not
		 * live at this point (i.e. that no piece of code will be
		 * trying to write through fence + GTT, as that both violates
		 * our tracking of activity and associated locking/barriers,
		 * but also is illegal given that the hw is powered down).
		 *
		 * Previously we used reg->pin_count as a "liveness" indicator.
		 * That is not sufficient, and we need a more fine-grained
		 * tool if we want to have a sanity check here.
		 */
1079 1080 1081 1082

		if (!reg->vma)
			continue;

1083
		GEM_BUG_ON(i915_vma_has_userfault(reg->vma));
1084 1085
		reg->dirty = true;
	}
1086 1087
}

1088
bool i915_sg_trim(struct sg_table *orig_st)
1089 1090 1091 1092 1093 1094
{
	struct sg_table new_st;
	struct scatterlist *sg, *new_sg;
	unsigned int i;

	if (orig_st->nents == orig_st->orig_nents)
1095
		return false;
1096

1097
	if (sg_alloc_table(&new_st, orig_st->nents, GFP_KERNEL | __GFP_NOWARN))
1098
		return false;
1099 1100 1101 1102

	new_sg = new_st.sgl;
	for_each_sg(orig_st->sgl, sg, orig_st->nents, i) {
		sg_set_page(new_sg, sg_page(sg), sg->length, 0);
1103 1104 1105
		sg_dma_address(new_sg) = sg_dma_address(sg);
		sg_dma_len(new_sg) = sg_dma_len(sg);

1106 1107
		new_sg = sg_next(new_sg);
	}
1108
	GEM_BUG_ON(new_sg); /* Should walk exactly nents and hit the end */
1109 1110 1111 1112

	sg_free_table(orig_st);

	*orig_st = new_st;
1113
	return true;
1114 1115
}

1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126
static unsigned long to_wait_timeout(s64 timeout_ns)
{
	if (timeout_ns < 0)
		return MAX_SCHEDULE_TIMEOUT;

	if (timeout_ns == 0)
		return 0;

	return nsecs_to_jiffies_timeout(timeout_ns);
}

1127 1128
/**
 * i915_gem_wait_ioctl - implements DRM_IOCTL_I915_GEM_WAIT
1129 1130 1131
 * @dev: drm device pointer
 * @data: ioctl data blob
 * @file: drm file pointer
1132 1133 1134 1135 1136 1137 1138
 *
 * Returns 0 if successful, else an error is returned with the remaining time in
 * the timeout parameter.
 *  -ETIME: object is still busy after timeout
 *  -ERESTARTSYS: signal interrupted the wait
 *  -ENONENT: object doesn't exist
 * Also possible, but rare:
1139
 *  -EAGAIN: incomplete, restart syscall
1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155
 *  -ENOMEM: damn
 *  -ENODEV: Internal IRQ fail
 *  -E?: The add request failed
 *
 * The wait ioctl with a timeout of 0 reimplements the busy ioctl. With any
 * non-zero timeout parameter the wait ioctl will wait for the given number of
 * nanoseconds on an object becoming unbusy. Since the wait itself does so
 * without holding struct_mutex the object may become re-busied before this
 * function completes. A similar but shorter * race condition exists in the busy
 * ioctl
 */
int
i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
{
	struct drm_i915_gem_wait *args = data;
	struct drm_i915_gem_object *obj;
1156 1157
	ktime_t start;
	long ret;
1158

1159 1160 1161
	if (args->flags != 0)
		return -EINVAL;

1162
	obj = i915_gem_object_lookup(file, args->bo_handle);
1163
	if (!obj)
1164 1165
		return -ENOENT;

1166 1167 1168
	start = ktime_get();

	ret = i915_gem_object_wait(obj,
1169 1170 1171
				   I915_WAIT_INTERRUPTIBLE |
				   I915_WAIT_PRIORITY |
				   I915_WAIT_ALL,
1172
				   to_wait_timeout(args->timeout_ns));
1173 1174 1175 1176 1177

	if (args->timeout_ns > 0) {
		args->timeout_ns -= ktime_to_ns(ktime_sub(ktime_get(), start));
		if (args->timeout_ns < 0)
			args->timeout_ns = 0;
1178 1179 1180 1181 1182 1183 1184 1185 1186 1187

		/*
		 * Apparently ktime isn't accurate enough and occasionally has a
		 * bit of mismatch in the jiffies<->nsecs<->ktime loop. So patch
		 * things up to make the test happy. We allow up to 1 jiffy.
		 *
		 * This is a regression from the timespec->ktime conversion.
		 */
		if (ret == -ETIME && !nsecs_to_jiffies(args->timeout_ns))
			args->timeout_ns = 0;
1188 1189 1190 1191

		/* Asked to wait beyond the jiffie/scheduler precision? */
		if (ret == -ETIME && args->timeout_ns)
			ret = -EAGAIN;
1192 1193
	}

C
Chris Wilson 已提交
1194
	i915_gem_object_put(obj);
1195
	return ret;
1196 1197
}

1198 1199
static int wait_for_engines(struct drm_i915_private *i915)
{
1200
	if (wait_for(intel_engines_are_idle(i915), I915_IDLE_ENGINES_TIMEOUT)) {
1201 1202
		dev_err(i915->drm.dev,
			"Failed to idle engines, declaring wedged!\n");
1203
		GEM_TRACE_DUMP();
1204 1205
		i915_gem_set_wedged(i915);
		return -EIO;
1206 1207 1208 1209 1210
	}

	return 0;
}

1211 1212 1213 1214 1215 1216 1217 1218
static long
wait_for_timelines(struct drm_i915_private *i915,
		   unsigned int flags, long timeout)
{
	struct i915_gt_timelines *gt = &i915->gt.timelines;
	struct i915_timeline *tl;

	mutex_lock(&gt->mutex);
C
Chris Wilson 已提交
1219
	list_for_each_entry(tl, &gt->active_list, link) {
1220 1221
		struct i915_request *rq;

1222
		rq = i915_active_request_get_unlocked(&tl->last_request);
1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237
		if (!rq)
			continue;

		mutex_unlock(&gt->mutex);

		/*
		 * "Race-to-idle".
		 *
		 * Switching to the kernel context is often used a synchronous
		 * step prior to idling, e.g. in suspend for flushing all
		 * current operations to memory before sleeping. These we
		 * want to complete as quickly as possible to avoid prolonged
		 * stalls, so allow the gpu to boost to maximum clocks.
		 */
		if (flags & I915_WAIT_FOR_IDLE_BOOST)
1238
			gen6_rps_boost(rq);
1239 1240 1241 1242 1243 1244 1245 1246

		timeout = i915_request_wait(rq, flags, timeout);
		i915_request_put(rq);
		if (timeout < 0)
			return timeout;

		/* restart after reacquiring the lock */
		mutex_lock(&gt->mutex);
C
Chris Wilson 已提交
1247
		tl = list_entry(&gt->active_list, typeof(*tl), link);
1248 1249 1250 1251 1252 1253
	}
	mutex_unlock(&gt->mutex);

	return timeout;
}

1254 1255
int i915_gem_wait_for_idle(struct drm_i915_private *i915,
			   unsigned int flags, long timeout)
1256
{
1257
	GEM_TRACE("flags=%x (%s), timeout=%ld%s, awake?=%s\n",
1258
		  flags, flags & I915_WAIT_LOCKED ? "locked" : "unlocked",
1259 1260
		  timeout, timeout == MAX_SCHEDULE_TIMEOUT ? " (forever)" : "",
		  yesno(i915->gt.awake));
1261

1262 1263 1264 1265
	/* If the device is asleep, we have no requests outstanding */
	if (!READ_ONCE(i915->gt.awake))
		return 0;

1266 1267 1268 1269
	timeout = wait_for_timelines(i915, flags, timeout);
	if (timeout < 0)
		return timeout;

1270
	if (flags & I915_WAIT_LOCKED) {
1271
		int err;
1272 1273 1274

		lockdep_assert_held(&i915->drm.struct_mutex);

1275 1276 1277 1278
		err = wait_for_engines(i915);
		if (err)
			return err;

1279
		i915_retire_requests(i915);
1280
	}
1281 1282

	return 0;
1283 1284
}

1285 1286 1287
/* Throttle our rendering by waiting until the ring has completed our requests
 * emitted over 20 msec ago.
 *
1288 1289 1290 1291
 * Note that if we were to use the current jiffies each time around the loop,
 * we wouldn't escape the function with any frames outstanding if the time to
 * render a frame was over 20ms.
 *
1292 1293 1294
 * This should get us reasonable parallelism between CPU and GPU but also
 * relatively low latency when blocking on a particular request to finish.
 */
1295
static int
1296
i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
1297
{
1298
	struct drm_i915_private *dev_priv = to_i915(dev);
1299
	struct drm_i915_file_private *file_priv = file->driver_priv;
1300
	unsigned long recent_enough = jiffies - DRM_I915_THROTTLE_JIFFIES;
1301
	struct i915_request *request, *target = NULL;
1302
	long ret;
1303

1304
	/* ABI: return -EIO if already wedged */
1305 1306 1307
	ret = i915_terminally_wedged(dev_priv);
	if (ret)
		return ret;
1308

1309
	spin_lock(&file_priv->mm.lock);
1310
	list_for_each_entry(request, &file_priv->mm.request_list, client_link) {
1311 1312
		if (time_after_eq(request->emitted_jiffies, recent_enough))
			break;
1313

1314 1315 1316 1317
		if (target) {
			list_del(&target->client_link);
			target->file_priv = NULL;
		}
1318

1319
		target = request;
1320
	}
1321
	if (target)
1322
		i915_request_get(target);
1323
	spin_unlock(&file_priv->mm.lock);
1324

1325
	if (target == NULL)
1326
		return 0;
1327

1328
	ret = i915_request_wait(target,
1329 1330
				I915_WAIT_INTERRUPTIBLE,
				MAX_SCHEDULE_TIMEOUT);
1331
	i915_request_put(target);
1332

1333
	return ret < 0 ? ret : 0;
1334 1335
}

C
Chris Wilson 已提交
1336
struct i915_vma *
1337 1338
i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
			 const struct i915_ggtt_view *view,
1339
			 u64 size,
1340 1341
			 u64 alignment,
			 u64 flags)
1342
{
1343
	struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
1344
	struct i915_address_space *vm = &dev_priv->ggtt.vm;
1345 1346
	struct i915_vma *vma;
	int ret;
1347

1348 1349
	lockdep_assert_held(&obj->base.dev->struct_mutex);

1350 1351
	if (flags & PIN_MAPPABLE &&
	    (!view || view->type == I915_GGTT_VIEW_NORMAL)) {
1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381
		/* If the required space is larger than the available
		 * aperture, we will not able to find a slot for the
		 * object and unbinding the object now will be in
		 * vain. Worse, doing so may cause us to ping-pong
		 * the object in and out of the Global GTT and
		 * waste a lot of cycles under the mutex.
		 */
		if (obj->base.size > dev_priv->ggtt.mappable_end)
			return ERR_PTR(-E2BIG);

		/* If NONBLOCK is set the caller is optimistically
		 * trying to cache the full object within the mappable
		 * aperture, and *must* have a fallback in place for
		 * situations where we cannot bind the object. We
		 * can be a little more lax here and use the fallback
		 * more often to avoid costly migrations of ourselves
		 * and other objects within the aperture.
		 *
		 * Half-the-aperture is used as a simple heuristic.
		 * More interesting would to do search for a free
		 * block prior to making the commitment to unbind.
		 * That caters for the self-harm case, and with a
		 * little more heuristics (e.g. NOFAULT, NOEVICT)
		 * we could try to minimise harm to others.
		 */
		if (flags & PIN_NONBLOCK &&
		    obj->base.size > dev_priv->ggtt.mappable_end / 2)
			return ERR_PTR(-ENOSPC);
	}

1382
	vma = i915_vma_instance(obj, vm, view);
1383
	if (IS_ERR(vma))
C
Chris Wilson 已提交
1384
		return vma;
1385 1386

	if (i915_vma_misplaced(vma, size, alignment, flags)) {
1387 1388 1389
		if (flags & PIN_NONBLOCK) {
			if (i915_vma_is_pinned(vma) || i915_vma_is_active(vma))
				return ERR_PTR(-ENOSPC);
1390

1391
			if (flags & PIN_MAPPABLE &&
1392
			    vma->fence_size > dev_priv->ggtt.mappable_end / 2)
1393 1394 1395
				return ERR_PTR(-ENOSPC);
		}

1396 1397
		WARN(i915_vma_is_pinned(vma),
		     "bo is already pinned in ggtt with incorrect alignment:"
1398 1399 1400
		     " offset=%08x, req.alignment=%llx,"
		     " req.map_and_fenceable=%d, vma->map_and_fenceable=%d\n",
		     i915_ggtt_offset(vma), alignment,
1401
		     !!(flags & PIN_MAPPABLE),
1402
		     i915_vma_is_map_and_fenceable(vma));
1403 1404
		ret = i915_vma_unbind(vma);
		if (ret)
C
Chris Wilson 已提交
1405
			return ERR_PTR(ret);
1406 1407
	}

C
Chris Wilson 已提交
1408 1409 1410
	ret = i915_vma_pin(vma, size, alignment, flags | PIN_GLOBAL);
	if (ret)
		return ERR_PTR(ret);
1411

C
Chris Wilson 已提交
1412
	return vma;
1413 1414
}

1415
static __always_inline u32 __busy_read_flag(u8 id)
1416
{
1417 1418
	if (id == (u8)I915_ENGINE_CLASS_INVALID)
		return 0xffff0000u;
1419 1420

	GEM_BUG_ON(id >= 16);
1421
	return 0x10000u << id;
1422 1423
}

1424
static __always_inline u32 __busy_write_id(u8 id)
1425
{
1426 1427
	/*
	 * The uABI guarantees an active writer is also amongst the read
1428 1429 1430 1431 1432 1433 1434
	 * engines. This would be true if we accessed the activity tracking
	 * under the lock, but as we perform the lookup of the object and
	 * its activity locklessly we can not guarantee that the last_write
	 * being active implies that we have set the same engine flag from
	 * last_read - hence we always set both read and write busy for
	 * last_write.
	 */
1435 1436
	if (id == (u8)I915_ENGINE_CLASS_INVALID)
		return 0xffffffffu;
1437 1438

	return (id + 1) | __busy_read_flag(id);
1439 1440
}

1441
static __always_inline unsigned int
1442
__busy_set_if_active(const struct dma_fence *fence, u32 (*flag)(u8 id))
1443
{
1444
	const struct i915_request *rq;
1445

1446 1447
	/*
	 * We have to check the current hw status of the fence as the uABI
1448 1449 1450
	 * guarantees forward progress. We could rely on the idle worker
	 * to eventually flush us, but to minimise latency just ask the
	 * hardware.
1451
	 *
1452
	 * Note we only report on the status of native fences.
1453
	 */
1454 1455 1456 1457
	if (!dma_fence_is_i915(fence))
		return 0;

	/* opencode to_request() in order to avoid const warnings */
1458
	rq = container_of(fence, const struct i915_request, fence);
1459
	if (i915_request_completed(rq))
1460 1461
		return 0;

1462 1463
	/* Beware type-expansion follies! */
	BUILD_BUG_ON(!typecheck(u8, rq->engine->uabi_class));
1464
	return flag(rq->engine->uabi_class);
1465 1466
}

1467
static __always_inline unsigned int
1468
busy_check_reader(const struct dma_fence *fence)
1469
{
1470
	return __busy_set_if_active(fence, __busy_read_flag);
1471 1472
}

1473
static __always_inline unsigned int
1474
busy_check_writer(const struct dma_fence *fence)
1475
{
1476 1477 1478 1479
	if (!fence)
		return 0;

	return __busy_set_if_active(fence, __busy_write_id);
1480 1481
}

1482 1483
int
i915_gem_busy_ioctl(struct drm_device *dev, void *data,
1484
		    struct drm_file *file)
1485 1486
{
	struct drm_i915_gem_busy *args = data;
1487
	struct drm_i915_gem_object *obj;
1488 1489
	struct reservation_object_list *list;
	unsigned int seq;
1490
	int err;
1491

1492
	err = -ENOENT;
1493 1494
	rcu_read_lock();
	obj = i915_gem_object_lookup_rcu(file, args->handle);
1495
	if (!obj)
1496
		goto out;
1497

1498 1499
	/*
	 * A discrepancy here is that we do not report the status of
1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516
	 * non-i915 fences, i.e. even though we may report the object as idle,
	 * a call to set-domain may still stall waiting for foreign rendering.
	 * This also means that wait-ioctl may report an object as busy,
	 * where busy-ioctl considers it idle.
	 *
	 * We trade the ability to warn of foreign fences to report on which
	 * i915 engines are active for the object.
	 *
	 * Alternatively, we can trade that extra information on read/write
	 * activity with
	 *	args->busy =
	 *		!reservation_object_test_signaled_rcu(obj->resv, true);
	 * to report the overall busyness. This is what the wait-ioctl does.
	 *
	 */
retry:
	seq = raw_read_seqcount(&obj->resv->seq);
1517

1518 1519
	/* Translate the exclusive fence to the READ *and* WRITE engine */
	args->busy = busy_check_writer(rcu_dereference(obj->resv->fence_excl));
1520

1521 1522 1523 1524
	/* Translate shared fences to READ set of engines */
	list = rcu_dereference(obj->resv->fence);
	if (list) {
		unsigned int shared_count = list->shared_count, i;
1525

1526 1527 1528 1529 1530 1531
		for (i = 0; i < shared_count; ++i) {
			struct dma_fence *fence =
				rcu_dereference(list->shared[i]);

			args->busy |= busy_check_reader(fence);
		}
1532
	}
1533

1534 1535 1536 1537
	if (args->busy && read_seqcount_retry(&obj->resv->seq, seq))
		goto retry;

	err = 0;
1538 1539 1540
out:
	rcu_read_unlock();
	return err;
1541 1542 1543 1544 1545 1546
}

int
i915_gem_throttle_ioctl(struct drm_device *dev, void *data,
			struct drm_file *file_priv)
{
1547
	return i915_gem_ring_throttle(dev, file_priv);
1548 1549
}

1550 1551 1552 1553
int
i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
		       struct drm_file *file_priv)
{
1554
	struct drm_i915_private *dev_priv = to_i915(dev);
1555
	struct drm_i915_gem_madvise *args = data;
1556
	struct drm_i915_gem_object *obj;
1557
	int err;
1558 1559 1560 1561 1562 1563 1564 1565 1566

	switch (args->madv) {
	case I915_MADV_DONTNEED:
	case I915_MADV_WILLNEED:
	    break;
	default:
	    return -EINVAL;
	}

1567
	obj = i915_gem_object_lookup(file_priv, args->handle);
1568 1569 1570 1571 1572 1573
	if (!obj)
		return -ENOENT;

	err = mutex_lock_interruptible(&obj->mm.lock);
	if (err)
		goto out;
1574

1575
	if (i915_gem_object_has_pages(obj) &&
1576
	    i915_gem_object_is_tiled(obj) &&
1577
	    dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES) {
1578 1579
		if (obj->mm.madv == I915_MADV_WILLNEED) {
			GEM_BUG_ON(!obj->mm.quirked);
C
Chris Wilson 已提交
1580
			__i915_gem_object_unpin_pages(obj);
1581 1582 1583
			obj->mm.quirked = false;
		}
		if (args->madv == I915_MADV_WILLNEED) {
1584
			GEM_BUG_ON(obj->mm.quirked);
C
Chris Wilson 已提交
1585
			__i915_gem_object_pin_pages(obj);
1586 1587
			obj->mm.quirked = true;
		}
1588 1589
	}

C
Chris Wilson 已提交
1590 1591
	if (obj->mm.madv != __I915_MADV_PURGED)
		obj->mm.madv = args->madv;
1592

C
Chris Wilson 已提交
1593
	/* if the object is no longer attached, discard its backing storage */
1594 1595
	if (obj->mm.madv == I915_MADV_DONTNEED &&
	    !i915_gem_object_has_pages(obj))
1596
		i915_gem_object_truncate(obj);
1597

C
Chris Wilson 已提交
1598
	args->retained = obj->mm.madv != __I915_MADV_PURGED;
1599
	mutex_unlock(&obj->mm.lock);
C
Chris Wilson 已提交
1600

1601
out:
1602
	i915_gem_object_put(obj);
1603
	return err;
1604 1605
}

1606 1607
void i915_gem_sanitize(struct drm_i915_private *i915)
{
1608 1609
	intel_wakeref_t wakeref;

1610 1611
	GEM_TRACE("\n");

1612
	wakeref = intel_runtime_pm_get(i915);
1613
	intel_uncore_forcewake_get(&i915->uncore, FORCEWAKE_ALL);
1614 1615 1616 1617 1618 1619 1620

	/*
	 * As we have just resumed the machine and woken the device up from
	 * deep PCI sleep (presumably D3_cold), assume the HW has been reset
	 * back to defaults, recovering from whatever wedged state we left it
	 * in and so worth trying to use the device once more.
	 */
1621
	if (i915_terminally_wedged(i915))
1622 1623
		i915_gem_unset_wedged(i915);

1624 1625 1626 1627 1628 1629
	/*
	 * If we inherit context state from the BIOS or earlier occupants
	 * of the GPU, the GPU may be in an inconsistent state when we
	 * try to take over. The only way to remove the earlier state
	 * is by resetting. However, resetting on earlier gen is tricky as
	 * it may impact the display and we are uncertain about the stability
1630
	 * of the reset, so this could be applied to even earlier gen.
1631
	 */
1632
	intel_gt_sanitize(i915, false);
1633

1634
	intel_uncore_forcewake_put(&i915->uncore, FORCEWAKE_ALL);
1635
	intel_runtime_pm_put(i915, wakeref);
1636

1637
	mutex_lock(&i915->drm.struct_mutex);
1638 1639
	i915_gem_contexts_lost(i915);
	mutex_unlock(&i915->drm.struct_mutex);
1640 1641
}

1642
void i915_gem_init_swizzling(struct drm_i915_private *dev_priv)
1643
{
1644
	if (INTEL_GEN(dev_priv) < 5 ||
1645 1646 1647 1648 1649 1650
	    dev_priv->mm.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_NONE)
		return;

	I915_WRITE(DISP_ARB_CTL, I915_READ(DISP_ARB_CTL) |
				 DISP_TILE_SURFACE_SWIZZLING);

1651
	if (IS_GEN(dev_priv, 5))
1652 1653
		return;

1654
	I915_WRITE(TILECTL, I915_READ(TILECTL) | TILECTL_SWZCTL);
1655
	if (IS_GEN(dev_priv, 6))
1656
		I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_SNB));
1657
	else if (IS_GEN(dev_priv, 7))
1658
		I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_IVB));
1659
	else if (IS_GEN(dev_priv, 8))
B
Ben Widawsky 已提交
1660
		I915_WRITE(GAMTARBMODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_BDW));
1661 1662
	else
		BUG();
1663
}
D
Daniel Vetter 已提交
1664

1665
static void init_unused_ring(struct drm_i915_private *dev_priv, u32 base)
1666 1667 1668 1669 1670 1671 1672
{
	I915_WRITE(RING_CTL(base), 0);
	I915_WRITE(RING_HEAD(base), 0);
	I915_WRITE(RING_TAIL(base), 0);
	I915_WRITE(RING_START(base), 0);
}

1673
static void init_unused_rings(struct drm_i915_private *dev_priv)
1674
{
1675 1676 1677 1678 1679 1680
	if (IS_I830(dev_priv)) {
		init_unused_ring(dev_priv, PRB1_BASE);
		init_unused_ring(dev_priv, SRB0_BASE);
		init_unused_ring(dev_priv, SRB1_BASE);
		init_unused_ring(dev_priv, SRB2_BASE);
		init_unused_ring(dev_priv, SRB3_BASE);
1681
	} else if (IS_GEN(dev_priv, 2)) {
1682 1683
		init_unused_ring(dev_priv, SRB0_BASE);
		init_unused_ring(dev_priv, SRB1_BASE);
1684
	} else if (IS_GEN(dev_priv, 3)) {
1685 1686
		init_unused_ring(dev_priv, PRB1_BASE);
		init_unused_ring(dev_priv, PRB2_BASE);
1687 1688 1689
	}
}

1690 1691
int i915_gem_init_hw(struct drm_i915_private *dev_priv)
{
C
Chris Wilson 已提交
1692
	int ret;
1693

1694 1695
	dev_priv->gt.last_init_time = ktime_get();

1696
	/* Double layer security blanket, see i915_gem_init() */
1697
	intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);
1698

1699
	if (HAS_EDRAM(dev_priv) && INTEL_GEN(dev_priv) < 9)
1700
		I915_WRITE(HSW_IDICR, I915_READ(HSW_IDICR) | IDIHASHMSK(0xf));
1701

1702
	if (IS_HASWELL(dev_priv))
1703
		I915_WRITE(MI_PREDICATE_RESULT_2, IS_HSW_GT3(dev_priv) ?
1704
			   LOWER_SLICE_ENABLED : LOWER_SLICE_DISABLED);
1705

1706
	/* Apply the GT workarounds... */
1707
	intel_gt_apply_workarounds(dev_priv);
1708 1709
	/* ...and determine whether they are sticking. */
	intel_gt_verify_workarounds(dev_priv, "init");
1710

1711
	i915_gem_init_swizzling(dev_priv);
1712

1713 1714 1715 1716 1717 1718
	/*
	 * At least 830 can leave some of the unused rings
	 * "active" (ie. head != tail) after resume which
	 * will prevent c3 entry. Makes sure all unused rings
	 * are totally idle.
	 */
1719
	init_unused_rings(dev_priv);
1720

1721
	BUG_ON(!dev_priv->kernel_context);
1722 1723
	ret = i915_terminally_wedged(dev_priv);
	if (ret)
1724
		goto out;
1725

1726
	ret = i915_ppgtt_init_hw(dev_priv);
1727
	if (ret) {
1728
		DRM_ERROR("Enabling PPGTT failed (%d)\n", ret);
1729 1730 1731
		goto out;
	}

1732 1733 1734 1735 1736 1737
	ret = intel_wopcm_init_hw(&dev_priv->wopcm);
	if (ret) {
		DRM_ERROR("Enabling WOPCM failed (%d)\n", ret);
		goto out;
	}

1738 1739
	/* We can't enable contexts until all firmware is loaded */
	ret = intel_uc_init_hw(dev_priv);
1740 1741
	if (ret) {
		DRM_ERROR("Enabling uc failed (%d)\n", ret);
1742
		goto out;
1743
	}
1744

1745
	intel_mocs_init_l3cc_table(dev_priv);
1746

1747
	/* Only when the HW is re-initialised, can we replay the requests */
1748
	ret = intel_engines_resume(dev_priv);
1749 1750
	if (ret)
		goto cleanup_uc;
1751

1752
	intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
1753

1754
	intel_engines_set_scheduler_caps(dev_priv);
1755
	return 0;
1756 1757 1758

cleanup_uc:
	intel_uc_fini_hw(dev_priv);
1759
out:
1760
	intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
1761 1762

	return ret;
1763 1764
}

1765 1766 1767
static int __intel_engines_record_defaults(struct drm_i915_private *i915)
{
	struct intel_engine_cs *engine;
1768 1769
	struct i915_gem_context *ctx;
	struct i915_gem_engines *e;
1770
	enum intel_engine_id id;
1771
	int err = 0;
1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785

	/*
	 * As we reset the gpu during very early sanitisation, the current
	 * register state on the GPU should reflect its defaults values.
	 * We load a context onto the hw (with restore-inhibit), then switch
	 * over to a second context to save that default register state. We
	 * can then prime every new context with that state so they all start
	 * from the same default HW values.
	 */

	ctx = i915_gem_context_create_kernel(i915, 0);
	if (IS_ERR(ctx))
		return PTR_ERR(ctx);

1786 1787
	e = i915_gem_context_lock_engines(ctx);

1788
	for_each_engine(engine, i915, id) {
1789
		struct intel_context *ce = e->engines[id];
1790
		struct i915_request *rq;
1791

1792
		rq = intel_context_create_request(ce);
1793 1794
		if (IS_ERR(rq)) {
			err = PTR_ERR(rq);
1795
			goto err_active;
1796 1797
		}

1798
		err = 0;
1799 1800
		if (rq->engine->init_context)
			err = rq->engine->init_context(rq);
1801

1802
		i915_request_add(rq);
1803 1804 1805 1806
		if (err)
			goto err_active;
	}

1807
	/* Flush the default context image to memory, and enable powersaving. */
1808
	if (!i915_gem_load_power_context(i915)) {
1809
		err = -EIO;
1810
		goto err_active;
1811
	}
1812 1813

	for_each_engine(engine, i915, id) {
1814 1815
		struct intel_context *ce = e->engines[id];
		struct i915_vma *state = ce->state;
1816
		void *vaddr;
1817 1818 1819 1820

		if (!state)
			continue;

1821
		GEM_BUG_ON(intel_context_is_pinned(ce));
1822

1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839
		/*
		 * As we will hold a reference to the logical state, it will
		 * not be torn down with the context, and importantly the
		 * object will hold onto its vma (making it possible for a
		 * stray GTT write to corrupt our defaults). Unmap the vma
		 * from the GTT to prevent such accidents and reclaim the
		 * space.
		 */
		err = i915_vma_unbind(state);
		if (err)
			goto err_active;

		err = i915_gem_object_set_to_cpu_domain(state->obj, false);
		if (err)
			goto err_active;

		engine->default_state = i915_gem_object_get(state->obj);
1840 1841
		i915_gem_object_set_cache_coherency(engine->default_state,
						    I915_CACHE_LLC);
1842 1843 1844

		/* Check we can acquire the image of the context state */
		vaddr = i915_gem_object_pin_map(engine->default_state,
1845
						I915_MAP_FORCE_WB);
1846 1847 1848 1849 1850 1851
		if (IS_ERR(vaddr)) {
			err = PTR_ERR(vaddr);
			goto err_active;
		}

		i915_gem_object_unpin_map(engine->default_state);
1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872
	}

	if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM)) {
		unsigned int found = intel_engines_has_context_isolation(i915);

		/*
		 * Make sure that classes with multiple engine instances all
		 * share the same basic configuration.
		 */
		for_each_engine(engine, i915, id) {
			unsigned int bit = BIT(engine->uabi_class);
			unsigned int expected = engine->default_state ? bit : 0;

			if ((found & bit) != expected) {
				DRM_ERROR("mismatching default context state for class %d on engine %s\n",
					  engine->uabi_class, engine->name);
			}
		}
	}

out_ctx:
1873
	i915_gem_context_unlock_engines(ctx);
1874 1875 1876 1877 1878 1879 1880
	i915_gem_context_set_closed(ctx);
	i915_gem_context_put(ctx);
	return err;

err_active:
	/*
	 * If we have to abandon now, we expect the engines to be idle
1881 1882
	 * and ready to be torn-down. The quickest way we can accomplish
	 * this is by declaring ourselves wedged.
1883
	 */
1884
	i915_gem_set_wedged(i915);
1885 1886 1887
	goto out_ctx;
}

1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925
static int
i915_gem_init_scratch(struct drm_i915_private *i915, unsigned int size)
{
	struct drm_i915_gem_object *obj;
	struct i915_vma *vma;
	int ret;

	obj = i915_gem_object_create_stolen(i915, size);
	if (!obj)
		obj = i915_gem_object_create_internal(i915, size);
	if (IS_ERR(obj)) {
		DRM_ERROR("Failed to allocate scratch page\n");
		return PTR_ERR(obj);
	}

	vma = i915_vma_instance(obj, &i915->ggtt.vm, NULL);
	if (IS_ERR(vma)) {
		ret = PTR_ERR(vma);
		goto err_unref;
	}

	ret = i915_vma_pin(vma, 0, 0, PIN_GLOBAL | PIN_HIGH);
	if (ret)
		goto err_unref;

	i915->gt.scratch = vma;
	return 0;

err_unref:
	i915_gem_object_put(obj);
	return ret;
}

static void i915_gem_fini_scratch(struct drm_i915_private *i915)
{
	i915_vma_unpin_and_release(&i915->gt.scratch, 0);
}

1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942
static int intel_engines_verify_workarounds(struct drm_i915_private *i915)
{
	struct intel_engine_cs *engine;
	enum intel_engine_id id;
	int err = 0;

	if (!IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
		return 0;

	for_each_engine(engine, i915, id) {
		if (intel_engine_verify_workarounds(engine, "load"))
			err = -EIO;
	}

	return err;
}

1943
int i915_gem_init(struct drm_i915_private *dev_priv)
1944 1945 1946
{
	int ret;

1947 1948
	/* We need to fallback to 4K pages if host doesn't support huge gtt. */
	if (intel_vgpu_active(dev_priv) && !intel_vgpu_has_huge_gtt(dev_priv))
1949 1950 1951
		mkwrite_device_info(dev_priv)->page_sizes =
			I915_GTT_PAGE_SIZE_4K;

1952
	dev_priv->mm.unordered_timeline = dma_fence_context_alloc(1);
1953

1954 1955
	i915_timelines_init(dev_priv);

1956 1957 1958 1959
	ret = i915_gem_init_userptr(dev_priv);
	if (ret)
		return ret;

1960
	ret = intel_uc_init_misc(dev_priv);
1961 1962 1963
	if (ret)
		return ret;

1964
	ret = intel_wopcm_init(&dev_priv->wopcm);
1965
	if (ret)
1966
		goto err_uc_misc;
1967

1968 1969 1970 1971 1972 1973
	/* This is just a security blanket to placate dragons.
	 * On some systems, we very sporadically observe that the first TLBs
	 * used by the CS may be stale, despite us poking the TLB reset. If
	 * we hold the forcewake during initialisation these problems
	 * just magically go away.
	 */
1974
	mutex_lock(&dev_priv->drm.struct_mutex);
1975
	intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);
1976

1977
	ret = i915_gem_init_ggtt(dev_priv);
1978 1979 1980 1981
	if (ret) {
		GEM_BUG_ON(ret == -EIO);
		goto err_unlock;
	}
1982

1983
	ret = i915_gem_init_scratch(dev_priv,
1984
				    IS_GEN(dev_priv, 2) ? SZ_256K : PAGE_SIZE);
1985 1986 1987 1988
	if (ret) {
		GEM_BUG_ON(ret == -EIO);
		goto err_ggtt;
	}
1989

1990 1991 1992 1993 1994 1995
	ret = intel_engines_setup(dev_priv);
	if (ret) {
		GEM_BUG_ON(ret == -EIO);
		goto err_unlock;
	}

1996 1997 1998 1999 2000 2001
	ret = i915_gem_contexts_init(dev_priv);
	if (ret) {
		GEM_BUG_ON(ret == -EIO);
		goto err_scratch;
	}

2002
	ret = intel_engines_init(dev_priv);
2003 2004 2005 2006
	if (ret) {
		GEM_BUG_ON(ret == -EIO);
		goto err_context;
	}
2007

2008 2009
	intel_init_gt_powersave(dev_priv);

2010
	ret = intel_uc_init(dev_priv);
2011
	if (ret)
2012
		goto err_pm;
2013

2014 2015 2016 2017
	ret = i915_gem_init_hw(dev_priv);
	if (ret)
		goto err_uc_init;

2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028
	/*
	 * Despite its name intel_init_clock_gating applies both display
	 * clock gating workarounds; GT mmio workarounds and the occasional
	 * GT power context workaround. Worse, sometimes it includes a context
	 * register workaround which we need to apply before we record the
	 * default HW state for all contexts.
	 *
	 * FIXME: break up the workarounds and apply them at the right time!
	 */
	intel_init_clock_gating(dev_priv);

2029 2030 2031 2032
	ret = intel_engines_verify_workarounds(dev_priv);
	if (ret)
		goto err_init_hw;

2033
	ret = __intel_engines_record_defaults(dev_priv);
2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046
	if (ret)
		goto err_init_hw;

	if (i915_inject_load_failure()) {
		ret = -ENODEV;
		goto err_init_hw;
	}

	if (i915_inject_load_failure()) {
		ret = -EIO;
		goto err_init_hw;
	}

2047
	intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058
	mutex_unlock(&dev_priv->drm.struct_mutex);

	return 0;

	/*
	 * Unwinding is complicated by that we want to handle -EIO to mean
	 * disable GPU submission but keep KMS alive. We want to mark the
	 * HW as irrevisibly wedged, but keep enough state around that the
	 * driver doesn't explode during runtime.
	 */
err_init_hw:
2059 2060
	mutex_unlock(&dev_priv->drm.struct_mutex);

2061
	i915_gem_set_wedged(dev_priv);
2062
	i915_gem_suspend(dev_priv);
2063 2064
	i915_gem_suspend_late(dev_priv);

2065 2066
	i915_gem_drain_workqueue(dev_priv);

2067
	mutex_lock(&dev_priv->drm.struct_mutex);
2068
	intel_uc_fini_hw(dev_priv);
2069 2070
err_uc_init:
	intel_uc_fini(dev_priv);
2071 2072 2073
err_pm:
	if (ret != -EIO) {
		intel_cleanup_gt_powersave(dev_priv);
2074
		intel_engines_cleanup(dev_priv);
2075 2076 2077 2078
	}
err_context:
	if (ret != -EIO)
		i915_gem_contexts_fini(dev_priv);
2079 2080
err_scratch:
	i915_gem_fini_scratch(dev_priv);
2081 2082
err_ggtt:
err_unlock:
2083
	intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
2084 2085
	mutex_unlock(&dev_priv->drm.struct_mutex);

2086
err_uc_misc:
2087
	intel_uc_fini_misc(dev_priv);
2088

2089
	if (ret != -EIO) {
2090
		i915_gem_cleanup_userptr(dev_priv);
2091 2092
		i915_timelines_fini(dev_priv);
	}
2093

2094
	if (ret == -EIO) {
2095 2096
		mutex_lock(&dev_priv->drm.struct_mutex);

2097 2098
		/*
		 * Allow engine initialisation to fail by marking the GPU as
2099 2100 2101
		 * wedged. But we only want to do this where the GPU is angry,
		 * for all other failure, such as an allocation failure, bail.
		 */
2102
		if (!i915_reset_failed(dev_priv)) {
2103 2104
			i915_load_error(dev_priv,
					"Failed to initialize GPU, declaring it wedged!\n");
2105 2106
			i915_gem_set_wedged(dev_priv);
		}
2107 2108 2109 2110 2111 2112 2113 2114

		/* Minimal basic recovery for KMS */
		ret = i915_ggtt_enable_hw(dev_priv);
		i915_gem_restore_gtt_mappings(dev_priv);
		i915_gem_restore_fences(dev_priv);
		intel_init_clock_gating(dev_priv);

		mutex_unlock(&dev_priv->drm.struct_mutex);
2115 2116
	}

2117
	i915_gem_drain_freed_objects(dev_priv);
2118
	return ret;
2119 2120
}

2121 2122
void i915_gem_fini(struct drm_i915_private *dev_priv)
{
2123 2124
	GEM_BUG_ON(dev_priv->gt.awake);

2125 2126
	intel_wakeref_auto_fini(&dev_priv->mm.userfault_wakeref);

2127
	i915_gem_suspend_late(dev_priv);
2128
	intel_disable_gt_powersave(dev_priv);
2129 2130 2131 2132 2133 2134 2135

	/* Flush any outstanding unpin_work. */
	i915_gem_drain_workqueue(dev_priv);

	mutex_lock(&dev_priv->drm.struct_mutex);
	intel_uc_fini_hw(dev_priv);
	intel_uc_fini(dev_priv);
2136
	intel_engines_cleanup(dev_priv);
2137
	i915_gem_contexts_fini(dev_priv);
2138
	i915_gem_fini_scratch(dev_priv);
2139 2140
	mutex_unlock(&dev_priv->drm.struct_mutex);

2141 2142
	intel_wa_list_free(&dev_priv->gt_wa_list);

2143 2144
	intel_cleanup_gt_powersave(dev_priv);

2145 2146
	intel_uc_fini_misc(dev_priv);
	i915_gem_cleanup_userptr(dev_priv);
2147
	i915_timelines_fini(dev_priv);
2148 2149 2150 2151 2152 2153

	i915_gem_drain_freed_objects(dev_priv);

	WARN_ON(!list_empty(&dev_priv->contexts.list));
}

2154 2155 2156 2157 2158
void i915_gem_init_mmio(struct drm_i915_private *i915)
{
	i915_gem_sanitize(i915);
}

2159 2160 2161
void
i915_gem_load_init_fences(struct drm_i915_private *dev_priv)
{
2162
	int i;
2163

2164
	if (INTEL_GEN(dev_priv) >= 7 && !IS_VALLEYVIEW(dev_priv) &&
2165 2166
	    !IS_CHERRYVIEW(dev_priv))
		dev_priv->num_fence_regs = 32;
2167
	else if (INTEL_GEN(dev_priv) >= 4 ||
2168 2169
		 IS_I945G(dev_priv) || IS_I945GM(dev_priv) ||
		 IS_G33(dev_priv) || IS_PINEVIEW(dev_priv))
2170 2171 2172 2173
		dev_priv->num_fence_regs = 16;
	else
		dev_priv->num_fence_regs = 8;

2174
	if (intel_vgpu_active(dev_priv))
2175 2176 2177 2178
		dev_priv->num_fence_regs =
				I915_READ(vgtif_reg(avail_rs.fence_num));

	/* Initialize fence registers to zero */
2179 2180 2181 2182 2183 2184 2185
	for (i = 0; i < dev_priv->num_fence_regs; i++) {
		struct drm_i915_fence_reg *fence = &dev_priv->fence_regs[i];

		fence->i915 = dev_priv;
		fence->id = i;
		list_add_tail(&fence->link, &dev_priv->mm.fence_list);
	}
2186
	i915_gem_restore_fences(dev_priv);
2187

2188
	i915_gem_detect_bit_6_swizzle(dev_priv);
2189 2190
}

2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201
static void i915_gem_init__mm(struct drm_i915_private *i915)
{
	spin_lock_init(&i915->mm.object_stat_lock);
	spin_lock_init(&i915->mm.obj_lock);
	spin_lock_init(&i915->mm.free_lock);

	init_llist_head(&i915->mm.free_list);

	INIT_LIST_HEAD(&i915->mm.unbound_list);
	INIT_LIST_HEAD(&i915->mm.bound_list);
	INIT_LIST_HEAD(&i915->mm.fence_list);
2202

2203
	INIT_LIST_HEAD(&i915->mm.userfault_list);
2204
	intel_wakeref_auto_init(&i915->mm.userfault_wakeref, i915);
2205

2206
	i915_gem_init__objects(i915);
2207 2208
}

2209
int i915_gem_init_early(struct drm_i915_private *dev_priv)
2210
{
2211
	int err;
2212

2213 2214
	intel_gt_pm_init(dev_priv);

2215
	INIT_LIST_HEAD(&dev_priv->gt.active_rings);
2216
	INIT_LIST_HEAD(&dev_priv->gt.closed_vma);
2217

2218
	i915_gem_init__mm(dev_priv);
2219
	i915_gem_init__pm(dev_priv);
2220

2221
	init_waitqueue_head(&dev_priv->gpu_error.wait_queue);
2222
	init_waitqueue_head(&dev_priv->gpu_error.reset_queue);
2223
	mutex_init(&dev_priv->gpu_error.wedge_mutex);
2224
	init_srcu_struct(&dev_priv->gpu_error.reset_backoff_srcu);
2225

2226 2227
	atomic_set(&dev_priv->mm.bsd_engine_dispatch_index, 0);

2228
	spin_lock_init(&dev_priv->fb_tracking.lock);
2229

M
Matthew Auld 已提交
2230 2231 2232 2233
	err = i915_gemfs_init(dev_priv);
	if (err)
		DRM_NOTE("Unable to create a private tmpfs mount, hugepage support will be disabled(%d).\n", err);

2234
	return 0;
2235
}
2236

2237
void i915_gem_cleanup_early(struct drm_i915_private *dev_priv)
2238
{
2239
	i915_gem_drain_freed_objects(dev_priv);
2240 2241
	GEM_BUG_ON(!llist_empty(&dev_priv->mm.free_list));
	GEM_BUG_ON(atomic_read(&dev_priv->mm.free_count));
2242
	WARN_ON(dev_priv->mm.object_count);
2243

2244 2245
	cleanup_srcu_struct(&dev_priv->gpu_error.reset_backoff_srcu);

M
Matthew Auld 已提交
2246
	i915_gemfs_fini(dev_priv);
2247 2248
}

2249 2250
int i915_gem_freeze(struct drm_i915_private *dev_priv)
{
2251 2252 2253
	/* Discard all purgeable objects, let userspace recover those as
	 * required after resuming.
	 */
2254 2255 2256 2257 2258
	i915_gem_shrink_all(dev_priv);

	return 0;
}

2259
int i915_gem_freeze_late(struct drm_i915_private *i915)
2260 2261
{
	struct drm_i915_gem_object *obj;
2262
	struct list_head *phases[] = {
2263 2264
		&i915->mm.unbound_list,
		&i915->mm.bound_list,
2265
		NULL
2266
	}, **phase;
2267

2268 2269
	/*
	 * Called just before we write the hibernation image.
2270 2271 2272 2273 2274 2275 2276 2277
	 *
	 * We need to update the domain tracking to reflect that the CPU
	 * will be accessing all the pages to create and restore from the
	 * hibernation, and so upon restoration those pages will be in the
	 * CPU domain.
	 *
	 * To make sure the hibernation image contains the latest state,
	 * we update that state just before writing out the image.
2278 2279
	 *
	 * To try and reduce the hibernation image, we manually shrink
2280
	 * the objects as well, see i915_gem_freeze()
2281 2282
	 */

2283 2284
	i915_gem_shrink(i915, -1UL, NULL, I915_SHRINK_UNBOUND);
	i915_gem_drain_freed_objects(i915);
2285

2286 2287 2288 2289
	mutex_lock(&i915->drm.struct_mutex);
	for (phase = phases; *phase; phase++) {
		list_for_each_entry(obj, *phase, mm.link)
			WARN_ON(i915_gem_object_set_to_cpu_domain(obj, true));
2290
	}
2291
	mutex_unlock(&i915->drm.struct_mutex);
2292 2293 2294 2295

	return 0;
}

2296
void i915_gem_release(struct drm_device *dev, struct drm_file *file)
2297
{
2298
	struct drm_i915_file_private *file_priv = file->driver_priv;
2299
	struct i915_request *request;
2300 2301 2302 2303 2304

	/* Clean up our request list when the client is going away, so that
	 * later retire_requests won't dereference our soon-to-be-gone
	 * file_priv.
	 */
2305
	spin_lock(&file_priv->mm.lock);
2306
	list_for_each_entry(request, &file_priv->mm.request_list, client_link)
2307
		request->file_priv = NULL;
2308
	spin_unlock(&file_priv->mm.lock);
2309 2310
}

2311
int i915_gem_open(struct drm_i915_private *i915, struct drm_file *file)
2312 2313
{
	struct drm_i915_file_private *file_priv;
2314
	int ret;
2315

2316
	DRM_DEBUG("\n");
2317 2318 2319 2320 2321 2322

	file_priv = kzalloc(sizeof(*file_priv), GFP_KERNEL);
	if (!file_priv)
		return -ENOMEM;

	file->driver_priv = file_priv;
2323
	file_priv->dev_priv = i915;
2324
	file_priv->file = file;
2325 2326 2327 2328

	spin_lock_init(&file_priv->mm.lock);
	INIT_LIST_HEAD(&file_priv->mm.request_list);

2329
	file_priv->bsd_engine = -1;
2330
	file_priv->hang_timestamp = jiffies;
2331

2332
	ret = i915_gem_context_open(i915, file);
2333 2334
	if (ret)
		kfree(file_priv);
2335

2336
	return ret;
2337 2338
}

2339 2340
/**
 * i915_gem_track_fb - update frontbuffer tracking
2341 2342 2343
 * @old: current GEM buffer for the frontbuffer slots
 * @new: new GEM buffer for the frontbuffer slots
 * @frontbuffer_bits: bitmask of frontbuffer slots
2344 2345 2346 2347
 *
 * This updates the frontbuffer tracking bits @frontbuffer_bits by clearing them
 * from @old and setting them in @new. Both @old and @new can be NULL.
 */
2348 2349 2350 2351
void i915_gem_track_fb(struct drm_i915_gem_object *old,
		       struct drm_i915_gem_object *new,
		       unsigned frontbuffer_bits)
{
2352 2353 2354 2355 2356 2357 2358
	/* Control of individual bits within the mask are guarded by
	 * the owning plane->mutex, i.e. we can never see concurrent
	 * manipulation of individual bits. But since the bitfield as a whole
	 * is updated using RMW, we need to use atomics in order to update
	 * the bits.
	 */
	BUILD_BUG_ON(INTEL_FRONTBUFFER_BITS_PER_PIPE * I915_MAX_PIPES >
2359
		     BITS_PER_TYPE(atomic_t));
2360

2361
	if (old) {
2362 2363
		WARN_ON(!(atomic_read(&old->frontbuffer_bits) & frontbuffer_bits));
		atomic_andnot(frontbuffer_bits, &old->frontbuffer_bits);
2364 2365 2366
	}

	if (new) {
2367 2368
		WARN_ON(atomic_read(&new->frontbuffer_bits) & frontbuffer_bits);
		atomic_or(frontbuffer_bits, &new->frontbuffer_bits);
2369 2370 2371
	}
}

2372 2373
#if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
#include "selftests/scatterlist.c"
2374
#include "selftests/mock_gem_device.c"
2375
#include "selftests/i915_gem.c"
2376
#endif