diff options
| author | Pauli Nieminen <suokkos@gmail.com> | 2010-02-10 17:10:33 -0500 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2010-02-10 22:13:25 -0500 |
| commit | c60a284cc41f9989391706e113d30b4f27dbe3e0 (patch) | |
| tree | bc16fb8279a410e309f9853ad4bb6c701b988e96 | |
| parent | 6719fc663c6cd30da5dd02d08aaefb031a7a98fd (diff) | |
drm/radeon: Skip dma copy test in benchmark if card doesn't have dma engine.
radeon_copy_dma is only available for r200 or newer cards.
Call to radeon_copy_dma would result to NULL pointer
dereference if benchmarking asic without dma engine.
Signed-off-by: Pauli Nieminen <suokkos@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_benchmark.c | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_benchmark.c b/drivers/gpu/drm/radeon/radeon_benchmark.c index 4ddfd4b5bc51..7932dc4d6b90 100644 --- a/drivers/gpu/drm/radeon/radeon_benchmark.c +++ b/drivers/gpu/drm/radeon/radeon_benchmark.c | |||
| @@ -65,31 +65,42 @@ void radeon_benchmark_move(struct radeon_device *rdev, unsigned bsize, | |||
| 65 | if (r) { | 65 | if (r) { |
| 66 | goto out_cleanup; | 66 | goto out_cleanup; |
| 67 | } | 67 | } |
| 68 | start_jiffies = jiffies; | 68 | |
| 69 | for (i = 0; i < n; i++) { | 69 | /* r100 doesn't have dma engine so skip the test */ |
| 70 | r = radeon_fence_create(rdev, &fence); | 70 | if (rdev->asic->copy_dma) { |
| 71 | if (r) { | 71 | |
| 72 | goto out_cleanup; | 72 | start_jiffies = jiffies; |
| 73 | for (i = 0; i < n; i++) { | ||
| 74 | r = radeon_fence_create(rdev, &fence); | ||
| 75 | if (r) { | ||
| 76 | goto out_cleanup; | ||
| 77 | } | ||
| 78 | |||
| 79 | r = radeon_copy_dma(rdev, saddr, daddr, | ||
| 80 | size / RADEON_GPU_PAGE_SIZE, fence); | ||
| 81 | |||
| 82 | if (r) { | ||
| 83 | goto out_cleanup; | ||
| 84 | } | ||
| 85 | r = radeon_fence_wait(fence, false); | ||
| 86 | if (r) { | ||
| 87 | goto out_cleanup; | ||
| 88 | } | ||
| 89 | radeon_fence_unref(&fence); | ||
| 73 | } | 90 | } |
| 74 | r = radeon_copy_dma(rdev, saddr, daddr, size / RADEON_GPU_PAGE_SIZE, fence); | 91 | end_jiffies = jiffies; |
| 75 | if (r) { | 92 | time = end_jiffies - start_jiffies; |
| 76 | goto out_cleanup; | 93 | time = jiffies_to_msecs(time); |
| 94 | if (time > 0) { | ||
| 95 | i = ((n * size) >> 10) / time; | ||
| 96 | printk(KERN_INFO "radeon: dma %u bo moves of %ukb from" | ||
| 97 | " %d to %d in %lums (%ukb/ms %ukb/s %uM/s)\n", | ||
| 98 | n, size >> 10, | ||
| 99 | sdomain, ddomain, time, | ||
| 100 | i, i * 1000, (i * 1000) / 1024); | ||
| 77 | } | 101 | } |
| 78 | r = radeon_fence_wait(fence, false); | ||
| 79 | if (r) { | ||
| 80 | goto out_cleanup; | ||
| 81 | } | ||
| 82 | radeon_fence_unref(&fence); | ||
| 83 | } | ||
| 84 | end_jiffies = jiffies; | ||
| 85 | time = end_jiffies - start_jiffies; | ||
| 86 | time = jiffies_to_msecs(time); | ||
| 87 | if (time > 0) { | ||
| 88 | i = ((n * size) >> 10) / time; | ||
| 89 | printk(KERN_INFO "radeon: dma %u bo moves of %ukb from %d to %d" | ||
| 90 | " in %lums (%ukb/ms %ukb/s %uM/s)\n", n, size >> 10, | ||
| 91 | sdomain, ddomain, time, i, i * 1000, (i * 1000) / 1024); | ||
| 92 | } | 102 | } |
| 103 | |||
| 93 | start_jiffies = jiffies; | 104 | start_jiffies = jiffies; |
| 94 | for (i = 0; i < n; i++) { | 105 | for (i = 0; i < n; i++) { |
| 95 | r = radeon_fence_create(rdev, &fence); | 106 | r = radeon_fence_create(rdev, &fence); |
