From: Ido Schimmel <ido...@mellanox.com>

Unlike mlxsw, rocker only supports the reflection of routes pointing to
its own netdevs. Therefore, instead of requesting a FIB dump during
init, simply register the FIB notifier before creating the ports.

Signed-off-by: Ido Schimmel <ido...@mellanox.com>
Signed-off-by: Jiri Pirko <j...@mellanox.com>
---
 drivers/net/ethernet/rocker/rocker_main.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/rocker/rocker_main.c 
b/drivers/net/ethernet/rocker/rocker_main.c
index 914e9e1..8c9c90a 100644
--- a/drivers/net/ethernet/rocker/rocker_main.c
+++ b/drivers/net/ethernet/rocker/rocker_main.c
@@ -2804,6 +2804,9 @@ static int rocker_probe(struct pci_dev *pdev, const 
struct pci_device_id *id)
                goto err_alloc_ordered_workqueue;
        }
 
+       rocker->fib_nb.notifier_call = rocker_router_fib_event;
+       register_fib_notifier(&rocker->fib_nb);
+
        rocker->hw.id = rocker_read64(rocker, SWITCH_ID);
 
        err = rocker_probe_ports(rocker);
@@ -2812,15 +2815,13 @@ static int rocker_probe(struct pci_dev *pdev, const 
struct pci_device_id *id)
                goto err_probe_ports;
        }
 
-       rocker->fib_nb.notifier_call = rocker_router_fib_event;
-       register_fib_notifier(&rocker->fib_nb);
-
        dev_info(&pdev->dev, "Rocker switch with id %*phN\n",
                 (int)sizeof(rocker->hw.id), &rocker->hw.id);
 
        return 0;
 
 err_probe_ports:
+       unregister_fib_notifier(&rocker->fib_nb);
        destroy_workqueue(rocker->rocker_owq);
 err_alloc_ordered_workqueue:
        free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_EVENT), rocker);
@@ -2848,9 +2849,9 @@ static void rocker_remove(struct pci_dev *pdev)
 {
        struct rocker *rocker = pci_get_drvdata(pdev);
 
+       rocker_remove_ports(rocker);
        unregister_fib_notifier(&rocker->fib_nb);
        rocker_write32(rocker, CONTROL, ROCKER_CONTROL_RESET);
-       rocker_remove_ports(rocker);
        destroy_workqueue(rocker->rocker_owq);
        free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_EVENT), rocker);
        free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_CMD), rocker);
-- 
2.7.4

Reply via email to