diff mbox series

[6/6] filter-debug

Message ID 20210826012451.54456-7-snelson@pensando.io
State New
Headers show
Series ionic: queue and filter mgmt updates | expand

Commit Message

Shannon Nelson Aug. 26, 2021, 1:24 a.m. UTC
Signed-off-by: Shannon Nelson <snelson@pensando.io>
---
 .../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 mbox series

Patch

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_ */