Merge tag 'drm-next-5.5-2019-11-22' of git://people.freedesktop.org/~agd5f/linux...
authorDave Airlie <airlied@redhat.com>
Mon, 25 Nov 2019 22:40:23 +0000 (08:40 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 25 Nov 2019 22:40:23 +0000 (08:40 +1000)
drm-next-5.5-2019-11-22:

amdgpu:
- Fix bad DMA on some PPC platforms
- MMHUB fix for powergating
- BACO fix for Navi
- Misc raven fixes
- Enable vbios fetch directly from rom on navi
- debugfs fix for DC
- SR-IOV fixes for arcturus
- Misc power fixes

radeon:
- Fix bad DMA on some PPC platforms

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Alex Deucher <alexdeucher@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191122203025.3787-1-alexander.deucher@amd.com
drivers/gpu/drm/i915/gt/intel_gt_requests.c

index ccbdddd..353809a 100644 (file)
@@ -33,6 +33,7 @@ long intel_gt_retire_requests_timeout(struct intel_gt *gt, long timeout)
 {
        struct intel_gt_timelines *timelines = &gt->timelines;
        struct intel_timeline *tl, *tn;
+       unsigned long active_count = 0;
        unsigned long flags;
        bool interruptible;
        LIST_HEAD(free);
@@ -45,8 +46,10 @@ long intel_gt_retire_requests_timeout(struct intel_gt *gt, long timeout)
 
        spin_lock_irqsave(&timelines->lock, flags);
        list_for_each_entry_safe(tl, tn, &timelines->active_list, link) {
-               if (!mutex_trylock(&tl->mutex))
+               if (!mutex_trylock(&tl->mutex)) {
+                       active_count++; /* report busy to caller, try again? */
                        continue;
+               }
 
                intel_timeline_get(tl);
                GEM_BUG_ON(!tl->active_count);
@@ -73,6 +76,8 @@ long intel_gt_retire_requests_timeout(struct intel_gt *gt, long timeout)
                list_safe_reset_next(tl, tn, link);
                if (!--tl->active_count)
                        list_del(&tl->link);
+               else
+                       active_count += !!rcu_access_pointer(tl->last_request.fence);
 
                mutex_unlock(&tl->mutex);
 
@@ -87,7 +92,7 @@ long intel_gt_retire_requests_timeout(struct intel_gt *gt, long timeout)
        list_for_each_entry_safe(tl, tn, &free, link)
                __intel_timeline_free(&tl->kref);
 
-       return list_empty(&timelines->active_list) ? 0 : timeout;
+       return active_count ? timeout : 0;
 }
 
 int intel_gt_wait_for_idle(struct intel_gt *gt, long timeout)