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