On Tue, 10 Dec 2024 21:48:51 +0800 Jijie Shao wrote:
+static void hbg_del_mac_from_filter(struct hbg_priv *priv, const u8 *addr)why are you tracking the overflow (see below)
+{
+ u32 index;
+
+ /* not exists */
+ if (hbg_get_index_from_mac_table(priv, addr, &index))
+ return;
+
+ hbg_set_mac_to_mac_table(priv, index, NULL);
+
+ if (priv->filter.table_overflow) {
+ priv->filter.table_overflow = false;__dev_uc_sync() will only fail if it failed to add an entry
+ hbg_update_promisc_mode(priv->netdev);
+ dev_info(&priv->pdev->dev, "mac table is not full\n");
+ }
+}
+
+static int hbg_uc_sync(struct net_device *netdev, const unsigned char *addr)
+{
+ struct hbg_priv *priv = netdev_priv(netdev);
+
+ return hbg_add_mac_to_filter(priv, addr);
+}
+
+static int hbg_uc_unsync(struct net_device *netdev, const unsigned char *addr)
+{
+ struct hbg_priv *priv = netdev_priv(netdev);
+
+ if (ether_addr_equal(netdev->dev_addr, (u8 *)addr))
+ return 0;
+
+ hbg_del_mac_from_filter(priv, addr);
+ return 0;
+}
+
+static void hbg_net_set_rx_mode(struct net_device *netdev)
+{
+ hbg_update_promisc_mode(netdev);
+ __dev_uc_sync(netdev, hbg_uc_sync, hbg_uc_unsync);
you can pass the status it returned (cast to bool) to
hbg_update_promisc_mode(), no need to save the "table_overflow" bool