aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2014-02-18 06:37:50 -0500
committerChristian König <christian.koenig@amd.com>2014-02-18 11:50:00 -0500
commit2d2fe3f9b60fd3cc9a19dcc3ae892a23825da07f (patch)
treec2bbdb57e1d33b271b84a1eb9463ad073f7c0f4a
parentff212f25feb44a915ce9c0144faef7fae27a6e61 (diff)
drm/radeon: drop radeon_ring_force_activity
The reason for the false positives was fixed quite some time ago and since most engines can still execute NOPs while being locked up it leads to false negatives. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/radeon/cik.c2
-rw-r--r--drivers/gpu/drm/radeon/cik_sdma.c2
-rw-r--r--drivers/gpu/drm/radeon/evergreen.c2
-rw-r--r--drivers/gpu/drm/radeon/evergreen_dma.c2
-rw-r--r--drivers/gpu/drm/radeon/ni.c2
-rw-r--r--drivers/gpu/drm/radeon/ni_dma.c2
-rw-r--r--drivers/gpu/drm/radeon/r100.c2
-rw-r--r--drivers/gpu/drm/radeon/r600.c2
-rw-r--r--drivers/gpu/drm/radeon/r600_dma.c2
-rw-r--r--drivers/gpu/drm/radeon/radeon.h1
-rw-r--r--drivers/gpu/drm/radeon/radeon_ring.c38
-rw-r--r--drivers/gpu/drm/radeon/si.c2
-rw-r--r--drivers/gpu/drm/radeon/si_dma.c2
13 files changed, 1 insertions, 60 deletions
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
index 835dcfb78916..92e38b54efb9 100644
--- a/drivers/gpu/drm/radeon/cik.c
+++ b/drivers/gpu/drm/radeon/cik.c
@@ -5118,8 +5118,6 @@ bool cik_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
5118 radeon_ring_lockup_update(rdev, ring); 5118 radeon_ring_lockup_update(rdev, ring);
5119 return false; 5119 return false;
5120 } 5120 }
5121 /* force CP activities */
5122 radeon_ring_force_activity(rdev, ring);
5123 return radeon_ring_test_lockup(rdev, ring); 5121 return radeon_ring_test_lockup(rdev, ring);
5124} 5122}
5125 5123
diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c
index e474760d714c..00150ac49cd2 100644
--- a/drivers/gpu/drm/radeon/cik_sdma.c
+++ b/drivers/gpu/drm/radeon/cik_sdma.c
@@ -714,8 +714,6 @@ bool cik_sdma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
714 radeon_ring_lockup_update(rdev, ring); 714 radeon_ring_lockup_update(rdev, ring);
715 return false; 715 return false;
716 } 716 }
717 /* force ring activities */
718 radeon_ring_force_activity(rdev, ring);
719 return radeon_ring_test_lockup(rdev, ring); 717 return radeon_ring_test_lockup(rdev, ring);
720} 718}
721 719
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index d9156be5b9a6..c78d8ece9504 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -3953,8 +3953,6 @@ bool evergreen_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *rin
3953 radeon_ring_lockup_update(rdev, ring); 3953 radeon_ring_lockup_update(rdev, ring);
3954 return false; 3954 return false;
3955 } 3955 }
3956 /* force CP activities */
3957 radeon_ring_force_activity(rdev, ring);
3958 return radeon_ring_test_lockup(rdev, ring); 3956 return radeon_ring_test_lockup(rdev, ring);
3959} 3957}
3960 3958
diff --git a/drivers/gpu/drm/radeon/evergreen_dma.c b/drivers/gpu/drm/radeon/evergreen_dma.c
index d448961e9ab2..287fe966d7de 100644
--- a/drivers/gpu/drm/radeon/evergreen_dma.c
+++ b/drivers/gpu/drm/radeon/evergreen_dma.c
@@ -177,8 +177,6 @@ bool evergreen_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *rin
177 radeon_ring_lockup_update(rdev, ring); 177 radeon_ring_lockup_update(rdev, ring);
178 return false; 178 return false;
179 } 179 }
180 /* force ring activities */
181 radeon_ring_force_activity(rdev, ring);
182 return radeon_ring_test_lockup(rdev, ring); 180 return radeon_ring_test_lockup(rdev, ring);
183} 181}
184 182
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index 7601532b7372..85168ecd216b 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1920,8 +1920,6 @@ bool cayman_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
1920 radeon_ring_lockup_update(rdev, ring); 1920 radeon_ring_lockup_update(rdev, ring);
1921 return false; 1921 return false;
1922 } 1922 }
1923 /* force CP activities */
1924 radeon_ring_force_activity(rdev, ring);
1925 return radeon_ring_test_lockup(rdev, ring); 1923 return radeon_ring_test_lockup(rdev, ring);
1926} 1924}
1927 1925
diff --git a/drivers/gpu/drm/radeon/ni_dma.c b/drivers/gpu/drm/radeon/ni_dma.c
index 95e533c61f83..6378e0276691 100644
--- a/drivers/gpu/drm/radeon/ni_dma.c
+++ b/drivers/gpu/drm/radeon/ni_dma.c
@@ -303,8 +303,6 @@ bool cayman_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
303 radeon_ring_lockup_update(rdev, ring); 303 radeon_ring_lockup_update(rdev, ring);
304 return false; 304 return false;
305 } 305 }
306 /* force ring activities */
307 radeon_ring_force_activity(rdev, ring);
308 return radeon_ring_test_lockup(rdev, ring); 306 return radeon_ring_test_lockup(rdev, ring);
309} 307}
310 308
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index 3a7438163d06..1690a2dc0721 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -2525,8 +2525,6 @@ bool r100_gpu_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
2525 radeon_ring_lockup_update(rdev, ring); 2525 radeon_ring_lockup_update(rdev, ring);
2526 return false; 2526 return false;
2527 } 2527 }
2528 /* force CP activities */
2529 radeon_ring_force_activity(rdev, ring);
2530 return radeon_ring_test_lockup(rdev, ring); 2528 return radeon_ring_test_lockup(rdev, ring);
2531} 2529}
2532 2530
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 085e02590dcf..0f4ab928a15a 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -1751,8 +1751,6 @@ bool r600_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
1751 radeon_ring_lockup_update(rdev, ring); 1751 radeon_ring_lockup_update(rdev, ring);
1752 return false; 1752 return false;
1753 } 1753 }
1754 /* force CP activities */
1755 radeon_ring_force_activity(rdev, ring);
1756 return radeon_ring_test_lockup(rdev, ring); 1754 return radeon_ring_test_lockup(rdev, ring);
1757} 1755}
1758 1756
diff --git a/drivers/gpu/drm/radeon/r600_dma.c b/drivers/gpu/drm/radeon/r600_dma.c
index 6944e1988426..53fcb28f5578 100644
--- a/drivers/gpu/drm/radeon/r600_dma.c
+++ b/drivers/gpu/drm/radeon/r600_dma.c
@@ -222,8 +222,6 @@ bool r600_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
222 radeon_ring_lockup_update(rdev, ring); 222 radeon_ring_lockup_update(rdev, ring);
223 return false; 223 return false;
224 } 224 }
225 /* force ring activities */
226 radeon_ring_force_activity(rdev, ring);
227 return radeon_ring_test_lockup(rdev, ring); 225 return radeon_ring_test_lockup(rdev, ring);
228} 226}
229 227
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index e1c4f9c6772b..a415f8e9d972 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -956,7 +956,6 @@ void radeon_ring_unlock_commit(struct radeon_device *rdev, struct radeon_ring *c
956void radeon_ring_undo(struct radeon_ring *ring); 956void radeon_ring_undo(struct radeon_ring *ring);
957void radeon_ring_unlock_undo(struct radeon_device *rdev, struct radeon_ring *cp); 957void radeon_ring_unlock_undo(struct radeon_device *rdev, struct radeon_ring *cp);
958int radeon_ring_test(struct radeon_device *rdev, struct radeon_ring *cp); 958int radeon_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
959void radeon_ring_force_activity(struct radeon_device *rdev, struct radeon_ring *ring);
960void radeon_ring_lockup_update(struct radeon_device *rdev, 959void radeon_ring_lockup_update(struct radeon_device *rdev,
961 struct radeon_ring *ring); 960 struct radeon_ring *ring);
962bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring); 961bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
index 0f78789d085a..668097abb424 100644
--- a/drivers/gpu/drm/radeon/radeon_ring.c
+++ b/drivers/gpu/drm/radeon/radeon_ring.c
@@ -479,28 +479,6 @@ void radeon_ring_unlock_undo(struct radeon_device *rdev, struct radeon_ring *rin
479} 479}
480 480
481/** 481/**
482 * radeon_ring_force_activity - add some nop packets to the ring
483 *
484 * @rdev: radeon_device pointer
485 * @ring: radeon_ring structure holding ring information
486 *
487 * Add some nop packets to the ring to force activity (all asics).
488 * Used for lockup detection to see if the rptr is advancing.
489 */
490void radeon_ring_force_activity(struct radeon_device *rdev, struct radeon_ring *ring)
491{
492 int r;
493
494 if (radeon_ring_get_rptr(rdev, ring) == ring->wptr) {
495 r = radeon_ring_alloc(rdev, ring, 1);
496 if (!r) {
497 radeon_ring_write(ring, ring->nop);
498 radeon_ring_commit(rdev, ring);
499 }
500 }
501}
502
503/**
504 * radeon_ring_lockup_update - update lockup variables 482 * radeon_ring_lockup_update - update lockup variables
505 * 483 *
506 * @ring: radeon_ring structure holding ring information 484 * @ring: radeon_ring structure holding ring information
@@ -519,21 +497,7 @@ void radeon_ring_lockup_update(struct radeon_device *rdev,
519 * @rdev: radeon device structure 497 * @rdev: radeon device structure
520 * @ring: radeon_ring structure holding ring information 498 * @ring: radeon_ring structure holding ring information
521 * 499 *
522 * We don't need to initialize the lockup tracking information as we will either 500 */
523 * have CP rptr to a different value of jiffies wrap around which will force
524 * initialization of the lockup tracking informations.
525 *
526 * A possible false positivie is if we get call after while and last_cp_rptr ==
527 * the current CP rptr, even if it's unlikely it might happen. To avoid this
528 * if the elapsed time since last call is bigger than 2 second than we return
529 * false and update the tracking information. Due to this the caller must call
530 * radeon_ring_test_lockup several time in less than 2sec for lockup to be reported
531 * the fencing code should be cautious about that.
532 *
533 * Caller should write to the ring to force CP to do something so we don't get
534 * false positive when CP is just gived nothing to do.
535 *
536 **/
537bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring) 501bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
538{ 502{
539 uint32_t rptr = radeon_ring_get_rptr(rdev, ring); 503 uint32_t rptr = radeon_ring_get_rptr(rdev, ring);
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index b406a48ef202..8008cb8d5324 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -3869,8 +3869,6 @@ bool si_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
3869 radeon_ring_lockup_update(rdev, ring); 3869 radeon_ring_lockup_update(rdev, ring);
3870 return false; 3870 return false;
3871 } 3871 }
3872 /* force CP activities */
3873 radeon_ring_force_activity(rdev, ring);
3874 return radeon_ring_test_lockup(rdev, ring); 3872 return radeon_ring_test_lockup(rdev, ring);
3875} 3873}
3876 3874
diff --git a/drivers/gpu/drm/radeon/si_dma.c b/drivers/gpu/drm/radeon/si_dma.c
index c75f5337f462..cf0fdad8c278 100644
--- a/drivers/gpu/drm/radeon/si_dma.c
+++ b/drivers/gpu/drm/radeon/si_dma.c
@@ -52,8 +52,6 @@ bool si_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
52 radeon_ring_lockup_update(rdev, ring); 52 radeon_ring_lockup_update(rdev, ring);
53 return false; 53 return false;
54 } 54 }
55 /* force ring activities */
56 radeon_ring_force_activity(rdev, ring);
57 return radeon_ring_test_lockup(rdev, ring); 55 return radeon_ring_test_lockup(rdev, ring);
58} 56}
59 57