diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2013-02-26 16:17:33 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-03-07 12:58:57 -0500 |
commit | cc9945bf9cac03860b2f7d59882263c965c6e3af (patch) | |
tree | f6f228e613a9818459dda8894337a1956815489e /drivers/gpu/drm/radeon | |
parent | 2cc79544bd0aabb4b3cf467ead5df526d9134c64 (diff) |
drm/radeon: don't set hpd, afmt interrupts when interrupts are disabled
Avoids splatter if the interrupt handler is not registered due
to acceleration being disabled.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Jerome Glisse <jglisse@redhat.com>
Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/gpu/drm/radeon')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_irq_kms.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c index 90374dd77960..48f80cd42d8f 100644 --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c | |||
@@ -400,6 +400,9 @@ void radeon_irq_kms_enable_afmt(struct radeon_device *rdev, int block) | |||
400 | { | 400 | { |
401 | unsigned long irqflags; | 401 | unsigned long irqflags; |
402 | 402 | ||
403 | if (!rdev->ddev->irq_enabled) | ||
404 | return; | ||
405 | |||
403 | spin_lock_irqsave(&rdev->irq.lock, irqflags); | 406 | spin_lock_irqsave(&rdev->irq.lock, irqflags); |
404 | rdev->irq.afmt[block] = true; | 407 | rdev->irq.afmt[block] = true; |
405 | radeon_irq_set(rdev); | 408 | radeon_irq_set(rdev); |
@@ -419,6 +422,9 @@ void radeon_irq_kms_disable_afmt(struct radeon_device *rdev, int block) | |||
419 | { | 422 | { |
420 | unsigned long irqflags; | 423 | unsigned long irqflags; |
421 | 424 | ||
425 | if (!rdev->ddev->irq_enabled) | ||
426 | return; | ||
427 | |||
422 | spin_lock_irqsave(&rdev->irq.lock, irqflags); | 428 | spin_lock_irqsave(&rdev->irq.lock, irqflags); |
423 | rdev->irq.afmt[block] = false; | 429 | rdev->irq.afmt[block] = false; |
424 | radeon_irq_set(rdev); | 430 | radeon_irq_set(rdev); |
@@ -438,6 +444,9 @@ void radeon_irq_kms_enable_hpd(struct radeon_device *rdev, unsigned hpd_mask) | |||
438 | unsigned long irqflags; | 444 | unsigned long irqflags; |
439 | int i; | 445 | int i; |
440 | 446 | ||
447 | if (!rdev->ddev->irq_enabled) | ||
448 | return; | ||
449 | |||
441 | spin_lock_irqsave(&rdev->irq.lock, irqflags); | 450 | spin_lock_irqsave(&rdev->irq.lock, irqflags); |
442 | for (i = 0; i < RADEON_MAX_HPD_PINS; ++i) | 451 | for (i = 0; i < RADEON_MAX_HPD_PINS; ++i) |
443 | rdev->irq.hpd[i] |= !!(hpd_mask & (1 << i)); | 452 | rdev->irq.hpd[i] |= !!(hpd_mask & (1 << i)); |
@@ -458,6 +467,9 @@ void radeon_irq_kms_disable_hpd(struct radeon_device *rdev, unsigned hpd_mask) | |||
458 | unsigned long irqflags; | 467 | unsigned long irqflags; |
459 | int i; | 468 | int i; |
460 | 469 | ||
470 | if (!rdev->ddev->irq_enabled) | ||
471 | return; | ||
472 | |||
461 | spin_lock_irqsave(&rdev->irq.lock, irqflags); | 473 | spin_lock_irqsave(&rdev->irq.lock, irqflags); |
462 | for (i = 0; i < RADEON_MAX_HPD_PINS; ++i) | 474 | for (i = 0; i < RADEON_MAX_HPD_PINS; ++i) |
463 | rdev->irq.hpd[i] &= !(hpd_mask & (1 << i)); | 475 | rdev->irq.hpd[i] &= !(hpd_mask & (1 << i)); |