1. 09 Dec, 2019 3 commits
    • Chris Wilson's avatar
      drm/i915/gem: Avoid rcu_barrier() from shrinker paths · 16c46fd5
      Chris Wilson authored
      As i915_gem_object_unbind() waits on an rcu_barrier() to flush vm
      releases (and destruction of their bound vma), we have to be careful not
      to invoke that barrier from beneath the shrinker:
      
      <4> [430.222671] WARNING: possible circular locking dependency detected
      <4> [430.222673] 5.4.0-rc8-CI-CI_DRM_7508+ #1 Tainted: G     U
      <4> [430.222675] ------------------------------------------------------
      <4> [430.222677] gem_pwrite/2317 is trying to acquire lock:
      <4> [430.222678] ffffffff82248218 (rcu_state.barrier_mutex){+.+.}, at: rcu_barrier+0x23/0x190
      <4> [430.222685]
      but task is already holding lock:
      <4> [430.222687] ffffffff82263a40 (fs_reclaim){+.+.}, at: fs_reclaim_acquire.part.117+0x0/0x30
      <4> [430.222691]
      which lock already depends on the new lock.
      
      <4> [430.222693]
      the existing dependency chain (in reverse order) is:
      <4> [430.222695]
      -> #2 (fs_reclaim){+.+.}:
      <4> [430.222698]        fs_reclaim_acquire.part.117+0x24/0x30
      <4> [430.222702]        kmem_cache_alloc_trace+0x2a/0x2c0
      <4> [430.222705]        intel_cpuc_prepare+0x37/0x1a0
      <4> [430.222709]        cpuhp_invoke_callback+0x9b/0x9d0
      <4> [430.222712]        _cpu_up+0xa2/0x140
      <4> [430.222714]        do_cpu_up+0x61/0xa0
      <4> [430.222718]        smp_init+0x57/0x96
      <4> [430.222722]        kernel_init_freeable+0xac/0x1c7
      <4> [430.222725]        kernel_init+0x5/0x100
      <4> [430.222728]        ret_from_fork+0x24/0x50
      <4> [430.222729]
      -> #1 (cpu_hotplug_lock.rw_sem){++++}:
      <4> [430.222733]        cpus_read_lock+0x34/0xd0
      <4> [430.222734]        rcu_barrier+0xaa/0x190
      <4> [430.222736]        kernel_init+0x21/0x100
      <4> [430.222737]        ret_from_fork+0x24/0x50
      <4> [430.222739]
      -> #0 (rcu_state.barrier_mutex){+.+.}:
      <4> [430.222742]        __lock_acquire+0x1328/0x15d0
      <4> [430.222743]        lock_acquire+0xa7/0x1c0
      <4> [430.222746]        __mutex_lock+0x9a/0x9d0
      <4> [430.222747]        rcu_barrier+0x23/0x190
      <4> [430.222850]        i915_gem_object_unbind+0x264/0x3d0 [i915]
      <4> [430.222882]        i915_gem_shrink+0x297/0x5f0 [i915]
      <4> [430.222912]        i915_gem_shrink_all+0x38/0x60 [i915]
      <4> [430.222934]        i915_drop_caches_set+0x1f0/0x240 [i915]
      <4> [430.222938]        simple_attr_write+0xb0/0xd0
      <4> [430.222941]        full_proxy_write+0x51/0x80
      <4> [430.222943]        vfs_write+0xb9/0x1d0
      <4> [430.222944]        ksys_write+0x9f/0xe0
      <4> [430.222946]        do_syscall_64+0x4f/0x210
      <4> [430.222948]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      <4> [430.222950]
      other info that might help us debug this:
      
      <4> [430.222952] Chain exists of:
        rcu_state.barrier_mutex --> cpu_hotplug_lock.rw_sem --> fs_reclaim
      
      <4> [430.222955]  Possible unsafe locking scenario:
      
      <4> [430.222957]        CPU0                    CPU1
      <4> [430.222958]        ----                    ----
      <4> [430.222960]   lock(fs_reclaim);
      <4> [430.222961]                                lock(cpu_hotplug_lock.rw_sem);
      <4> [430.222963]                                lock(fs_reclaim);
      <4> [430.222964]   lock(rcu_state.barrier_mutex);
      <4> [430.222966]
       *** DEADLOCK ***
      
      <4> [430.222968] 3 locks held by gem_pwrite/2317:
      <4> [430.222969]  #0: ffff88849e2d9408 (sb_writers#14){.+.+}, at: vfs_write+0x1a4/0x1d0
      <4> [430.222973]  #1: ffff888496976db0 (&attr->mutex){+.+.}, at: simple_attr_write+0x36/0xd0
      <4> [430.222976]  #2: ffffffff82263a40 (fs_reclaim){+.+.}, at: fs_reclaim_acquire.part.117+0x0/0x30
      <4> [430.222980]
      stack backtrace:
      <4> [430.222982] CPU: 1 PID: 2317 Comm: gem_pwrite Tainted: G     U            5.4.0-rc8-CI-CI_DRM_7508+ #1
      <4> [430.222985] Hardware name: Intel Corporation Tiger Lake Client Platform/TigerLake U DDR4 SODIMM RVP, BIOS TGLSFWI1.R00.2321.A08.1909162051 09/16/2019
      <4> [430.222989] Call Trace:
      <4> [430.222992]  dump_stack+0x71/0x9b
      <4> [430.222995]  check_noncircular+0x19b/0x1c0
      <4> [430.222998]  ? __lock_acquire+0x1328/0x15d0
      <4> [430.222999]  __lock_acquire+0x1328/0x15d0
      <4> [430.223001]  ? mark_held_locks+0x49/0x70
      <4> [430.223003]  lock_acquire+0xa7/0x1c0
      <4> [430.223005]  ? rcu_barrier+0x23/0x190
      <4> [430.223008]  __mutex_lock+0x9a/0x9d0
      <4> [430.223009]  ? rcu_barrier+0x23/0x190
      <4> [430.223011]  ? rcu_barrier+0x23/0x190
      <4> [430.223013]  ? find_held_lock+0x2d/0x90
      <4> [430.223045]  ? i915_gem_object_unbind+0x24a/0x3d0 [i915]
      <4> [430.223048]  ? rcu_barrier+0x23/0x190
      <4> [430.223049]  rcu_barrier+0x23/0x190
      <4> [430.223081]  i915_gem_object_unbind+0x264/0x3d0 [i915]
      <4> [430.223119]  i915_gem_shrink+0x297/0x5f0 [i915]
      
      Closes: https://gitlab.freedesktop.org/drm/intel/issues/743Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191208161252.3015727-1-chris@chris-wilson.co.uk
      16c46fd5
    • Chris Wilson's avatar
      drm/i915: Flesh out device_info pretty printer · 72404978
      Chris Wilson authored
      Include all the number fields for describing the GT, as well as the
      current boolean flags, primarily for inclusion in error states.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Andi Shyti <andi.shyti@intel.com>
      Reviewed-by: default avatarAndi Shyti <andi.shyti@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191207182937.2583002-1-chris@chris-wilson.co.uk
      72404978
    • Chris Wilson's avatar
      drm/i915/gem: Comment on inability to check args.pad for MMAP_OFFSET · 8d65859a
      Chris Wilson authored
      Since we didn't check and insist that args.pad must be zero for MMAP_GTT
      historically, we cannot insert a check now as old userspace may be
      feeding in garbage. As such the lack of check is enshrined into the ABI,
      so add a comment to remind us we cannot add the check later.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191207222644.2830129-1-chris@chris-wilson.co.uk
      8d65859a
  2. 08 Dec, 2019 1 commit
  3. 07 Dec, 2019 3 commits
    • Chris Wilson's avatar
      drm/i915/gtt: Account for preallocation in asserts · ca5930b1
      Chris Wilson authored
      Our asserts allow for the PDEs to be allocated concurrently, but we did
      not account for the aliasing-ppgtt to be preallocated on top.
      
      Testcase: igt/gem_ppgtt #bsw
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Acked-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191207221453.2802627-1-chris@chris-wilson.co.uk
      ca5930b1
    • Chris Wilson's avatar
      drm/i915: Avoid calling i915_gem_object_unbind holding object lock · 8b1c78e0
      Chris Wilson authored
      In the extreme case, we may wish to wait on an rcu-barrier to reap stale
      vm to purge the last of the object bindings. However, we are not allowed
      to use rcu_barrier() beneath the dma_resv (i.e. object) lock and do not
      take lightly the prospect of unlocking a mutex deep in the bowels of the
      routine. i915_gem_object_unbind() itself does not need the object lock,
      and it turns out the callers do not need to the unbind as part of a
      locked sequence around set-cache-level, so rearrange the code to avoid
      taking the object lock in the callers.
      
      <4> [186.816311] ======================================================
      <4> [186.816313] WARNING: possible circular locking dependency detected
      <4> [186.816316] 5.4.0-rc8-CI-CI_DRM_7486+ #1 Tainted: G     U
      <4> [186.816318] ------------------------------------------------------
      <4> [186.816320] perf_pmu/1321 is trying to acquire lock:
      <4> [186.816322] ffff88849487c4d8 (&mm->mmap_sem#2){++++}, at: __might_fault+0x39/0x90
      <4> [186.816331]
      but task is already holding lock:
      <4> [186.816333] ffffe8ffffa05008 (&cpuctx_mutex){+.+.}, at: perf_event_ctx_lock_nested+0xa9/0x1b0
      <4> [186.816339]
      which lock already depends on the new lock.
      
      <4> [186.816341]
      the existing dependency chain (in reverse order) is:
      <4> [186.816343]
      -> #6 (&cpuctx_mutex){+.+.}:
      <4> [186.816349]        __mutex_lock+0x9a/0x9d0
      <4> [186.816352]        perf_event_init_cpu+0xa4/0x140
      <4> [186.816357]        perf_event_init+0x19d/0x1cd
      <4> [186.816362]        start_kernel+0x372/0x4f4
      <4> [186.816365]        secondary_startup_64+0xa4/0xb0
      <4> [186.816381]
      -> #5 (pmus_lock){+.+.}:
      <4> [186.816385]        __mutex_lock+0x9a/0x9d0
      <4> [186.816387]        perf_event_init_cpu+0x6b/0x140
      <4> [186.816404]        cpuhp_invoke_callback+0x9b/0x9d0
      <4> [186.816406]        _cpu_up+0xa2/0x140
      <4> [186.816409]        do_cpu_up+0x61/0xa0
      <4> [186.816411]        smp_init+0x57/0x96
      <4> [186.816413]        kernel_init_freeable+0xac/0x1c7
      <4> [186.816416]        kernel_init+0x5/0x100
      <4> [186.816419]        ret_from_fork+0x24/0x50
      <4> [186.816421]
      -> #4 (cpu_hotplug_lock.rw_sem){++++}:
      <4> [186.816424]        cpus_read_lock+0x34/0xd0
      <4> [186.816427]        rcu_barrier+0xaa/0x190
      <4> [186.816429]        kernel_init+0x21/0x100
      <4> [186.816431]        ret_from_fork+0x24/0x50
      <4> [186.816433]
      -> #3 (rcu_state.barrier_mutex){+.+.}:
      <4> [186.816436]        __mutex_lock+0x9a/0x9d0
      <4> [186.816438]        rcu_barrier+0x23/0x190
      <4> [186.816502]        i915_gem_object_unbind+0x3a6/0x400 [i915]
      <4> [186.816537]        i915_gem_object_set_cache_level+0x32/0x90 [i915]
      <4> [186.816571]        i915_gem_object_pin_to_display_plane+0x5d/0x160 [i915]
      <4> [186.816612]        intel_pin_and_fence_fb_obj+0x9e/0x200 [i915]
      <4> [186.816679]        intel_plane_pin_fb+0x3f/0xd0 [i915]
      <4> [186.816717]        intel_prepare_plane_fb+0x130/0x520 [i915]
      <4> [186.816722]        drm_atomic_helper_prepare_planes+0x85/0x110
      <4> [186.816761]        intel_atomic_commit+0xc6/0x350 [i915]
      <4> [186.816764]        drm_atomic_helper_update_plane+0xed/0x110
      <4> [186.816768]        setplane_internal+0x97/0x190
      <4> [186.816770]        drm_mode_setplane+0xcd/0x190
      <4> [186.816773]        drm_ioctl_kernel+0xa7/0xf0
      <4> [186.816775]        drm_ioctl+0x2e1/0x390
      <4> [186.816778]        do_vfs_ioctl+0xa0/0x6f0
      <4> [186.816780]        ksys_ioctl+0x35/0x60
      <4> [186.816782]        __x64_sys_ioctl+0x11/0x20
      <4> [186.816785]        do_syscall_64+0x4f/0x210
      <4> [186.816787]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      <4> [186.816789]
      -> #2 (reservation_ww_class_mutex){+.+.}:
      <4> [186.816793]        __ww_mutex_lock.constprop.15+0xc3/0x1090
      <4> [186.816795]        ww_mutex_lock+0x39/0x70
      <4> [186.816798]        dma_resv_lockdep+0x10e/0x1f7
      <4> [186.816800]        do_one_initcall+0x58/0x2ff
      <4> [186.816802]        kernel_init_freeable+0x137/0x1c7
      <4> [186.816804]        kernel_init+0x5/0x100
      <4> [186.816806]        ret_from_fork+0x24/0x50
      <4> [186.816808]
      -> #1 (reservation_ww_class_acquire){+.+.}:
      <4> [186.816811]        dma_resv_lockdep+0xec/0x1f7
      <4> [186.816813]        do_one_initcall+0x58/0x2ff
      <4> [186.816815]        kernel_init_freeable+0x137/0x1c7
      <4> [186.816817]        kernel_init+0x5/0x100
      <4> [186.816819]        ret_from_fork+0x24/0x50
      <4> [186.816820]
      -> #0 (&mm->mmap_sem#2){++++}:
      <4> [186.816824]        __lock_acquire+0x1328/0x15d0
      <4> [186.816826]        lock_acquire+0xa7/0x1c0
      <4> [186.816828]        __might_fault+0x63/0x90
      <4> [186.816831]        _copy_to_user+0x1e/0x80
      <4> [186.816834]        perf_read+0x200/0x2b0
      <4> [186.816836]        vfs_read+0x96/0x160
      <4> [186.816838]        ksys_read+0x9f/0xe0
      <4> [186.816839]        do_syscall_64+0x4f/0x210
      <4> [186.816841]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      <4> [186.816843]
      other info that might help us debug this:
      
      <4> [186.816846] Chain exists of:
        &mm->mmap_sem#2 --> pmus_lock --> &cpuctx_mutex
      
      <4> [186.816849]  Possible unsafe locking scenario:
      
      <4> [186.816851]        CPU0                    CPU1
      <4> [186.816853]        ----                    ----
      <4> [186.816854]   lock(&cpuctx_mutex);
      <4> [186.816856]                                lock(pmus_lock);
      <4> [186.816858]                                lock(&cpuctx_mutex);
      <4> [186.816860]   lock(&mm->mmap_sem#2);
      <4> [186.816861]
       *** DEADLOCK ***
      
      Closes: https://gitlab.freedesktop.org/drm/intel/issues/728Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarAndi Shyti <andi.shyti@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191206105527.1130413-5-chris@chris-wilson.co.uk
      8b1c78e0
    • Matthew Brost's avatar
      drm/i915/guc: Update uncore access path in flush_ggtt_writes · a22198a9
      Matthew Brost authored
      The preferred way to access the uncore is through the GT structure.
      Update the GuC function, flush_ggtt_writes, to use this path.
      Signed-off-by: default avatarMatthew Brost <matthew.brost@intel.com>
      Signed-off-by: default avatarJohn Harrison <john.c.harrison@intel.com>
      Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191207010033.24667-1-John.C.Harrison@Intel.com
      a22198a9
  4. 06 Dec, 2019 14 commits
  5. 05 Dec, 2019 8 commits
  6. 04 Dec, 2019 11 commits