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