tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: d25ee88530253138d0b20d43511ca5acbda4e9f7 commit: e4217080a60313b0f0e5df5bb169b9f79ceb4694 [1693/1734] Merge branch 'for-linux-next-gt' of git://anongit.freedesktop.org/drm-intel config: x86_64-rhel-8.3-func (https://download.01.org/0day-ci/archive/20220127/202201270113.DdzBtOf8-lkp@xxxxxxxxx/config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce (this is a W=1 build): # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=e4217080a60313b0f0e5df5bb169b9f79ceb4694 git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next master git checkout e4217080a60313b0f0e5df5bb169b9f79ceb4694 # save the config file to linux build tree mkdir build_dir make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/gpu/drm/i915/ If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> Note: the linux-next/master HEAD d25ee88530253138d0b20d43511ca5acbda4e9f7 builds fine. It may have been fixed somewhere. All errors (new ones prefixed by >>): drivers/gpu/drm/i915/gem/i915_gem_mman.c: In function 'vm_fault_gtt': >> drivers/gpu/drm/i915/gem/i915_gem_mman.c:369:11: error: implicit declaration of function 'i915_gem_evict_vm'; did you mean 'i915_gem_to_ttm'? [-Werror=implicit-function-declaration] 369 | ret = i915_gem_evict_vm(&ggtt->vm, &ww); | ^~~~~~~~~~~~~~~~~ | i915_gem_to_ttm cc1: some warnings being treated as errors vim +369 drivers/gpu/drm/i915/gem/i915_gem_mman.c cc662126b4134e Abdiel Janulgue 2019-12-04 288 cc662126b4134e Abdiel Janulgue 2019-12-04 289 static vm_fault_t vm_fault_gtt(struct vm_fault *vmf) b414fcd5be0b00 Chris Wilson 2019-05-28 290 { b414fcd5be0b00 Chris Wilson 2019-05-28 291 #define MIN_CHUNK_PAGES (SZ_1M >> PAGE_SHIFT) b414fcd5be0b00 Chris Wilson 2019-05-28 292 struct vm_area_struct *area = vmf->vma; cc662126b4134e Abdiel Janulgue 2019-12-04 293 struct i915_mmap_offset *mmo = area->vm_private_data; cc662126b4134e Abdiel Janulgue 2019-12-04 294 struct drm_i915_gem_object *obj = mmo->obj; b414fcd5be0b00 Chris Wilson 2019-05-28 295 struct drm_device *dev = obj->base.dev; b414fcd5be0b00 Chris Wilson 2019-05-28 296 struct drm_i915_private *i915 = to_i915(dev); d858d5695f3897 Daniele Ceraolo Spurio 2019-06-13 297 struct intel_runtime_pm *rpm = &i915->runtime_pm; 5c24c9d227e9bb Michał Winiarski 2021-12-19 298 struct i915_ggtt *ggtt = to_gt(i915)->ggtt; b414fcd5be0b00 Chris Wilson 2019-05-28 299 bool write = area->vm_flags & VM_WRITE; 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 300 struct i915_gem_ww_ctx ww; b414fcd5be0b00 Chris Wilson 2019-05-28 301 intel_wakeref_t wakeref; b414fcd5be0b00 Chris Wilson 2019-05-28 302 struct i915_vma *vma; b414fcd5be0b00 Chris Wilson 2019-05-28 303 pgoff_t page_offset; b414fcd5be0b00 Chris Wilson 2019-05-28 304 int srcu; b414fcd5be0b00 Chris Wilson 2019-05-28 305 int ret; b414fcd5be0b00 Chris Wilson 2019-05-28 306 b414fcd5be0b00 Chris Wilson 2019-05-28 307 /* We don't use vmf->pgoff since that has the fake offset */ b414fcd5be0b00 Chris Wilson 2019-05-28 308 page_offset = (vmf->address - area->vm_start) >> PAGE_SHIFT; b414fcd5be0b00 Chris Wilson 2019-05-28 309 b414fcd5be0b00 Chris Wilson 2019-05-28 310 trace_i915_gem_object_fault(obj, page_offset, true, write); b414fcd5be0b00 Chris Wilson 2019-05-28 311 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 312 wakeref = intel_runtime_pm_get(rpm); 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 313 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 314 i915_gem_ww_ctx_init(&ww, true); 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 315 retry: 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 316 ret = i915_gem_object_lock(obj, &ww); b414fcd5be0b00 Chris Wilson 2019-05-28 317 if (ret) 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 318 goto err_rpm; b414fcd5be0b00 Chris Wilson 2019-05-28 319 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 320 /* Sanity check that we allow writing into this object */ 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 321 if (i915_gem_object_is_readonly(obj) && write) { 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 322 ret = -EFAULT; 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 323 goto err_rpm; 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 324 } b414fcd5be0b00 Chris Wilson 2019-05-28 325 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 326 ret = i915_gem_object_pin_pages(obj); eebab60f224fcf Chris Wilson 2019-09-12 327 if (ret) b414fcd5be0b00 Chris Wilson 2019-05-28 328 goto err_rpm; b414fcd5be0b00 Chris Wilson 2019-05-28 329 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 330 ret = intel_gt_reset_trylock(ggtt->vm.gt, &srcu); 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 331 if (ret) 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 332 goto err_pages; 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 333 b414fcd5be0b00 Chris Wilson 2019-05-28 334 /* Now pin it into the GTT as needed */ 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 335 vma = i915_gem_object_ggtt_pin_ww(obj, &ww, NULL, 0, 0, b414fcd5be0b00 Chris Wilson 2019-05-28 336 PIN_MAPPABLE | 6846895fde0555 Chris Wilson 2019-08-21 337 PIN_NONBLOCK /* NOWARN */ | ebfdf5cd806b3b Chris Wilson 2019-08-26 338 PIN_NOEVICT); 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 339 if (IS_ERR(vma) && vma != ERR_PTR(-EDEADLK)) { b414fcd5be0b00 Chris Wilson 2019-05-28 340 /* Use a partial view if it is bigger than available space */ b414fcd5be0b00 Chris Wilson 2019-05-28 341 struct i915_ggtt_view view = b414fcd5be0b00 Chris Wilson 2019-05-28 342 compute_partial_view(obj, page_offset, MIN_CHUNK_PAGES); b414fcd5be0b00 Chris Wilson 2019-05-28 343 unsigned int flags; b414fcd5be0b00 Chris Wilson 2019-05-28 344 6846895fde0555 Chris Wilson 2019-08-21 345 flags = PIN_MAPPABLE | PIN_NOSEARCH; b414fcd5be0b00 Chris Wilson 2019-05-28 346 if (view.type == I915_GGTT_VIEW_NORMAL) b414fcd5be0b00 Chris Wilson 2019-05-28 347 flags |= PIN_NONBLOCK; /* avoid warnings for pinned */ b414fcd5be0b00 Chris Wilson 2019-05-28 348 b414fcd5be0b00 Chris Wilson 2019-05-28 349 /* b414fcd5be0b00 Chris Wilson 2019-05-28 350 * Userspace is now writing through an untracked VMA, abandon b414fcd5be0b00 Chris Wilson 2019-05-28 351 * all hope that the hardware is able to track future writes. b414fcd5be0b00 Chris Wilson 2019-05-28 352 */ b414fcd5be0b00 Chris Wilson 2019-05-28 353 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 354 vma = i915_gem_object_ggtt_pin_ww(obj, &ww, &view, 0, 0, flags); 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 355 if (IS_ERR(vma) && vma != ERR_PTR(-EDEADLK)) { b414fcd5be0b00 Chris Wilson 2019-05-28 356 flags = PIN_MAPPABLE; b414fcd5be0b00 Chris Wilson 2019-05-28 357 view.type = I915_GGTT_VIEW_PARTIAL; 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 358 vma = i915_gem_object_ggtt_pin_ww(obj, &ww, &view, 0, 0, flags); b414fcd5be0b00 Chris Wilson 2019-05-28 359 } 8f9fb61caed13e Chris Wilson 2019-09-02 360 e849f7e708600a Maarten Lankhorst 2022-01-14 361 /* e849f7e708600a Maarten Lankhorst 2022-01-14 362 * The entire mappable GGTT is pinned? Unexpected! e849f7e708600a Maarten Lankhorst 2022-01-14 363 * Try to evict the object we locked too, as normally we skip it e849f7e708600a Maarten Lankhorst 2022-01-14 364 * due to lack of short term pinning inside execbuf. e849f7e708600a Maarten Lankhorst 2022-01-14 365 */ e849f7e708600a Maarten Lankhorst 2022-01-14 366 if (vma == ERR_PTR(-ENOSPC)) { e849f7e708600a Maarten Lankhorst 2022-01-14 367 ret = mutex_lock_interruptible(&ggtt->vm.mutex); e849f7e708600a Maarten Lankhorst 2022-01-14 368 if (!ret) { 6945c53bc712cf Maarten Lankhorst 2022-01-17 @369 ret = i915_gem_evict_vm(&ggtt->vm, &ww); e849f7e708600a Maarten Lankhorst 2022-01-14 370 mutex_unlock(&ggtt->vm.mutex); e849f7e708600a Maarten Lankhorst 2022-01-14 371 } e849f7e708600a Maarten Lankhorst 2022-01-14 372 if (ret) e849f7e708600a Maarten Lankhorst 2022-01-14 373 goto err_reset; e849f7e708600a Maarten Lankhorst 2022-01-14 374 vma = i915_gem_object_ggtt_pin_ww(obj, &ww, &view, 0, 0, flags); e849f7e708600a Maarten Lankhorst 2022-01-14 375 } b414fcd5be0b00 Chris Wilson 2019-05-28 376 } b414fcd5be0b00 Chris Wilson 2019-05-28 377 if (IS_ERR(vma)) { b414fcd5be0b00 Chris Wilson 2019-05-28 378 ret = PTR_ERR(vma); 2850748ef8763a Chris Wilson 2019-10-04 379 goto err_reset; 2850748ef8763a Chris Wilson 2019-10-04 380 } 2850748ef8763a Chris Wilson 2019-10-04 381 2850748ef8763a Chris Wilson 2019-10-04 382 /* Access to snoopable pages through the GTT is incoherent. */ 2850748ef8763a Chris Wilson 2019-10-04 383 if (obj->cache_level != I915_CACHE_NONE && !HAS_LLC(i915)) { 2850748ef8763a Chris Wilson 2019-10-04 384 ret = -EFAULT; 2850748ef8763a Chris Wilson 2019-10-04 385 goto err_unpin; b414fcd5be0b00 Chris Wilson 2019-05-28 386 } b414fcd5be0b00 Chris Wilson 2019-05-28 387 b414fcd5be0b00 Chris Wilson 2019-05-28 388 ret = i915_vma_pin_fence(vma); b414fcd5be0b00 Chris Wilson 2019-05-28 389 if (ret) b414fcd5be0b00 Chris Wilson 2019-05-28 390 goto err_unpin; b414fcd5be0b00 Chris Wilson 2019-05-28 391 b414fcd5be0b00 Chris Wilson 2019-05-28 392 /* Finally, remap it using the new GTT offset */ 0e4fe0c9f2f981 Matthew Auld 2021-05-27 393 ret = remap_io_mapping(area, 0e4fe0c9f2f981 Matthew Auld 2021-05-27 394 area->vm_start + (vma->ggtt_view.partial.offset << PAGE_SHIFT), b414fcd5be0b00 Chris Wilson 2019-05-28 395 (ggtt->gmadr.start + vma->node.start) >> PAGE_SHIFT, 0e4fe0c9f2f981 Matthew Auld 2021-05-27 396 min_t(u64, vma->size, area->vm_end - area->vm_start), 0e4fe0c9f2f981 Matthew Auld 2021-05-27 397 &ggtt->iomap); b414fcd5be0b00 Chris Wilson 2019-05-28 398 if (ret) b414fcd5be0b00 Chris Wilson 2019-05-28 399 goto err_fence; b414fcd5be0b00 Chris Wilson 2019-05-28 400 d858d5695f3897 Daniele Ceraolo Spurio 2019-06-13 401 assert_rpm_wakelock_held(rpm); b7d151ba4b295a Chris Wilson 2019-08-22 402 b7d151ba4b295a Chris Wilson 2019-08-22 403 /* Mark as being mmapped into userspace for later revocation */ 5c24c9d227e9bb Michał Winiarski 2021-12-19 404 mutex_lock(&to_gt(i915)->ggtt->vm.mutex); b414fcd5be0b00 Chris Wilson 2019-05-28 405 if (!i915_vma_set_userfault(vma) && !obj->userfault_count++) 5c24c9d227e9bb Michał Winiarski 2021-12-19 406 list_add(&obj->userfault_link, &to_gt(i915)->ggtt->userfault_list); 5c24c9d227e9bb Michał Winiarski 2021-12-19 407 mutex_unlock(&to_gt(i915)->ggtt->vm.mutex); b7d151ba4b295a Chris Wilson 2019-08-22 408 cc662126b4134e Abdiel Janulgue 2019-12-04 409 /* Track the mmo associated with the fenced vma */ cc662126b4134e Abdiel Janulgue 2019-12-04 410 vma->mmo = mmo; cc662126b4134e Abdiel Janulgue 2019-12-04 411 1a839e016e4964 Lucas De Marchi 2021-10-05 412 if (CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND) 5c24c9d227e9bb Michał Winiarski 2021-12-19 413 intel_wakeref_auto(&to_gt(i915)->ggtt->userfault_wakeref, b414fcd5be0b00 Chris Wilson 2019-05-28 414 msecs_to_jiffies_timeout(CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND)); b414fcd5be0b00 Chris Wilson 2019-05-28 415 5028851cdfdf78 Chris Wilson 2019-09-20 416 if (write) { 5028851cdfdf78 Chris Wilson 2019-09-20 417 GEM_BUG_ON(!i915_gem_object_has_pinned_pages(obj)); b414fcd5be0b00 Chris Wilson 2019-05-28 418 i915_vma_set_ggtt_write(vma); 5028851cdfdf78 Chris Wilson 2019-09-20 419 obj->mm.dirty = true; 5028851cdfdf78 Chris Wilson 2019-09-20 420 } b414fcd5be0b00 Chris Wilson 2019-05-28 421 b414fcd5be0b00 Chris Wilson 2019-05-28 422 err_fence: b414fcd5be0b00 Chris Wilson 2019-05-28 423 i915_vma_unpin_fence(vma); b414fcd5be0b00 Chris Wilson 2019-05-28 424 err_unpin: b414fcd5be0b00 Chris Wilson 2019-05-28 425 __i915_vma_unpin(vma); b414fcd5be0b00 Chris Wilson 2019-05-28 426 err_reset: cb823ed9915b0d Chris Wilson 2019-07-12 427 intel_gt_reset_unlock(ggtt->vm.gt, srcu); 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 428 err_pages: 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 429 i915_gem_object_unpin_pages(obj); b414fcd5be0b00 Chris Wilson 2019-05-28 430 err_rpm: 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 431 if (ret == -EDEADLK) { 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 432 ret = i915_gem_ww_ctx_backoff(&ww); 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 433 if (!ret) 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 434 goto retry; 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 435 } 3c0ffa277ef6fb Maarten Lankhorst 2020-08-19 436 i915_gem_ww_ctx_fini(&ww); d858d5695f3897 Daniele Ceraolo Spurio 2019-06-13 437 intel_runtime_pm_put(rpm, wakeref); cc662126b4134e Abdiel Janulgue 2019-12-04 438 return i915_error_to_vmf_fault(ret); b414fcd5be0b00 Chris Wilson 2019-05-28 439 } b414fcd5be0b00 Chris Wilson 2019-05-28 440 :::::: The code at line 369 was first introduced by commit :::::: 6945c53bc712cf4a28a46fe46c2bd8526ea261d1 drm/i915: Add locking to i915_gem_evict_vm(), v3. :::::: TO: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> :::::: CC: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx