irq_map[i].host = host;
                        smp_wmb();
 
-                       /* Clear norequest flags */
-                       irq_clear_status_flags(i, IRQ_NOREQUEST);
-
                        /* Legacy flags are left to default at this point,
                         * one can then use irq_create_mapping() to
                         * explicitly change them
                         */
                        ops->map(host, i, i);
+
+                       /* Clear norequest flags */
+                       irq_clear_status_flags(i, IRQ_NOREQUEST);
                }
                break;
        case IRQ_HOST_MAP_LINEAR:
                goto error;
        }
 
-       irq_clear_status_flags(virq, IRQ_NOREQUEST);
-
        /* map it */
        smp_wmb();
        irq_map[virq].hwirq = hwirq;
                goto errdesc;
        }
 
+       irq_clear_status_flags(virq, IRQ_NOREQUEST);
+
        return 0;
 
 errdesc:
        if (host->revmap_type == IRQ_HOST_MAP_LEGACY)
                return;
 
+       irq_set_status_flags(virq, IRQ_NOREQUEST);
+
        /* remove chip and handler */
        irq_set_chip_and_handler(virq, NULL, NULL);
 
        smp_mb();
        irq_map[virq].hwirq = host->inval_irq;
 
-       irq_set_status_flags(virq, IRQ_NOREQUEST);
-
        irq_free_descs(virq, 1);
        /* Free it */
        irq_free_virt(virq, 1);