net/bnxt: fix probe in FreeBSD
authorKalesh AP <kalesh-anakkur.purayil@broadcom.com>
Thu, 16 Jan 2020 13:04:47 +0000 (18:34 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 5 Feb 2020 08:51:19 +0000 (09:51 +0100)
In FreeBSD environment, nic_uio driver does not support interrupts
and rte_intr_callback_register() will fail to register interrupts
which in turn causes bnxt driver probe failure.

Fixed driver to ignore interrupt callback failures in FreeBSD.
Also fixed to not use a dedicated completion ring for async events
from FW and process these events on RXQ0 in FreeBSD.

Fixes: 6de4c538b393 ("net/bnxt: fix error handling in port start")
Fixes: 43f78b380f89 ("net/bnxt: retry IRQ callback deregistration")
Cc: stable@dpdk.org
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Santoshkumar Karanappa Rastapur <santosh.rastapur@broadcom.com>
drivers/net/bnxt/bnxt.h
drivers/net/bnxt/bnxt_ethdev.c
drivers/net/bnxt/bnxt_irq.c

index 21ca059..3487b91 100644 (file)
 #define BNXT_NUM_ASYNC_CPR(bp) 1
 #endif
 
+/* In FreeBSD OS, nic_uio driver does not support interrupts */
+#ifdef RTE_EXEC_ENV_FREEBSD
+#ifdef BNXT_NUM_ASYNC_CPR
+#undef BNXT_NUM_ASYNC_CPR
+#endif
+#define BNXT_NUM_ASYNC_CPR(bp) 0
+#endif
+
 #define BNXT_MISC_VEC_ID               RTE_INTR_VEC_ZERO_OFFSET
 #define BNXT_RX_VEC_START              RTE_INTR_VEC_RXTX_OFFSET
 
index 7b5df9a..879ea58 100644 (file)
@@ -439,8 +439,11 @@ skip_cosq_cfg:
 
        /* enable uio/vfio intr/eventfd mapping */
        rc = rte_intr_enable(intr_handle);
+#ifndef RTE_EXEC_ENV_FREEBSD
+       /* In FreeBSD OS, nic_uio driver does not support interrupts */
        if (rc)
                goto err_free;
+#endif
 
        rc = bnxt_get_hwrm_link_config(bp, &new);
        if (rc) {
index 846325e..40e1b0c 100644 (file)
@@ -181,5 +181,13 @@ int bnxt_request_int(struct bnxt *bp)
                        irq->requested = 1;
        }
 
+#ifdef RTE_EXEC_ENV_FREEBSD
+       /**
+        * In FreeBSD OS, nic_uio does not support interrupts and
+        * interrupt register callback will fail.
+        */
+       rc = 0;
+#endif
+
        return rc;
 }