--- zzzz-none-000/linux-2.6.39.4/net/bridge/br_notify.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-atom-6490-729/linux-2.6.39.4/net/bridge/br_notify.c 2021-11-10 13:38:18.000000000 +0000 @@ -23,6 +23,10 @@ .notifier_call = br_device_event }; +#ifdef CONFIG_TI_UNMANAGED_BRIDGE +extern int ti_unmanaged_bridge_handler (struct net_device *dev, unsigned long event); +#endif /* CONFIG_TI_UNMANAGED_BRIDGE */ + /* * Handle changes in state of network devices enslaved to a bridge. * @@ -36,6 +40,15 @@ struct net_bridge *br; int err; +#ifdef CONFIG_TI_UNMANAGED_BRIDGE + /* Pass control to the unmanaged bridge handler. */ + if (ti_unmanaged_bridge_handler(dev, event) == 0) + { + /* The event has been handled by the unmanaged bridge handler. */ + return NOTIFY_DONE; + } +#endif /* CONFIG_TI_UNMANAGED_BRIDGE */ + /* not a port of a bridge */ p = br_port_get_rtnl(dev); if (!p) @@ -51,7 +64,8 @@ case NETDEV_CHANGEADDR: spin_lock_bh(&br->lock); br_fdb_changeaddr(p, dev->dev_addr); - br_stp_recalculate_bridge_id(br); + if (!p->br->automatic_mac_disabled) + br_stp_recalculate_bridge_id(br); spin_unlock_bh(&br->lock); break;