qcacmn: Release lock while allocating pfrm request
pfrm_request_irq() calls kmem_cache_alloc() which needs to be called in a non-atomic context since it can sleep. The current call to pfrm_request_irq() is done within a spinlock which disables preemption and leads to sleep in an atomic context. Avoid calling pfrm_request_irq() within atomic context CRs-Fixed: 2913515 Change-Id: Ic2b0a23360d4d2b753658499343f72bfb67ad82d
This commit is contained in:

committed by
Madan Koyyalamudi

父節點
7cd924cef5
當前提交
13764f2b16
@@ -358,11 +358,13 @@ int hif_ahb_configure_grp_irq(struct hif_softc *scn,
|
||||
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];
|
||||
|
||||
qdf_spin_lock_irqsave(&hif_ext_group->irq_lock);
|
||||
qdf_dev_set_irq_status_flags(irq, QDF_IRQ_DISABLE_UNLAZY);
|
||||
qdf_spin_unlock_irqrestore(&hif_ext_group->irq_lock);
|
||||
|
||||
ret = pfrm_request_irq(scn->qdf_dev->dev,
|
||||
irq, hif_ext_group_interrupt_handler,
|
||||
IRQF_TRIGGER_RISING,
|
||||
@@ -374,13 +376,11 @@ int hif_ahb_configure_grp_irq(struct hif_softc *scn,
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
qdf_spin_unlock_irqrestore(&hif_ext_group->irq_lock);
|
||||
|
||||
qdf_spin_lock_irqsave(&hif_ext_group->irq_lock);
|
||||
hif_ext_group->irq_requested = true;
|
||||
|
||||
end:
|
||||
qdf_spin_unlock_irqrestore(&hif_ext_group->irq_lock);
|
||||
end:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user