Commit dfdeaff2 authored by Chris Wilson's avatar Chris Wilson

drm/i915: Avoid tainting i915_gem_park() with wakeref.lock

While we need to flush the wakeref before parking, we do not need to
perform the i915_gem_park() itself underneath the wakeref lock, merely
the struct_mutex. If we rearrange the locks, we can avoid the unnecessary
tainting.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190614220616.24932-1-chris@chris-wilson.co.uk
parent 422d7df4
...@@ -48,23 +48,22 @@ static void idle_work_handler(struct work_struct *work) ...@@ -48,23 +48,22 @@ static void idle_work_handler(struct work_struct *work)
{ {
struct drm_i915_private *i915 = struct drm_i915_private *i915 =
container_of(work, typeof(*i915), gem.idle_work); container_of(work, typeof(*i915), gem.idle_work);
bool restart = true; bool park;
cancel_delayed_work(&i915->gem.retire_work); cancel_delayed_work_sync(&i915->gem.retire_work);
mutex_lock(&i915->drm.struct_mutex); mutex_lock(&i915->drm.struct_mutex);
intel_wakeref_lock(&i915->gt.wakeref); intel_wakeref_lock(&i915->gt.wakeref);
if (!intel_wakeref_active(&i915->gt.wakeref) && !work_pending(work)) { park = !intel_wakeref_active(&i915->gt.wakeref) && !work_pending(work);
i915_gem_park(i915);
restart = false;
}
intel_wakeref_unlock(&i915->gt.wakeref); intel_wakeref_unlock(&i915->gt.wakeref);
if (park)
mutex_unlock(&i915->drm.struct_mutex); i915_gem_park(i915);
if (restart) else
queue_delayed_work(i915->wq, queue_delayed_work(i915->wq,
&i915->gem.retire_work, &i915->gem.retire_work,
round_jiffies_up_relative(HZ)); round_jiffies_up_relative(HZ));
mutex_unlock(&i915->drm.struct_mutex);
} }
static void retire_work_handler(struct work_struct *work) static void retire_work_handler(struct work_struct *work)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment