From b3989495c7f8daa7f45e741d57f6df052690396d Mon Sep 17 00:00:00 2001 From: Venkateswara Swamy Bandaru Date: Fri, 24 Jan 2020 16:52:16 +0530 Subject: [PATCH] qcacmn: Fix kernel panic in hif_ahb_configure_grp_irq Move qal_vbus_get_irq out of irq locks as it can sleep and cause kenel panic. Change-Id: Id00e0cdc978fbd3889a39a48d8b757d8c3e0d754 CRs-Fixed: 2602900 --- hif/src/snoc/if_ahb.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/hif/src/snoc/if_ahb.c b/hif/src/snoc/if_ahb.c index 7fa8af4111da..dd345db98377 100644 --- a/hif/src/snoc/if_ahb.c +++ b/hif/src/snoc/if_ahb.c @@ -313,8 +313,6 @@ int hif_ahb_configure_grp_irq(struct hif_softc *scn, hif_ext_group->irq_name = &hif_ahb_get_irq_name; hif_ext_group->work_complete = &hif_dummy_grp_done; - qdf_spin_lock_irqsave(&hif_ext_group->irq_lock); - for (j = 0; j < hif_ext_group->numirq; j++) { ret = pfrm_get_irq(&pdev->dev, (struct qdf_pfm_hndl *)pdev, ic_irqname[hif_ext_group->irq[j]], @@ -325,6 +323,13 @@ int hif_ahb_configure_grp_irq(struct hif_softc *scn, goto end; } ic_irqnum[hif_ext_group->irq[j]] = irq; + hif_ext_group->os_irq[j] = irq; + } + + qdf_spin_lock_irqsave(&hif_ext_group->irq_lock); + + for (j = 0; j < hif_ext_group->numirq; j++) { + irq = hif_ext_group->os_irq[j]; irq_set_status_flags(irq, IRQ_DISABLE_UNLAZY); ret = pfrm_request_irq(scn->qdf_dev->dev, irq, hif_ext_group_interrupt_handler, @@ -336,7 +341,6 @@ int hif_ahb_configure_grp_irq(struct hif_softc *scn, ret = -EFAULT; goto end; } - hif_ext_group->os_irq[j] = irq; } qdf_spin_unlock_irqrestore(&hif_ext_group->irq_lock);