{
        int i;
 
+       clear_bit(ATH12K_FLAG_CE_IRQ_ENABLED, &ab->dev_flags);
+
        for (i = 0; i < ab->hw_params->ce_count; i++) {
                if (ath12k_ce_get_attr_flags(ab, i) & CE_ATTR_DIS_INTR)
                        continue;
 static irqreturn_t ath12k_pci_ce_interrupt_handler(int irq, void *arg)
 {
        struct ath12k_ce_pipe *ce_pipe = arg;
+       struct ath12k_base *ab = ce_pipe->ab;
+
+       if (!test_bit(ATH12K_FLAG_CE_IRQ_ENABLED, &ab->dev_flags))
+               return IRQ_HANDLED;
 
        /* last interrupt received for this CE */
        ce_pipe->timestamp = jiffies;
 {
        int i;
 
+       clear_bit(ATH12K_FLAG_EXT_IRQ_ENABLED, &ab->dev_flags);
+
        for (i = 0; i < ATH12K_EXT_IRQ_GRP_NUM_MAX; i++) {
                struct ath12k_ext_irq_grp *irq_grp = &ab->ext_irq_grp[i];
 
 static irqreturn_t ath12k_pci_ext_interrupt_handler(int irq, void *arg)
 {
        struct ath12k_ext_irq_grp *irq_grp = arg;
+       struct ath12k_base *ab = irq_grp->ab;
+
+       if (!test_bit(ATH12K_FLAG_EXT_IRQ_ENABLED, &ab->dev_flags))
+               return IRQ_HANDLED;
 
        ath12k_dbg(irq_grp->ab, ATH12K_DBG_PCI, "ext irq:%d\n", irq);
 
 {
        int i;
 
+       set_bit(ATH12K_FLAG_CE_IRQ_ENABLED, &ab->dev_flags);
+
        for (i = 0; i < ab->hw_params->ce_count; i++) {
                if (ath12k_ce_get_attr_flags(ab, i) & CE_ATTR_DIS_INTR)
                        continue;
 {
        int i;
 
+       set_bit(ATH12K_FLAG_EXT_IRQ_ENABLED, &ab->dev_flags);
+
        for (i = 0; i < ATH12K_EXT_IRQ_GRP_NUM_MAX; i++) {
                struct ath12k_ext_irq_grp *irq_grp = &ab->ext_irq_grp[i];