From: James Hughes Date: Mon, 29 Jul 2019 11:02:59 +0000 (+0100) Subject: Fixup FKMS interrupt handing for non-existent display X-Git-Tag: accepted/tizen/unified/20200709.164653~993 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fe085d362192d5d1d5e3c70ef6f17a605fdf2bd4;p=platform%2Fkernel%2Flinux-rpi.git 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. --- diff --git a/drivers/gpu/drm/vc4/vc4_firmware_kms.c b/drivers/gpu/drm/vc4/vc4_firmware_kms.c index 653c9f6..14d660a 100644 --- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c +++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c @@ -1087,14 +1087,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]); + } } }