[PATCH 6/6] filter-debug
From: Shannon Nelson <hidden>
Date: 2021-08-26 01:25:17
Subsystem:
networking drivers, pensando ethernet drivers, the rest · Maintainers:
Andrew Lunn, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Brett Creeley, Linus Torvalds
Signed-off-by: Shannon Nelson <redacted> --- .../ethernet/pensando/ionic/ionic_ethtool.c | 2 ++ .../net/ethernet/pensando/ionic/ionic_lif.c | 6 +++++ .../ethernet/pensando/ionic/ionic_rx_filter.c | 27 +++++++++++++++++++ .../ethernet/pensando/ionic/ionic_rx_filter.h | 1 + 4 files changed, 36 insertions(+)
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c b/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
index adc9fdb03e86..61b4b1772eb2 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c@@ -687,6 +687,8 @@ static u32 ionic_get_priv_flags(struct net_device *netdev) struct ionic_lif *lif = netdev_priv(netdev); u32 priv_flags = 0; + ionic_rx_filter_dump(lif); + if (test_bit(IONIC_LIF_F_SW_DEBUG_STATS, lif->state)) priv_flags |= IONIC_PRIV_F_SW_DBG_STATS;
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
index 77394135d1cd..202155c866fe 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c@@ -1261,6 +1261,7 @@ int ionic_lif_addr_add(struct ionic_lif *lif, const u8 *addr) struct ionic_rx_filter *f; int err = 0; +dev_info(lif->ionic->dev, "%s: addr %pM mc %d\n", __func__, addr, mc); spin_lock_bh(&lif->rx_filters.lock); f = ionic_rx_filter_by_addr(lif, addr); if (f) {
@@ -1345,6 +1346,7 @@ int ionic_lif_addr_del(struct ionic_lif *lif, const u8 *addr) int state; int err; +dev_info(lif->ionic->dev, "%s: addr %pM\n", __func__, addr); spin_lock_bh(&lif->rx_filters.lock); f = ionic_rx_filter_by_addr(lif, addr); if (!f) {
@@ -1419,9 +1421,11 @@ void ionic_lif_rx_mode(struct ionic_lif *lif) if ((lif->nucast + lif->nmcast) >= nfilters) { rx_mode |= IONIC_RX_MODE_F_PROMISC; rx_mode |= IONIC_RX_MODE_F_ALLMULTI; +if (!lif->uc_overflow) dev_info(lif->ionic->dev, "%s: uc_overflow toggled to true\n", __func__); lif->uc_overflow = true; lif->mc_overflow = true; } else if (lif->uc_overflow) { +if (lif->uc_overflow) dev_info(lif->ionic->dev, "%s: uc_overflow toggled to false\n", __func__); lif->uc_overflow = false; lif->mc_overflow = false; if (!(nd_flags & IFF_PROMISC))
@@ -1701,6 +1705,7 @@ static int ionic_set_mac_address(struct net_device *netdev, void *sa) if (ether_addr_equal(netdev->dev_addr, mac)) return 0; +netdev_info(netdev, "%s: mac %pM\n", __func__, mac); err = eth_prepare_mac_addr_change(netdev, addr); if (err) return err;
@@ -3200,6 +3205,7 @@ static int ionic_station_set(struct ionic_lif *lif) struct sockaddr addr; int err; +dev_info(lif->ionic->dev, "%s: netdev addr %pM\n", __func__, netdev->dev_addr); err = ionic_adminq_post_wait(lif, &ctx); if (err) return err;
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c
index 7e3a5634c161..ba0cbf487fd6 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c@@ -244,6 +244,7 @@ int ionic_lif_list_addr(struct ionic_lif *lif, const u8 *addr, bool mode) struct ionic_rx_filter *f; int err; +dev_info(lif->ionic->dev, "%s: addr %pM mode %d\n", __func__, addr, mode); spin_lock_bh(&lif->rx_filters.lock); f = ionic_rx_filter_by_addr(lif, addr);
@@ -349,6 +350,7 @@ void ionic_rx_filter_sync(struct ionic_lif *lif) list_for_each_entry_safe(sync_item, spos, &sync_add_list, list) { (void)ionic_lif_addr_add(lif, sync_item->f.cmd.mac.addr); +dev_info(lif->ionic->dev, "%s: sync addr %pM state %d\n", __func__, sync_item->f.cmd.mac.addr, sync_item->f.state); if (sync_item->f.state != IONIC_FILTER_STATE_SYNCED) set_bit(IONIC_LIF_F_FILTER_SYNC_NEEDED, lif->state);
@@ -356,3 +358,28 @@ void ionic_rx_filter_sync(struct ionic_lif *lif) devm_kfree(dev, sync_item); } } + +void ionic_rx_filter_dump(struct ionic_lif *lif) +{ + struct device *dev = lif->ionic->dev; + struct ionic_rx_filter *f; + struct hlist_head *head; + 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) { + dev_info(dev, "%s: mac %pM flow %d filter_id %d state %d rxq %d\n", + __func__, f->cmd.mac.addr, f->flow_id, f->filter_id, f->state, f->rxq_index); + + } + } + spin_unlock_bh(&lif->rx_filters.lock); + + dev_info(dev, "%s: nucast %d nmcast %d\n", + __func__, lif->nucast, lif->nmcast); + dev_info(dev, "%s: netdev_uc_count %d netdev_mc_count %d\n", + __func__, netdev_uc_count(lif->netdev), netdev_mc_count(lif->netdev)); +}
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h
index a66e35f0833b..8a0b5460510f 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h
+++ b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.h@@ -45,4 +45,5 @@ void ionic_rx_filter_sync(struct ionic_lif *lif); int ionic_lif_list_addr(struct ionic_lif *lif, const u8 *addr, bool mode); int ionic_rx_filters_need_sync(struct ionic_lif *lif); +void ionic_rx_filter_dump(struct ionic_lif *lif); #endif /* _IONIC_RX_FILTER_H_ */
--
2.17.1