mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-18 06:33:43 -04:00
Merge drm-fixes into drm-next.
Nouveau wanted this to avoid some worse conflicts when I merge that.
This commit is contained in:
@@ -70,8 +70,8 @@ static void amdgpu_flip_work_func(struct work_struct *__work)
|
||||
|
||||
struct drm_crtc *crtc = &amdgpuCrtc->base;
|
||||
unsigned long flags;
|
||||
unsigned i;
|
||||
int vpos, hpos, stat, min_udelay;
|
||||
unsigned i, repcnt = 4;
|
||||
int vpos, hpos, stat, min_udelay = 0;
|
||||
struct drm_vblank_crtc *vblank = &crtc->dev->vblank[work->crtc_id];
|
||||
|
||||
if (amdgpu_flip_handle_fence(work, &work->excl))
|
||||
@@ -97,7 +97,7 @@ static void amdgpu_flip_work_func(struct work_struct *__work)
|
||||
* In practice this won't execute very often unless on very fast
|
||||
* machines because the time window for this to happen is very small.
|
||||
*/
|
||||
for (;;) {
|
||||
while (amdgpuCrtc->enabled && --repcnt) {
|
||||
/* GET_DISTANCE_TO_VBLANKSTART returns distance to real vblank
|
||||
* start in hpos, and to the "fudged earlier" vblank start in
|
||||
* vpos.
|
||||
@@ -113,12 +113,24 @@ static void amdgpu_flip_work_func(struct work_struct *__work)
|
||||
break;
|
||||
|
||||
/* Sleep at least until estimated real start of hw vblank */
|
||||
spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
|
||||
min_udelay = (-hpos + 1) * max(vblank->linedur_ns / 1000, 5);
|
||||
if (min_udelay > vblank->framedur_ns / 2000) {
|
||||
/* Don't wait ridiculously long - something is wrong */
|
||||
repcnt = 0;
|
||||
break;
|
||||
}
|
||||
spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
|
||||
usleep_range(min_udelay, 2 * min_udelay);
|
||||
spin_lock_irqsave(&crtc->dev->event_lock, flags);
|
||||
};
|
||||
|
||||
if (!repcnt)
|
||||
DRM_DEBUG_DRIVER("Delay problem on crtc %d: min_udelay %d, "
|
||||
"framedur %d, linedur %d, stat %d, vpos %d, "
|
||||
"hpos %d\n", work->crtc_id, min_udelay,
|
||||
vblank->framedur_ns / 1000,
|
||||
vblank->linedur_ns / 1000, stat, vpos, hpos);
|
||||
|
||||
/* set the flip status */
|
||||
amdgpuCrtc->pflip_status = AMDGPU_FLIP_SUBMITTED;
|
||||
spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
|
||||
|
||||
Reference in New Issue
Block a user