Fixup FKMS interrupt handing for non-existent display

If an errant interrupt flag was received from a non-existent display,
a NULL pointer access was made. Protect against this by checking if a
second display is present prior to checking the interrupt flags.
This commit is contained in:
James Hughes
2019-07-29 12:02:59 +01:00
committed by Phil Elwell
parent 5ba43ff8f4
commit cd408f3249

View File

@@ -1055,14 +1055,17 @@ static irqreturn_t vc4_crtc_irq_handler(int irq, void *data)
vc4_crtc_handle_page_flip(crtc_list[0]);
}
/* Check for the secondary display too */
chan = readl(crtc_list[0]->regs + SMIDSW1);
if (crtc_list[1]) {
/* Check for the secondary display too */
chan = readl(crtc_list[0]->regs + SMIDSW1);
if (chan & 1) {
writel(SMI_NEW, crtc_list[0]->regs + SMIDSW1);
if (crtc_list[1]->vblank_enabled)
drm_crtc_handle_vblank(&crtc_list[1]->base);
vc4_crtc_handle_page_flip(crtc_list[1]);
if (chan & 1) {
writel(SMI_NEW, crtc_list[0]->regs + SMIDSW1);
if (crtc_list[1]->vblank_enabled)
drm_crtc_handle_vblank(&crtc_list[1]->base);
vc4_crtc_handle_page_flip(crtc_list[1]);
}
}
}