aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_fence.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2009-12-01 01:04:56 -0500
committerDave Airlie <airlied@redhat.com>2009-12-01 23:00:13 -0500
commit1614f8b17b8cc3ad143541d41569623d30dbc9ec (patch)
tree7b0284e942cb68ea47cdc832bbd43864b23dcd2d /drivers/gpu/drm/radeon/radeon_fence.c
parentd8f60cfc93452d0554f6a701aa8e3236cbee4636 (diff)
drm/radeon/kms: add irq mitigation code for sw interrupt.
We really don't need to process every irq that comes in, we only really want to do SW irq processing when we are actually waiting for a fence to pass. I'm not 100% sure this is race free esp on non-MSI systems so it needs some testing. Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_fence.c')
-rw-r--r--drivers/gpu/drm/radeon/radeon_fence.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
index ab2a8b16836c..2ac31633d72c 100644
--- a/drivers/gpu/drm/radeon/radeon_fence.c
+++ b/drivers/gpu/drm/radeon/radeon_fence.c
@@ -193,14 +193,18 @@ retry:
193 } 193 }
194 194
195 if (intr) { 195 if (intr) {
196 radeon_irq_kms_sw_irq_get(rdev);
196 r = wait_event_interruptible_timeout(rdev->fence_drv.queue, 197 r = wait_event_interruptible_timeout(rdev->fence_drv.queue,
197 radeon_fence_signaled(fence), timeout); 198 radeon_fence_signaled(fence), timeout);
199 radeon_irq_kms_sw_irq_put(rdev);
198 if (unlikely(r == -ERESTARTSYS)) { 200 if (unlikely(r == -ERESTARTSYS)) {
199 return -EBUSY; 201 return -EBUSY;
200 } 202 }
201 } else { 203 } else {
204 radeon_irq_kms_sw_irq_get(rdev);
202 r = wait_event_timeout(rdev->fence_drv.queue, 205 r = wait_event_timeout(rdev->fence_drv.queue,
203 radeon_fence_signaled(fence), timeout); 206 radeon_fence_signaled(fence), timeout);
207 radeon_irq_kms_sw_irq_put(rdev);
204 } 208 }
205 if (unlikely(!radeon_fence_signaled(fence))) { 209 if (unlikely(!radeon_fence_signaled(fence))) {
206 if (unlikely(r == 0)) { 210 if (unlikely(r == 0)) {