提交 79c2bbc5 编写于 作者: J Jerome Glisse 提交者: Dave Airlie

drm/radeon/kms: r600/r700 don't process IRQ if not initialized

In some rare case the wptr returned from the hw wasn't 0 and leaded
to trick r600_process_irq that their were irq to process. Add a
check to bail out if irq hasn't been initialized this will avoid
oops provoqued by the rare wptr != 0 on initialization.
Signed-off-by: NJerome Glisse <jglisse@redhat.com>
Reviewed-by: NAlex Deucher <alexdeucher@gmail.com>
Signed-off-by: NDave Airlie <airlied@linux.ie>
上级 0c45249f
...@@ -2473,8 +2473,12 @@ int r600_irq_set(struct radeon_device *rdev) ...@@ -2473,8 +2473,12 @@ int r600_irq_set(struct radeon_device *rdev)
return -EINVAL; return -EINVAL;
} }
/* don't enable anything if the ih is disabled */ /* don't enable anything if the ih is disabled */
if (!rdev->ih.enabled) if (!rdev->ih.enabled) {
r600_disable_interrupts(rdev);
/* force the active interrupt state to all disabled */
r600_disable_interrupt_state(rdev);
return 0; return 0;
}
if (ASIC_IS_DCE3(rdev)) { if (ASIC_IS_DCE3(rdev)) {
hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN; hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN;
...@@ -2692,6 +2696,8 @@ int r600_irq_process(struct radeon_device *rdev) ...@@ -2692,6 +2696,8 @@ int r600_irq_process(struct radeon_device *rdev)
bool queue_hotplug = false; bool queue_hotplug = false;
DRM_DEBUG("r600_irq_process start: rptr %d, wptr %d\n", rptr, wptr); DRM_DEBUG("r600_irq_process start: rptr %d, wptr %d\n", rptr, wptr);
if (!rdev->ih.enabled)
return IRQ_NONE;
spin_lock_irqsave(&rdev->ih.lock, flags); spin_lock_irqsave(&rdev->ih.lock, flags);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册