Skip to content

Commit 3d5048c

Browse files
Vadym Kochandavem330
authored andcommitted
net: marvell: prestera: move netdev topology validation to prestera_main
Move handling of PRECHANGEUPPER event from prestera_switchdev to prestera_main which is responsible for basic netdev events handling and routing them to related module. Signed-off-by: Vadym Kochan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 950fd04 commit 3d5048c

File tree

2 files changed

+26
-23
lines changed

2 files changed

+26
-23
lines changed

drivers/net/ethernet/marvell/prestera/prestera_main.c

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -508,13 +508,36 @@ struct prestera_port *prestera_port_dev_lower_find(struct net_device *dev)
508508
static int prestera_netdev_port_event(struct net_device *dev,
509509
unsigned long event, void *ptr)
510510
{
511+
struct netdev_notifier_changeupper_info *info = ptr;
512+
struct netlink_ext_ack *extack;
513+
struct net_device *upper;
514+
515+
extack = netdev_notifier_info_to_extack(&info->info);
516+
upper = info->upper_dev;
517+
511518
switch (event) {
512519
case NETDEV_PRECHANGEUPPER:
520+
if (!netif_is_bridge_master(upper)) {
521+
NL_SET_ERR_MSG_MOD(extack, "Unknown upper device type");
522+
return -EINVAL;
523+
}
524+
525+
if (!info->linking)
526+
break;
527+
528+
if (netdev_has_any_upper_dev(upper)) {
529+
NL_SET_ERR_MSG_MOD(extack, "Upper device is already enslaved");
530+
return -EINVAL;
531+
}
532+
break;
533+
513534
case NETDEV_CHANGEUPPER:
514-
return prestera_bridge_port_event(dev, event, ptr);
515-
default:
516-
return 0;
535+
if (netif_is_bridge_master(upper))
536+
return prestera_bridge_port_event(dev, event, ptr);
537+
break;
517538
}
539+
540+
return 0;
518541
}
519542

520543
static int prestera_netdev_event_handler(struct notifier_block *nb,

drivers/net/ethernet/marvell/prestera/prestera_switchdev.c

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -537,35 +537,15 @@ int prestera_bridge_port_event(struct net_device *dev, unsigned long event,
537537
void *ptr)
538538
{
539539
struct netdev_notifier_changeupper_info *info = ptr;
540-
struct netlink_ext_ack *extack;
541540
struct prestera_port *port;
542541
struct net_device *upper;
543542
int err;
544543

545-
extack = netdev_notifier_info_to_extack(&info->info);
546544
port = netdev_priv(dev);
547545
upper = info->upper_dev;
548546

549547
switch (event) {
550-
case NETDEV_PRECHANGEUPPER:
551-
if (!netif_is_bridge_master(upper)) {
552-
NL_SET_ERR_MSG_MOD(extack, "Unknown upper device type");
553-
return -EINVAL;
554-
}
555-
556-
if (!info->linking)
557-
break;
558-
559-
if (netdev_has_any_upper_dev(upper)) {
560-
NL_SET_ERR_MSG_MOD(extack, "Upper device is already enslaved");
561-
return -EINVAL;
562-
}
563-
break;
564-
565548
case NETDEV_CHANGEUPPER:
566-
if (!netif_is_bridge_master(upper))
567-
break;
568-
569549
if (info->linking) {
570550
err = prestera_port_bridge_join(port, upper);
571551
if (err)

0 commit comments

Comments
 (0)