ionic: fix up filter locks and debug msgs
[ Upstream commit5.4-rM2-2.2.x-imx-squashedcbec2153a9
] Add in a couple of forgotten spinlocks and fix up some of the debug messages around filter management. Fixes:c1e329ebec
("ionic: Add management of rx filters") Signed-off-by: Shannon Nelson <snelson@pensando.io> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
parent
42f5c49f7b
commit
34e93385c4
|
@ -809,8 +809,7 @@ static int ionic_lif_addr_add(struct ionic_lif *lif, const u8 *addr)
|
||||||
if (f)
|
if (f)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
netdev_dbg(lif->netdev, "rx_filter add ADDR %pM (id %d)\n", addr,
|
netdev_dbg(lif->netdev, "rx_filter add ADDR %pM\n", addr);
|
||||||
ctx.comp.rx_filter_add.filter_id);
|
|
||||||
|
|
||||||
memcpy(ctx.cmd.rx_filter_add.mac.addr, addr, ETH_ALEN);
|
memcpy(ctx.cmd.rx_filter_add.mac.addr, addr, ETH_ALEN);
|
||||||
err = ionic_adminq_post_wait(lif, &ctx);
|
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;
|
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);
|
ctx.cmd.rx_filter_del.filter_id = cpu_to_le32(f->filter_id);
|
||||||
ionic_rx_filter_free(lif, f);
|
ionic_rx_filter_free(lif, f);
|
||||||
spin_unlock_bh(&lif->rx_filters.lock);
|
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)
|
if (err)
|
||||||
return 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1291,13 +1290,11 @@ static int ionic_vlan_rx_add_vid(struct net_device *netdev, __be16 proto,
|
||||||
};
|
};
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
netdev_dbg(netdev, "rx_filter add VLAN %d\n", vid);
|
||||||
err = ionic_adminq_post_wait(lif, &ctx);
|
err = ionic_adminq_post_wait(lif, &ctx);
|
||||||
if (err)
|
if (err)
|
||||||
return 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);
|
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;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
netdev_dbg(netdev, "rx_filter del VLAN %d (id %d)\n", vid,
|
netdev_dbg(netdev, "rx_filter del VLAN %d (id %d)\n",
|
||||||
le32_to_cpu(ctx.cmd.rx_filter_del.filter_id));
|
vid, f->filter_id);
|
||||||
|
|
||||||
ctx.cmd.rx_filter_del.filter_id = cpu_to_le32(f->filter_id);
|
ctx.cmd.rx_filter_del.filter_id = cpu_to_le32(f->filter_id);
|
||||||
ionic_rx_filter_free(lif, f);
|
ionic_rx_filter_free(lif, f);
|
||||||
|
|
|
@ -36,10 +36,12 @@ int ionic_rx_filters_init(struct ionic_lif *lif)
|
||||||
|
|
||||||
spin_lock_init(&lif->rx_filters.lock);
|
spin_lock_init(&lif->rx_filters.lock);
|
||||||
|
|
||||||
|
spin_lock_bh(&lif->rx_filters.lock);
|
||||||
for (i = 0; i < IONIC_RX_FILTER_HLISTS; i++) {
|
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_hash[i]);
|
||||||
INIT_HLIST_HEAD(&lif->rx_filters.by_id[i]);
|
INIT_HLIST_HEAD(&lif->rx_filters.by_id[i]);
|
||||||
}
|
}
|
||||||
|
spin_unlock_bh(&lif->rx_filters.lock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -51,11 +53,13 @@ void ionic_rx_filters_deinit(struct ionic_lif *lif)
|
||||||
struct hlist_node *tmp;
|
struct hlist_node *tmp;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
spin_lock_bh(&lif->rx_filters.lock);
|
||||||
for (i = 0; i < IONIC_RX_FILTER_HLISTS; i++) {
|
for (i = 0; i < IONIC_RX_FILTER_HLISTS; i++) {
|
||||||
head = &lif->rx_filters.by_id[i];
|
head = &lif->rx_filters.by_id[i];
|
||||||
hlist_for_each_entry_safe(f, tmp, head, by_id)
|
hlist_for_each_entry_safe(f, tmp, head, by_id)
|
||||||
ionic_rx_filter_free(lif, f);
|
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,
|
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->filter_id = le32_to_cpu(ctx->comp.rx_filter_add.filter_id);
|
||||||
f->rxq_index = rxq_index;
|
f->rxq_index = rxq_index;
|
||||||
memcpy(&f->cmd, ac, sizeof(f->cmd));
|
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_hash);
|
||||||
INIT_HLIST_NODE(&f->by_id);
|
INIT_HLIST_NODE(&f->by_id);
|
||||||
|
|
Loading…
Reference in New Issue