+ if (!irq)
+ return 0;
+
+ if (irq->requested) {
+ int count = 0;
+
+ /*
+ * Callback deregistration will fail with rc -EAGAIN if the
+ * callback is currently active. Retry every 50 ms until
+ * successful or 500 ms has elapsed.
+ */
+ do {
+ rc = rte_intr_callback_unregister(intr_handle,
+ irq->handler,
+ bp->eth_dev);
+ if (rc >= 0) {
+ irq->requested = 0;
+ break;
+ }
+ rte_delay_ms(50);
+ } while (count++ < 10);
+
+ if (rc < 0) {
+ PMD_DRV_LOG(ERR, "irq cb unregister failed rc: %d\n",
+ rc);
+ return rc;