X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fcommon%2Focteontx2%2Fotx2_irq.c;h=c0137ff36d1c1d0cdbeac4bbad14d49102014b43;hb=f0f5d844d138;hp=fa3206af558c66b66647b9f1a65a3b6c662029e6;hpb=5868ccdbf1192a02dede85cf5368ac1dd35624a1;p=dpdk.git diff --git a/drivers/common/octeontx2/otx2_irq.c b/drivers/common/octeontx2/otx2_irq.c index fa3206af55..c0137ff36d 100644 --- a/drivers/common/octeontx2/otx2_irq.c +++ b/drivers/common/octeontx2/otx2_irq.c @@ -193,6 +193,8 @@ otx2_unregister_irq(struct rte_intr_handle *intr_handle, rte_intr_callback_fn cb, void *data, unsigned int vec) { struct rte_intr_handle tmp_handle; + uint8_t retries = 5; /* 5 ms */ + int rc; if (vec > intr_handle->max_intr) { otx2_err("Error unregistering MSI-X interrupts vec:%d > %d", @@ -205,8 +207,21 @@ otx2_unregister_irq(struct rte_intr_handle *intr_handle, if (tmp_handle.fd == -1) return; - /* Un-register callback func from eal lib */ - rte_intr_callback_unregister(&tmp_handle, cb, data); + do { + /* Un-register callback func from eal lib */ + rc = rte_intr_callback_unregister(&tmp_handle, cb, data); + /* Retry only if -EAGAIN */ + if (rc != -EAGAIN) + break; + rte_delay_ms(1); + retries--; + } while (retries); + + if (rc < 0) { + otx2_err("Error unregistering MSI-X intr vec %d cb, rc=%d", + vec, rc); + return; + } otx2_base_dbg("Disable vector:0x%x for vfio (efds: %d, max:%d)", vec, intr_handle->nb_efd, intr_handle->max_intr);