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 <drm/drmP.h> 29 #include <drm/drm_vma_manager.h> 30 #include <drm/i915_drm.h> 31 #include "i915_drv.h" 32 #include "i915_gem_clflush.h" 33 #include "i915_vgpu.h" 34 #include "i915_trace.h" 35 #include "intel_drv.h" 36 #include "intel_frontbuffer.h" 37 #include "intel_mocs.h" 38 #include <linux/dma-fence-array.h> 39 #include <linux/kthread.h> 40 #include <linux/reservation.h> 41 #include <linux/shmem_fs.h> 42 #include <linux/slab.h> 43 #include <linux/stop_machine.h> 44 #include <linux/swap.h> 45 #include <linux/pci.h> 46 #include <linux/dma-buf.h> 47 48 static void i915_gem_flush_free_objects(struct drm_i915_private *i915); 49 50 static bool cpu_write_needs_clflush(struct drm_i915_gem_object *obj) 51 { 52 if (obj->cache_dirty) 53 return false; 54 55 if (!(obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_WRITE)) 56 return true; 57 58 return obj->pin_display; 59 } 60 61 static int 62 insert_mappable_node(struct i915_ggtt *ggtt, 63 struct drm_mm_node *node, u32 size) 64 { 65 memset(node, 0, sizeof(*node)); 66 return drm_mm_insert_node_in_range(&ggtt->base.mm, node, 67 size, 0, I915_COLOR_UNEVICTABLE, 68 0, ggtt->mappable_end, 69 DRM_MM_INSERT_LOW); 70 } 71 72 static void 73 remove_mappable_node(struct drm_mm_node *node) 74 { 75 drm_mm_remove_node(node); 76 } 77 78 /* some bookkeeping */ 79 static void i915_gem_info_add_obj(struct drm_i915_private *dev_priv, 80 u64 size) 81 { 82 spin_lock(&dev_priv->mm.object_stat_lock); 83 dev_priv->mm.object_count++; 84 dev_priv->mm.object_memory += size; 85 spin_unlock(&dev_priv->mm.object_stat_lock); 86 } 87 88 static void i915_gem_info_remove_obj(struct drm_i915_private *dev_priv, 89 u64 size) 90 { 91 spin_lock(&dev_priv->mm.object_stat_lock); 92 dev_priv->mm.object_count--; 93 dev_priv->mm.object_memory -= size; 94 spin_unlock(&dev_priv->mm.object_stat_lock); 95 } 96 97 static int 98 i915_gem_wait_for_error(struct i915_gpu_error *error) 99 { 100 int ret; 101 102 might_sleep(); 103 104 /* 105 * Only wait 10 seconds for the gpu reset to complete to avoid hanging 106 * userspace. If it takes that long something really bad is going on and 107 * we should simply try to bail out and fail as gracefully as possible. 108 */ 109 ret = wait_event_interruptible_timeout(error->reset_queue, 110 !i915_reset_backoff(error), 111 I915_RESET_TIMEOUT); 112 if (ret == 0) { 113 DRM_ERROR("Timed out waiting for the gpu reset to complete\n"); 114 return -EIO; 115 } else if (ret < 0) { 116 return ret; 117 } else { 118 return 0; 119 } 120 } 121 122 int i915_mutex_lock_interruptible(struct drm_device *dev) 123 { 124 struct drm_i915_private *dev_priv = to_i915(dev); 125 int ret; 126 127 ret = i915_gem_wait_for_error(&dev_priv->gpu_error); 128 if (ret) 129 return ret; 130 131 ret = mutex_lock_interruptible(&dev->struct_mutex); 132 if (ret) 133 return ret; 134 135 return 0; 136 } 137 138 int 139 i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data, 140 struct drm_file *file) 141 { 142 struct drm_i915_private *dev_priv = to_i915(dev); 143 struct i915_ggtt *ggtt = &dev_priv->ggtt; 144 struct drm_i915_gem_get_aperture *args = data; 145 struct i915_vma *vma; 146 u64 pinned; 147 148 pinned = ggtt->base.reserved; 149 mutex_lock(&dev->struct_mutex); 150 list_for_each_entry(vma, &ggtt->base.active_list, vm_link) 151 if (i915_vma_is_pinned(vma)) 152 pinned += vma->node.size; 153 list_for_each_entry(vma, &ggtt->base.inactive_list, vm_link) 154 if (i915_vma_is_pinned(vma)) 155 pinned += vma->node.size; 156 mutex_unlock(&dev->struct_mutex); 157 158 args->aper_size = ggtt->base.total; 159 args->aper_available_size = args->aper_size - pinned; 160 161 return 0; 162 } 163 164 static struct sg_table * 165 i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj) 166 { 167 struct address_space *mapping = obj->base.filp->f_mapping; 168 drm_dma_handle_t *phys; 169 struct sg_table *st; 170 struct scatterlist *sg; 171 char *vaddr; 172 int i; 173 174 if (WARN_ON(i915_gem_object_needs_bit17_swizzle(obj))) 175 return ERR_PTR(-EINVAL); 176 177 /* Always aligning to the object size, allows a single allocation 178 * to handle all possible callers, and given typical object sizes, 179 * the alignment of the buddy allocation will naturally match. 180 */ 181 phys = drm_pci_alloc(obj->base.dev, 182 obj->base.size, 183 roundup_pow_of_two(obj->base.size)); 184 if (!phys) 185 return ERR_PTR(-ENOMEM); 186 187 vaddr = phys->vaddr; 188 for (i = 0; i < obj->base.size / PAGE_SIZE; i++) { 189 struct page *page; 190 char *src; 191 192 page = shmem_read_mapping_page(mapping, i); 193 if (IS_ERR(page)) { 194 st = ERR_CAST(page); 195 goto err_phys; 196 } 197 198 src = kmap_atomic(page); 199 memcpy(vaddr, src, PAGE_SIZE); 200 drm_clflush_virt_range(vaddr, PAGE_SIZE); 201 kunmap_atomic(src); 202 203 put_page(page); 204 vaddr += PAGE_SIZE; 205 } 206 207 i915_gem_chipset_flush(to_i915(obj->base.dev)); 208 209 st = kmalloc(sizeof(*st), GFP_KERNEL); 210 if (!st) { 211 st = ERR_PTR(-ENOMEM); 212 goto err_phys; 213 } 214 215 if (sg_alloc_table(st, 1, GFP_KERNEL)) { 216 kfree(st); 217 st = ERR_PTR(-ENOMEM); 218 goto err_phys; 219 } 220 221 sg = st->sgl; 222 sg->offset = 0; 223 sg->length = obj->base.size; 224 225 sg_dma_address(sg) = phys->busaddr; 226 sg_dma_len(sg) = obj->base.size; 227 228 obj->phys_handle = phys; 229 return st; 230 231 err_phys: 232 drm_pci_free(obj->base.dev, phys); 233 return st; 234 } 235 236 static void __start_cpu_write(struct drm_i915_gem_object *obj) 237 { 238 obj->base.read_domains = I915_GEM_DOMAIN_CPU; 239 obj->base.write_domain = I915_GEM_DOMAIN_CPU; 240 if (cpu_write_needs_clflush(obj)) 241 obj->cache_dirty = true; 242 } 243 244 static void 245 __i915_gem_object_release_shmem(struct drm_i915_gem_object *obj, 246 struct sg_table *pages, 247 bool needs_clflush) 248 { 249 GEM_BUG_ON(obj->mm.madv == __I915_MADV_PURGED); 250 251 if (obj->mm.madv == I915_MADV_DONTNEED) 252 obj->mm.dirty = false; 253 254 if (needs_clflush && 255 (obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0 && 256 !(obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_READ)) 257 drm_clflush_sg(pages); 258 259 __start_cpu_write(obj); 260 } 261 262 static void 263 i915_gem_object_put_pages_phys(struct drm_i915_gem_object *obj, 264 struct sg_table *pages) 265 { 266 __i915_gem_object_release_shmem(obj, pages, false); 267 268 if (obj->mm.dirty) { 269 struct address_space *mapping = obj->base.filp->f_mapping; 270 char *vaddr = obj->phys_handle->vaddr; 271 int i; 272 273 for (i = 0; i < obj->base.size / PAGE_SIZE; i++) { 274 struct page *page; 275 char *dst; 276 277 page = shmem_read_mapping_page(mapping, i); 278 if (IS_ERR(page)) 279 continue; 280 281 dst = kmap_atomic(page); 282 drm_clflush_virt_range(vaddr, PAGE_SIZE); 283 memcpy(dst, vaddr, PAGE_SIZE); 284 kunmap_atomic(dst); 285 286 set_page_dirty(page); 287 if (obj->mm.madv == I915_MADV_WILLNEED) 288 mark_page_accessed(page); 289 put_page(page); 290 vaddr += PAGE_SIZE; 291 } 292 obj->mm.dirty = false; 293 } 294 295 sg_free_table(pages); 296 kfree(pages); 297 298 drm_pci_free(obj->base.dev, obj->phys_handle); 299 } 300 301 static void 302 i915_gem_object_release_phys(struct drm_i915_gem_object *obj) 303 { 304 i915_gem_object_unpin_pages(obj); 305 } 306 307 static const struct drm_i915_gem_object_ops i915_gem_phys_ops = { 308 .get_pages = i915_gem_object_get_pages_phys, 309 .put_pages = i915_gem_object_put_pages_phys, 310 .release = i915_gem_object_release_phys, 311 }; 312 313 static const struct drm_i915_gem_object_ops i915_gem_object_ops; 314 315 int i915_gem_object_unbind(struct drm_i915_gem_object *obj) 316 { 317 struct i915_vma *vma; 318 LIST_HEAD(still_in_list); 319 int ret; 320 321 lockdep_assert_held(&obj->base.dev->struct_mutex); 322 323 /* Closed vma are removed from the obj->vma_list - but they may 324 * still have an active binding on the object. To remove those we 325 * must wait for all rendering to complete to the object (as unbinding 326 * must anyway), and retire the requests. 327 */ 328 ret = i915_gem_object_wait(obj, 329 I915_WAIT_INTERRUPTIBLE | 330 I915_WAIT_LOCKED | 331 I915_WAIT_ALL, 332 MAX_SCHEDULE_TIMEOUT, 333 NULL); 334 if (ret) 335 return ret; 336 337 i915_gem_retire_requests(to_i915(obj->base.dev)); 338 339 while ((vma = list_first_entry_or_null(&obj->vma_list, 340 struct i915_vma, 341 obj_link))) { 342 list_move_tail(&vma->obj_link, &still_in_list); 343 ret = i915_vma_unbind(vma); 344 if (ret) 345 break; 346 } 347 list_splice(&still_in_list, &obj->vma_list); 348 349 return ret; 350 } 351 352 static long 353 i915_gem_object_wait_fence(struct dma_fence *fence, 354 unsigned int flags, 355 long timeout, 356 struct intel_rps_client *rps) 357 { 358 struct drm_i915_gem_request *rq; 359 360 BUILD_BUG_ON(I915_WAIT_INTERRUPTIBLE != 0x1); 361 362 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) 363 return timeout; 364 365 if (!dma_fence_is_i915(fence)) 366 return dma_fence_wait_timeout(fence, 367 flags & I915_WAIT_INTERRUPTIBLE, 368 timeout); 369 370 rq = to_request(fence); 371 if (i915_gem_request_completed(rq)) 372 goto out; 373 374 /* This client is about to stall waiting for the GPU. In many cases 375 * this is undesirable and limits the throughput of the system, as 376 * many clients cannot continue processing user input/output whilst 377 * blocked. RPS autotuning may take tens of milliseconds to respond 378 * to the GPU load and thus incurs additional latency for the client. 379 * We can circumvent that by promoting the GPU frequency to maximum 380 * before we wait. This makes the GPU throttle up much more quickly 381 * (good for benchmarks and user experience, e.g. window animations), 382 * but at a cost of spending more power processing the workload 383 * (bad for battery). Not all clients even want their results 384 * immediately and for them we should just let the GPU select its own 385 * frequency to maximise efficiency. To prevent a single client from 386 * forcing the clocks too high for the whole system, we only allow 387 * each client to waitboost once in a busy period. 388 */ 389 if (rps) { 390 if (INTEL_GEN(rq->i915) >= 6) 391 gen6_rps_boost(rq, rps); 392 else 393 rps = NULL; 394 } 395 396 timeout = i915_wait_request(rq, flags, timeout); 397 398 out: 399 if (flags & I915_WAIT_LOCKED && i915_gem_request_completed(rq)) 400 i915_gem_request_retire_upto(rq); 401 402 return timeout; 403 } 404 405 static long 406 i915_gem_object_wait_reservation(struct reservation_object *resv, 407 unsigned int flags, 408 long timeout, 409 struct intel_rps_client *rps) 410 { 411 unsigned int seq = __read_seqcount_begin(&resv->seq); 412 struct dma_fence *excl; 413 bool prune_fences = false; 414 415 if (flags & I915_WAIT_ALL) { 416 struct dma_fence **shared; 417 unsigned int count, i; 418 int ret; 419 420 ret = reservation_object_get_fences_rcu(resv, 421 &excl, &count, &shared); 422 if (ret) 423 return ret; 424 425 for (i = 0; i < count; i++) { 426 timeout = i915_gem_object_wait_fence(shared[i], 427 flags, timeout, 428 rps); 429 if (timeout < 0) 430 break; 431 432 dma_fence_put(shared[i]); 433 } 434 435 for (; i < count; i++) 436 dma_fence_put(shared[i]); 437 kfree(shared); 438 439 prune_fences = count && timeout >= 0; 440 } else { 441 excl = reservation_object_get_excl_rcu(resv); 442 } 443 444 if (excl && timeout >= 0) { 445 timeout = i915_gem_object_wait_fence(excl, flags, timeout, rps); 446 prune_fences = timeout >= 0; 447 } 448 449 dma_fence_put(excl); 450 451 /* Oportunistically prune the fences iff we know they have *all* been 452 * signaled and that the reservation object has not been changed (i.e. 453 * no new fences have been added). 454 */ 455 if (prune_fences && !__read_seqcount_retry(&resv->seq, seq)) { 456 if (reservation_object_trylock(resv)) { 457 if (!__read_seqcount_retry(&resv->seq, seq)) 458 reservation_object_add_excl_fence(resv, NULL); 459 reservation_object_unlock(resv); 460 } 461 } 462 463 return timeout; 464 } 465 466 static void __fence_set_priority(struct dma_fence *fence, int prio) 467 { 468 struct drm_i915_gem_request *rq; 469 struct intel_engine_cs *engine; 470 471 if (!dma_fence_is_i915(fence)) 472 return; 473 474 rq = to_request(fence); 475 engine = rq->engine; 476 if (!engine->schedule) 477 return; 478 479 engine->schedule(rq, prio); 480 } 481 482 static void fence_set_priority(struct dma_fence *fence, int prio) 483 { 484 /* Recurse once into a fence-array */ 485 if (dma_fence_is_array(fence)) { 486 struct dma_fence_array *array = to_dma_fence_array(fence); 487 int i; 488 489 for (i = 0; i < array->num_fences; i++) 490 __fence_set_priority(array->fences[i], prio); 491 } else { 492 __fence_set_priority(fence, prio); 493 } 494 } 495 496 int 497 i915_gem_object_wait_priority(struct drm_i915_gem_object *obj, 498 unsigned int flags, 499 int prio) 500 { 501 struct dma_fence *excl; 502 503 if (flags & I915_WAIT_ALL) { 504 struct dma_fence **shared; 505 unsigned int count, i; 506 int ret; 507 508 ret = reservation_object_get_fences_rcu(obj->resv, 509 &excl, &count, &shared); 510 if (ret) 511 return ret; 512 513 for (i = 0; i < count; i++) { 514 fence_set_priority(shared[i], prio); 515 dma_fence_put(shared[i]); 516 } 517 518 kfree(shared); 519 } else { 520 excl = reservation_object_get_excl_rcu(obj->resv); 521 } 522 523 if (excl) { 524 fence_set_priority(excl, prio); 525 dma_fence_put(excl); 526 } 527 return 0; 528 } 529 530 /** 531 * Waits for rendering to the object to be completed 532 * @obj: i915 gem object 533 * @flags: how to wait (under a lock, for all rendering or just for writes etc) 534 * @timeout: how long to wait 535 * @rps: client (user process) to charge for any waitboosting 536 */ 537 int 538 i915_gem_object_wait(struct drm_i915_gem_object *obj, 539 unsigned int flags, 540 long timeout, 541 struct intel_rps_client *rps) 542 { 543 might_sleep(); 544 #if IS_ENABLED(CONFIG_LOCKDEP) 545 GEM_BUG_ON(debug_locks && 546 !!lockdep_is_held(&obj->base.dev->struct_mutex) != 547 !!(flags & I915_WAIT_LOCKED)); 548 #endif 549 GEM_BUG_ON(timeout < 0); 550 551 timeout = i915_gem_object_wait_reservation(obj->resv, 552 flags, timeout, 553 rps); 554 return timeout < 0 ? timeout : 0; 555 } 556 557 static struct intel_rps_client *to_rps_client(struct drm_file *file) 558 { 559 struct drm_i915_file_private *fpriv = file->driver_priv; 560 561 return &fpriv->rps; 562 } 563 564 static int 565 i915_gem_phys_pwrite(struct drm_i915_gem_object *obj, 566 struct drm_i915_gem_pwrite *args, 567 struct drm_file *file) 568 { 569 void *vaddr = obj->phys_handle->vaddr + args->offset; 570 char __user *user_data = u64_to_user_ptr(args->data_ptr); 571 572 /* We manually control the domain here and pretend that it 573 * remains coherent i.e. in the GTT domain, like shmem_pwrite. 574 */ 575 intel_fb_obj_invalidate(obj, ORIGIN_CPU); 576 if (copy_from_user(vaddr, user_data, args->size)) 577 return -EFAULT; 578 579 drm_clflush_virt_range(vaddr, args->size); 580 i915_gem_chipset_flush(to_i915(obj->base.dev)); 581 582 intel_fb_obj_flush(obj, ORIGIN_CPU); 583 return 0; 584 } 585 586 void *i915_gem_object_alloc(struct drm_i915_private *dev_priv) 587 { 588 return kmem_cache_zalloc(dev_priv->objects, GFP_KERNEL); 589 } 590 591 void i915_gem_object_free(struct drm_i915_gem_object *obj) 592 { 593 struct drm_i915_private *dev_priv = to_i915(obj->base.dev); 594 kmem_cache_free(dev_priv->objects, obj); 595 } 596 597 static int 598 i915_gem_create(struct drm_file *file, 599 struct drm_i915_private *dev_priv, 600 uint64_t size, 601 uint32_t *handle_p) 602 { 603 struct drm_i915_gem_object *obj; 604 int ret; 605 u32 handle; 606 607 size = roundup(size, PAGE_SIZE); 608 if (size == 0) 609 return -EINVAL; 610 611 /* Allocate the new object */ 612 obj = i915_gem_object_create(dev_priv, size); 613 if (IS_ERR(obj)) 614 return PTR_ERR(obj); 615 616 ret = drm_gem_handle_create(file, &obj->base, &handle); 617 /* drop reference from allocate - handle holds it now */ 618 i915_gem_object_put(obj); 619 if (ret) 620 return ret; 621 622 *handle_p = handle; 623 return 0; 624 } 625 626 int 627 i915_gem_dumb_create(struct drm_file *file, 628 struct drm_device *dev, 629 struct drm_mode_create_dumb *args) 630 { 631 /* have to work out size/pitch and return them */ 632 args->pitch = ALIGN(args->width * DIV_ROUND_UP(args->bpp, 8), 64); 633 args->size = args->pitch * args->height; 634 return i915_gem_create(file, to_i915(dev), 635 args->size, &args->handle); 636 } 637 638 static bool gpu_write_needs_clflush(struct drm_i915_gem_object *obj) 639 { 640 return !(obj->cache_level == I915_CACHE_NONE || 641 obj->cache_level == I915_CACHE_WT); 642 } 643 644 /** 645 * Creates a new mm object and returns a handle to it. 646 * @dev: drm device pointer 647 * @data: ioctl data blob 648 * @file: drm file pointer 649 */ 650 int 651 i915_gem_create_ioctl(struct drm_device *dev, void *data, 652 struct drm_file *file) 653 { 654 struct drm_i915_private *dev_priv = to_i915(dev); 655 struct drm_i915_gem_create *args = data; 656 657 i915_gem_flush_free_objects(dev_priv); 658 659 return i915_gem_create(file, dev_priv, 660 args->size, &args->handle); 661 } 662 663 static inline enum fb_op_origin 664 fb_write_origin(struct drm_i915_gem_object *obj, unsigned int domain) 665 { 666 return (domain == I915_GEM_DOMAIN_GTT ? 667 obj->frontbuffer_ggtt_origin : ORIGIN_CPU); 668 } 669 670 static void 671 flush_write_domain(struct drm_i915_gem_object *obj, unsigned int flush_domains) 672 { 673 struct drm_i915_private *dev_priv = to_i915(obj->base.dev); 674 675 if (!(obj->base.write_domain & flush_domains)) 676 return; 677 678 /* No actual flushing is required for the GTT write domain. Writes 679 * to it "immediately" go to main memory as far as we know, so there's 680 * no chipset flush. It also doesn't land in render cache. 681 * 682 * However, we do have to enforce the order so that all writes through 683 * the GTT land before any writes to the device, such as updates to 684 * the GATT itself. 685 * 686 * We also have to wait a bit for the writes to land from the GTT. 687 * An uncached read (i.e. mmio) seems to be ideal for the round-trip 688 * timing. This issue has only been observed when switching quickly 689 * between GTT writes and CPU reads from inside the kernel on recent hw, 690 * and it appears to only affect discrete GTT blocks (i.e. on LLC 691 * system agents we cannot reproduce this behaviour). 692 */ 693 wmb(); 694 695 switch (obj->base.write_domain) { 696 case I915_GEM_DOMAIN_GTT: 697 if (INTEL_GEN(dev_priv) >= 6 && !HAS_LLC(dev_priv)) { 698 intel_runtime_pm_get(dev_priv); 699 spin_lock_irq(&dev_priv->uncore.lock); 700 POSTING_READ_FW(RING_ACTHD(dev_priv->engine[RCS]->mmio_base)); 701 spin_unlock_irq(&dev_priv->uncore.lock); 702 intel_runtime_pm_put(dev_priv); 703 } 704 705 intel_fb_obj_flush(obj, 706 fb_write_origin(obj, I915_GEM_DOMAIN_GTT)); 707 break; 708 709 case I915_GEM_DOMAIN_CPU: 710 i915_gem_clflush_object(obj, I915_CLFLUSH_SYNC); 711 break; 712 713 case I915_GEM_DOMAIN_RENDER: 714 if (gpu_write_needs_clflush(obj)) 715 obj->cache_dirty = true; 716 break; 717 } 718 719 obj->base.write_domain = 0; 720 } 721 722 static inline int 723 __copy_to_user_swizzled(char __user *cpu_vaddr, 724 const char *gpu_vaddr, int gpu_offset, 725 int length) 726 { 727 int ret, cpu_offset = 0; 728 729 while (length > 0) { 730 int cacheline_end = ALIGN(gpu_offset + 1, 64); 731 int this_length = min(cacheline_end - gpu_offset, length); 732 int swizzled_gpu_offset = gpu_offset ^ 64; 733 734 ret = __copy_to_user(cpu_vaddr + cpu_offset, 735 gpu_vaddr + swizzled_gpu_offset, 736 this_length); 737 if (ret) 738 return ret + length; 739 740 cpu_offset += this_length; 741 gpu_offset += this_length; 742 length -= this_length; 743 } 744 745 return 0; 746 } 747 748 static inline int 749 __copy_from_user_swizzled(char *gpu_vaddr, int gpu_offset, 750 const char __user *cpu_vaddr, 751 int length) 752 { 753 int ret, cpu_offset = 0; 754 755 while (length > 0) { 756 int cacheline_end = ALIGN(gpu_offset + 1, 64); 757 int this_length = min(cacheline_end - gpu_offset, length); 758 int swizzled_gpu_offset = gpu_offset ^ 64; 759 760 ret = __copy_from_user(gpu_vaddr + swizzled_gpu_offset, 761 cpu_vaddr + cpu_offset, 762 this_length); 763 if (ret) 764 return ret + length; 765 766 cpu_offset += this_length; 767 gpu_offset += this_length; 768 length -= this_length; 769 } 770 771 return 0; 772 } 773 774 /* 775 * Pins the specified object's pages and synchronizes the object with 776 * GPU accesses. Sets needs_clflush to non-zero if the caller should 777 * flush the object from the CPU cache. 778 */ 779 int i915_gem_obj_prepare_shmem_read(struct drm_i915_gem_object *obj, 780 unsigned int *needs_clflush) 781 { 782 int ret; 783 784 lockdep_assert_held(&obj->base.dev->struct_mutex); 785 786 *needs_clflush = 0; 787 if (!i915_gem_object_has_struct_page(obj)) 788 return -ENODEV; 789 790 ret = i915_gem_object_wait(obj, 791 I915_WAIT_INTERRUPTIBLE | 792 I915_WAIT_LOCKED, 793 MAX_SCHEDULE_TIMEOUT, 794 NULL); 795 if (ret) 796 return ret; 797 798 ret = i915_gem_object_pin_pages(obj); 799 if (ret) 800 return ret; 801 802 if (obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_READ || 803 !static_cpu_has(X86_FEATURE_CLFLUSH)) { 804 ret = i915_gem_object_set_to_cpu_domain(obj, false); 805 if (ret) 806 goto err_unpin; 807 else 808 goto out; 809 } 810 811 flush_write_domain(obj, ~I915_GEM_DOMAIN_CPU); 812 813 /* If we're not in the cpu read domain, set ourself into the gtt 814 * read domain and manually flush cachelines (if required). This 815 * optimizes for the case when the gpu will dirty the data 816 * anyway again before the next pread happens. 817 */ 818 if (!obj->cache_dirty && 819 !(obj->base.read_domains & I915_GEM_DOMAIN_CPU)) 820 *needs_clflush = CLFLUSH_BEFORE; 821 822 out: 823 /* return with the pages pinned */ 824 return 0; 825 826 err_unpin: 827 i915_gem_object_unpin_pages(obj); 828 return ret; 829 } 830 831 int i915_gem_obj_prepare_shmem_write(struct drm_i915_gem_object *obj, 832 unsigned int *needs_clflush) 833 { 834 int ret; 835 836 lockdep_assert_held(&obj->base.dev->struct_mutex); 837 838 *needs_clflush = 0; 839 if (!i915_gem_object_has_struct_page(obj)) 840 return -ENODEV; 841 842 ret = i915_gem_object_wait(obj, 843 I915_WAIT_INTERRUPTIBLE | 844 I915_WAIT_LOCKED | 845 I915_WAIT_ALL, 846 MAX_SCHEDULE_TIMEOUT, 847 NULL); 848 if (ret) 849 return ret; 850 851 ret = i915_gem_object_pin_pages(obj); 852 if (ret) 853 return ret; 854 855 if (obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_WRITE || 856 !static_cpu_has(X86_FEATURE_CLFLUSH)) { 857 ret = i915_gem_object_set_to_cpu_domain(obj, true); 858 if (ret) 859 goto err_unpin; 860 else 861 goto out; 862 } 863 864 flush_write_domain(obj, ~I915_GEM_DOMAIN_CPU); 865 866 /* If we're not in the cpu write domain, set ourself into the 867 * gtt write domain and manually flush cachelines (as required). 868 * This optimizes for the case when the gpu will use the data 869 * right away and we therefore have to clflush anyway. 870 */ 871 if (!obj->cache_dirty) { 872 *needs_clflush |= CLFLUSH_AFTER; 873 874 /* 875 * Same trick applies to invalidate partially written 876 * cachelines read before writing. 877 */ 878 if (!(obj->base.read_domains & I915_GEM_DOMAIN_CPU)) 879 *needs_clflush |= CLFLUSH_BEFORE; 880 } 881 882 out: 883 intel_fb_obj_invalidate(obj, ORIGIN_CPU); 884 obj->mm.dirty = true; 885 /* return with the pages pinned */ 886 return 0; 887 888 err_unpin: 889 i915_gem_object_unpin_pages(obj); 890 return ret; 891 } 892 893 static void 894 shmem_clflush_swizzled_range(char *addr, unsigned long length, 895 bool swizzled) 896 { 897 if (unlikely(swizzled)) { 898 unsigned long start = (unsigned long) addr; 899 unsigned long end = (unsigned long) addr + length; 900 901 /* For swizzling simply ensure that we always flush both 902 * channels. Lame, but simple and it works. Swizzled 903 * pwrite/pread is far from a hotpath - current userspace 904 * doesn't use it at all. */ 905 start = round_down(start, 128); 906 end = round_up(end, 128); 907 908 drm_clflush_virt_range((void *)start, end - start); 909 } else { 910 drm_clflush_virt_range(addr, length); 911 } 912 913 } 914 915 /* Only difference to the fast-path function is that this can handle bit17 916 * and uses non-atomic copy and kmap functions. */ 917 static int 918 shmem_pread_slow(struct page *page, int offset, int length, 919 char __user *user_data, 920 bool page_do_bit17_swizzling, bool needs_clflush) 921 { 922 char *vaddr; 923 int ret; 924 925 vaddr = kmap(page); 926 if (needs_clflush) 927 shmem_clflush_swizzled_range(vaddr + offset, length, 928 page_do_bit17_swizzling); 929 930 if (page_do_bit17_swizzling) 931 ret = __copy_to_user_swizzled(user_data, vaddr, offset, length); 932 else 933 ret = __copy_to_user(user_data, vaddr + offset, length); 934 kunmap(page); 935 936 return ret ? - EFAULT : 0; 937 } 938 939 static int 940 shmem_pread(struct page *page, int offset, int length, char __user *user_data, 941 bool page_do_bit17_swizzling, bool needs_clflush) 942 { 943 int ret; 944 945 ret = -ENODEV; 946 if (!page_do_bit17_swizzling) { 947 char *vaddr = kmap_atomic(page); 948 949 if (needs_clflush) 950 drm_clflush_virt_range(vaddr + offset, length); 951 ret = __copy_to_user_inatomic(user_data, vaddr + offset, length); 952 kunmap_atomic(vaddr); 953 } 954 if (ret == 0) 955 return 0; 956 957 return shmem_pread_slow(page, offset, length, user_data, 958 page_do_bit17_swizzling, needs_clflush); 959 } 960 961 static int 962 i915_gem_shmem_pread(struct drm_i915_gem_object *obj, 963 struct drm_i915_gem_pread *args) 964 { 965 char __user *user_data; 966 u64 remain; 967 unsigned int obj_do_bit17_swizzling; 968 unsigned int needs_clflush; 969 unsigned int idx, offset; 970 int ret; 971 972 obj_do_bit17_swizzling = 0; 973 if (i915_gem_object_needs_bit17_swizzle(obj)) 974 obj_do_bit17_swizzling = BIT(17); 975 976 ret = mutex_lock_interruptible(&obj->base.dev->struct_mutex); 977 if (ret) 978 return ret; 979 980 ret = i915_gem_obj_prepare_shmem_read(obj, &needs_clflush); 981 mutex_unlock(&obj->base.dev->struct_mutex); 982 if (ret) 983 return ret; 984 985 remain = args->size; 986 user_data = u64_to_user_ptr(args->data_ptr); 987 offset = offset_in_page(args->offset); 988 for (idx = args->offset >> PAGE_SHIFT; remain; idx++) { 989 struct page *page = i915_gem_object_get_page(obj, idx); 990 int length; 991 992 length = remain; 993 if (offset + length > PAGE_SIZE) 994 length = PAGE_SIZE - offset; 995 996 ret = shmem_pread(page, offset, length, user_data, 997 page_to_phys(page) & obj_do_bit17_swizzling, 998 needs_clflush); 999 if (ret) 1000 break; 1001 1002 remain -= length; 1003 user_data += length; 1004 offset = 0; 1005 } 1006 1007 i915_gem_obj_finish_shmem_access(obj); 1008 return ret; 1009 } 1010 1011 static inline bool 1012 gtt_user_read(struct io_mapping *mapping, 1013 loff_t base, int offset, 1014 char __user *user_data, int length) 1015 { 1016 void *vaddr; 1017 unsigned long unwritten; 1018 1019 /* We can use the cpu mem copy function because this is X86. */ 1020 vaddr = (void __force *)io_mapping_map_atomic_wc(mapping, base); 1021 unwritten = __copy_to_user_inatomic(user_data, vaddr + offset, length); 1022 io_mapping_unmap_atomic(vaddr); 1023 if (unwritten) { 1024 vaddr = (void __force *) 1025 io_mapping_map_wc(mapping, base, PAGE_SIZE); 1026 unwritten = copy_to_user(user_data, vaddr + offset, length); 1027 io_mapping_unmap(vaddr); 1028 } 1029 return unwritten; 1030 } 1031 1032 static int 1033 i915_gem_gtt_pread(struct drm_i915_gem_object *obj, 1034 const struct drm_i915_gem_pread *args) 1035 { 1036 struct drm_i915_private *i915 = to_i915(obj->base.dev); 1037 struct i915_ggtt *ggtt = &i915->ggtt; 1038 struct drm_mm_node node; 1039 struct i915_vma *vma; 1040 void __user *user_data; 1041 u64 remain, offset; 1042 int ret; 1043 1044 ret = mutex_lock_interruptible(&i915->drm.struct_mutex); 1045 if (ret) 1046 return ret; 1047 1048 intel_runtime_pm_get(i915); 1049 vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0, 1050 PIN_MAPPABLE | PIN_NONBLOCK); 1051 if (!IS_ERR(vma)) { 1052 node.start = i915_ggtt_offset(vma); 1053 node.allocated = false; 1054 ret = i915_vma_put_fence(vma); 1055 if (ret) { 1056 i915_vma_unpin(vma); 1057 vma = ERR_PTR(ret); 1058 } 1059 } 1060 if (IS_ERR(vma)) { 1061 ret = insert_mappable_node(ggtt, &node, PAGE_SIZE); 1062 if (ret) 1063 goto out_unlock; 1064 GEM_BUG_ON(!node.allocated); 1065 } 1066 1067 ret = i915_gem_object_set_to_gtt_domain(obj, false); 1068 if (ret) 1069 goto out_unpin; 1070 1071 mutex_unlock(&i915->drm.struct_mutex); 1072 1073 user_data = u64_to_user_ptr(args->data_ptr); 1074 remain = args->size; 1075 offset = args->offset; 1076 1077 while (remain > 0) { 1078 /* Operation in this page 1079 * 1080 * page_base = page offset within aperture 1081 * page_offset = offset within page 1082 * page_length = bytes to copy for this page 1083 */ 1084 u32 page_base = node.start; 1085 unsigned page_offset = offset_in_page(offset); 1086 unsigned page_length = PAGE_SIZE - page_offset; 1087 page_length = remain < page_length ? remain : page_length; 1088 if (node.allocated) { 1089 wmb(); 1090 ggtt->base.insert_page(&ggtt->base, 1091 i915_gem_object_get_dma_address(obj, offset >> PAGE_SHIFT), 1092 node.start, I915_CACHE_NONE, 0); 1093 wmb(); 1094 } else { 1095 page_base += offset & PAGE_MASK; 1096 } 1097 1098 if (gtt_user_read(&ggtt->mappable, page_base, page_offset, 1099 user_data, page_length)) { 1100 ret = -EFAULT; 1101 break; 1102 } 1103 1104 remain -= page_length; 1105 user_data += page_length; 1106 offset += page_length; 1107 } 1108 1109 mutex_lock(&i915->drm.struct_mutex); 1110 out_unpin: 1111 if (node.allocated) { 1112 wmb(); 1113 ggtt->base.clear_range(&ggtt->base, 1114 node.start, node.size); 1115 remove_mappable_node(&node); 1116 } else { 1117 i915_vma_unpin(vma); 1118 } 1119 out_unlock: 1120 intel_runtime_pm_put(i915); 1121 mutex_unlock(&i915->drm.struct_mutex); 1122 1123 return ret; 1124 } 1125 1126 /** 1127 * Reads data from the object referenced by handle. 1128 * @dev: drm device pointer 1129 * @data: ioctl data blob 1130 * @file: drm file pointer 1131 * 1132 * On error, the contents of *data are undefined. 1133 */ 1134 int 1135 i915_gem_pread_ioctl(struct drm_device *dev, void *data, 1136 struct drm_file *file) 1137 { 1138 struct drm_i915_gem_pread *args = data; 1139 struct drm_i915_gem_object *obj; 1140 int ret; 1141 1142 if (args->size == 0) 1143 return 0; 1144 1145 if (!access_ok(VERIFY_WRITE, 1146 u64_to_user_ptr(args->data_ptr), 1147 args->size)) 1148 return -EFAULT; 1149 1150 obj = i915_gem_object_lookup(file, args->handle); 1151 if (!obj) 1152 return -ENOENT; 1153 1154 /* Bounds check source. */ 1155 if (range_overflows_t(u64, args->offset, args->size, obj->base.size)) { 1156 ret = -EINVAL; 1157 goto out; 1158 } 1159 1160 trace_i915_gem_object_pread(obj, args->offset, args->size); 1161 1162 ret = i915_gem_object_wait(obj, 1163 I915_WAIT_INTERRUPTIBLE, 1164 MAX_SCHEDULE_TIMEOUT, 1165 to_rps_client(file)); 1166 if (ret) 1167 goto out; 1168 1169 ret = i915_gem_object_pin_pages(obj); 1170 if (ret) 1171 goto out; 1172 1173 ret = i915_gem_shmem_pread(obj, args); 1174 if (ret == -EFAULT || ret == -ENODEV) 1175 ret = i915_gem_gtt_pread(obj, args); 1176 1177 i915_gem_object_unpin_pages(obj); 1178 out: 1179 i915_gem_object_put(obj); 1180 return ret; 1181 } 1182 1183 /* This is the fast write path which cannot handle 1184 * page faults in the source data 1185 */ 1186 1187 static inline bool 1188 ggtt_write(struct io_mapping *mapping, 1189 loff_t base, int offset, 1190 char __user *user_data, int length) 1191 { 1192 void *vaddr; 1193 unsigned long unwritten; 1194 1195 /* We can use the cpu mem copy function because this is X86. */ 1196 vaddr = (void __force *)io_mapping_map_atomic_wc(mapping, base); 1197 unwritten = __copy_from_user_inatomic_nocache(vaddr + offset, 1198 user_data, length); 1199 io_mapping_unmap_atomic(vaddr); 1200 if (unwritten) { 1201 vaddr = (void __force *) 1202 io_mapping_map_wc(mapping, base, PAGE_SIZE); 1203 unwritten = copy_from_user(vaddr + offset, user_data, length); 1204 io_mapping_unmap(vaddr); 1205 } 1206 1207 return unwritten; 1208 } 1209 1210 /** 1211 * This is the fast pwrite path, where we copy the data directly from the 1212 * user into the GTT, uncached. 1213 * @obj: i915 GEM object 1214 * @args: pwrite arguments structure 1215 */ 1216 static int 1217 i915_gem_gtt_pwrite_fast(struct drm_i915_gem_object *obj, 1218 const struct drm_i915_gem_pwrite *args) 1219 { 1220 struct drm_i915_private *i915 = to_i915(obj->base.dev); 1221 struct i915_ggtt *ggtt = &i915->ggtt; 1222 struct drm_mm_node node; 1223 struct i915_vma *vma; 1224 u64 remain, offset; 1225 void __user *user_data; 1226 int ret; 1227 1228 ret = mutex_lock_interruptible(&i915->drm.struct_mutex); 1229 if (ret) 1230 return ret; 1231 1232 intel_runtime_pm_get(i915); 1233 vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0, 1234 PIN_MAPPABLE | PIN_NONBLOCK); 1235 if (!IS_ERR(vma)) { 1236 node.start = i915_ggtt_offset(vma); 1237 node.allocated = false; 1238 ret = i915_vma_put_fence(vma); 1239 if (ret) { 1240 i915_vma_unpin(vma); 1241 vma = ERR_PTR(ret); 1242 } 1243 } 1244 if (IS_ERR(vma)) { 1245 ret = insert_mappable_node(ggtt, &node, PAGE_SIZE); 1246 if (ret) 1247 goto out_unlock; 1248 GEM_BUG_ON(!node.allocated); 1249 } 1250 1251 ret = i915_gem_object_set_to_gtt_domain(obj, true); 1252 if (ret) 1253 goto out_unpin; 1254 1255 mutex_unlock(&i915->drm.struct_mutex); 1256 1257 intel_fb_obj_invalidate(obj, ORIGIN_CPU); 1258 1259 user_data = u64_to_user_ptr(args->data_ptr); 1260 offset = args->offset; 1261 remain = args->size; 1262 while (remain) { 1263 /* Operation in this page 1264 * 1265 * page_base = page offset within aperture 1266 * page_offset = offset within page 1267 * page_length = bytes to copy for this page 1268 */ 1269 u32 page_base = node.start; 1270 unsigned int page_offset = offset_in_page(offset); 1271 unsigned int page_length = PAGE_SIZE - page_offset; 1272 page_length = remain < page_length ? remain : page_length; 1273 if (node.allocated) { 1274 wmb(); /* flush the write before we modify the GGTT */ 1275 ggtt->base.insert_page(&ggtt->base, 1276 i915_gem_object_get_dma_address(obj, offset >> PAGE_SHIFT), 1277 node.start, I915_CACHE_NONE, 0); 1278 wmb(); /* flush modifications to the GGTT (insert_page) */ 1279 } else { 1280 page_base += offset & PAGE_MASK; 1281 } 1282 /* If we get a fault while copying data, then (presumably) our 1283 * source page isn't available. Return the error and we'll 1284 * retry in the slow path. 1285 * If the object is non-shmem backed, we retry again with the 1286 * path that handles page fault. 1287 */ 1288 if (ggtt_write(&ggtt->mappable, page_base, page_offset, 1289 user_data, page_length)) { 1290 ret = -EFAULT; 1291 break; 1292 } 1293 1294 remain -= page_length; 1295 user_data += page_length; 1296 offset += page_length; 1297 } 1298 intel_fb_obj_flush(obj, ORIGIN_CPU); 1299 1300 mutex_lock(&i915->drm.struct_mutex); 1301 out_unpin: 1302 if (node.allocated) { 1303 wmb(); 1304 ggtt->base.clear_range(&ggtt->base, 1305 node.start, node.size); 1306 remove_mappable_node(&node); 1307 } else { 1308 i915_vma_unpin(vma); 1309 } 1310 out_unlock: 1311 intel_runtime_pm_put(i915); 1312 mutex_unlock(&i915->drm.struct_mutex); 1313 return ret; 1314 } 1315 1316 static int 1317 shmem_pwrite_slow(struct page *page, int offset, int length, 1318 char __user *user_data, 1319 bool page_do_bit17_swizzling, 1320 bool needs_clflush_before, 1321 bool needs_clflush_after) 1322 { 1323 char *vaddr; 1324 int ret; 1325 1326 vaddr = kmap(page); 1327 if (unlikely(needs_clflush_before || page_do_bit17_swizzling)) 1328 shmem_clflush_swizzled_range(vaddr + offset, length, 1329 page_do_bit17_swizzling); 1330 if (page_do_bit17_swizzling) 1331 ret = __copy_from_user_swizzled(vaddr, offset, user_data, 1332 length); 1333 else 1334 ret = __copy_from_user(vaddr + offset, user_data, length); 1335 if (needs_clflush_after) 1336 shmem_clflush_swizzled_range(vaddr + offset, length, 1337 page_do_bit17_swizzling); 1338 kunmap(page); 1339 1340 return ret ? -EFAULT : 0; 1341 } 1342 1343 /* Per-page copy function for the shmem pwrite fastpath. 1344 * Flushes invalid cachelines before writing to the target if 1345 * needs_clflush_before is set and flushes out any written cachelines after 1346 * writing if needs_clflush is set. 1347 */ 1348 static int 1349 shmem_pwrite(struct page *page, int offset, int len, char __user *user_data, 1350 bool page_do_bit17_swizzling, 1351 bool needs_clflush_before, 1352 bool needs_clflush_after) 1353 { 1354 int ret; 1355 1356 ret = -ENODEV; 1357 if (!page_do_bit17_swizzling) { 1358 char *vaddr = kmap_atomic(page); 1359 1360 if (needs_clflush_before) 1361 drm_clflush_virt_range(vaddr + offset, len); 1362 ret = __copy_from_user_inatomic(vaddr + offset, user_data, len); 1363 if (needs_clflush_after) 1364 drm_clflush_virt_range(vaddr + offset, len); 1365 1366 kunmap_atomic(vaddr); 1367 } 1368 if (ret == 0) 1369 return ret; 1370 1371 return shmem_pwrite_slow(page, offset, len, user_data, 1372 page_do_bit17_swizzling, 1373 needs_clflush_before, 1374 needs_clflush_after); 1375 } 1376 1377 static int 1378 i915_gem_shmem_pwrite(struct drm_i915_gem_object *obj, 1379 const struct drm_i915_gem_pwrite *args) 1380 { 1381 struct drm_i915_private *i915 = to_i915(obj->base.dev); 1382 void __user *user_data; 1383 u64 remain; 1384 unsigned int obj_do_bit17_swizzling; 1385 unsigned int partial_cacheline_write; 1386 unsigned int needs_clflush; 1387 unsigned int offset, idx; 1388 int ret; 1389 1390 ret = mutex_lock_interruptible(&i915->drm.struct_mutex); 1391 if (ret) 1392 return ret; 1393 1394 ret = i915_gem_obj_prepare_shmem_write(obj, &needs_clflush); 1395 mutex_unlock(&i915->drm.struct_mutex); 1396 if (ret) 1397 return ret; 1398 1399 obj_do_bit17_swizzling = 0; 1400 if (i915_gem_object_needs_bit17_swizzle(obj)) 1401 obj_do_bit17_swizzling = BIT(17); 1402 1403 /* If we don't overwrite a cacheline completely we need to be 1404 * careful to have up-to-date data by first clflushing. Don't 1405 * overcomplicate things and flush the entire patch. 1406 */ 1407 partial_cacheline_write = 0; 1408 if (needs_clflush & CLFLUSH_BEFORE) 1409 partial_cacheline_write = boot_cpu_data.x86_clflush_size - 1; 1410 1411 user_data = u64_to_user_ptr(args->data_ptr); 1412 remain = args->size; 1413 offset = offset_in_page(args->offset); 1414 for (idx = args->offset >> PAGE_SHIFT; remain; idx++) { 1415 struct page *page = i915_gem_object_get_page(obj, idx); 1416 int length; 1417 1418 length = remain; 1419 if (offset + length > PAGE_SIZE) 1420 length = PAGE_SIZE - offset; 1421 1422 ret = shmem_pwrite(page, offset, length, user_data, 1423 page_to_phys(page) & obj_do_bit17_swizzling, 1424 (offset | length) & partial_cacheline_write, 1425 needs_clflush & CLFLUSH_AFTER); 1426 if (ret) 1427 break; 1428 1429 remain -= length; 1430 user_data += length; 1431 offset = 0; 1432 } 1433 1434 intel_fb_obj_flush(obj, ORIGIN_CPU); 1435 i915_gem_obj_finish_shmem_access(obj); 1436 return ret; 1437 } 1438 1439 /** 1440 * Writes data to the object referenced by handle. 1441 * @dev: drm device 1442 * @data: ioctl data blob 1443 * @file: drm file 1444 * 1445 * On error, the contents of the buffer that were to be modified are undefined. 1446 */ 1447 int 1448 i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, 1449 struct drm_file *file) 1450 { 1451 struct drm_i915_gem_pwrite *args = data; 1452 struct drm_i915_gem_object *obj; 1453 int ret; 1454 1455 if (args->size == 0) 1456 return 0; 1457 1458 if (!access_ok(VERIFY_READ, 1459 u64_to_user_ptr(args->data_ptr), 1460 args->size)) 1461 return -EFAULT; 1462 1463 obj = i915_gem_object_lookup(file, args->handle); 1464 if (!obj) 1465 return -ENOENT; 1466 1467 /* Bounds check destination. */ 1468 if (range_overflows_t(u64, args->offset, args->size, obj->base.size)) { 1469 ret = -EINVAL; 1470 goto err; 1471 } 1472 1473 trace_i915_gem_object_pwrite(obj, args->offset, args->size); 1474 1475 ret = -ENODEV; 1476 if (obj->ops->pwrite) 1477 ret = obj->ops->pwrite(obj, args); 1478 if (ret != -ENODEV) 1479 goto err; 1480 1481 ret = i915_gem_object_wait(obj, 1482 I915_WAIT_INTERRUPTIBLE | 1483 I915_WAIT_ALL, 1484 MAX_SCHEDULE_TIMEOUT, 1485 to_rps_client(file)); 1486 if (ret) 1487 goto err; 1488 1489 ret = i915_gem_object_pin_pages(obj); 1490 if (ret) 1491 goto err; 1492 1493 ret = -EFAULT; 1494 /* We can only do the GTT pwrite on untiled buffers, as otherwise 1495 * it would end up going through the fenced access, and we'll get 1496 * different detiling behavior between reading and writing. 1497 * pread/pwrite currently are reading and writing from the CPU 1498 * perspective, requiring manual detiling by the client. 1499 */ 1500 if (!i915_gem_object_has_struct_page(obj) || 1501 cpu_write_needs_clflush(obj)) 1502 /* Note that the gtt paths might fail with non-page-backed user 1503 * pointers (e.g. gtt mappings when moving data between 1504 * textures). Fallback to the shmem path in that case. 1505 */ 1506 ret = i915_gem_gtt_pwrite_fast(obj, args); 1507 1508 if (ret == -EFAULT || ret == -ENOSPC) { 1509 if (obj->phys_handle) 1510 ret = i915_gem_phys_pwrite(obj, args, file); 1511 else 1512 ret = i915_gem_shmem_pwrite(obj, args); 1513 } 1514 1515 i915_gem_object_unpin_pages(obj); 1516 err: 1517 i915_gem_object_put(obj); 1518 return ret; 1519 } 1520 1521 static void i915_gem_object_bump_inactive_ggtt(struct drm_i915_gem_object *obj) 1522 { 1523 struct drm_i915_private *i915; 1524 struct list_head *list; 1525 struct i915_vma *vma; 1526 1527 list_for_each_entry(vma, &obj->vma_list, obj_link) { 1528 if (!i915_vma_is_ggtt(vma)) 1529 break; 1530 1531 if (i915_vma_is_active(vma)) 1532 continue; 1533 1534 if (!drm_mm_node_allocated(&vma->node)) 1535 continue; 1536 1537 list_move_tail(&vma->vm_link, &vma->vm->inactive_list); 1538 } 1539 1540 i915 = to_i915(obj->base.dev); 1541 list = obj->bind_count ? &i915->mm.bound_list : &i915->mm.unbound_list; 1542 list_move_tail(&obj->global_link, list); 1543 } 1544 1545 /** 1546 * Called when user space prepares to use an object with the CPU, either 1547 * through the mmap ioctl's mapping or a GTT mapping. 1548 * @dev: drm device 1549 * @data: ioctl data blob 1550 * @file: drm file 1551 */ 1552 int 1553 i915_gem_set_domain_ioctl(struct drm_device *dev, void *data, 1554 struct drm_file *file) 1555 { 1556 struct drm_i915_gem_set_domain *args = data; 1557 struct drm_i915_gem_object *obj; 1558 uint32_t read_domains = args->read_domains; 1559 uint32_t write_domain = args->write_domain; 1560 int err; 1561 1562 /* Only handle setting domains to types used by the CPU. */ 1563 if ((write_domain | read_domains) & I915_GEM_GPU_DOMAINS) 1564 return -EINVAL; 1565 1566 /* Having something in the write domain implies it's in the read 1567 * domain, and only that read domain. Enforce that in the request. 1568 */ 1569 if (write_domain != 0 && read_domains != write_domain) 1570 return -EINVAL; 1571 1572 obj = i915_gem_object_lookup(file, args->handle); 1573 if (!obj) 1574 return -ENOENT; 1575 1576 /* Try to flush the object off the GPU without holding the lock. 1577 * We will repeat the flush holding the lock in the normal manner 1578 * to catch cases where we are gazumped. 1579 */ 1580 err = i915_gem_object_wait(obj, 1581 I915_WAIT_INTERRUPTIBLE | 1582 (write_domain ? I915_WAIT_ALL : 0), 1583 MAX_SCHEDULE_TIMEOUT, 1584 to_rps_client(file)); 1585 if (err) 1586 goto out; 1587 1588 /* Flush and acquire obj->pages so that we are coherent through 1589 * direct access in memory with previous cached writes through 1590 * shmemfs and that our cache domain tracking remains valid. 1591 * For example, if the obj->filp was moved to swap without us 1592 * being notified and releasing the pages, we would mistakenly 1593 * continue to assume that the obj remained out of the CPU cached 1594 * domain. 1595 */ 1596 err = i915_gem_object_pin_pages(obj); 1597 if (err) 1598 goto out; 1599 1600 err = i915_mutex_lock_interruptible(dev); 1601 if (err) 1602 goto out_unpin; 1603 1604 if (read_domains & I915_GEM_DOMAIN_WC) 1605 err = i915_gem_object_set_to_wc_domain(obj, write_domain); 1606 else if (read_domains & I915_GEM_DOMAIN_GTT) 1607 err = i915_gem_object_set_to_gtt_domain(obj, write_domain); 1608 else 1609 err = i915_gem_object_set_to_cpu_domain(obj, write_domain); 1610 1611 /* And bump the LRU for this access */ 1612 i915_gem_object_bump_inactive_ggtt(obj); 1613 1614 mutex_unlock(&dev->struct_mutex); 1615 1616 if (write_domain != 0) 1617 intel_fb_obj_invalidate(obj, 1618 fb_write_origin(obj, write_domain)); 1619 1620 out_unpin: 1621 i915_gem_object_unpin_pages(obj); 1622 out: 1623 i915_gem_object_put(obj); 1624 return err; 1625 } 1626 1627 /** 1628 * Called when user space has done writes to this buffer 1629 * @dev: drm device 1630 * @data: ioctl data blob 1631 * @file: drm file 1632 */ 1633 int 1634 i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data, 1635 struct drm_file *file) 1636 { 1637 struct drm_i915_gem_sw_finish *args = data; 1638 struct drm_i915_gem_object *obj; 1639 1640 obj = i915_gem_object_lookup(file, args->handle); 1641 if (!obj) 1642 return -ENOENT; 1643 1644 /* Pinned buffers may be scanout, so flush the cache */ 1645 i915_gem_object_flush_if_display(obj); 1646 i915_gem_object_put(obj); 1647 1648 return 0; 1649 } 1650 1651 /** 1652 * i915_gem_mmap_ioctl - Maps the contents of an object, returning the address 1653 * it is mapped to. 1654 * @dev: drm device 1655 * @data: ioctl data blob 1656 * @file: drm file 1657 * 1658 * While the mapping holds a reference on the contents of the object, it doesn't 1659 * imply a ref on the object itself. 1660 * 1661 * IMPORTANT: 1662 * 1663 * DRM driver writers who look a this function as an example for how to do GEM 1664 * mmap support, please don't implement mmap support like here. The modern way 1665 * to implement DRM mmap support is with an mmap offset ioctl (like 1666 * i915_gem_mmap_gtt) and then using the mmap syscall on the DRM fd directly. 1667 * That way debug tooling like valgrind will understand what's going on, hiding 1668 * the mmap call in a driver private ioctl will break that. The i915 driver only 1669 * does cpu mmaps this way because we didn't know better. 1670 */ 1671 int 1672 i915_gem_mmap_ioctl(struct drm_device *dev, void *data, 1673 struct drm_file *file) 1674 { 1675 struct drm_i915_gem_mmap *args = data; 1676 struct drm_i915_gem_object *obj; 1677 unsigned long addr; 1678 1679 if (args->flags & ~(I915_MMAP_WC)) 1680 return -EINVAL; 1681 1682 if (args->flags & I915_MMAP_WC && !boot_cpu_has(X86_FEATURE_PAT)) 1683 return -ENODEV; 1684 1685 obj = i915_gem_object_lookup(file, args->handle); 1686 if (!obj) 1687 return -ENOENT; 1688 1689 /* prime objects have no backing filp to GEM mmap 1690 * pages from. 1691 */ 1692 if (!obj->base.filp) { 1693 i915_gem_object_put(obj); 1694 return -EINVAL; 1695 } 1696 1697 addr = vm_mmap(obj->base.filp, 0, args->size, 1698 PROT_READ | PROT_WRITE, MAP_SHARED, 1699 args->offset); 1700 if (args->flags & I915_MMAP_WC) { 1701 struct mm_struct *mm = current->mm; 1702 struct vm_area_struct *vma; 1703 1704 if (down_write_killable(&mm->mmap_sem)) { 1705 i915_gem_object_put(obj); 1706 return -EINTR; 1707 } 1708 vma = find_vma(mm, addr); 1709 if (vma) 1710 vma->vm_page_prot = 1711 pgprot_writecombine(vm_get_page_prot(vma->vm_flags)); 1712 else 1713 addr = -ENOMEM; 1714 up_write(&mm->mmap_sem); 1715 1716 /* This may race, but that's ok, it only gets set */ 1717 WRITE_ONCE(obj->frontbuffer_ggtt_origin, ORIGIN_CPU); 1718 } 1719 i915_gem_object_put(obj); 1720 if (IS_ERR((void *)addr)) 1721 return addr; 1722 1723 args->addr_ptr = (uint64_t) addr; 1724 1725 return 0; 1726 } 1727 1728 static unsigned int tile_row_pages(struct drm_i915_gem_object *obj) 1729 { 1730 return i915_gem_object_get_tile_row_size(obj) >> PAGE_SHIFT; 1731 } 1732 1733 /** 1734 * i915_gem_mmap_gtt_version - report the current feature set for GTT mmaps 1735 * 1736 * A history of the GTT mmap interface: 1737 * 1738 * 0 - Everything had to fit into the GTT. Both parties of a memcpy had to 1739 * aligned and suitable for fencing, and still fit into the available 1740 * mappable space left by the pinned display objects. A classic problem 1741 * we called the page-fault-of-doom where we would ping-pong between 1742 * two objects that could not fit inside the GTT and so the memcpy 1743 * would page one object in at the expense of the other between every 1744 * single byte. 1745 * 1746 * 1 - Objects can be any size, and have any compatible fencing (X Y, or none 1747 * as set via i915_gem_set_tiling() [DRM_I915_GEM_SET_TILING]). If the 1748 * object is too large for the available space (or simply too large 1749 * for the mappable aperture!), a view is created instead and faulted 1750 * into userspace. (This view is aligned and sized appropriately for 1751 * fenced access.) 1752 * 1753 * 2 - Recognise WC as a separate cache domain so that we can flush the 1754 * delayed writes via GTT before performing direct access via WC. 1755 * 1756 * Restrictions: 1757 * 1758 * * snoopable objects cannot be accessed via the GTT. It can cause machine 1759 * hangs on some architectures, corruption on others. An attempt to service 1760 * a GTT page fault from a snoopable object will generate a SIGBUS. 1761 * 1762 * * the object must be able to fit into RAM (physical memory, though no 1763 * limited to the mappable aperture). 1764 * 1765 * 1766 * Caveats: 1767 * 1768 * * a new GTT page fault will synchronize rendering from the GPU and flush 1769 * all data to system memory. Subsequent access will not be synchronized. 1770 * 1771 * * all mappings are revoked on runtime device suspend. 1772 * 1773 * * there are only 8, 16 or 32 fence registers to share between all users 1774 * (older machines require fence register for display and blitter access 1775 * as well). Contention of the fence registers will cause the previous users 1776 * to be unmapped and any new access will generate new page faults. 1777 * 1778 * * running out of memory while servicing a fault may generate a SIGBUS, 1779 * rather than the expected SIGSEGV. 1780 */ 1781 int i915_gem_mmap_gtt_version(void) 1782 { 1783 return 2; 1784 } 1785 1786 static inline struct i915_ggtt_view 1787 compute_partial_view(struct drm_i915_gem_object *obj, 1788 pgoff_t page_offset, 1789 unsigned int chunk) 1790 { 1791 struct i915_ggtt_view view; 1792 1793 if (i915_gem_object_is_tiled(obj)) 1794 chunk = roundup(chunk, tile_row_pages(obj)); 1795 1796 view.type = I915_GGTT_VIEW_PARTIAL; 1797 view.partial.offset = rounddown(page_offset, chunk); 1798 view.partial.size = 1799 min_t(unsigned int, chunk, 1800 (obj->base.size >> PAGE_SHIFT) - view.partial.offset); 1801 1802 /* If the partial covers the entire object, just create a normal VMA. */ 1803 if (chunk >= obj->base.size >> PAGE_SHIFT) 1804 view.type = I915_GGTT_VIEW_NORMAL; 1805 1806 return view; 1807 } 1808 1809 /** 1810 * i915_gem_fault - fault a page into the GTT 1811 * @vmf: fault info 1812 * 1813 * The fault handler is set up by drm_gem_mmap() when a object is GTT mapped 1814 * from userspace. The fault handler takes care of binding the object to 1815 * the GTT (if needed), allocating and programming a fence register (again, 1816 * only if needed based on whether the old reg is still valid or the object 1817 * is tiled) and inserting a new PTE into the faulting process. 1818 * 1819 * Note that the faulting process may involve evicting existing objects 1820 * from the GTT and/or fence registers to make room. So performance may 1821 * suffer if the GTT working set is large or there are few fence registers 1822 * left. 1823 * 1824 * The current feature set supported by i915_gem_fault() and thus GTT mmaps 1825 * is exposed via I915_PARAM_MMAP_GTT_VERSION (see i915_gem_mmap_gtt_version). 1826 */ 1827 int i915_gem_fault(struct vm_fault *vmf) 1828 { 1829 #define MIN_CHUNK_PAGES ((1 << 20) >> PAGE_SHIFT) /* 1 MiB */ 1830 struct vm_area_struct *area = vmf->vma; 1831 struct drm_i915_gem_object *obj = to_intel_bo(area->vm_private_data); 1832 struct drm_device *dev = obj->base.dev; 1833 struct drm_i915_private *dev_priv = to_i915(dev); 1834 struct i915_ggtt *ggtt = &dev_priv->ggtt; 1835 bool write = !!(vmf->flags & FAULT_FLAG_WRITE); 1836 struct i915_vma *vma; 1837 pgoff_t page_offset; 1838 unsigned int flags; 1839 int ret; 1840 1841 /* We don't use vmf->pgoff since that has the fake offset */ 1842 page_offset = (vmf->address - area->vm_start) >> PAGE_SHIFT; 1843 1844 trace_i915_gem_object_fault(obj, page_offset, true, write); 1845 1846 /* Try to flush the object off the GPU first without holding the lock. 1847 * Upon acquiring the lock, we will perform our sanity checks and then 1848 * repeat the flush holding the lock in the normal manner to catch cases 1849 * where we are gazumped. 1850 */ 1851 ret = i915_gem_object_wait(obj, 1852 I915_WAIT_INTERRUPTIBLE, 1853 MAX_SCHEDULE_TIMEOUT, 1854 NULL); 1855 if (ret) 1856 goto err; 1857 1858 ret = i915_gem_object_pin_pages(obj); 1859 if (ret) 1860 goto err; 1861 1862 intel_runtime_pm_get(dev_priv); 1863 1864 ret = i915_mutex_lock_interruptible(dev); 1865 if (ret) 1866 goto err_rpm; 1867 1868 /* Access to snoopable pages through the GTT is incoherent. */ 1869 if (obj->cache_level != I915_CACHE_NONE && !HAS_LLC(dev_priv)) { 1870 ret = -EFAULT; 1871 goto err_unlock; 1872 } 1873 1874 /* If the object is smaller than a couple of partial vma, it is 1875 * not worth only creating a single partial vma - we may as well 1876 * clear enough space for the full object. 1877 */ 1878 flags = PIN_MAPPABLE; 1879 if (obj->base.size > 2 * MIN_CHUNK_PAGES << PAGE_SHIFT) 1880 flags |= PIN_NONBLOCK | PIN_NONFAULT; 1881 1882 /* Now pin it into the GTT as needed */ 1883 vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0, flags); 1884 if (IS_ERR(vma)) { 1885 /* Use a partial view if it is bigger than available space */ 1886 struct i915_ggtt_view view = 1887 compute_partial_view(obj, page_offset, MIN_CHUNK_PAGES); 1888 1889 /* Userspace is now writing through an untracked VMA, abandon 1890 * all hope that the hardware is able to track future writes. 1891 */ 1892 obj->frontbuffer_ggtt_origin = ORIGIN_CPU; 1893 1894 vma = i915_gem_object_ggtt_pin(obj, &view, 0, 0, PIN_MAPPABLE); 1895 } 1896 if (IS_ERR(vma)) { 1897 ret = PTR_ERR(vma); 1898 goto err_unlock; 1899 } 1900 1901 ret = i915_gem_object_set_to_gtt_domain(obj, write); 1902 if (ret) 1903 goto err_unpin; 1904 1905 ret = i915_vma_get_fence(vma); 1906 if (ret) 1907 goto err_unpin; 1908 1909 /* Mark as being mmapped into userspace for later revocation */ 1910 assert_rpm_wakelock_held(dev_priv); 1911 if (list_empty(&obj->userfault_link)) 1912 list_add(&obj->userfault_link, &dev_priv->mm.userfault_list); 1913 1914 /* Finally, remap it using the new GTT offset */ 1915 ret = remap_io_mapping(area, 1916 area->vm_start + (vma->ggtt_view.partial.offset << PAGE_SHIFT), 1917 (ggtt->mappable_base + vma->node.start) >> PAGE_SHIFT, 1918 min_t(u64, vma->size, area->vm_end - area->vm_start), 1919 &ggtt->mappable); 1920 1921 err_unpin: 1922 __i915_vma_unpin(vma); 1923 err_unlock: 1924 mutex_unlock(&dev->struct_mutex); 1925 err_rpm: 1926 intel_runtime_pm_put(dev_priv); 1927 i915_gem_object_unpin_pages(obj); 1928 err: 1929 switch (ret) { 1930 case -EIO: 1931 /* 1932 * We eat errors when the gpu is terminally wedged to avoid 1933 * userspace unduly crashing (gl has no provisions for mmaps to 1934 * fail). But any other -EIO isn't ours (e.g. swap in failure) 1935 * and so needs to be reported. 1936 */ 1937 if (!i915_terminally_wedged(&dev_priv->gpu_error)) { 1938 ret = VM_FAULT_SIGBUS; 1939 break; 1940 } 1941 case -EAGAIN: 1942 /* 1943 * EAGAIN means the gpu is hung and we'll wait for the error 1944 * handler to reset everything when re-faulting in 1945 * i915_mutex_lock_interruptible. 1946 */ 1947 case 0: 1948 case -ERESTARTSYS: 1949 case -EINTR: 1950 case -EBUSY: 1951 /* 1952 * EBUSY is ok: this just means that another thread 1953 * already did the job. 1954 */ 1955 ret = VM_FAULT_NOPAGE; 1956 break; 1957 case -ENOMEM: 1958 ret = VM_FAULT_OOM; 1959 break; 1960 case -ENOSPC: 1961 case -EFAULT: 1962 ret = VM_FAULT_SIGBUS; 1963 break; 1964 default: 1965 WARN_ONCE(ret, "unhandled error in i915_gem_fault: %i\n", ret); 1966 ret = VM_FAULT_SIGBUS; 1967 break; 1968 } 1969 return ret; 1970 } 1971 1972 /** 1973 * i915_gem_release_mmap - remove physical page mappings 1974 * @obj: obj in question 1975 * 1976 * Preserve the reservation of the mmapping with the DRM core code, but 1977 * relinquish ownership of the pages back to the system. 1978 * 1979 * It is vital that we remove the page mapping if we have mapped a tiled 1980 * object through the GTT and then lose the fence register due to 1981 * resource pressure. Similarly if the object has been moved out of the 1982 * aperture, than pages mapped into userspace must be revoked. Removing the 1983 * mapping will then trigger a page fault on the next user access, allowing 1984 * fixup by i915_gem_fault(). 1985 */ 1986 void 1987 i915_gem_release_mmap(struct drm_i915_gem_object *obj) 1988 { 1989 struct drm_i915_private *i915 = to_i915(obj->base.dev); 1990 1991 /* Serialisation between user GTT access and our code depends upon 1992 * revoking the CPU's PTE whilst the mutex is held. The next user 1993 * pagefault then has to wait until we release the mutex. 1994 * 1995 * Note that RPM complicates somewhat by adding an additional 1996 * requirement that operations to the GGTT be made holding the RPM 1997 * wakeref. 1998 */ 1999 lockdep_assert_held(&i915->drm.struct_mutex); 2000 intel_runtime_pm_get(i915); 2001 2002 if (list_empty(&obj->userfault_link)) 2003 goto out; 2004 2005 list_del_init(&obj->userfault_link); 2006 drm_vma_node_unmap(&obj->base.vma_node, 2007 obj->base.dev->anon_inode->i_mapping); 2008 2009 /* Ensure that the CPU's PTE are revoked and there are not outstanding 2010 * memory transactions from userspace before we return. The TLB 2011 * flushing implied above by changing the PTE above *should* be 2012 * sufficient, an extra barrier here just provides us with a bit 2013 * of paranoid documentation about our requirement to serialise 2014 * memory writes before touching registers / GSM. 2015 */ 2016 wmb(); 2017 2018 out: 2019 intel_runtime_pm_put(i915); 2020 } 2021 2022 void i915_gem_runtime_suspend(struct drm_i915_private *dev_priv) 2023 { 2024 struct drm_i915_gem_object *obj, *on; 2025 int i; 2026 2027 /* 2028 * Only called during RPM suspend. All users of the userfault_list 2029 * must be holding an RPM wakeref to ensure that this can not 2030 * run concurrently with themselves (and use the struct_mutex for 2031 * protection between themselves). 2032 */ 2033 2034 list_for_each_entry_safe(obj, on, 2035 &dev_priv->mm.userfault_list, userfault_link) { 2036 list_del_init(&obj->userfault_link); 2037 drm_vma_node_unmap(&obj->base.vma_node, 2038 obj->base.dev->anon_inode->i_mapping); 2039 } 2040 2041 /* The fence will be lost when the device powers down. If any were 2042 * in use by hardware (i.e. they are pinned), we should not be powering 2043 * down! All other fences will be reacquired by the user upon waking. 2044 */ 2045 for (i = 0; i < dev_priv->num_fence_regs; i++) { 2046 struct drm_i915_fence_reg *reg = &dev_priv->fence_regs[i]; 2047 2048 /* Ideally we want to assert that the fence register is not 2049 * live at this point (i.e. that no piece of code will be 2050 * trying to write through fence + GTT, as that both violates 2051 * our tracking of activity and associated locking/barriers, 2052 * but also is illegal given that the hw is powered down). 2053 * 2054 * Previously we used reg->pin_count as a "liveness" indicator. 2055 * That is not sufficient, and we need a more fine-grained 2056 * tool if we want to have a sanity check here. 2057 */ 2058 2059 if (!reg->vma) 2060 continue; 2061 2062 GEM_BUG_ON(!list_empty(®->vma->obj->userfault_link)); 2063 reg->dirty = true; 2064 } 2065 } 2066 2067 static int i915_gem_object_create_mmap_offset(struct drm_i915_gem_object *obj) 2068 { 2069 struct drm_i915_private *dev_priv = to_i915(obj->base.dev); 2070 int err; 2071 2072 err = drm_gem_create_mmap_offset(&obj->base); 2073 if (likely(!err)) 2074 return 0; 2075 2076 /* Attempt to reap some mmap space from dead objects */ 2077 do { 2078 err = i915_gem_wait_for_idle(dev_priv, I915_WAIT_INTERRUPTIBLE); 2079 if (err) 2080 break; 2081 2082 i915_gem_drain_freed_objects(dev_priv); 2083 err = drm_gem_create_mmap_offset(&obj->base); 2084 if (!err) 2085 break; 2086 2087 } while (flush_delayed_work(&dev_priv->gt.retire_work)); 2088 2089 return err; 2090 } 2091 2092 static void i915_gem_object_free_mmap_offset(struct drm_i915_gem_object *obj) 2093 { 2094 drm_gem_free_mmap_offset(&obj->base); 2095 } 2096 2097 int 2098 i915_gem_mmap_gtt(struct drm_file *file, 2099 struct drm_device *dev, 2100 uint32_t handle, 2101 uint64_t *offset) 2102 { 2103 struct drm_i915_gem_object *obj; 2104 int ret; 2105 2106 obj = i915_gem_object_lookup(file, handle); 2107 if (!obj) 2108 return -ENOENT; 2109 2110 ret = i915_gem_object_create_mmap_offset(obj); 2111 if (ret == 0) 2112 *offset = drm_vma_node_offset_addr(&obj->base.vma_node); 2113 2114 i915_gem_object_put(obj); 2115 return ret; 2116 } 2117 2118 /** 2119 * i915_gem_mmap_gtt_ioctl - prepare an object for GTT mmap'ing 2120 * @dev: DRM device 2121 * @data: GTT mapping ioctl data 2122 * @file: GEM object info 2123 * 2124 * Simply returns the fake offset to userspace so it can mmap it. 2125 * The mmap call will end up in drm_gem_mmap(), which will set things 2126 * up so we can get faults in the handler above. 2127 * 2128 * The fault handler will take care of binding the object into the GTT 2129 * (since it may have been evicted to make room for something), allocating 2130 * a fence register, and mapping the appropriate aperture address into 2131 * userspace. 2132 */ 2133 int 2134 i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data, 2135 struct drm_file *file) 2136 { 2137 struct drm_i915_gem_mmap_gtt *args = data; 2138 2139 return i915_gem_mmap_gtt(file, dev, args->handle, &args->offset); 2140 } 2141 2142 /* Immediately discard the backing storage */ 2143 static void 2144 i915_gem_object_truncate(struct drm_i915_gem_object *obj) 2145 { 2146 i915_gem_object_free_mmap_offset(obj); 2147 2148 if (obj->base.filp == NULL) 2149 return; 2150 2151 /* Our goal here is to return as much of the memory as 2152 * is possible back to the system as we are called from OOM. 2153 * To do this we must instruct the shmfs to drop all of its 2154 * backing pages, *now*. 2155 */ 2156 shmem_truncate_range(file_inode(obj->base.filp), 0, (loff_t)-1); 2157 obj->mm.madv = __I915_MADV_PURGED; 2158 obj->mm.pages = ERR_PTR(-EFAULT); 2159 } 2160 2161 /* Try to discard unwanted pages */ 2162 void __i915_gem_object_invalidate(struct drm_i915_gem_object *obj) 2163 { 2164 struct address_space *mapping; 2165 2166 lockdep_assert_held(&obj->mm.lock); 2167 GEM_BUG_ON(obj->mm.pages); 2168 2169 switch (obj->mm.madv) { 2170 case I915_MADV_DONTNEED: 2171 i915_gem_object_truncate(obj); 2172 case __I915_MADV_PURGED: 2173 return; 2174 } 2175 2176 if (obj->base.filp == NULL) 2177 return; 2178 2179 mapping = obj->base.filp->f_mapping, 2180 invalidate_mapping_pages(mapping, 0, (loff_t)-1); 2181 } 2182 2183 static void 2184 i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj, 2185 struct sg_table *pages) 2186 { 2187 struct sgt_iter sgt_iter; 2188 struct page *page; 2189 2190 __i915_gem_object_release_shmem(obj, pages, true); 2191 2192 i915_gem_gtt_finish_pages(obj, pages); 2193 2194 if (i915_gem_object_needs_bit17_swizzle(obj)) 2195 i915_gem_object_save_bit_17_swizzle(obj, pages); 2196 2197 for_each_sgt_page(page, sgt_iter, pages) { 2198 if (obj->mm.dirty) 2199 set_page_dirty(page); 2200 2201 if (obj->mm.madv == I915_MADV_WILLNEED) 2202 mark_page_accessed(page); 2203 2204 put_page(page); 2205 } 2206 obj->mm.dirty = false; 2207 2208 sg_free_table(pages); 2209 kfree(pages); 2210 } 2211 2212 static void __i915_gem_object_reset_page_iter(struct drm_i915_gem_object *obj) 2213 { 2214 struct radix_tree_iter iter; 2215 void __rcu **slot; 2216 2217 rcu_read_lock(); 2218 radix_tree_for_each_slot(slot, &obj->mm.get_page.radix, &iter, 0) 2219 radix_tree_delete(&obj->mm.get_page.radix, iter.index); 2220 rcu_read_unlock(); 2221 } 2222 2223 void __i915_gem_object_put_pages(struct drm_i915_gem_object *obj, 2224 enum i915_mm_subclass subclass) 2225 { 2226 struct sg_table *pages; 2227 2228 if (i915_gem_object_has_pinned_pages(obj)) 2229 return; 2230 2231 GEM_BUG_ON(obj->bind_count); 2232 if (!READ_ONCE(obj->mm.pages)) 2233 return; 2234 2235 /* May be called by shrinker from within get_pages() (on another bo) */ 2236 mutex_lock_nested(&obj->mm.lock, subclass); 2237 if (unlikely(atomic_read(&obj->mm.pages_pin_count))) 2238 goto unlock; 2239 2240 /* ->put_pages might need to allocate memory for the bit17 swizzle 2241 * array, hence protect them from being reaped by removing them from gtt 2242 * lists early. */ 2243 pages = fetch_and_zero(&obj->mm.pages); 2244 GEM_BUG_ON(!pages); 2245 2246 if (obj->mm.mapping) { 2247 void *ptr; 2248 2249 ptr = page_mask_bits(obj->mm.mapping); 2250 if (is_vmalloc_addr(ptr)) 2251 vunmap(ptr); 2252 else 2253 kunmap(kmap_to_page(ptr)); 2254 2255 obj->mm.mapping = NULL; 2256 } 2257 2258 __i915_gem_object_reset_page_iter(obj); 2259 2260 if (!IS_ERR(pages)) 2261 obj->ops->put_pages(obj, pages); 2262 2263 unlock: 2264 mutex_unlock(&obj->mm.lock); 2265 } 2266 2267 static bool i915_sg_trim(struct sg_table *orig_st) 2268 { 2269 struct sg_table new_st; 2270 struct scatterlist *sg, *new_sg; 2271 unsigned int i; 2272 2273 if (orig_st->nents == orig_st->orig_nents) 2274 return false; 2275 2276 if (sg_alloc_table(&new_st, orig_st->nents, GFP_KERNEL | __GFP_NOWARN)) 2277 return false; 2278 2279 new_sg = new_st.sgl; 2280 for_each_sg(orig_st->sgl, sg, orig_st->nents, i) { 2281 sg_set_page(new_sg, sg_page(sg), sg->length, 0); 2282 /* called before being DMA mapped, no need to copy sg->dma_* */ 2283 new_sg = sg_next(new_sg); 2284 } 2285 GEM_BUG_ON(new_sg); /* Should walk exactly nents and hit the end */ 2286 2287 sg_free_table(orig_st); 2288 2289 *orig_st = new_st; 2290 return true; 2291 } 2292 2293 static struct sg_table * 2294 i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj) 2295 { 2296 struct drm_i915_private *dev_priv = to_i915(obj->base.dev); 2297 const unsigned long page_count = obj->base.size / PAGE_SIZE; 2298 unsigned long i; 2299 struct address_space *mapping; 2300 struct sg_table *st; 2301 struct scatterlist *sg; 2302 struct sgt_iter sgt_iter; 2303 struct page *page; 2304 unsigned long last_pfn = 0; /* suppress gcc warning */ 2305 unsigned int max_segment; 2306 gfp_t noreclaim; 2307 int ret; 2308 2309 /* Assert that the object is not currently in any GPU domain. As it 2310 * wasn't in the GTT, there shouldn't be any way it could have been in 2311 * a GPU cache 2312 */ 2313 GEM_BUG_ON(obj->base.read_domains & I915_GEM_GPU_DOMAINS); 2314 GEM_BUG_ON(obj->base.write_domain & I915_GEM_GPU_DOMAINS); 2315 2316 max_segment = swiotlb_max_segment(); 2317 if (!max_segment) 2318 max_segment = rounddown(UINT_MAX, PAGE_SIZE); 2319 2320 st = kmalloc(sizeof(*st), GFP_KERNEL); 2321 if (st == NULL) 2322 return ERR_PTR(-ENOMEM); 2323 2324 rebuild_st: 2325 if (sg_alloc_table(st, page_count, GFP_KERNEL)) { 2326 kfree(st); 2327 return ERR_PTR(-ENOMEM); 2328 } 2329 2330 /* Get the list of pages out of our struct file. They'll be pinned 2331 * at this point until we release them. 2332 * 2333 * Fail silently without starting the shrinker 2334 */ 2335 mapping = obj->base.filp->f_mapping; 2336 noreclaim = mapping_gfp_constraint(mapping, ~__GFP_RECLAIM); 2337 noreclaim |= __GFP_NORETRY | __GFP_NOWARN; 2338 2339 sg = st->sgl; 2340 st->nents = 0; 2341 for (i = 0; i < page_count; i++) { 2342 const unsigned int shrink[] = { 2343 I915_SHRINK_BOUND | I915_SHRINK_UNBOUND | I915_SHRINK_PURGEABLE, 2344 0, 2345 }, *s = shrink; 2346 gfp_t gfp = noreclaim; 2347 2348 do { 2349 page = shmem_read_mapping_page_gfp(mapping, i, gfp); 2350 if (likely(!IS_ERR(page))) 2351 break; 2352 2353 if (!*s) { 2354 ret = PTR_ERR(page); 2355 goto err_sg; 2356 } 2357 2358 i915_gem_shrink(dev_priv, 2 * page_count, NULL, *s++); 2359 cond_resched(); 2360 2361 /* We've tried hard to allocate the memory by reaping 2362 * our own buffer, now let the real VM do its job and 2363 * go down in flames if truly OOM. 2364 * 2365 * However, since graphics tend to be disposable, 2366 * defer the oom here by reporting the ENOMEM back 2367 * to userspace. 2368 */ 2369 if (!*s) { 2370 /* reclaim and warn, but no oom */ 2371 gfp = mapping_gfp_mask(mapping); 2372 2373 /* Our bo are always dirty and so we require 2374 * kswapd to reclaim our pages (direct reclaim 2375 * does not effectively begin pageout of our 2376 * buffers on its own). However, direct reclaim 2377 * only waits for kswapd when under allocation 2378 * congestion. So as a result __GFP_RECLAIM is 2379 * unreliable and fails to actually reclaim our 2380 * dirty pages -- unless you try over and over 2381 * again with !__GFP_NORETRY. However, we still 2382 * want to fail this allocation rather than 2383 * trigger the out-of-memory killer and for 2384 * this we want __GFP_RETRY_MAYFAIL. 2385 */ 2386 gfp |= __GFP_RETRY_MAYFAIL; 2387 } 2388 } while (1); 2389 2390 if (!i || 2391 sg->length >= max_segment || 2392 page_to_pfn(page) != last_pfn + 1) { 2393 if (i) 2394 sg = sg_next(sg); 2395 st->nents++; 2396 sg_set_page(sg, page, PAGE_SIZE, 0); 2397 } else { 2398 sg->length += PAGE_SIZE; 2399 } 2400 last_pfn = page_to_pfn(page); 2401 2402 /* Check that the i965g/gm workaround works. */ 2403 WARN_ON((gfp & __GFP_DMA32) && (last_pfn >= 0x00100000UL)); 2404 } 2405 if (sg) /* loop terminated early; short sg table */ 2406 sg_mark_end(sg); 2407 2408 /* Trim unused sg entries to avoid wasting memory. */ 2409 i915_sg_trim(st); 2410 2411 ret = i915_gem_gtt_prepare_pages(obj, st); 2412 if (ret) { 2413 /* DMA remapping failed? One possible cause is that 2414 * it could not reserve enough large entries, asking 2415 * for PAGE_SIZE chunks instead may be helpful. 2416 */ 2417 if (max_segment > PAGE_SIZE) { 2418 for_each_sgt_page(page, sgt_iter, st) 2419 put_page(page); 2420 sg_free_table(st); 2421 2422 max_segment = PAGE_SIZE; 2423 goto rebuild_st; 2424 } else { 2425 dev_warn(&dev_priv->drm.pdev->dev, 2426 "Failed to DMA remap %lu pages\n", 2427 page_count); 2428 goto err_pages; 2429 } 2430 } 2431 2432 if (i915_gem_object_needs_bit17_swizzle(obj)) 2433 i915_gem_object_do_bit_17_swizzle(obj, st); 2434 2435 return st; 2436 2437 err_sg: 2438 sg_mark_end(sg); 2439 err_pages: 2440 for_each_sgt_page(page, sgt_iter, st) 2441 put_page(page); 2442 sg_free_table(st); 2443 kfree(st); 2444 2445 /* shmemfs first checks if there is enough memory to allocate the page 2446 * and reports ENOSPC should there be insufficient, along with the usual 2447 * ENOMEM for a genuine allocation failure. 2448 * 2449 * We use ENOSPC in our driver to mean that we have run out of aperture 2450 * space and so want to translate the error from shmemfs back to our 2451 * usual understanding of ENOMEM. 2452 */ 2453 if (ret == -ENOSPC) 2454 ret = -ENOMEM; 2455 2456 return ERR_PTR(ret); 2457 } 2458 2459 void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj, 2460 struct sg_table *pages) 2461 { 2462 lockdep_assert_held(&obj->mm.lock); 2463 2464 obj->mm.get_page.sg_pos = pages->sgl; 2465 obj->mm.get_page.sg_idx = 0; 2466 2467 obj->mm.pages = pages; 2468 2469 if (i915_gem_object_is_tiled(obj) && 2470 to_i915(obj->base.dev)->quirks & QUIRK_PIN_SWIZZLED_PAGES) { 2471 GEM_BUG_ON(obj->mm.quirked); 2472 __i915_gem_object_pin_pages(obj); 2473 obj->mm.quirked = true; 2474 } 2475 } 2476 2477 static int ____i915_gem_object_get_pages(struct drm_i915_gem_object *obj) 2478 { 2479 struct sg_table *pages; 2480 2481 GEM_BUG_ON(i915_gem_object_has_pinned_pages(obj)); 2482 2483 if (unlikely(obj->mm.madv != I915_MADV_WILLNEED)) { 2484 DRM_DEBUG("Attempting to obtain a purgeable object\n"); 2485 return -EFAULT; 2486 } 2487 2488 pages = obj->ops->get_pages(obj); 2489 if (unlikely(IS_ERR(pages))) 2490 return PTR_ERR(pages); 2491 2492 __i915_gem_object_set_pages(obj, pages); 2493 return 0; 2494 } 2495 2496 /* Ensure that the associated pages are gathered from the backing storage 2497 * and pinned into our object. i915_gem_object_pin_pages() may be called 2498 * multiple times before they are released by a single call to 2499 * i915_gem_object_unpin_pages() - once the pages are no longer referenced 2500 * either as a result of memory pressure (reaping pages under the shrinker) 2501 * or as the object is itself released. 2502 */ 2503 int __i915_gem_object_get_pages(struct drm_i915_gem_object *obj) 2504 { 2505 int err; 2506 2507 err = mutex_lock_interruptible(&obj->mm.lock); 2508 if (err) 2509 return err; 2510 2511 if (unlikely(IS_ERR_OR_NULL(obj->mm.pages))) { 2512 err = ____i915_gem_object_get_pages(obj); 2513 if (err) 2514 goto unlock; 2515 2516 smp_mb__before_atomic(); 2517 } 2518 atomic_inc(&obj->mm.pages_pin_count); 2519 2520 unlock: 2521 mutex_unlock(&obj->mm.lock); 2522 return err; 2523 } 2524 2525 /* The 'mapping' part of i915_gem_object_pin_map() below */ 2526 static void *i915_gem_object_map(const struct drm_i915_gem_object *obj, 2527 enum i915_map_type type) 2528 { 2529 unsigned long n_pages = obj->base.size >> PAGE_SHIFT; 2530 struct sg_table *sgt = obj->mm.pages; 2531 struct sgt_iter sgt_iter; 2532 struct page *page; 2533 struct page *stack_pages[32]; 2534 struct page **pages = stack_pages; 2535 unsigned long i = 0; 2536 pgprot_t pgprot; 2537 void *addr; 2538 2539 /* A single page can always be kmapped */ 2540 if (n_pages == 1 && type == I915_MAP_WB) 2541 return kmap(sg_page(sgt->sgl)); 2542 2543 if (n_pages > ARRAY_SIZE(stack_pages)) { 2544 /* Too big for stack -- allocate temporary array instead */ 2545 pages = kvmalloc_array(n_pages, sizeof(*pages), GFP_KERNEL); 2546 if (!pages) 2547 return NULL; 2548 } 2549 2550 for_each_sgt_page(page, sgt_iter, sgt) 2551 pages[i++] = page; 2552 2553 /* Check that we have the expected number of pages */ 2554 GEM_BUG_ON(i != n_pages); 2555 2556 switch (type) { 2557 default: 2558 MISSING_CASE(type); 2559 /* fallthrough to use PAGE_KERNEL anyway */ 2560 case I915_MAP_WB: 2561 pgprot = PAGE_KERNEL; 2562 break; 2563 case I915_MAP_WC: 2564 pgprot = pgprot_writecombine(PAGE_KERNEL_IO); 2565 break; 2566 } 2567 addr = vmap(pages, n_pages, 0, pgprot); 2568 2569 if (pages != stack_pages) 2570 kvfree(pages); 2571 2572 return addr; 2573 } 2574 2575 /* get, pin, and map the pages of the object into kernel space */ 2576 void *i915_gem_object_pin_map(struct drm_i915_gem_object *obj, 2577 enum i915_map_type type) 2578 { 2579 enum i915_map_type has_type; 2580 bool pinned; 2581 void *ptr; 2582 int ret; 2583 2584 GEM_BUG_ON(!i915_gem_object_has_struct_page(obj)); 2585 2586 ret = mutex_lock_interruptible(&obj->mm.lock); 2587 if (ret) 2588 return ERR_PTR(ret); 2589 2590 pinned = !(type & I915_MAP_OVERRIDE); 2591 type &= ~I915_MAP_OVERRIDE; 2592 2593 if (!atomic_inc_not_zero(&obj->mm.pages_pin_count)) { 2594 if (unlikely(IS_ERR_OR_NULL(obj->mm.pages))) { 2595 ret = ____i915_gem_object_get_pages(obj); 2596 if (ret) 2597 goto err_unlock; 2598 2599 smp_mb__before_atomic(); 2600 } 2601 atomic_inc(&obj->mm.pages_pin_count); 2602 pinned = false; 2603 } 2604 GEM_BUG_ON(!obj->mm.pages); 2605 2606 ptr = page_unpack_bits(obj->mm.mapping, &has_type); 2607 if (ptr && has_type != type) { 2608 if (pinned) { 2609 ret = -EBUSY; 2610 goto err_unpin; 2611 } 2612 2613 if (is_vmalloc_addr(ptr)) 2614 vunmap(ptr); 2615 else 2616 kunmap(kmap_to_page(ptr)); 2617 2618 ptr = obj->mm.mapping = NULL; 2619 } 2620 2621 if (!ptr) { 2622 ptr = i915_gem_object_map(obj, type); 2623 if (!ptr) { 2624 ret = -ENOMEM; 2625 goto err_unpin; 2626 } 2627 2628 obj->mm.mapping = page_pack_bits(ptr, type); 2629 } 2630 2631 out_unlock: 2632 mutex_unlock(&obj->mm.lock); 2633 return ptr; 2634 2635 err_unpin: 2636 atomic_dec(&obj->mm.pages_pin_count); 2637 err_unlock: 2638 ptr = ERR_PTR(ret); 2639 goto out_unlock; 2640 } 2641 2642 static int 2643 i915_gem_object_pwrite_gtt(struct drm_i915_gem_object *obj, 2644 const struct drm_i915_gem_pwrite *arg) 2645 { 2646 struct address_space *mapping = obj->base.filp->f_mapping; 2647 char __user *user_data = u64_to_user_ptr(arg->data_ptr); 2648 u64 remain, offset; 2649 unsigned int pg; 2650 2651 /* Before we instantiate/pin the backing store for our use, we 2652 * can prepopulate the shmemfs filp efficiently using a write into 2653 * the pagecache. We avoid the penalty of instantiating all the 2654 * pages, important if the user is just writing to a few and never 2655 * uses the object on the GPU, and using a direct write into shmemfs 2656 * allows it to avoid the cost of retrieving a page (either swapin 2657 * or clearing-before-use) before it is overwritten. 2658 */ 2659 if (READ_ONCE(obj->mm.pages)) 2660 return -ENODEV; 2661 2662 if (obj->mm.madv != I915_MADV_WILLNEED) 2663 return -EFAULT; 2664 2665 /* Before the pages are instantiated the object is treated as being 2666 * in the CPU domain. The pages will be clflushed as required before 2667 * use, and we can freely write into the pages directly. If userspace 2668 * races pwrite with any other operation; corruption will ensue - 2669 * that is userspace's prerogative! 2670 */ 2671 2672 remain = arg->size; 2673 offset = arg->offset; 2674 pg = offset_in_page(offset); 2675 2676 do { 2677 unsigned int len, unwritten; 2678 struct page *page; 2679 void *data, *vaddr; 2680 int err; 2681 2682 len = PAGE_SIZE - pg; 2683 if (len > remain) 2684 len = remain; 2685 2686 err = pagecache_write_begin(obj->base.filp, mapping, 2687 offset, len, 0, 2688 &page, &data); 2689 if (err < 0) 2690 return err; 2691 2692 vaddr = kmap(page); 2693 unwritten = copy_from_user(vaddr + pg, user_data, len); 2694 kunmap(page); 2695 2696 err = pagecache_write_end(obj->base.filp, mapping, 2697 offset, len, len - unwritten, 2698 page, data); 2699 if (err < 0) 2700 return err; 2701 2702 if (unwritten) 2703 return -EFAULT; 2704 2705 remain -= len; 2706 user_data += len; 2707 offset += len; 2708 pg = 0; 2709 } while (remain); 2710 2711 return 0; 2712 } 2713 2714 static bool ban_context(const struct i915_gem_context *ctx, 2715 unsigned int score) 2716 { 2717 return (i915_gem_context_is_bannable(ctx) && 2718 score >= CONTEXT_SCORE_BAN_THRESHOLD); 2719 } 2720 2721 static void i915_gem_context_mark_guilty(struct i915_gem_context *ctx) 2722 { 2723 unsigned int score; 2724 bool banned; 2725 2726 atomic_inc(&ctx->guilty_count); 2727 2728 score = atomic_add_return(CONTEXT_SCORE_GUILTY, &ctx->ban_score); 2729 banned = ban_context(ctx, score); 2730 DRM_DEBUG_DRIVER("context %s marked guilty (score %d) banned? %s\n", 2731 ctx->name, score, yesno(banned)); 2732 if (!banned) 2733 return; 2734 2735 i915_gem_context_set_banned(ctx); 2736 if (!IS_ERR_OR_NULL(ctx->file_priv)) { 2737 atomic_inc(&ctx->file_priv->context_bans); 2738 DRM_DEBUG_DRIVER("client %s has had %d context banned\n", 2739 ctx->name, atomic_read(&ctx->file_priv->context_bans)); 2740 } 2741 } 2742 2743 static void i915_gem_context_mark_innocent(struct i915_gem_context *ctx) 2744 { 2745 atomic_inc(&ctx->active_count); 2746 } 2747 2748 struct drm_i915_gem_request * 2749 i915_gem_find_active_request(struct intel_engine_cs *engine) 2750 { 2751 struct drm_i915_gem_request *request, *active = NULL; 2752 unsigned long flags; 2753 2754 /* We are called by the error capture and reset at a random 2755 * point in time. In particular, note that neither is crucially 2756 * ordered with an interrupt. After a hang, the GPU is dead and we 2757 * assume that no more writes can happen (we waited long enough for 2758 * all writes that were in transaction to be flushed) - adding an 2759 * extra delay for a recent interrupt is pointless. Hence, we do 2760 * not need an engine->irq_seqno_barrier() before the seqno reads. 2761 */ 2762 spin_lock_irqsave(&engine->timeline->lock, flags); 2763 list_for_each_entry(request, &engine->timeline->requests, link) { 2764 if (__i915_gem_request_completed(request, 2765 request->global_seqno)) 2766 continue; 2767 2768 GEM_BUG_ON(request->engine != engine); 2769 GEM_BUG_ON(test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, 2770 &request->fence.flags)); 2771 2772 active = request; 2773 break; 2774 } 2775 spin_unlock_irqrestore(&engine->timeline->lock, flags); 2776 2777 return active; 2778 } 2779 2780 static bool engine_stalled(struct intel_engine_cs *engine) 2781 { 2782 if (!engine->hangcheck.stalled) 2783 return false; 2784 2785 /* Check for possible seqno movement after hang declaration */ 2786 if (engine->hangcheck.seqno != intel_engine_get_seqno(engine)) { 2787 DRM_DEBUG_DRIVER("%s pardoned\n", engine->name); 2788 return false; 2789 } 2790 2791 return true; 2792 } 2793 2794 /* 2795 * Ensure irq handler finishes, and not run again. 2796 * Also return the active request so that we only search for it once. 2797 */ 2798 struct drm_i915_gem_request * 2799 i915_gem_reset_prepare_engine(struct intel_engine_cs *engine) 2800 { 2801 struct drm_i915_gem_request *request = NULL; 2802 2803 /* Prevent the signaler thread from updating the request 2804 * state (by calling dma_fence_signal) as we are processing 2805 * the reset. The write from the GPU of the seqno is 2806 * asynchronous and the signaler thread may see a different 2807 * value to us and declare the request complete, even though 2808 * the reset routine have picked that request as the active 2809 * (incomplete) request. This conflict is not handled 2810 * gracefully! 2811 */ 2812 kthread_park(engine->breadcrumbs.signaler); 2813 2814 /* Prevent request submission to the hardware until we have 2815 * completed the reset in i915_gem_reset_finish(). If a request 2816 * is completed by one engine, it may then queue a request 2817 * to a second via its engine->irq_tasklet *just* as we are 2818 * calling engine->init_hw() and also writing the ELSP. 2819 * Turning off the engine->irq_tasklet until the reset is over 2820 * prevents the race. 2821 */ 2822 tasklet_kill(&engine->irq_tasklet); 2823 tasklet_disable(&engine->irq_tasklet); 2824 2825 if (engine->irq_seqno_barrier) 2826 engine->irq_seqno_barrier(engine); 2827 2828 request = i915_gem_find_active_request(engine); 2829 if (request && request->fence.error == -EIO) 2830 request = ERR_PTR(-EIO); /* Previous reset failed! */ 2831 2832 return request; 2833 } 2834 2835 int i915_gem_reset_prepare(struct drm_i915_private *dev_priv) 2836 { 2837 struct intel_engine_cs *engine; 2838 struct drm_i915_gem_request *request; 2839 enum intel_engine_id id; 2840 int err = 0; 2841 2842 for_each_engine(engine, dev_priv, id) { 2843 request = i915_gem_reset_prepare_engine(engine); 2844 if (IS_ERR(request)) { 2845 err = PTR_ERR(request); 2846 continue; 2847 } 2848 2849 engine->hangcheck.active_request = request; 2850 } 2851 2852 i915_gem_revoke_fences(dev_priv); 2853 2854 return err; 2855 } 2856 2857 static void skip_request(struct drm_i915_gem_request *request) 2858 { 2859 void *vaddr = request->ring->vaddr; 2860 u32 head; 2861 2862 /* As this request likely depends on state from the lost 2863 * context, clear out all the user operations leaving the 2864 * breadcrumb at the end (so we get the fence notifications). 2865 */ 2866 head = request->head; 2867 if (request->postfix < head) { 2868 memset(vaddr + head, 0, request->ring->size - head); 2869 head = 0; 2870 } 2871 memset(vaddr + head, 0, request->postfix - head); 2872 2873 dma_fence_set_error(&request->fence, -EIO); 2874 } 2875 2876 static void engine_skip_context(struct drm_i915_gem_request *request) 2877 { 2878 struct intel_engine_cs *engine = request->engine; 2879 struct i915_gem_context *hung_ctx = request->ctx; 2880 struct intel_timeline *timeline; 2881 unsigned long flags; 2882 2883 timeline = i915_gem_context_lookup_timeline(hung_ctx, engine); 2884 2885 spin_lock_irqsave(&engine->timeline->lock, flags); 2886 spin_lock(&timeline->lock); 2887 2888 list_for_each_entry_continue(request, &engine->timeline->requests, link) 2889 if (request->ctx == hung_ctx) 2890 skip_request(request); 2891 2892 list_for_each_entry(request, &timeline->requests, link) 2893 skip_request(request); 2894 2895 spin_unlock(&timeline->lock); 2896 spin_unlock_irqrestore(&engine->timeline->lock, flags); 2897 } 2898 2899 /* Returns the request if it was guilty of the hang */ 2900 static struct drm_i915_gem_request * 2901 i915_gem_reset_request(struct intel_engine_cs *engine, 2902 struct drm_i915_gem_request *request) 2903 { 2904 /* The guilty request will get skipped on a hung engine. 2905 * 2906 * Users of client default contexts do not rely on logical 2907 * state preserved between batches so it is safe to execute 2908 * queued requests following the hang. Non default contexts 2909 * rely on preserved state, so skipping a batch loses the 2910 * evolution of the state and it needs to be considered corrupted. 2911 * Executing more queued batches on top of corrupted state is 2912 * risky. But we take the risk by trying to advance through 2913 * the queued requests in order to make the client behaviour 2914 * more predictable around resets, by not throwing away random 2915 * amount of batches it has prepared for execution. Sophisticated 2916 * clients can use gem_reset_stats_ioctl and dma fence status 2917 * (exported via sync_file info ioctl on explicit fences) to observe 2918 * when it loses the context state and should rebuild accordingly. 2919 * 2920 * The context ban, and ultimately the client ban, mechanism are safety 2921 * valves if client submission ends up resulting in nothing more than 2922 * subsequent hangs. 2923 */ 2924 2925 if (engine_stalled(engine)) { 2926 i915_gem_context_mark_guilty(request->ctx); 2927 skip_request(request); 2928 2929 /* If this context is now banned, skip all pending requests. */ 2930 if (i915_gem_context_is_banned(request->ctx)) 2931 engine_skip_context(request); 2932 } else { 2933 /* 2934 * Since this is not the hung engine, it may have advanced 2935 * since the hang declaration. Double check by refinding 2936 * the active request at the time of the reset. 2937 */ 2938 request = i915_gem_find_active_request(engine); 2939 if (request) { 2940 i915_gem_context_mark_innocent(request->ctx); 2941 dma_fence_set_error(&request->fence, -EAGAIN); 2942 2943 /* Rewind the engine to replay the incomplete rq */ 2944 spin_lock_irq(&engine->timeline->lock); 2945 request = list_prev_entry(request, link); 2946 if (&request->link == &engine->timeline->requests) 2947 request = NULL; 2948 spin_unlock_irq(&engine->timeline->lock); 2949 } 2950 } 2951 2952 return request; 2953 } 2954 2955 void i915_gem_reset_engine(struct intel_engine_cs *engine, 2956 struct drm_i915_gem_request *request) 2957 { 2958 engine->irq_posted = 0; 2959 2960 if (request) 2961 request = i915_gem_reset_request(engine, request); 2962 2963 if (request) { 2964 DRM_DEBUG_DRIVER("resetting %s to restart from tail of request 0x%x\n", 2965 engine->name, request->global_seqno); 2966 } 2967 2968 /* Setup the CS to resume from the breadcrumb of the hung request */ 2969 engine->reset_hw(engine, request); 2970 } 2971 2972 void i915_gem_reset(struct drm_i915_private *dev_priv) 2973 { 2974 struct intel_engine_cs *engine; 2975 enum intel_engine_id id; 2976 2977 lockdep_assert_held(&dev_priv->drm.struct_mutex); 2978 2979 i915_gem_retire_requests(dev_priv); 2980 2981 for_each_engine(engine, dev_priv, id) { 2982 struct i915_gem_context *ctx; 2983 2984 i915_gem_reset_engine(engine, engine->hangcheck.active_request); 2985 ctx = fetch_and_zero(&engine->last_retired_context); 2986 if (ctx) 2987 engine->context_unpin(engine, ctx); 2988 } 2989 2990 i915_gem_restore_fences(dev_priv); 2991 2992 if (dev_priv->gt.awake) { 2993 intel_sanitize_gt_powersave(dev_priv); 2994 intel_enable_gt_powersave(dev_priv); 2995 if (INTEL_GEN(dev_priv) >= 6) 2996 gen6_rps_busy(dev_priv); 2997 } 2998 } 2999 3000 void i915_gem_reset_finish_engine(struct intel_engine_cs *engine) 3001 { 3002 tasklet_enable(&engine->irq_tasklet); 3003 kthread_unpark(engine->breadcrumbs.signaler); 3004 } 3005 3006 void i915_gem_reset_finish(struct drm_i915_private *dev_priv) 3007 { 3008 struct intel_engine_cs *engine; 3009 enum intel_engine_id id; 3010 3011 lockdep_assert_held(&dev_priv->drm.struct_mutex); 3012 3013 for_each_engine(engine, dev_priv, id) { 3014 engine->hangcheck.active_request = NULL; 3015 i915_gem_reset_finish_engine(engine); 3016 } 3017 } 3018 3019 static void nop_submit_request(struct drm_i915_gem_request *request) 3020 { 3021 unsigned long flags; 3022 3023 GEM_BUG_ON(!i915_terminally_wedged(&request->i915->gpu_error)); 3024 dma_fence_set_error(&request->fence, -EIO); 3025 3026 spin_lock_irqsave(&request->engine->timeline->lock, flags); 3027 __i915_gem_request_submit(request); 3028 intel_engine_init_global_seqno(request->engine, request->global_seqno); 3029 spin_unlock_irqrestore(&request->engine->timeline->lock, flags); 3030 } 3031 3032 static void engine_set_wedged(struct intel_engine_cs *engine) 3033 { 3034 struct drm_i915_gem_request *request; 3035 unsigned long flags; 3036 3037 /* We need to be sure that no thread is running the old callback as 3038 * we install the nop handler (otherwise we would submit a request 3039 * to hardware that will never complete). In order to prevent this 3040 * race, we wait until the machine is idle before making the swap 3041 * (using stop_machine()). 3042 */ 3043 engine->submit_request = nop_submit_request; 3044 3045 /* Mark all executing requests as skipped */ 3046 spin_lock_irqsave(&engine->timeline->lock, flags); 3047 list_for_each_entry(request, &engine->timeline->requests, link) 3048 if (!i915_gem_request_completed(request)) 3049 dma_fence_set_error(&request->fence, -EIO); 3050 spin_unlock_irqrestore(&engine->timeline->lock, flags); 3051 3052 /* 3053 * Clear the execlists queue up before freeing the requests, as those 3054 * are the ones that keep the context and ringbuffer backing objects 3055 * pinned in place. 3056 */ 3057 3058 if (i915.enable_execlists) { 3059 struct execlist_port *port = engine->execlist_port; 3060 unsigned long flags; 3061 unsigned int n; 3062 3063 spin_lock_irqsave(&engine->timeline->lock, flags); 3064 3065 for (n = 0; n < ARRAY_SIZE(engine->execlist_port); n++) 3066 i915_gem_request_put(port_request(&port[n])); 3067 memset(engine->execlist_port, 0, sizeof(engine->execlist_port)); 3068 engine->execlist_queue = RB_ROOT; 3069 engine->execlist_first = NULL; 3070 3071 spin_unlock_irqrestore(&engine->timeline->lock, flags); 3072 3073 /* The port is checked prior to scheduling a tasklet, but 3074 * just in case we have suspended the tasklet to do the 3075 * wedging make sure that when it wakes, it decides there 3076 * is no work to do by clearing the irq_posted bit. 3077 */ 3078 clear_bit(ENGINE_IRQ_EXECLIST, &engine->irq_posted); 3079 } 3080 3081 /* Mark all pending requests as complete so that any concurrent 3082 * (lockless) lookup doesn't try and wait upon the request as we 3083 * reset it. 3084 */ 3085 intel_engine_init_global_seqno(engine, 3086 intel_engine_last_submit(engine)); 3087 } 3088 3089 static int __i915_gem_set_wedged_BKL(void *data) 3090 { 3091 struct drm_i915_private *i915 = data; 3092 struct intel_engine_cs *engine; 3093 enum intel_engine_id id; 3094 3095 for_each_engine(engine, i915, id) 3096 engine_set_wedged(engine); 3097 3098 set_bit(I915_WEDGED, &i915->gpu_error.flags); 3099 wake_up_all(&i915->gpu_error.reset_queue); 3100 3101 return 0; 3102 } 3103 3104 void i915_gem_set_wedged(struct drm_i915_private *dev_priv) 3105 { 3106 stop_machine(__i915_gem_set_wedged_BKL, dev_priv, NULL); 3107 } 3108 3109 bool i915_gem_unset_wedged(struct drm_i915_private *i915) 3110 { 3111 struct i915_gem_timeline *tl; 3112 int i; 3113 3114 lockdep_assert_held(&i915->drm.struct_mutex); 3115 if (!test_bit(I915_WEDGED, &i915->gpu_error.flags)) 3116 return true; 3117 3118 /* Before unwedging, make sure that all pending operations 3119 * are flushed and errored out - we may have requests waiting upon 3120 * third party fences. We marked all inflight requests as EIO, and 3121 * every execbuf since returned EIO, for consistency we want all 3122 * the currently pending requests to also be marked as EIO, which 3123 * is done inside our nop_submit_request - and so we must wait. 3124 * 3125 * No more can be submitted until we reset the wedged bit. 3126 */ 3127 list_for_each_entry(tl, &i915->gt.timelines, link) { 3128 for (i = 0; i < ARRAY_SIZE(tl->engine); i++) { 3129 struct drm_i915_gem_request *rq; 3130 3131 rq = i915_gem_active_peek(&tl->engine[i].last_request, 3132 &i915->drm.struct_mutex); 3133 if (!rq) 3134 continue; 3135 3136 /* We can't use our normal waiter as we want to 3137 * avoid recursively trying to handle the current 3138 * reset. The basic dma_fence_default_wait() installs 3139 * a callback for dma_fence_signal(), which is 3140 * triggered by our nop handler (indirectly, the 3141 * callback enables the signaler thread which is 3142 * woken by the nop_submit_request() advancing the seqno 3143 * and when the seqno passes the fence, the signaler 3144 * then signals the fence waking us up). 3145 */ 3146 if (dma_fence_default_wait(&rq->fence, true, 3147 MAX_SCHEDULE_TIMEOUT) < 0) 3148 return false; 3149 } 3150 } 3151 3152 /* Undo nop_submit_request. We prevent all new i915 requests from 3153 * being queued (by disallowing execbuf whilst wedged) so having 3154 * waited for all active requests above, we know the system is idle 3155 * and do not have to worry about a thread being inside 3156 * engine->submit_request() as we swap over. So unlike installing 3157 * the nop_submit_request on reset, we can do this from normal 3158 * context and do not require stop_machine(). 3159 */ 3160 intel_engines_reset_default_submission(i915); 3161 i915_gem_contexts_lost(i915); 3162 3163 smp_mb__before_atomic(); /* complete takeover before enabling execbuf */ 3164 clear_bit(I915_WEDGED, &i915->gpu_error.flags); 3165 3166 return true; 3167 } 3168 3169 static void 3170 i915_gem_retire_work_handler(struct work_struct *work) 3171 { 3172 struct drm_i915_private *dev_priv = 3173 container_of(work, typeof(*dev_priv), gt.retire_work.work); 3174 struct drm_device *dev = &dev_priv->drm; 3175 3176 /* Come back later if the device is busy... */ 3177 if (mutex_trylock(&dev->struct_mutex)) { 3178 i915_gem_retire_requests(dev_priv); 3179 mutex_unlock(&dev->struct_mutex); 3180 } 3181 3182 /* Keep the retire handler running until we are finally idle. 3183 * We do not need to do this test under locking as in the worst-case 3184 * we queue the retire worker once too often. 3185 */ 3186 if (READ_ONCE(dev_priv->gt.awake)) { 3187 i915_queue_hangcheck(dev_priv); 3188 queue_delayed_work(dev_priv->wq, 3189 &dev_priv->gt.retire_work, 3190 round_jiffies_up_relative(HZ)); 3191 } 3192 } 3193 3194 static void 3195 i915_gem_idle_work_handler(struct work_struct *work) 3196 { 3197 struct drm_i915_private *dev_priv = 3198 container_of(work, typeof(*dev_priv), gt.idle_work.work); 3199 struct drm_device *dev = &dev_priv->drm; 3200 bool rearm_hangcheck; 3201 3202 if (!READ_ONCE(dev_priv->gt.awake)) 3203 return; 3204 3205 /* 3206 * Wait for last execlists context complete, but bail out in case a 3207 * new request is submitted. 3208 */ 3209 wait_for(intel_engines_are_idle(dev_priv), 10); 3210 if (READ_ONCE(dev_priv->gt.active_requests)) 3211 return; 3212 3213 rearm_hangcheck = 3214 cancel_delayed_work_sync(&dev_priv->gpu_error.hangcheck_work); 3215 3216 if (!mutex_trylock(&dev->struct_mutex)) { 3217 /* Currently busy, come back later */ 3218 mod_delayed_work(dev_priv->wq, 3219 &dev_priv->gt.idle_work, 3220 msecs_to_jiffies(50)); 3221 goto out_rearm; 3222 } 3223 3224 /* 3225 * New request retired after this work handler started, extend active 3226 * period until next instance of the work. 3227 */ 3228 if (work_pending(work)) 3229 goto out_unlock; 3230 3231 if (dev_priv->gt.active_requests) 3232 goto out_unlock; 3233 3234 if (wait_for(intel_engines_are_idle(dev_priv), 10)) 3235 DRM_ERROR("Timeout waiting for engines to idle\n"); 3236 3237 intel_engines_mark_idle(dev_priv); 3238 i915_gem_timelines_mark_idle(dev_priv); 3239 3240 GEM_BUG_ON(!dev_priv->gt.awake); 3241 dev_priv->gt.awake = false; 3242 rearm_hangcheck = false; 3243 3244 if (INTEL_GEN(dev_priv) >= 6) 3245 gen6_rps_idle(dev_priv); 3246 intel_runtime_pm_put(dev_priv); 3247 out_unlock: 3248 mutex_unlock(&dev->struct_mutex); 3249 3250 out_rearm: 3251 if (rearm_hangcheck) { 3252 GEM_BUG_ON(!dev_priv->gt.awake); 3253 i915_queue_hangcheck(dev_priv); 3254 } 3255 } 3256 3257 void i915_gem_close_object(struct drm_gem_object *gem, struct drm_file *file) 3258 { 3259 struct drm_i915_private *i915 = to_i915(gem->dev); 3260 struct drm_i915_gem_object *obj = to_intel_bo(gem); 3261 struct drm_i915_file_private *fpriv = file->driver_priv; 3262 struct i915_lut_handle *lut, *ln; 3263 3264 mutex_lock(&i915->drm.struct_mutex); 3265 3266 list_for_each_entry_safe(lut, ln, &obj->lut_list, obj_link) { 3267 struct i915_gem_context *ctx = lut->ctx; 3268 struct i915_vma *vma; 3269 3270 if (ctx->file_priv != fpriv) 3271 continue; 3272 3273 vma = radix_tree_delete(&ctx->handles_vma, lut->handle); 3274 3275 GEM_BUG_ON(vma->obj != obj); 3276 3277 /* We allow the process to have multiple handles to the same 3278 * vma, in the same fd namespace, by virtue of flink/open. 3279 */ 3280 GEM_BUG_ON(!vma->open_count); 3281 if (!--vma->open_count && !i915_vma_is_ggtt(vma)) 3282 i915_vma_close(vma); 3283 3284 list_del(&lut->obj_link); 3285 list_del(&lut->ctx_link); 3286 3287 kmem_cache_free(i915->luts, lut); 3288 __i915_gem_object_release_unless_active(obj); 3289 } 3290 3291 mutex_unlock(&i915->drm.struct_mutex); 3292 } 3293 3294 static unsigned long to_wait_timeout(s64 timeout_ns) 3295 { 3296 if (timeout_ns < 0) 3297 return MAX_SCHEDULE_TIMEOUT; 3298 3299 if (timeout_ns == 0) 3300 return 0; 3301 3302 return nsecs_to_jiffies_timeout(timeout_ns); 3303 } 3304 3305 /** 3306 * i915_gem_wait_ioctl - implements DRM_IOCTL_I915_GEM_WAIT 3307 * @dev: drm device pointer 3308 * @data: ioctl data blob 3309 * @file: drm file pointer 3310 * 3311 * Returns 0 if successful, else an error is returned with the remaining time in 3312 * the timeout parameter. 3313 * -ETIME: object is still busy after timeout 3314 * -ERESTARTSYS: signal interrupted the wait 3315 * -ENONENT: object doesn't exist 3316 * Also possible, but rare: 3317 * -EAGAIN: incomplete, restart syscall 3318 * -ENOMEM: damn 3319 * -ENODEV: Internal IRQ fail 3320 * -E?: The add request failed 3321 * 3322 * The wait ioctl with a timeout of 0 reimplements the busy ioctl. With any 3323 * non-zero timeout parameter the wait ioctl will wait for the given number of 3324 * nanoseconds on an object becoming unbusy. Since the wait itself does so 3325 * without holding struct_mutex the object may become re-busied before this 3326 * function completes. A similar but shorter * race condition exists in the busy 3327 * ioctl 3328 */ 3329 int 3330 i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file) 3331 { 3332 struct drm_i915_gem_wait *args = data; 3333 struct drm_i915_gem_object *obj; 3334 ktime_t start; 3335 long ret; 3336 3337 if (args->flags != 0) 3338 return -EINVAL; 3339 3340 obj = i915_gem_object_lookup(file, args->bo_handle); 3341 if (!obj) 3342 return -ENOENT; 3343 3344 start = ktime_get(); 3345 3346 ret = i915_gem_object_wait(obj, 3347 I915_WAIT_INTERRUPTIBLE | I915_WAIT_ALL, 3348 to_wait_timeout(args->timeout_ns), 3349 to_rps_client(file)); 3350 3351 if (args->timeout_ns > 0) { 3352 args->timeout_ns -= ktime_to_ns(ktime_sub(ktime_get(), start)); 3353 if (args->timeout_ns < 0) 3354 args->timeout_ns = 0; 3355 3356 /* 3357 * Apparently ktime isn't accurate enough and occasionally has a 3358 * bit of mismatch in the jiffies<->nsecs<->ktime loop. So patch 3359 * things up to make the test happy. We allow up to 1 jiffy. 3360 * 3361 * This is a regression from the timespec->ktime conversion. 3362 */ 3363 if (ret == -ETIME && !nsecs_to_jiffies(args->timeout_ns)) 3364 args->timeout_ns = 0; 3365 3366 /* Asked to wait beyond the jiffie/scheduler precision? */ 3367 if (ret == -ETIME && args->timeout_ns) 3368 ret = -EAGAIN; 3369 } 3370 3371 i915_gem_object_put(obj); 3372 return ret; 3373 } 3374 3375 static int wait_for_timeline(struct i915_gem_timeline *tl, unsigned int flags) 3376 { 3377 int ret, i; 3378 3379 for (i = 0; i < ARRAY_SIZE(tl->engine); i++) { 3380 ret = i915_gem_active_wait(&tl->engine[i].last_request, flags); 3381 if (ret) 3382 return ret; 3383 } 3384 3385 return 0; 3386 } 3387 3388 static int wait_for_engine(struct intel_engine_cs *engine, int timeout_ms) 3389 { 3390 return wait_for(intel_engine_is_idle(engine), timeout_ms); 3391 } 3392 3393 static int wait_for_engines(struct drm_i915_private *i915) 3394 { 3395 struct intel_engine_cs *engine; 3396 enum intel_engine_id id; 3397 3398 for_each_engine(engine, i915, id) { 3399 if (GEM_WARN_ON(wait_for_engine(engine, 50))) { 3400 i915_gem_set_wedged(i915); 3401 return -EIO; 3402 } 3403 3404 GEM_BUG_ON(intel_engine_get_seqno(engine) != 3405 intel_engine_last_submit(engine)); 3406 } 3407 3408 return 0; 3409 } 3410 3411 int i915_gem_wait_for_idle(struct drm_i915_private *i915, unsigned int flags) 3412 { 3413 int ret; 3414 3415 /* If the device is asleep, we have no requests outstanding */ 3416 if (!READ_ONCE(i915->gt.awake)) 3417 return 0; 3418 3419 if (flags & I915_WAIT_LOCKED) { 3420 struct i915_gem_timeline *tl; 3421 3422 lockdep_assert_held(&i915->drm.struct_mutex); 3423 3424 list_for_each_entry(tl, &i915->gt.timelines, link) { 3425 ret = wait_for_timeline(tl, flags); 3426 if (ret) 3427 return ret; 3428 } 3429 3430 i915_gem_retire_requests(i915); 3431 GEM_BUG_ON(i915->gt.active_requests); 3432 3433 ret = wait_for_engines(i915); 3434 } else { 3435 ret = wait_for_timeline(&i915->gt.global_timeline, flags); 3436 } 3437 3438 return ret; 3439 } 3440 3441 static void __i915_gem_object_flush_for_display(struct drm_i915_gem_object *obj) 3442 { 3443 /* 3444 * We manually flush the CPU domain so that we can override and 3445 * force the flush for the display, and perform it asyncrhonously. 3446 */ 3447 flush_write_domain(obj, ~I915_GEM_DOMAIN_CPU); 3448 if (obj->cache_dirty) 3449 i915_gem_clflush_object(obj, I915_CLFLUSH_FORCE); 3450 obj->base.write_domain = 0; 3451 } 3452 3453 void i915_gem_object_flush_if_display(struct drm_i915_gem_object *obj) 3454 { 3455 if (!READ_ONCE(obj->pin_display)) 3456 return; 3457 3458 mutex_lock(&obj->base.dev->struct_mutex); 3459 __i915_gem_object_flush_for_display(obj); 3460 mutex_unlock(&obj->base.dev->struct_mutex); 3461 } 3462 3463 /** 3464 * Moves a single object to the WC read, and possibly write domain. 3465 * @obj: object to act on 3466 * @write: ask for write access or read only 3467 * 3468 * This function returns when the move is complete, including waiting on 3469 * flushes to occur. 3470 */ 3471 int 3472 i915_gem_object_set_to_wc_domain(struct drm_i915_gem_object *obj, bool write) 3473 { 3474 int ret; 3475 3476 lockdep_assert_held(&obj->base.dev->struct_mutex); 3477 3478 ret = i915_gem_object_wait(obj, 3479 I915_WAIT_INTERRUPTIBLE | 3480 I915_WAIT_LOCKED | 3481 (write ? I915_WAIT_ALL : 0), 3482 MAX_SCHEDULE_TIMEOUT, 3483 NULL); 3484 if (ret) 3485 return ret; 3486 3487 if (obj->base.write_domain == I915_GEM_DOMAIN_WC) 3488 return 0; 3489 3490 /* Flush and acquire obj->pages so that we are coherent through 3491 * direct access in memory with previous cached writes through 3492 * shmemfs and that our cache domain tracking remains valid. 3493 * For example, if the obj->filp was moved to swap without us 3494 * being notified and releasing the pages, we would mistakenly 3495 * continue to assume that the obj remained out of the CPU cached 3496 * domain. 3497 */ 3498 ret = i915_gem_object_pin_pages(obj); 3499 if (ret) 3500 return ret; 3501 3502 flush_write_domain(obj, ~I915_GEM_DOMAIN_WC); 3503 3504 /* Serialise direct access to this object with the barriers for 3505 * coherent writes from the GPU, by effectively invalidating the 3506 * WC domain upon first access. 3507 */ 3508 if ((obj->base.read_domains & I915_GEM_DOMAIN_WC) == 0) 3509 mb(); 3510 3511 /* It should now be out of any other write domains, and we can update 3512 * the domain values for our changes. 3513 */ 3514 GEM_BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_WC) != 0); 3515 obj->base.read_domains |= I915_GEM_DOMAIN_WC; 3516 if (write) { 3517 obj->base.read_domains = I915_GEM_DOMAIN_WC; 3518 obj->base.write_domain = I915_GEM_DOMAIN_WC; 3519 obj->mm.dirty = true; 3520 } 3521 3522 i915_gem_object_unpin_pages(obj); 3523 return 0; 3524 } 3525 3526 /** 3527 * Moves a single object to the GTT read, and possibly write domain. 3528 * @obj: object to act on 3529 * @write: ask for write access or read only 3530 * 3531 * This function returns when the move is complete, including waiting on 3532 * flushes to occur. 3533 */ 3534 int 3535 i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write) 3536 { 3537 int ret; 3538 3539 lockdep_assert_held(&obj->base.dev->struct_mutex); 3540 3541 ret = i915_gem_object_wait(obj, 3542 I915_WAIT_INTERRUPTIBLE | 3543 I915_WAIT_LOCKED | 3544 (write ? I915_WAIT_ALL : 0), 3545 MAX_SCHEDULE_TIMEOUT, 3546 NULL); 3547 if (ret) 3548 return ret; 3549 3550 if (obj->base.write_domain == I915_GEM_DOMAIN_GTT) 3551 return 0; 3552 3553 /* Flush and acquire obj->pages so that we are coherent through 3554 * direct access in memory with previous cached writes through 3555 * shmemfs and that our cache domain tracking remains valid. 3556 * For example, if the obj->filp was moved to swap without us 3557 * being notified and releasing the pages, we would mistakenly 3558 * continue to assume that the obj remained out of the CPU cached 3559 * domain. 3560 */ 3561 ret = i915_gem_object_pin_pages(obj); 3562 if (ret) 3563 return ret; 3564 3565 flush_write_domain(obj, ~I915_GEM_DOMAIN_GTT); 3566 3567 /* Serialise direct access to this object with the barriers for 3568 * coherent writes from the GPU, by effectively invalidating the 3569 * GTT domain upon first access. 3570 */ 3571 if ((obj->base.read_domains & I915_GEM_DOMAIN_GTT) == 0) 3572 mb(); 3573 3574 /* It should now be out of any other write domains, and we can update 3575 * the domain values for our changes. 3576 */ 3577 GEM_BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_GTT) != 0); 3578 obj->base.read_domains |= I915_GEM_DOMAIN_GTT; 3579 if (write) { 3580 obj->base.read_domains = I915_GEM_DOMAIN_GTT; 3581 obj->base.write_domain = I915_GEM_DOMAIN_GTT; 3582 obj->mm.dirty = true; 3583 } 3584 3585 i915_gem_object_unpin_pages(obj); 3586 return 0; 3587 } 3588 3589 /** 3590 * Changes the cache-level of an object across all VMA. 3591 * @obj: object to act on 3592 * @cache_level: new cache level to set for the object 3593 * 3594 * After this function returns, the object will be in the new cache-level 3595 * across all GTT and the contents of the backing storage will be coherent, 3596 * with respect to the new cache-level. In order to keep the backing storage 3597 * coherent for all users, we only allow a single cache level to be set 3598 * globally on the object and prevent it from being changed whilst the 3599 * hardware is reading from the object. That is if the object is currently 3600 * on the scanout it will be set to uncached (or equivalent display 3601 * cache coherency) and all non-MOCS GPU access will also be uncached so 3602 * that all direct access to the scanout remains coherent. 3603 */ 3604 int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj, 3605 enum i915_cache_level cache_level) 3606 { 3607 struct i915_vma *vma; 3608 int ret; 3609 3610 lockdep_assert_held(&obj->base.dev->struct_mutex); 3611 3612 if (obj->cache_level == cache_level) 3613 return 0; 3614 3615 /* Inspect the list of currently bound VMA and unbind any that would 3616 * be invalid given the new cache-level. This is principally to 3617 * catch the issue of the CS prefetch crossing page boundaries and 3618 * reading an invalid PTE on older architectures. 3619 */ 3620 restart: 3621 list_for_each_entry(vma, &obj->vma_list, obj_link) { 3622 if (!drm_mm_node_allocated(&vma->node)) 3623 continue; 3624 3625 if (i915_vma_is_pinned(vma)) { 3626 DRM_DEBUG("can not change the cache level of pinned objects\n"); 3627 return -EBUSY; 3628 } 3629 3630 if (i915_gem_valid_gtt_space(vma, cache_level)) 3631 continue; 3632 3633 ret = i915_vma_unbind(vma); 3634 if (ret) 3635 return ret; 3636 3637 /* As unbinding may affect other elements in the 3638 * obj->vma_list (due to side-effects from retiring 3639 * an active vma), play safe and restart the iterator. 3640 */ 3641 goto restart; 3642 } 3643 3644 /* We can reuse the existing drm_mm nodes but need to change the 3645 * cache-level on the PTE. We could simply unbind them all and 3646 * rebind with the correct cache-level on next use. However since 3647 * we already have a valid slot, dma mapping, pages etc, we may as 3648 * rewrite the PTE in the belief that doing so tramples upon less 3649 * state and so involves less work. 3650 */ 3651 if (obj->bind_count) { 3652 /* Before we change the PTE, the GPU must not be accessing it. 3653 * If we wait upon the object, we know that all the bound 3654 * VMA are no longer active. 3655 */ 3656 ret = i915_gem_object_wait(obj, 3657 I915_WAIT_INTERRUPTIBLE | 3658 I915_WAIT_LOCKED | 3659 I915_WAIT_ALL, 3660 MAX_SCHEDULE_TIMEOUT, 3661 NULL); 3662 if (ret) 3663 return ret; 3664 3665 if (!HAS_LLC(to_i915(obj->base.dev)) && 3666 cache_level != I915_CACHE_NONE) { 3667 /* Access to snoopable pages through the GTT is 3668 * incoherent and on some machines causes a hard 3669 * lockup. Relinquish the CPU mmaping to force 3670 * userspace to refault in the pages and we can 3671 * then double check if the GTT mapping is still 3672 * valid for that pointer access. 3673 */ 3674 i915_gem_release_mmap(obj); 3675 3676 /* As we no longer need a fence for GTT access, 3677 * we can relinquish it now (and so prevent having 3678 * to steal a fence from someone else on the next 3679 * fence request). Note GPU activity would have 3680 * dropped the fence as all snoopable access is 3681 * supposed to be linear. 3682 */ 3683 list_for_each_entry(vma, &obj->vma_list, obj_link) { 3684 ret = i915_vma_put_fence(vma); 3685 if (ret) 3686 return ret; 3687 } 3688 } else { 3689 /* We either have incoherent backing store and 3690 * so no GTT access or the architecture is fully 3691 * coherent. In such cases, existing GTT mmaps 3692 * ignore the cache bit in the PTE and we can 3693 * rewrite it without confusing the GPU or having 3694 * to force userspace to fault back in its mmaps. 3695 */ 3696 } 3697 3698 list_for_each_entry(vma, &obj->vma_list, obj_link) { 3699 if (!drm_mm_node_allocated(&vma->node)) 3700 continue; 3701 3702 ret = i915_vma_bind(vma, cache_level, PIN_UPDATE); 3703 if (ret) 3704 return ret; 3705 } 3706 } 3707 3708 list_for_each_entry(vma, &obj->vma_list, obj_link) 3709 vma->node.color = cache_level; 3710 i915_gem_object_set_cache_coherency(obj, cache_level); 3711 obj->cache_dirty = true; /* Always invalidate stale cachelines */ 3712 3713 return 0; 3714 } 3715 3716 int i915_gem_get_caching_ioctl(struct drm_device *dev, void *data, 3717 struct drm_file *file) 3718 { 3719 struct drm_i915_gem_caching *args = data; 3720 struct drm_i915_gem_object *obj; 3721 int err = 0; 3722 3723 rcu_read_lock(); 3724 obj = i915_gem_object_lookup_rcu(file, args->handle); 3725 if (!obj) { 3726 err = -ENOENT; 3727 goto out; 3728 } 3729 3730 switch (obj->cache_level) { 3731 case I915_CACHE_LLC: 3732 case I915_CACHE_L3_LLC: 3733 args->caching = I915_CACHING_CACHED; 3734 break; 3735 3736 case I915_CACHE_WT: 3737 args->caching = I915_CACHING_DISPLAY; 3738 break; 3739 3740 default: 3741 args->caching = I915_CACHING_NONE; 3742 break; 3743 } 3744 out: 3745 rcu_read_unlock(); 3746 return err; 3747 } 3748 3749 int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data, 3750 struct drm_file *file) 3751 { 3752 struct drm_i915_private *i915 = to_i915(dev); 3753 struct drm_i915_gem_caching *args = data; 3754 struct drm_i915_gem_object *obj; 3755 enum i915_cache_level level; 3756 int ret = 0; 3757 3758 switch (args->caching) { 3759 case I915_CACHING_NONE: 3760 level = I915_CACHE_NONE; 3761 break; 3762 case I915_CACHING_CACHED: 3763 /* 3764 * Due to a HW issue on BXT A stepping, GPU stores via a 3765 * snooped mapping may leave stale data in a corresponding CPU 3766 * cacheline, whereas normally such cachelines would get 3767 * invalidated. 3768 */ 3769 if (!HAS_LLC(i915) && !HAS_SNOOP(i915)) 3770 return -ENODEV; 3771 3772 level = I915_CACHE_LLC; 3773 break; 3774 case I915_CACHING_DISPLAY: 3775 level = HAS_WT(i915) ? I915_CACHE_WT : I915_CACHE_NONE; 3776 break; 3777 default: 3778 return -EINVAL; 3779 } 3780 3781 obj = i915_gem_object_lookup(file, args->handle); 3782 if (!obj) 3783 return -ENOENT; 3784 3785 if (obj->cache_level == level) 3786 goto out; 3787 3788 ret = i915_gem_object_wait(obj, 3789 I915_WAIT_INTERRUPTIBLE, 3790 MAX_SCHEDULE_TIMEOUT, 3791 to_rps_client(file)); 3792 if (ret) 3793 goto out; 3794 3795 ret = i915_mutex_lock_interruptible(dev); 3796 if (ret) 3797 goto out; 3798 3799 ret = i915_gem_object_set_cache_level(obj, level); 3800 mutex_unlock(&dev->struct_mutex); 3801 3802 out: 3803 i915_gem_object_put(obj); 3804 return ret; 3805 } 3806 3807 /* 3808 * Prepare buffer for display plane (scanout, cursors, etc). 3809 * Can be called from an uninterruptible phase (modesetting) and allows 3810 * any flushes to be pipelined (for pageflips). 3811 */ 3812 struct i915_vma * 3813 i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj, 3814 u32 alignment, 3815 const struct i915_ggtt_view *view) 3816 { 3817 struct i915_vma *vma; 3818 int ret; 3819 3820 lockdep_assert_held(&obj->base.dev->struct_mutex); 3821 3822 /* Mark the pin_display early so that we account for the 3823 * display coherency whilst setting up the cache domains. 3824 */ 3825 obj->pin_display++; 3826 3827 /* The display engine is not coherent with the LLC cache on gen6. As 3828 * a result, we make sure that the pinning that is about to occur is 3829 * done with uncached PTEs. This is lowest common denominator for all 3830 * chipsets. 3831 * 3832 * However for gen6+, we could do better by using the GFDT bit instead 3833 * of uncaching, which would allow us to flush all the LLC-cached data 3834 * with that bit in the PTE to main memory with just one PIPE_CONTROL. 3835 */ 3836 ret = i915_gem_object_set_cache_level(obj, 3837 HAS_WT(to_i915(obj->base.dev)) ? 3838 I915_CACHE_WT : I915_CACHE_NONE); 3839 if (ret) { 3840 vma = ERR_PTR(ret); 3841 goto err_unpin_display; 3842 } 3843 3844 /* As the user may map the buffer once pinned in the display plane 3845 * (e.g. libkms for the bootup splash), we have to ensure that we 3846 * always use map_and_fenceable for all scanout buffers. However, 3847 * it may simply be too big to fit into mappable, in which case 3848 * put it anyway and hope that userspace can cope (but always first 3849 * try to preserve the existing ABI). 3850 */ 3851 vma = ERR_PTR(-ENOSPC); 3852 if (!view || view->type == I915_GGTT_VIEW_NORMAL) 3853 vma = i915_gem_object_ggtt_pin(obj, view, 0, alignment, 3854 PIN_MAPPABLE | PIN_NONBLOCK); 3855 if (IS_ERR(vma)) { 3856 struct drm_i915_private *i915 = to_i915(obj->base.dev); 3857 unsigned int flags; 3858 3859 /* Valleyview is definitely limited to scanning out the first 3860 * 512MiB. Lets presume this behaviour was inherited from the 3861 * g4x display engine and that all earlier gen are similarly 3862 * limited. Testing suggests that it is a little more 3863 * complicated than this. For example, Cherryview appears quite 3864 * happy to scanout from anywhere within its global aperture. 3865 */ 3866 flags = 0; 3867 if (HAS_GMCH_DISPLAY(i915)) 3868 flags = PIN_MAPPABLE; 3869 vma = i915_gem_object_ggtt_pin(obj, view, 0, alignment, flags); 3870 } 3871 if (IS_ERR(vma)) 3872 goto err_unpin_display; 3873 3874 vma->display_alignment = max_t(u64, vma->display_alignment, alignment); 3875 3876 /* Treat this as an end-of-frame, like intel_user_framebuffer_dirty() */ 3877 __i915_gem_object_flush_for_display(obj); 3878 intel_fb_obj_flush(obj, ORIGIN_DIRTYFB); 3879 3880 /* It should now be out of any other write domains, and we can update 3881 * the domain values for our changes. 3882 */ 3883 obj->base.read_domains |= I915_GEM_DOMAIN_GTT; 3884 3885 return vma; 3886 3887 err_unpin_display: 3888 obj->pin_display--; 3889 return vma; 3890 } 3891 3892 void 3893 i915_gem_object_unpin_from_display_plane(struct i915_vma *vma) 3894 { 3895 lockdep_assert_held(&vma->vm->i915->drm.struct_mutex); 3896 3897 if (WARN_ON(vma->obj->pin_display == 0)) 3898 return; 3899 3900 if (--vma->obj->pin_display == 0) 3901 vma->display_alignment = I915_GTT_MIN_ALIGNMENT; 3902 3903 /* Bump the LRU to try and avoid premature eviction whilst flipping */ 3904 i915_gem_object_bump_inactive_ggtt(vma->obj); 3905 3906 i915_vma_unpin(vma); 3907 } 3908 3909 /** 3910 * Moves a single object to the CPU read, and possibly write domain. 3911 * @obj: object to act on 3912 * @write: requesting write or read-only access 3913 * 3914 * This function returns when the move is complete, including waiting on 3915 * flushes to occur. 3916 */ 3917 int 3918 i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write) 3919 { 3920 int ret; 3921 3922 lockdep_assert_held(&obj->base.dev->struct_mutex); 3923 3924 ret = i915_gem_object_wait(obj, 3925 I915_WAIT_INTERRUPTIBLE | 3926 I915_WAIT_LOCKED | 3927 (write ? I915_WAIT_ALL : 0), 3928 MAX_SCHEDULE_TIMEOUT, 3929 NULL); 3930 if (ret) 3931 return ret; 3932 3933 flush_write_domain(obj, ~I915_GEM_DOMAIN_CPU); 3934 3935 /* Flush the CPU cache if it's still invalid. */ 3936 if ((obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0) { 3937 i915_gem_clflush_object(obj, I915_CLFLUSH_SYNC); 3938 obj->base.read_domains |= I915_GEM_DOMAIN_CPU; 3939 } 3940 3941 /* It should now be out of any other write domains, and we can update 3942 * the domain values for our changes. 3943 */ 3944 GEM_BUG_ON(obj->base.write_domain & ~I915_GEM_DOMAIN_CPU); 3945 3946 /* If we're writing through the CPU, then the GPU read domains will 3947 * need to be invalidated at next use. 3948 */ 3949 if (write) 3950 __start_cpu_write(obj); 3951 3952 return 0; 3953 } 3954 3955 /* Throttle our rendering by waiting until the ring has completed our requests 3956 * emitted over 20 msec ago. 3957 * 3958 * Note that if we were to use the current jiffies each time around the loop, 3959 * we wouldn't escape the function with any frames outstanding if the time to 3960 * render a frame was over 20ms. 3961 * 3962 * This should get us reasonable parallelism between CPU and GPU but also 3963 * relatively low latency when blocking on a particular request to finish. 3964 */ 3965 static int 3966 i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file) 3967 { 3968 struct drm_i915_private *dev_priv = to_i915(dev); 3969 struct drm_i915_file_private *file_priv = file->driver_priv; 3970 unsigned long recent_enough = jiffies - DRM_I915_THROTTLE_JIFFIES; 3971 struct drm_i915_gem_request *request, *target = NULL; 3972 long ret; 3973 3974 /* ABI: return -EIO if already wedged */ 3975 if (i915_terminally_wedged(&dev_priv->gpu_error)) 3976 return -EIO; 3977 3978 spin_lock(&file_priv->mm.lock); 3979 list_for_each_entry(request, &file_priv->mm.request_list, client_link) { 3980 if (time_after_eq(request->emitted_jiffies, recent_enough)) 3981 break; 3982 3983 if (target) { 3984 list_del(&target->client_link); 3985 target->file_priv = NULL; 3986 } 3987 3988 target = request; 3989 } 3990 if (target) 3991 i915_gem_request_get(target); 3992 spin_unlock(&file_priv->mm.lock); 3993 3994 if (target == NULL) 3995 return 0; 3996 3997 ret = i915_wait_request(target, 3998 I915_WAIT_INTERRUPTIBLE, 3999 MAX_SCHEDULE_TIMEOUT); 4000 i915_gem_request_put(target); 4001 4002 return ret < 0 ? ret : 0; 4003 } 4004 4005 struct i915_vma * 4006 i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj, 4007 const struct i915_ggtt_view *view, 4008 u64 size, 4009 u64 alignment, 4010 u64 flags) 4011 { 4012 struct drm_i915_private *dev_priv = to_i915(obj->base.dev); 4013 struct i915_address_space *vm = &dev_priv->ggtt.base; 4014 struct i915_vma *vma; 4015 int ret; 4016 4017 lockdep_assert_held(&obj->base.dev->struct_mutex); 4018 4019 vma = i915_vma_instance(obj, vm, view); 4020 if (unlikely(IS_ERR(vma))) 4021 return vma; 4022 4023 if (i915_vma_misplaced(vma, size, alignment, flags)) { 4024 if (flags & PIN_NONBLOCK && 4025 (i915_vma_is_pinned(vma) || i915_vma_is_active(vma))) 4026 return ERR_PTR(-ENOSPC); 4027 4028 if (flags & PIN_MAPPABLE) { 4029 /* If the required space is larger than the available 4030 * aperture, we will not able to find a slot for the 4031 * object and unbinding the object now will be in 4032 * vain. Worse, doing so may cause us to ping-pong 4033 * the object in and out of the Global GTT and 4034 * waste a lot of cycles under the mutex. 4035 */ 4036 if (vma->fence_size > dev_priv->ggtt.mappable_end) 4037 return ERR_PTR(-E2BIG); 4038 4039 /* If NONBLOCK is set the caller is optimistically 4040 * trying to cache the full object within the mappable 4041 * aperture, and *must* have a fallback in place for 4042 * situations where we cannot bind the object. We 4043 * can be a little more lax here and use the fallback 4044 * more often to avoid costly migrations of ourselves 4045 * and other objects within the aperture. 4046 * 4047 * Half-the-aperture is used as a simple heuristic. 4048 * More interesting would to do search for a free 4049 * block prior to making the commitment to unbind. 4050 * That caters for the self-harm case, and with a 4051 * little more heuristics (e.g. NOFAULT, NOEVICT) 4052 * we could try to minimise harm to others. 4053 */ 4054 if (flags & PIN_NONBLOCK && 4055 vma->fence_size > dev_priv->ggtt.mappable_end / 2) 4056 return ERR_PTR(-ENOSPC); 4057 } 4058 4059 WARN(i915_vma_is_pinned(vma), 4060 "bo is already pinned in ggtt with incorrect alignment:" 4061 " offset=%08x, req.alignment=%llx," 4062 " req.map_and_fenceable=%d, vma->map_and_fenceable=%d\n", 4063 i915_ggtt_offset(vma), alignment, 4064 !!(flags & PIN_MAPPABLE), 4065 i915_vma_is_map_and_fenceable(vma)); 4066 ret = i915_vma_unbind(vma); 4067 if (ret) 4068 return ERR_PTR(ret); 4069 } 4070 4071 ret = i915_vma_pin(vma, size, alignment, flags | PIN_GLOBAL); 4072 if (ret) 4073 return ERR_PTR(ret); 4074 4075 return vma; 4076 } 4077 4078 static __always_inline unsigned int __busy_read_flag(unsigned int id) 4079 { 4080 /* Note that we could alias engines in the execbuf API, but 4081 * that would be very unwise as it prevents userspace from 4082 * fine control over engine selection. Ahem. 4083 * 4084 * This should be something like EXEC_MAX_ENGINE instead of 4085 * I915_NUM_ENGINES. 4086 */ 4087 BUILD_BUG_ON(I915_NUM_ENGINES > 16); 4088 return 0x10000 << id; 4089 } 4090 4091 static __always_inline unsigned int __busy_write_id(unsigned int id) 4092 { 4093 /* The uABI guarantees an active writer is also amongst the read 4094 * engines. This would be true if we accessed the activity tracking 4095 * under the lock, but as we perform the lookup of the object and 4096 * its activity locklessly we can not guarantee that the last_write 4097 * being active implies that we have set the same engine flag from 4098 * last_read - hence we always set both read and write busy for 4099 * last_write. 4100 */ 4101 return id | __busy_read_flag(id); 4102 } 4103 4104 static __always_inline unsigned int 4105 __busy_set_if_active(const struct dma_fence *fence, 4106 unsigned int (*flag)(unsigned int id)) 4107 { 4108 struct drm_i915_gem_request *rq; 4109 4110 /* We have to check the current hw status of the fence as the uABI 4111 * guarantees forward progress. We could rely on the idle worker 4112 * to eventually flush us, but to minimise latency just ask the 4113 * hardware. 4114 * 4115 * Note we only report on the status of native fences. 4116 */ 4117 if (!dma_fence_is_i915(fence)) 4118 return 0; 4119 4120 /* opencode to_request() in order to avoid const warnings */ 4121 rq = container_of(fence, struct drm_i915_gem_request, fence); 4122 if (i915_gem_request_completed(rq)) 4123 return 0; 4124 4125 return flag(rq->engine->uabi_id); 4126 } 4127 4128 static __always_inline unsigned int 4129 busy_check_reader(const struct dma_fence *fence) 4130 { 4131 return __busy_set_if_active(fence, __busy_read_flag); 4132 } 4133 4134 static __always_inline unsigned int 4135 busy_check_writer(const struct dma_fence *fence) 4136 { 4137 if (!fence) 4138 return 0; 4139 4140 return __busy_set_if_active(fence, __busy_write_id); 4141 } 4142 4143 int 4144 i915_gem_busy_ioctl(struct drm_device *dev, void *data, 4145 struct drm_file *file) 4146 { 4147 struct drm_i915_gem_busy *args = data; 4148 struct drm_i915_gem_object *obj; 4149 struct reservation_object_list *list; 4150 unsigned int seq; 4151 int err; 4152 4153 err = -ENOENT; 4154 rcu_read_lock(); 4155 obj = i915_gem_object_lookup_rcu(file, args->handle); 4156 if (!obj) 4157 goto out; 4158 4159 /* A discrepancy here is that we do not report the status of 4160 * non-i915 fences, i.e. even though we may report the object as idle, 4161 * a call to set-domain may still stall waiting for foreign rendering. 4162 * This also means that wait-ioctl may report an object as busy, 4163 * where busy-ioctl considers it idle. 4164 * 4165 * We trade the ability to warn of foreign fences to report on which 4166 * i915 engines are active for the object. 4167 * 4168 * Alternatively, we can trade that extra information on read/write 4169 * activity with 4170 * args->busy = 4171 * !reservation_object_test_signaled_rcu(obj->resv, true); 4172 * to report the overall busyness. This is what the wait-ioctl does. 4173 * 4174 */ 4175 retry: 4176 seq = raw_read_seqcount(&obj->resv->seq); 4177 4178 /* Translate the exclusive fence to the READ *and* WRITE engine */ 4179 args->busy = busy_check_writer(rcu_dereference(obj->resv->fence_excl)); 4180 4181 /* Translate shared fences to READ set of engines */ 4182 list = rcu_dereference(obj->resv->fence); 4183 if (list) { 4184 unsigned int shared_count = list->shared_count, i; 4185 4186 for (i = 0; i < shared_count; ++i) { 4187 struct dma_fence *fence = 4188 rcu_dereference(list->shared[i]); 4189 4190 args->busy |= busy_check_reader(fence); 4191 } 4192 } 4193 4194 if (args->busy && read_seqcount_retry(&obj->resv->seq, seq)) 4195 goto retry; 4196 4197 err = 0; 4198 out: 4199 rcu_read_unlock(); 4200 return err; 4201 } 4202 4203 int 4204 i915_gem_throttle_ioctl(struct drm_device *dev, void *data, 4205 struct drm_file *file_priv) 4206 { 4207 return i915_gem_ring_throttle(dev, file_priv); 4208 } 4209 4210 int 4211 i915_gem_madvise_ioctl(struct drm_device *dev, void *data, 4212 struct drm_file *file_priv) 4213 { 4214 struct drm_i915_private *dev_priv = to_i915(dev); 4215 struct drm_i915_gem_madvise *args = data; 4216 struct drm_i915_gem_object *obj; 4217 int err; 4218 4219 switch (args->madv) { 4220 case I915_MADV_DONTNEED: 4221 case I915_MADV_WILLNEED: 4222 break; 4223 default: 4224 return -EINVAL; 4225 } 4226 4227 obj = i915_gem_object_lookup(file_priv, args->handle); 4228 if (!obj) 4229 return -ENOENT; 4230 4231 err = mutex_lock_interruptible(&obj->mm.lock); 4232 if (err) 4233 goto out; 4234 4235 if (obj->mm.pages && 4236 i915_gem_object_is_tiled(obj) && 4237 dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES) { 4238 if (obj->mm.madv == I915_MADV_WILLNEED) { 4239 GEM_BUG_ON(!obj->mm.quirked); 4240 __i915_gem_object_unpin_pages(obj); 4241 obj->mm.quirked = false; 4242 } 4243 if (args->madv == I915_MADV_WILLNEED) { 4244 GEM_BUG_ON(obj->mm.quirked); 4245 __i915_gem_object_pin_pages(obj); 4246 obj->mm.quirked = true; 4247 } 4248 } 4249 4250 if (obj->mm.madv != __I915_MADV_PURGED) 4251 obj->mm.madv = args->madv; 4252 4253 /* if the object is no longer attached, discard its backing storage */ 4254 if (obj->mm.madv == I915_MADV_DONTNEED && !obj->mm.pages) 4255 i915_gem_object_truncate(obj); 4256 4257 args->retained = obj->mm.madv != __I915_MADV_PURGED; 4258 mutex_unlock(&obj->mm.lock); 4259 4260 out: 4261 i915_gem_object_put(obj); 4262 return err; 4263 } 4264 4265 static void 4266 frontbuffer_retire(struct i915_gem_active *active, 4267 struct drm_i915_gem_request *request) 4268 { 4269 struct drm_i915_gem_object *obj = 4270 container_of(active, typeof(*obj), frontbuffer_write); 4271 4272 intel_fb_obj_flush(obj, ORIGIN_CS); 4273 } 4274 4275 void i915_gem_object_init(struct drm_i915_gem_object *obj, 4276 const struct drm_i915_gem_object_ops *ops) 4277 { 4278 mutex_init(&obj->mm.lock); 4279 4280 INIT_LIST_HEAD(&obj->global_link); 4281 INIT_LIST_HEAD(&obj->userfault_link); 4282 INIT_LIST_HEAD(&obj->vma_list); 4283 INIT_LIST_HEAD(&obj->lut_list); 4284 INIT_LIST_HEAD(&obj->batch_pool_link); 4285 4286 obj->ops = ops; 4287 4288 reservation_object_init(&obj->__builtin_resv); 4289 obj->resv = &obj->__builtin_resv; 4290 4291 obj->frontbuffer_ggtt_origin = ORIGIN_GTT; 4292 init_request_active(&obj->frontbuffer_write, frontbuffer_retire); 4293 4294 obj->mm.madv = I915_MADV_WILLNEED; 4295 INIT_RADIX_TREE(&obj->mm.get_page.radix, GFP_KERNEL | __GFP_NOWARN); 4296 mutex_init(&obj->mm.get_page.lock); 4297 4298 i915_gem_info_add_obj(to_i915(obj->base.dev), obj->base.size); 4299 } 4300 4301 static const struct drm_i915_gem_object_ops i915_gem_object_ops = { 4302 .flags = I915_GEM_OBJECT_HAS_STRUCT_PAGE | 4303 I915_GEM_OBJECT_IS_SHRINKABLE, 4304 4305 .get_pages = i915_gem_object_get_pages_gtt, 4306 .put_pages = i915_gem_object_put_pages_gtt, 4307 4308 .pwrite = i915_gem_object_pwrite_gtt, 4309 }; 4310 4311 struct drm_i915_gem_object * 4312 i915_gem_object_create(struct drm_i915_private *dev_priv, u64 size) 4313 { 4314 struct drm_i915_gem_object *obj; 4315 struct address_space *mapping; 4316 unsigned int cache_level; 4317 gfp_t mask; 4318 int ret; 4319 4320 /* There is a prevalence of the assumption that we fit the object's 4321 * page count inside a 32bit _signed_ variable. Let's document this and 4322 * catch if we ever need to fix it. In the meantime, if you do spot 4323 * such a local variable, please consider fixing! 4324 */ 4325 if (size >> PAGE_SHIFT > INT_MAX) 4326 return ERR_PTR(-E2BIG); 4327 4328 if (overflows_type(size, obj->base.size)) 4329 return ERR_PTR(-E2BIG); 4330 4331 obj = i915_gem_object_alloc(dev_priv); 4332 if (obj == NULL) 4333 return ERR_PTR(-ENOMEM); 4334 4335 ret = drm_gem_object_init(&dev_priv->drm, &obj->base, size); 4336 if (ret) 4337 goto fail; 4338 4339 mask = GFP_HIGHUSER | __GFP_RECLAIMABLE; 4340 if (IS_I965GM(dev_priv) || IS_I965G(dev_priv)) { 4341 /* 965gm cannot relocate objects above 4GiB. */ 4342 mask &= ~__GFP_HIGHMEM; 4343 mask |= __GFP_DMA32; 4344 } 4345 4346 mapping = obj->base.filp->f_mapping; 4347 mapping_set_gfp_mask(mapping, mask); 4348 GEM_BUG_ON(!(mapping_gfp_mask(mapping) & __GFP_RECLAIM)); 4349 4350 i915_gem_object_init(obj, &i915_gem_object_ops); 4351 4352 obj->base.write_domain = I915_GEM_DOMAIN_CPU; 4353 obj->base.read_domains = I915_GEM_DOMAIN_CPU; 4354 4355 if (HAS_LLC(dev_priv)) 4356 /* On some devices, we can have the GPU use the LLC (the CPU 4357 * cache) for about a 10% performance improvement 4358 * compared to uncached. Graphics requests other than 4359 * display scanout are coherent with the CPU in 4360 * accessing this cache. This means in this mode we 4361 * don't need to clflush on the CPU side, and on the 4362 * GPU side we only need to flush internal caches to 4363 * get data visible to the CPU. 4364 * 4365 * However, we maintain the display planes as UC, and so 4366 * need to rebind when first used as such. 4367 */ 4368 cache_level = I915_CACHE_LLC; 4369 else 4370 cache_level = I915_CACHE_NONE; 4371 4372 i915_gem_object_set_cache_coherency(obj, cache_level); 4373 4374 trace_i915_gem_object_create(obj); 4375 4376 return obj; 4377 4378 fail: 4379 i915_gem_object_free(obj); 4380 return ERR_PTR(ret); 4381 } 4382 4383 static bool discard_backing_storage(struct drm_i915_gem_object *obj) 4384 { 4385 /* If we are the last user of the backing storage (be it shmemfs 4386 * pages or stolen etc), we know that the pages are going to be 4387 * immediately released. In this case, we can then skip copying 4388 * back the contents from the GPU. 4389 */ 4390 4391 if (obj->mm.madv != I915_MADV_WILLNEED) 4392 return false; 4393 4394 if (obj->base.filp == NULL) 4395 return true; 4396 4397 /* At first glance, this looks racy, but then again so would be 4398 * userspace racing mmap against close. However, the first external 4399 * reference to the filp can only be obtained through the 4400 * i915_gem_mmap_ioctl() which safeguards us against the user 4401 * acquiring such a reference whilst we are in the middle of 4402 * freeing the object. 4403 */ 4404 return atomic_long_read(&obj->base.filp->f_count) == 1; 4405 } 4406 4407 static void __i915_gem_free_objects(struct drm_i915_private *i915, 4408 struct llist_node *freed) 4409 { 4410 struct drm_i915_gem_object *obj, *on; 4411 4412 mutex_lock(&i915->drm.struct_mutex); 4413 intel_runtime_pm_get(i915); 4414 llist_for_each_entry(obj, freed, freed) { 4415 struct i915_vma *vma, *vn; 4416 4417 trace_i915_gem_object_destroy(obj); 4418 4419 GEM_BUG_ON(i915_gem_object_is_active(obj)); 4420 list_for_each_entry_safe(vma, vn, 4421 &obj->vma_list, obj_link) { 4422 GEM_BUG_ON(i915_vma_is_active(vma)); 4423 vma->flags &= ~I915_VMA_PIN_MASK; 4424 i915_vma_close(vma); 4425 } 4426 GEM_BUG_ON(!list_empty(&obj->vma_list)); 4427 GEM_BUG_ON(!RB_EMPTY_ROOT(&obj->vma_tree)); 4428 4429 list_del(&obj->global_link); 4430 } 4431 intel_runtime_pm_put(i915); 4432 mutex_unlock(&i915->drm.struct_mutex); 4433 4434 cond_resched(); 4435 4436 llist_for_each_entry_safe(obj, on, freed, freed) { 4437 GEM_BUG_ON(obj->bind_count); 4438 GEM_BUG_ON(atomic_read(&obj->frontbuffer_bits)); 4439 4440 if (obj->ops->release) 4441 obj->ops->release(obj); 4442 4443 if (WARN_ON(i915_gem_object_has_pinned_pages(obj))) 4444 atomic_set(&obj->mm.pages_pin_count, 0); 4445 __i915_gem_object_put_pages(obj, I915_MM_NORMAL); 4446 GEM_BUG_ON(obj->mm.pages); 4447 4448 if (obj->base.import_attach) 4449 drm_prime_gem_destroy(&obj->base, NULL); 4450 4451 reservation_object_fini(&obj->__builtin_resv); 4452 drm_gem_object_release(&obj->base); 4453 i915_gem_info_remove_obj(i915, obj->base.size); 4454 4455 kfree(obj->bit_17); 4456 i915_gem_object_free(obj); 4457 } 4458 } 4459 4460 static void i915_gem_flush_free_objects(struct drm_i915_private *i915) 4461 { 4462 struct llist_node *freed; 4463 4464 freed = llist_del_all(&i915->mm.free_list); 4465 if (unlikely(freed)) 4466 __i915_gem_free_objects(i915, freed); 4467 } 4468 4469 static void __i915_gem_free_work(struct work_struct *work) 4470 { 4471 struct drm_i915_private *i915 = 4472 container_of(work, struct drm_i915_private, mm.free_work); 4473 struct llist_node *freed; 4474 4475 /* All file-owned VMA should have been released by this point through 4476 * i915_gem_close_object(), or earlier by i915_gem_context_close(). 4477 * However, the object may also be bound into the global GTT (e.g. 4478 * older GPUs without per-process support, or for direct access through 4479 * the GTT either for the user or for scanout). Those VMA still need to 4480 * unbound now. 4481 */ 4482 4483 while ((freed = llist_del_all(&i915->mm.free_list))) { 4484 __i915_gem_free_objects(i915, freed); 4485 if (need_resched()) 4486 break; 4487 } 4488 } 4489 4490 static void __i915_gem_free_object_rcu(struct rcu_head *head) 4491 { 4492 struct drm_i915_gem_object *obj = 4493 container_of(head, typeof(*obj), rcu); 4494 struct drm_i915_private *i915 = to_i915(obj->base.dev); 4495 4496 /* We can't simply use call_rcu() from i915_gem_free_object() 4497 * as we need to block whilst unbinding, and the call_rcu 4498 * task may be called from softirq context. So we take a 4499 * detour through a worker. 4500 */ 4501 if (llist_add(&obj->freed, &i915->mm.free_list)) 4502 schedule_work(&i915->mm.free_work); 4503 } 4504 4505 void i915_gem_free_object(struct drm_gem_object *gem_obj) 4506 { 4507 struct drm_i915_gem_object *obj = to_intel_bo(gem_obj); 4508 4509 if (obj->mm.quirked) 4510 __i915_gem_object_unpin_pages(obj); 4511 4512 if (discard_backing_storage(obj)) 4513 obj->mm.madv = I915_MADV_DONTNEED; 4514 4515 /* Before we free the object, make sure any pure RCU-only 4516 * read-side critical sections are complete, e.g. 4517 * i915_gem_busy_ioctl(). For the corresponding synchronized 4518 * lookup see i915_gem_object_lookup_rcu(). 4519 */ 4520 call_rcu(&obj->rcu, __i915_gem_free_object_rcu); 4521 } 4522 4523 void __i915_gem_object_release_unless_active(struct drm_i915_gem_object *obj) 4524 { 4525 lockdep_assert_held(&obj->base.dev->struct_mutex); 4526 4527 if (!i915_gem_object_has_active_reference(obj) && 4528 i915_gem_object_is_active(obj)) 4529 i915_gem_object_set_active_reference(obj); 4530 else 4531 i915_gem_object_put(obj); 4532 } 4533 4534 static void assert_kernel_context_is_current(struct drm_i915_private *dev_priv) 4535 { 4536 struct intel_engine_cs *engine; 4537 enum intel_engine_id id; 4538 4539 for_each_engine(engine, dev_priv, id) 4540 GEM_BUG_ON(engine->last_retired_context && 4541 !i915_gem_context_is_kernel(engine->last_retired_context)); 4542 } 4543 4544 void i915_gem_sanitize(struct drm_i915_private *i915) 4545 { 4546 /* 4547 * If we inherit context state from the BIOS or earlier occupants 4548 * of the GPU, the GPU may be in an inconsistent state when we 4549 * try to take over. The only way to remove the earlier state 4550 * is by resetting. However, resetting on earlier gen is tricky as 4551 * it may impact the display and we are uncertain about the stability 4552 * of the reset, so this could be applied to even earlier gen. 4553 */ 4554 if (INTEL_GEN(i915) >= 5) { 4555 int reset = intel_gpu_reset(i915, ALL_ENGINES); 4556 WARN_ON(reset && reset != -ENODEV); 4557 } 4558 } 4559 4560 int i915_gem_suspend(struct drm_i915_private *dev_priv) 4561 { 4562 struct drm_device *dev = &dev_priv->drm; 4563 int ret; 4564 4565 intel_runtime_pm_get(dev_priv); 4566 intel_suspend_gt_powersave(dev_priv); 4567 4568 mutex_lock(&dev->struct_mutex); 4569 4570 /* We have to flush all the executing contexts to main memory so 4571 * that they can saved in the hibernation image. To ensure the last 4572 * context image is coherent, we have to switch away from it. That 4573 * leaves the dev_priv->kernel_context still active when 4574 * we actually suspend, and its image in memory may not match the GPU 4575 * state. Fortunately, the kernel_context is disposable and we do 4576 * not rely on its state. 4577 */ 4578 ret = i915_gem_switch_to_kernel_context(dev_priv); 4579 if (ret) 4580 goto err_unlock; 4581 4582 ret = i915_gem_wait_for_idle(dev_priv, 4583 I915_WAIT_INTERRUPTIBLE | 4584 I915_WAIT_LOCKED); 4585 if (ret) 4586 goto err_unlock; 4587 4588 assert_kernel_context_is_current(dev_priv); 4589 i915_gem_contexts_lost(dev_priv); 4590 mutex_unlock(&dev->struct_mutex); 4591 4592 intel_guc_suspend(dev_priv); 4593 4594 cancel_delayed_work_sync(&dev_priv->gpu_error.hangcheck_work); 4595 cancel_delayed_work_sync(&dev_priv->gt.retire_work); 4596 4597 /* As the idle_work is rearming if it detects a race, play safe and 4598 * repeat the flush until it is definitely idle. 4599 */ 4600 while (flush_delayed_work(&dev_priv->gt.idle_work)) 4601 ; 4602 4603 /* Assert that we sucessfully flushed all the work and 4604 * reset the GPU back to its idle, low power state. 4605 */ 4606 WARN_ON(dev_priv->gt.awake); 4607 WARN_ON(!intel_engines_are_idle(dev_priv)); 4608 4609 /* 4610 * Neither the BIOS, ourselves or any other kernel 4611 * expects the system to be in execlists mode on startup, 4612 * so we need to reset the GPU back to legacy mode. And the only 4613 * known way to disable logical contexts is through a GPU reset. 4614 * 4615 * So in order to leave the system in a known default configuration, 4616 * always reset the GPU upon unload and suspend. Afterwards we then 4617 * clean up the GEM state tracking, flushing off the requests and 4618 * leaving the system in a known idle state. 4619 * 4620 * Note that is of the upmost importance that the GPU is idle and 4621 * all stray writes are flushed *before* we dismantle the backing 4622 * storage for the pinned objects. 4623 * 4624 * However, since we are uncertain that resetting the GPU on older 4625 * machines is a good idea, we don't - just in case it leaves the 4626 * machine in an unusable condition. 4627 */ 4628 i915_gem_sanitize(dev_priv); 4629 goto out_rpm_put; 4630 4631 err_unlock: 4632 mutex_unlock(&dev->struct_mutex); 4633 out_rpm_put: 4634 intel_runtime_pm_put(dev_priv); 4635 return ret; 4636 } 4637 4638 void i915_gem_resume(struct drm_i915_private *dev_priv) 4639 { 4640 struct drm_device *dev = &dev_priv->drm; 4641 4642 WARN_ON(dev_priv->gt.awake); 4643 4644 mutex_lock(&dev->struct_mutex); 4645 i915_gem_restore_gtt_mappings(dev_priv); 4646 4647 /* As we didn't flush the kernel context before suspend, we cannot 4648 * guarantee that the context image is complete. So let's just reset 4649 * it and start again. 4650 */ 4651 dev_priv->gt.resume(dev_priv); 4652 4653 mutex_unlock(&dev->struct_mutex); 4654 } 4655 4656 void i915_gem_init_swizzling(struct drm_i915_private *dev_priv) 4657 { 4658 if (INTEL_GEN(dev_priv) < 5 || 4659 dev_priv->mm.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_NONE) 4660 return; 4661 4662 I915_WRITE(DISP_ARB_CTL, I915_READ(DISP_ARB_CTL) | 4663 DISP_TILE_SURFACE_SWIZZLING); 4664 4665 if (IS_GEN5(dev_priv)) 4666 return; 4667 4668 I915_WRITE(TILECTL, I915_READ(TILECTL) | TILECTL_SWZCTL); 4669 if (IS_GEN6(dev_priv)) 4670 I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_SNB)); 4671 else if (IS_GEN7(dev_priv)) 4672 I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_IVB)); 4673 else if (IS_GEN8(dev_priv)) 4674 I915_WRITE(GAMTARBMODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_BDW)); 4675 else 4676 BUG(); 4677 } 4678 4679 static void init_unused_ring(struct drm_i915_private *dev_priv, u32 base) 4680 { 4681 I915_WRITE(RING_CTL(base), 0); 4682 I915_WRITE(RING_HEAD(base), 0); 4683 I915_WRITE(RING_TAIL(base), 0); 4684 I915_WRITE(RING_START(base), 0); 4685 } 4686 4687 static void init_unused_rings(struct drm_i915_private *dev_priv) 4688 { 4689 if (IS_I830(dev_priv)) { 4690 init_unused_ring(dev_priv, PRB1_BASE); 4691 init_unused_ring(dev_priv, SRB0_BASE); 4692 init_unused_ring(dev_priv, SRB1_BASE); 4693 init_unused_ring(dev_priv, SRB2_BASE); 4694 init_unused_ring(dev_priv, SRB3_BASE); 4695 } else if (IS_GEN2(dev_priv)) { 4696 init_unused_ring(dev_priv, SRB0_BASE); 4697 init_unused_ring(dev_priv, SRB1_BASE); 4698 } else if (IS_GEN3(dev_priv)) { 4699 init_unused_ring(dev_priv, PRB1_BASE); 4700 init_unused_ring(dev_priv, PRB2_BASE); 4701 } 4702 } 4703 4704 static int __i915_gem_restart_engines(void *data) 4705 { 4706 struct drm_i915_private *i915 = data; 4707 struct intel_engine_cs *engine; 4708 enum intel_engine_id id; 4709 int err; 4710 4711 for_each_engine(engine, i915, id) { 4712 err = engine->init_hw(engine); 4713 if (err) 4714 return err; 4715 } 4716 4717 return 0; 4718 } 4719 4720 int i915_gem_init_hw(struct drm_i915_private *dev_priv) 4721 { 4722 int ret; 4723 4724 dev_priv->gt.last_init_time = ktime_get(); 4725 4726 /* Double layer security blanket, see i915_gem_init() */ 4727 intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); 4728 4729 if (HAS_EDRAM(dev_priv) && INTEL_GEN(dev_priv) < 9) 4730 I915_WRITE(HSW_IDICR, I915_READ(HSW_IDICR) | IDIHASHMSK(0xf)); 4731 4732 if (IS_HASWELL(dev_priv)) 4733 I915_WRITE(MI_PREDICATE_RESULT_2, IS_HSW_GT3(dev_priv) ? 4734 LOWER_SLICE_ENABLED : LOWER_SLICE_DISABLED); 4735 4736 if (HAS_PCH_NOP(dev_priv)) { 4737 if (IS_IVYBRIDGE(dev_priv)) { 4738 u32 temp = I915_READ(GEN7_MSG_CTL); 4739 temp &= ~(WAIT_FOR_PCH_FLR_ACK | WAIT_FOR_PCH_RESET_ACK); 4740 I915_WRITE(GEN7_MSG_CTL, temp); 4741 } else if (INTEL_GEN(dev_priv) >= 7) { 4742 u32 temp = I915_READ(HSW_NDE_RSTWRN_OPT); 4743 temp &= ~RESET_PCH_HANDSHAKE_ENABLE; 4744 I915_WRITE(HSW_NDE_RSTWRN_OPT, temp); 4745 } 4746 } 4747 4748 i915_gem_init_swizzling(dev_priv); 4749 4750 /* 4751 * At least 830 can leave some of the unused rings 4752 * "active" (ie. head != tail) after resume which 4753 * will prevent c3 entry. Makes sure all unused rings 4754 * are totally idle. 4755 */ 4756 init_unused_rings(dev_priv); 4757 4758 BUG_ON(!dev_priv->kernel_context); 4759 4760 ret = i915_ppgtt_init_hw(dev_priv); 4761 if (ret) { 4762 DRM_ERROR("PPGTT enable HW failed %d\n", ret); 4763 goto out; 4764 } 4765 4766 /* Need to do basic initialisation of all rings first: */ 4767 ret = __i915_gem_restart_engines(dev_priv); 4768 if (ret) 4769 goto out; 4770 4771 intel_mocs_init_l3cc_table(dev_priv); 4772 4773 /* We can't enable contexts until all firmware is loaded */ 4774 ret = intel_uc_init_hw(dev_priv); 4775 if (ret) 4776 goto out; 4777 4778 out: 4779 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); 4780 return ret; 4781 } 4782 4783 bool intel_sanitize_semaphores(struct drm_i915_private *dev_priv, int value) 4784 { 4785 if (INTEL_INFO(dev_priv)->gen < 6) 4786 return false; 4787 4788 /* TODO: make semaphores and Execlists play nicely together */ 4789 if (i915.enable_execlists) 4790 return false; 4791 4792 if (value >= 0) 4793 return value; 4794 4795 /* Enable semaphores on SNB when IO remapping is off */ 4796 if (IS_GEN6(dev_priv) && intel_vtd_active()) 4797 return false; 4798 4799 return true; 4800 } 4801 4802 int i915_gem_init(struct drm_i915_private *dev_priv) 4803 { 4804 int ret; 4805 4806 mutex_lock(&dev_priv->drm.struct_mutex); 4807 4808 dev_priv->mm.unordered_timeline = dma_fence_context_alloc(1); 4809 4810 if (!i915.enable_execlists) { 4811 dev_priv->gt.resume = intel_legacy_submission_resume; 4812 dev_priv->gt.cleanup_engine = intel_engine_cleanup; 4813 } else { 4814 dev_priv->gt.resume = intel_lr_context_resume; 4815 dev_priv->gt.cleanup_engine = intel_logical_ring_cleanup; 4816 } 4817 4818 /* This is just a security blanket to placate dragons. 4819 * On some systems, we very sporadically observe that the first TLBs 4820 * used by the CS may be stale, despite us poking the TLB reset. If 4821 * we hold the forcewake during initialisation these problems 4822 * just magically go away. 4823 */ 4824 intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); 4825 4826 ret = i915_gem_init_userptr(dev_priv); 4827 if (ret) 4828 goto out_unlock; 4829 4830 ret = i915_gem_init_ggtt(dev_priv); 4831 if (ret) 4832 goto out_unlock; 4833 4834 ret = i915_gem_contexts_init(dev_priv); 4835 if (ret) 4836 goto out_unlock; 4837 4838 ret = intel_engines_init(dev_priv); 4839 if (ret) 4840 goto out_unlock; 4841 4842 ret = i915_gem_init_hw(dev_priv); 4843 if (ret == -EIO) { 4844 /* Allow engine initialisation to fail by marking the GPU as 4845 * wedged. But we only want to do this where the GPU is angry, 4846 * for all other failure, such as an allocation failure, bail. 4847 */ 4848 DRM_ERROR("Failed to initialize GPU, declaring it wedged\n"); 4849 i915_gem_set_wedged(dev_priv); 4850 ret = 0; 4851 } 4852 4853 out_unlock: 4854 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); 4855 mutex_unlock(&dev_priv->drm.struct_mutex); 4856 4857 return ret; 4858 } 4859 4860 void i915_gem_init_mmio(struct drm_i915_private *i915) 4861 { 4862 i915_gem_sanitize(i915); 4863 } 4864 4865 void 4866 i915_gem_cleanup_engines(struct drm_i915_private *dev_priv) 4867 { 4868 struct intel_engine_cs *engine; 4869 enum intel_engine_id id; 4870 4871 for_each_engine(engine, dev_priv, id) 4872 dev_priv->gt.cleanup_engine(engine); 4873 } 4874 4875 void 4876 i915_gem_load_init_fences(struct drm_i915_private *dev_priv) 4877 { 4878 int i; 4879 4880 if (INTEL_INFO(dev_priv)->gen >= 7 && !IS_VALLEYVIEW(dev_priv) && 4881 !IS_CHERRYVIEW(dev_priv)) 4882 dev_priv->num_fence_regs = 32; 4883 else if (INTEL_INFO(dev_priv)->gen >= 4 || 4884 IS_I945G(dev_priv) || IS_I945GM(dev_priv) || 4885 IS_G33(dev_priv) || IS_PINEVIEW(dev_priv)) 4886 dev_priv->num_fence_regs = 16; 4887 else 4888 dev_priv->num_fence_regs = 8; 4889 4890 if (intel_vgpu_active(dev_priv)) 4891 dev_priv->num_fence_regs = 4892 I915_READ(vgtif_reg(avail_rs.fence_num)); 4893 4894 /* Initialize fence registers to zero */ 4895 for (i = 0; i < dev_priv->num_fence_regs; i++) { 4896 struct drm_i915_fence_reg *fence = &dev_priv->fence_regs[i]; 4897 4898 fence->i915 = dev_priv; 4899 fence->id = i; 4900 list_add_tail(&fence->link, &dev_priv->mm.fence_list); 4901 } 4902 i915_gem_restore_fences(dev_priv); 4903 4904 i915_gem_detect_bit_6_swizzle(dev_priv); 4905 } 4906 4907 int 4908 i915_gem_load_init(struct drm_i915_private *dev_priv) 4909 { 4910 int err = -ENOMEM; 4911 4912 dev_priv->objects = KMEM_CACHE(drm_i915_gem_object, SLAB_HWCACHE_ALIGN); 4913 if (!dev_priv->objects) 4914 goto err_out; 4915 4916 dev_priv->vmas = KMEM_CACHE(i915_vma, SLAB_HWCACHE_ALIGN); 4917 if (!dev_priv->vmas) 4918 goto err_objects; 4919 4920 dev_priv->luts = KMEM_CACHE(i915_lut_handle, 0); 4921 if (!dev_priv->luts) 4922 goto err_vmas; 4923 4924 dev_priv->requests = KMEM_CACHE(drm_i915_gem_request, 4925 SLAB_HWCACHE_ALIGN | 4926 SLAB_RECLAIM_ACCOUNT | 4927 SLAB_TYPESAFE_BY_RCU); 4928 if (!dev_priv->requests) 4929 goto err_luts; 4930 4931 dev_priv->dependencies = KMEM_CACHE(i915_dependency, 4932 SLAB_HWCACHE_ALIGN | 4933 SLAB_RECLAIM_ACCOUNT); 4934 if (!dev_priv->dependencies) 4935 goto err_requests; 4936 4937 dev_priv->priorities = KMEM_CACHE(i915_priolist, SLAB_HWCACHE_ALIGN); 4938 if (!dev_priv->priorities) 4939 goto err_dependencies; 4940 4941 mutex_lock(&dev_priv->drm.struct_mutex); 4942 INIT_LIST_HEAD(&dev_priv->gt.timelines); 4943 err = i915_gem_timeline_init__global(dev_priv); 4944 mutex_unlock(&dev_priv->drm.struct_mutex); 4945 if (err) 4946 goto err_priorities; 4947 4948 INIT_WORK(&dev_priv->mm.free_work, __i915_gem_free_work); 4949 init_llist_head(&dev_priv->mm.free_list); 4950 INIT_LIST_HEAD(&dev_priv->mm.unbound_list); 4951 INIT_LIST_HEAD(&dev_priv->mm.bound_list); 4952 INIT_LIST_HEAD(&dev_priv->mm.fence_list); 4953 INIT_LIST_HEAD(&dev_priv->mm.userfault_list); 4954 INIT_DELAYED_WORK(&dev_priv->gt.retire_work, 4955 i915_gem_retire_work_handler); 4956 INIT_DELAYED_WORK(&dev_priv->gt.idle_work, 4957 i915_gem_idle_work_handler); 4958 init_waitqueue_head(&dev_priv->gpu_error.wait_queue); 4959 init_waitqueue_head(&dev_priv->gpu_error.reset_queue); 4960 4961 atomic_set(&dev_priv->mm.bsd_engine_dispatch_index, 0); 4962 4963 spin_lock_init(&dev_priv->fb_tracking.lock); 4964 4965 return 0; 4966 4967 err_priorities: 4968 kmem_cache_destroy(dev_priv->priorities); 4969 err_dependencies: 4970 kmem_cache_destroy(dev_priv->dependencies); 4971 err_requests: 4972 kmem_cache_destroy(dev_priv->requests); 4973 err_luts: 4974 kmem_cache_destroy(dev_priv->luts); 4975 err_vmas: 4976 kmem_cache_destroy(dev_priv->vmas); 4977 err_objects: 4978 kmem_cache_destroy(dev_priv->objects); 4979 err_out: 4980 return err; 4981 } 4982 4983 void i915_gem_load_cleanup(struct drm_i915_private *dev_priv) 4984 { 4985 i915_gem_drain_freed_objects(dev_priv); 4986 WARN_ON(!llist_empty(&dev_priv->mm.free_list)); 4987 WARN_ON(dev_priv->mm.object_count); 4988 4989 mutex_lock(&dev_priv->drm.struct_mutex); 4990 i915_gem_timeline_fini(&dev_priv->gt.global_timeline); 4991 WARN_ON(!list_empty(&dev_priv->gt.timelines)); 4992 mutex_unlock(&dev_priv->drm.struct_mutex); 4993 4994 kmem_cache_destroy(dev_priv->priorities); 4995 kmem_cache_destroy(dev_priv->dependencies); 4996 kmem_cache_destroy(dev_priv->requests); 4997 kmem_cache_destroy(dev_priv->luts); 4998 kmem_cache_destroy(dev_priv->vmas); 4999 kmem_cache_destroy(dev_priv->objects); 5000 5001 /* And ensure that our DESTROY_BY_RCU slabs are truly destroyed */ 5002 rcu_barrier(); 5003 } 5004 5005 int i915_gem_freeze(struct drm_i915_private *dev_priv) 5006 { 5007 /* Discard all purgeable objects, let userspace recover those as 5008 * required after resuming. 5009 */ 5010 i915_gem_shrink_all(dev_priv); 5011 5012 return 0; 5013 } 5014 5015 int i915_gem_freeze_late(struct drm_i915_private *dev_priv) 5016 { 5017 struct drm_i915_gem_object *obj; 5018 struct list_head *phases[] = { 5019 &dev_priv->mm.unbound_list, 5020 &dev_priv->mm.bound_list, 5021 NULL 5022 }, **p; 5023 5024 /* Called just before we write the hibernation image. 5025 * 5026 * We need to update the domain tracking to reflect that the CPU 5027 * will be accessing all the pages to create and restore from the 5028 * hibernation, and so upon restoration those pages will be in the 5029 * CPU domain. 5030 * 5031 * To make sure the hibernation image contains the latest state, 5032 * we update that state just before writing out the image. 5033 * 5034 * To try and reduce the hibernation image, we manually shrink 5035 * the objects as well, see i915_gem_freeze() 5036 */ 5037 5038 i915_gem_shrink(dev_priv, -1UL, NULL, I915_SHRINK_UNBOUND); 5039 i915_gem_drain_freed_objects(dev_priv); 5040 5041 mutex_lock(&dev_priv->drm.struct_mutex); 5042 for (p = phases; *p; p++) { 5043 list_for_each_entry(obj, *p, global_link) 5044 __start_cpu_write(obj); 5045 } 5046 mutex_unlock(&dev_priv->drm.struct_mutex); 5047 5048 return 0; 5049 } 5050 5051 void i915_gem_release(struct drm_device *dev, struct drm_file *file) 5052 { 5053 struct drm_i915_file_private *file_priv = file->driver_priv; 5054 struct drm_i915_gem_request *request; 5055 5056 /* Clean up our request list when the client is going away, so that 5057 * later retire_requests won't dereference our soon-to-be-gone 5058 * file_priv. 5059 */ 5060 spin_lock(&file_priv->mm.lock); 5061 list_for_each_entry(request, &file_priv->mm.request_list, client_link) 5062 request->file_priv = NULL; 5063 spin_unlock(&file_priv->mm.lock); 5064 } 5065 5066 int i915_gem_open(struct drm_i915_private *i915, struct drm_file *file) 5067 { 5068 struct drm_i915_file_private *file_priv; 5069 int ret; 5070 5071 DRM_DEBUG("\n"); 5072 5073 file_priv = kzalloc(sizeof(*file_priv), GFP_KERNEL); 5074 if (!file_priv) 5075 return -ENOMEM; 5076 5077 file->driver_priv = file_priv; 5078 file_priv->dev_priv = i915; 5079 file_priv->file = file; 5080 5081 spin_lock_init(&file_priv->mm.lock); 5082 INIT_LIST_HEAD(&file_priv->mm.request_list); 5083 5084 file_priv->bsd_engine = -1; 5085 5086 ret = i915_gem_context_open(i915, file); 5087 if (ret) 5088 kfree(file_priv); 5089 5090 return ret; 5091 } 5092 5093 /** 5094 * i915_gem_track_fb - update frontbuffer tracking 5095 * @old: current GEM buffer for the frontbuffer slots 5096 * @new: new GEM buffer for the frontbuffer slots 5097 * @frontbuffer_bits: bitmask of frontbuffer slots 5098 * 5099 * This updates the frontbuffer tracking bits @frontbuffer_bits by clearing them 5100 * from @old and setting them in @new. Both @old and @new can be NULL. 5101 */ 5102 void i915_gem_track_fb(struct drm_i915_gem_object *old, 5103 struct drm_i915_gem_object *new, 5104 unsigned frontbuffer_bits) 5105 { 5106 /* Control of individual bits within the mask are guarded by 5107 * the owning plane->mutex, i.e. we can never see concurrent 5108 * manipulation of individual bits. But since the bitfield as a whole 5109 * is updated using RMW, we need to use atomics in order to update 5110 * the bits. 5111 */ 5112 BUILD_BUG_ON(INTEL_FRONTBUFFER_BITS_PER_PIPE * I915_MAX_PIPES > 5113 sizeof(atomic_t) * BITS_PER_BYTE); 5114 5115 if (old) { 5116 WARN_ON(!(atomic_read(&old->frontbuffer_bits) & frontbuffer_bits)); 5117 atomic_andnot(frontbuffer_bits, &old->frontbuffer_bits); 5118 } 5119 5120 if (new) { 5121 WARN_ON(atomic_read(&new->frontbuffer_bits) & frontbuffer_bits); 5122 atomic_or(frontbuffer_bits, &new->frontbuffer_bits); 5123 } 5124 } 5125 5126 /* Allocate a new GEM object and fill it with the supplied data */ 5127 struct drm_i915_gem_object * 5128 i915_gem_object_create_from_data(struct drm_i915_private *dev_priv, 5129 const void *data, size_t size) 5130 { 5131 struct drm_i915_gem_object *obj; 5132 struct file *file; 5133 size_t offset; 5134 int err; 5135 5136 obj = i915_gem_object_create(dev_priv, round_up(size, PAGE_SIZE)); 5137 if (IS_ERR(obj)) 5138 return obj; 5139 5140 GEM_BUG_ON(obj->base.write_domain != I915_GEM_DOMAIN_CPU); 5141 5142 file = obj->base.filp; 5143 offset = 0; 5144 do { 5145 unsigned int len = min_t(typeof(size), size, PAGE_SIZE); 5146 struct page *page; 5147 void *pgdata, *vaddr; 5148 5149 err = pagecache_write_begin(file, file->f_mapping, 5150 offset, len, 0, 5151 &page, &pgdata); 5152 if (err < 0) 5153 goto fail; 5154 5155 vaddr = kmap(page); 5156 memcpy(vaddr, data, len); 5157 kunmap(page); 5158 5159 err = pagecache_write_end(file, file->f_mapping, 5160 offset, len, len, 5161 page, pgdata); 5162 if (err < 0) 5163 goto fail; 5164 5165 size -= len; 5166 data += len; 5167 offset += len; 5168 } while (size); 5169 5170 return obj; 5171 5172 fail: 5173 i915_gem_object_put(obj); 5174 return ERR_PTR(err); 5175 } 5176 5177 struct scatterlist * 5178 i915_gem_object_get_sg(struct drm_i915_gem_object *obj, 5179 unsigned int n, 5180 unsigned int *offset) 5181 { 5182 struct i915_gem_object_page_iter *iter = &obj->mm.get_page; 5183 struct scatterlist *sg; 5184 unsigned int idx, count; 5185 5186 might_sleep(); 5187 GEM_BUG_ON(n >= obj->base.size >> PAGE_SHIFT); 5188 GEM_BUG_ON(!i915_gem_object_has_pinned_pages(obj)); 5189 5190 /* As we iterate forward through the sg, we record each entry in a 5191 * radixtree for quick repeated (backwards) lookups. If we have seen 5192 * this index previously, we will have an entry for it. 5193 * 5194 * Initial lookup is O(N), but this is amortized to O(1) for 5195 * sequential page access (where each new request is consecutive 5196 * to the previous one). Repeated lookups are O(lg(obj->base.size)), 5197 * i.e. O(1) with a large constant! 5198 */ 5199 if (n < READ_ONCE(iter->sg_idx)) 5200 goto lookup; 5201 5202 mutex_lock(&iter->lock); 5203 5204 /* We prefer to reuse the last sg so that repeated lookup of this 5205 * (or the subsequent) sg are fast - comparing against the last 5206 * sg is faster than going through the radixtree. 5207 */ 5208 5209 sg = iter->sg_pos; 5210 idx = iter->sg_idx; 5211 count = __sg_page_count(sg); 5212 5213 while (idx + count <= n) { 5214 unsigned long exception, i; 5215 int ret; 5216 5217 /* If we cannot allocate and insert this entry, or the 5218 * individual pages from this range, cancel updating the 5219 * sg_idx so that on this lookup we are forced to linearly 5220 * scan onwards, but on future lookups we will try the 5221 * insertion again (in which case we need to be careful of 5222 * the error return reporting that we have already inserted 5223 * this index). 5224 */ 5225 ret = radix_tree_insert(&iter->radix, idx, sg); 5226 if (ret && ret != -EEXIST) 5227 goto scan; 5228 5229 exception = 5230 RADIX_TREE_EXCEPTIONAL_ENTRY | 5231 idx << RADIX_TREE_EXCEPTIONAL_SHIFT; 5232 for (i = 1; i < count; i++) { 5233 ret = radix_tree_insert(&iter->radix, idx + i, 5234 (void *)exception); 5235 if (ret && ret != -EEXIST) 5236 goto scan; 5237 } 5238 5239 idx += count; 5240 sg = ____sg_next(sg); 5241 count = __sg_page_count(sg); 5242 } 5243 5244 scan: 5245 iter->sg_pos = sg; 5246 iter->sg_idx = idx; 5247 5248 mutex_unlock(&iter->lock); 5249 5250 if (unlikely(n < idx)) /* insertion completed by another thread */ 5251 goto lookup; 5252 5253 /* In case we failed to insert the entry into the radixtree, we need 5254 * to look beyond the current sg. 5255 */ 5256 while (idx + count <= n) { 5257 idx += count; 5258 sg = ____sg_next(sg); 5259 count = __sg_page_count(sg); 5260 } 5261 5262 *offset = n - idx; 5263 return sg; 5264 5265 lookup: 5266 rcu_read_lock(); 5267 5268 sg = radix_tree_lookup(&iter->radix, n); 5269 GEM_BUG_ON(!sg); 5270 5271 /* If this index is in the middle of multi-page sg entry, 5272 * the radixtree will contain an exceptional entry that points 5273 * to the start of that range. We will return the pointer to 5274 * the base page and the offset of this page within the 5275 * sg entry's range. 5276 */ 5277 *offset = 0; 5278 if (unlikely(radix_tree_exception(sg))) { 5279 unsigned long base = 5280 (unsigned long)sg >> RADIX_TREE_EXCEPTIONAL_SHIFT; 5281 5282 sg = radix_tree_lookup(&iter->radix, base); 5283 GEM_BUG_ON(!sg); 5284 5285 *offset = n - base; 5286 } 5287 5288 rcu_read_unlock(); 5289 5290 return sg; 5291 } 5292 5293 struct page * 5294 i915_gem_object_get_page(struct drm_i915_gem_object *obj, unsigned int n) 5295 { 5296 struct scatterlist *sg; 5297 unsigned int offset; 5298 5299 GEM_BUG_ON(!i915_gem_object_has_struct_page(obj)); 5300 5301 sg = i915_gem_object_get_sg(obj, n, &offset); 5302 return nth_page(sg_page(sg), offset); 5303 } 5304 5305 /* Like i915_gem_object_get_page(), but mark the returned page dirty */ 5306 struct page * 5307 i915_gem_object_get_dirty_page(struct drm_i915_gem_object *obj, 5308 unsigned int n) 5309 { 5310 struct page *page; 5311 5312 page = i915_gem_object_get_page(obj, n); 5313 if (!obj->mm.dirty) 5314 set_page_dirty(page); 5315 5316 return page; 5317 } 5318 5319 dma_addr_t 5320 i915_gem_object_get_dma_address(struct drm_i915_gem_object *obj, 5321 unsigned long n) 5322 { 5323 struct scatterlist *sg; 5324 unsigned int offset; 5325 5326 sg = i915_gem_object_get_sg(obj, n, &offset); 5327 return sg_dma_address(sg) + (offset << PAGE_SHIFT); 5328 } 5329 5330 int i915_gem_object_attach_phys(struct drm_i915_gem_object *obj, int align) 5331 { 5332 struct sg_table *pages; 5333 int err; 5334 5335 if (align > obj->base.size) 5336 return -EINVAL; 5337 5338 if (obj->ops == &i915_gem_phys_ops) 5339 return 0; 5340 5341 if (obj->ops != &i915_gem_object_ops) 5342 return -EINVAL; 5343 5344 err = i915_gem_object_unbind(obj); 5345 if (err) 5346 return err; 5347 5348 mutex_lock(&obj->mm.lock); 5349 5350 if (obj->mm.madv != I915_MADV_WILLNEED) { 5351 err = -EFAULT; 5352 goto err_unlock; 5353 } 5354 5355 if (obj->mm.quirked) { 5356 err = -EFAULT; 5357 goto err_unlock; 5358 } 5359 5360 if (obj->mm.mapping) { 5361 err = -EBUSY; 5362 goto err_unlock; 5363 } 5364 5365 pages = obj->mm.pages; 5366 obj->ops = &i915_gem_phys_ops; 5367 5368 err = ____i915_gem_object_get_pages(obj); 5369 if (err) 5370 goto err_xfer; 5371 5372 /* Perma-pin (until release) the physical set of pages */ 5373 __i915_gem_object_pin_pages(obj); 5374 5375 if (!IS_ERR_OR_NULL(pages)) 5376 i915_gem_object_ops.put_pages(obj, pages); 5377 mutex_unlock(&obj->mm.lock); 5378 return 0; 5379 5380 err_xfer: 5381 obj->ops = &i915_gem_object_ops; 5382 obj->mm.pages = pages; 5383 err_unlock: 5384 mutex_unlock(&obj->mm.lock); 5385 return err; 5386 } 5387 5388 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST) 5389 #include "selftests/scatterlist.c" 5390 #include "selftests/mock_gem_device.c" 5391 #include "selftests/huge_gem_object.c" 5392 #include "selftests/i915_gem_object.c" 5393 #include "selftests/i915_gem_coherency.c" 5394 #endif 5395