Am 19.06.2013 16:02, schrieb j.glisse at gmail.com: > From: Jerome Glisse <jglisse at redhat.com> > > There might be issue with lockup detection when scheduling on an > empty ring that have been sitting idle for a while. Thus update > the lockup tracking data when scheduling new work in an empty ring. > > Signed-off-by: Jerome Glisse <jglisse at redhat.com> > Tested-by: Andy Lutomirski <luto at amacapital.net> > Cc: stable at vger.kernel.org
Reviewed-by: Christian K?nig <christian.koenig at amd.com> > --- > drivers/gpu/drm/radeon/radeon_ring.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drivers/gpu/drm/radeon/radeon_ring.c > b/drivers/gpu/drm/radeon/radeon_ring.c > index e17faa7..82434018 100644 > --- a/drivers/gpu/drm/radeon/radeon_ring.c > +++ b/drivers/gpu/drm/radeon/radeon_ring.c > @@ -402,6 +402,13 @@ int radeon_ring_alloc(struct radeon_device *rdev, struct > radeon_ring *ring, unsi > return -ENOMEM; > /* Align requested size with padding so unlock_commit can > * pad safely */ > + radeon_ring_free_size(rdev, ring); > + if (ring->ring_free_dw == (ring->ring_size / 4)) { > + /* This is an empty ring update lockup info to avoid > + * false positive. > + */ > + radeon_ring_lockup_update(ring); > + } > ndw = (ndw + ring->align_mask) & ~ring->align_mask; > while (ndw > (ring->ring_free_dw - 1)) { > radeon_ring_free_size(rdev, ring);