From: Shannon Nelson <snel...@pensando.io>

[ Upstream commit cbec2153a9a68d011454960ba84887e46e40b37d ]

Add in a couple of forgotten spinlocks and fix up some of
the debug messages around filter management.

Fixes: c1e329ebec8d ("ionic: Add management of rx filters")
Signed-off-by: Shannon Nelson <snel...@pensando.io>
Signed-off-by: David S. Miller <da...@davemloft.net>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/net/ethernet/pensando/ionic/ionic_lif.c | 17 +++++++----------
 .../ethernet/pensando/ionic/ionic_rx_filter.c   |  5 +++++
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c 
b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
index d5b0bf54f9610..c00ec9a020973 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
@@ -809,8 +809,7 @@ static int ionic_lif_addr_add(struct ionic_lif *lif, const 
u8 *addr)
        if (f)
                return 0;
 
-       netdev_dbg(lif->netdev, "rx_filter add ADDR %pM (id %d)\n", addr,
-                  ctx.comp.rx_filter_add.filter_id);
+       netdev_dbg(lif->netdev, "rx_filter add ADDR %pM\n", addr);
 
        memcpy(ctx.cmd.rx_filter_add.mac.addr, addr, ETH_ALEN);
        err = ionic_adminq_post_wait(lif, &ctx);
@@ -839,6 +838,9 @@ static int ionic_lif_addr_del(struct ionic_lif *lif, const 
u8 *addr)
                return -ENOENT;
        }
 
+       netdev_dbg(lif->netdev, "rx_filter del ADDR %pM (id %d)\n",
+                  addr, f->filter_id);
+
        ctx.cmd.rx_filter_del.filter_id = cpu_to_le32(f->filter_id);
        ionic_rx_filter_free(lif, f);
        spin_unlock_bh(&lif->rx_filters.lock);
@@ -847,9 +849,6 @@ static int ionic_lif_addr_del(struct ionic_lif *lif, const 
u8 *addr)
        if (err)
                return err;
 
-       netdev_dbg(lif->netdev, "rx_filter del ADDR %pM (id %d)\n", addr,
-                  ctx.cmd.rx_filter_del.filter_id);
-
        return 0;
 }
 
@@ -1291,13 +1290,11 @@ static int ionic_vlan_rx_add_vid(struct net_device 
*netdev, __be16 proto,
        };
        int err;
 
+       netdev_dbg(netdev, "rx_filter add VLAN %d\n", vid);
        err = ionic_adminq_post_wait(lif, &ctx);
        if (err)
                return err;
 
-       netdev_dbg(netdev, "rx_filter add VLAN %d (id %d)\n", vid,
-                  ctx.comp.rx_filter_add.filter_id);
-
        return ionic_rx_filter_save(lif, 0, IONIC_RXQ_INDEX_ANY, 0, &ctx);
 }
 
@@ -1322,8 +1319,8 @@ static int ionic_vlan_rx_kill_vid(struct net_device 
*netdev, __be16 proto,
                return -ENOENT;
        }
 
-       netdev_dbg(netdev, "rx_filter del VLAN %d (id %d)\n", vid,
-                  le32_to_cpu(ctx.cmd.rx_filter_del.filter_id));
+       netdev_dbg(netdev, "rx_filter del VLAN %d (id %d)\n",
+                  vid, f->filter_id);
 
        ctx.cmd.rx_filter_del.filter_id = cpu_to_le32(f->filter_id);
        ionic_rx_filter_free(lif, f);
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c 
b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c
index 7a093f148ee58..60cb77e2bab4c 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c
@@ -36,10 +36,12 @@ int ionic_rx_filters_init(struct ionic_lif *lif)
 
        spin_lock_init(&lif->rx_filters.lock);
 
+       spin_lock_bh(&lif->rx_filters.lock);
        for (i = 0; i < IONIC_RX_FILTER_HLISTS; i++) {
                INIT_HLIST_HEAD(&lif->rx_filters.by_hash[i]);
                INIT_HLIST_HEAD(&lif->rx_filters.by_id[i]);
        }
+       spin_unlock_bh(&lif->rx_filters.lock);
 
        return 0;
 }
@@ -51,11 +53,13 @@ void ionic_rx_filters_deinit(struct ionic_lif *lif)
        struct hlist_node *tmp;
        unsigned int i;
 
+       spin_lock_bh(&lif->rx_filters.lock);
        for (i = 0; i < IONIC_RX_FILTER_HLISTS; i++) {
                head = &lif->rx_filters.by_id[i];
                hlist_for_each_entry_safe(f, tmp, head, by_id)
                        ionic_rx_filter_free(lif, f);
        }
+       spin_unlock_bh(&lif->rx_filters.lock);
 }
 
 int ionic_rx_filter_save(struct ionic_lif *lif, u32 flow_id, u16 rxq_index,
@@ -91,6 +95,7 @@ int ionic_rx_filter_save(struct ionic_lif *lif, u32 flow_id, 
u16 rxq_index,
        f->filter_id = le32_to_cpu(ctx->comp.rx_filter_add.filter_id);
        f->rxq_index = rxq_index;
        memcpy(&f->cmd, ac, sizeof(f->cmd));
+       netdev_dbg(lif->netdev, "rx_filter add filter_id %d\n", f->filter_id);
 
        INIT_HLIST_NODE(&f->by_hash);
        INIT_HLIST_NODE(&f->by_id);
-- 
2.25.1



Reply via email to