Messages in this thread | | | Date | Tue, 25 Jan 2022 19:27:35 -0800 | Subject | Re: [RFC PATCH v7 02/16] net: dsa: replay master state events in dsa_tree_{setup,teardown}_master | From | Florian Fainelli <> |
| |
On 1/22/2022 5:33 PM, Ansuel Smith wrote: > From: Vladimir Oltean <vladimir.oltean@nxp.com> > > In order for switch driver to be able to make simple and reliable use of > the master tracking operations, they must also be notified of the > initial state of the DSA master, not just of the changes. This is > because they might enable certain features only during the time when > they know that the DSA master is up and running. > > Therefore, this change explicitly checks the state of the DSA master > under the same rtnl_mutex as we were holding during the > dsa_master_setup() and dsa_master_teardown() call. The idea being that > if the DSA master became operational in between the moment in which it > became a DSA master (dsa_master_setup set dev->dsa_ptr) and the moment > when we checked for the master being up, there is a chance that we > would emit a ->master_state_change() call with no actual state change. > We need to avoid that by serializing the concurrent netdevice event with > us. If the netdevice event started before, we force it to finish before > we begin, because we take rtnl_lock before making netdev_uses_dsa() > return true. So we also handle that early event and do nothing on it. > Similarly, if the dev_open() attempt is concurrent with us, it will > attempt to take the rtnl_mutex, but we're holding it. We'll see that > the master flag IFF_UP isn't set, then when we release the rtnl_mutex > we'll process the NETDEV_UP notifier. > > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> > Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> -- Florian
| |