Skip to content

Commit a8150c9

Browse files
IoanaCiorneidavem330
authored andcommitted
dpaa2-switch: reorganize the [pre]changeupper events
Create separate functions, dpaa2_switch_port_prechangeupper and dpaa2_switch_port_changeupper, to be called directly when a DPSW port changes its upper device. This way we are not open-coding everything in the main event callback and we can easily extent, for example, with bond offload. Signed-off-by: Ioana Ciornei <[email protected]> Reviewed-by: Simon Horman <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent f6da276 commit a8150c9

File tree

1 file changed

+52
-25
lines changed

1 file changed

+52
-25
lines changed

drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c

Lines changed: 52 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2173,51 +2173,78 @@ dpaa2_switch_prechangeupper_sanity_checks(struct net_device *netdev,
21732173
return 0;
21742174
}
21752175

2176-
static int dpaa2_switch_port_netdevice_event(struct notifier_block *nb,
2177-
unsigned long event, void *ptr)
2176+
static int dpaa2_switch_port_prechangeupper(struct net_device *netdev,
2177+
struct netdev_notifier_changeupper_info *info)
21782178
{
2179-
struct net_device *netdev = netdev_notifier_info_to_dev(ptr);
2180-
struct netdev_notifier_changeupper_info *info = ptr;
21812179
struct netlink_ext_ack *extack;
21822180
struct net_device *upper_dev;
2183-
int err = 0;
2181+
int err;
21842182

21852183
if (!dpaa2_switch_port_dev_check(netdev))
2186-
return NOTIFY_DONE;
2184+
return 0;
21872185

21882186
extack = netdev_notifier_info_to_extack(&info->info);
2189-
2190-
switch (event) {
2191-
case NETDEV_PRECHANGEUPPER:
2192-
upper_dev = info->upper_dev;
2193-
if (!netif_is_bridge_master(upper_dev))
2194-
break;
2195-
2187+
upper_dev = info->upper_dev;
2188+
if (netif_is_bridge_master(upper_dev)) {
21962189
err = dpaa2_switch_prechangeupper_sanity_checks(netdev,
21972190
upper_dev,
21982191
extack);
21992192
if (err)
2200-
goto out;
2193+
return err;
22012194

22022195
if (!info->linking)
22032196
dpaa2_switch_port_pre_bridge_leave(netdev);
2197+
}
2198+
2199+
return 0;
2200+
}
2201+
2202+
static int dpaa2_switch_port_changeupper(struct net_device *netdev,
2203+
struct netdev_notifier_changeupper_info *info)
2204+
{
2205+
struct netlink_ext_ack *extack;
2206+
struct net_device *upper_dev;
2207+
2208+
if (!dpaa2_switch_port_dev_check(netdev))
2209+
return 0;
2210+
2211+
extack = netdev_notifier_info_to_extack(&info->info);
2212+
2213+
upper_dev = info->upper_dev;
2214+
if (netif_is_bridge_master(upper_dev)) {
2215+
if (info->linking)
2216+
return dpaa2_switch_port_bridge_join(netdev,
2217+
upper_dev,
2218+
extack);
2219+
else
2220+
return dpaa2_switch_port_bridge_leave(netdev);
2221+
}
2222+
2223+
return 0;
2224+
}
2225+
2226+
static int dpaa2_switch_port_netdevice_event(struct notifier_block *nb,
2227+
unsigned long event, void *ptr)
2228+
{
2229+
struct net_device *netdev = netdev_notifier_info_to_dev(ptr);
2230+
int err = 0;
2231+
2232+
switch (event) {
2233+
case NETDEV_PRECHANGEUPPER:
2234+
err = dpaa2_switch_port_prechangeupper(netdev, ptr);
2235+
if (err)
2236+
return notifier_from_errno(err);
22042237

22052238
break;
22062239
case NETDEV_CHANGEUPPER:
2207-
upper_dev = info->upper_dev;
2208-
if (netif_is_bridge_master(upper_dev)) {
2209-
if (info->linking)
2210-
err = dpaa2_switch_port_bridge_join(netdev,
2211-
upper_dev,
2212-
extack);
2213-
else
2214-
err = dpaa2_switch_port_bridge_leave(netdev);
2215-
}
2240+
err = dpaa2_switch_port_changeupper(netdev, ptr);
2241+
if (err)
2242+
return notifier_from_errno(err);
2243+
22162244
break;
22172245
}
22182246

2219-
out:
2220-
return notifier_from_errno(err);
2247+
return NOTIFY_DONE;
22212248
}
22222249

22232250
struct ethsw_switchdev_event_work {

0 commit comments

Comments
 (0)