/* TMs are on msix_index == 0 */
                if (reply_q->msix_index == 0)
                        continue;
+               synchronize_irq(pci_irq_vector(ioc->pdev, reply_q->msix_index));
                if (reply_q->irq_poll_scheduled) {
                        /* Calling irq_poll_disable will wait for any pending
                         * callbacks to have completed.
                         */
                        irq_poll_disable(&reply_q->irqpoll);
                        irq_poll_enable(&reply_q->irqpoll);
-                       reply_q->irq_poll_scheduled = false;
-                       reply_q->irq_line_enable = true;
-                       enable_irq(reply_q->os_irq);
-                       continue;
+                       /* check how the scheduled poll has ended,
+                        * clean up only if necessary
+                        */
+                       if (reply_q->irq_poll_scheduled) {
+                               reply_q->irq_poll_scheduled = false;
+                               reply_q->irq_line_enable = true;
+                               enable_irq(reply_q->os_irq);
+                       }
                }
-               synchronize_irq(pci_irq_vector(ioc->pdev, reply_q->msix_index));
        }
        if (poll)
                _base_process_reply_queue(reply_q);