Skip to content

Commit

Permalink
net: dsa: move switchdev event implementation under the same switch/c…
Browse files Browse the repository at this point in the history
…ase statement

We'll need to start listening to SWITCHDEV_FDB_{ADD,DEL}_TO_DEVICE
events even for interfaces where dsa_slave_dev_check returns false, so
we need that check inside the switch-case statement for SWITCHDEV_FDB_*.

This movement also avoids a useless allocation / free of switchdev_work
on the untreated "default event" case.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Vladimir Oltean authored and Jakub Kicinski committed Jan 7, 2021
1 parent c4bb76a commit 447d290
Showing 1 changed file with 16 additions and 19 deletions.
35 changes: 16 additions & 19 deletions net/dsa/slave.c
Original file line number Diff line number Diff line change
Expand Up @@ -2119,31 +2119,29 @@ static int dsa_slave_switchdev_event(struct notifier_block *unused,
struct dsa_port *dp;
int err;

if (event == SWITCHDEV_PORT_ATTR_SET) {
switch (event) {
case SWITCHDEV_PORT_ATTR_SET:
err = switchdev_handle_port_attr_set(dev, ptr,
dsa_slave_dev_check,
dsa_slave_port_attr_set);
return notifier_from_errno(err);
}

if (!dsa_slave_dev_check(dev))
return NOTIFY_DONE;
case SWITCHDEV_FDB_ADD_TO_DEVICE:
case SWITCHDEV_FDB_DEL_TO_DEVICE:
if (!dsa_slave_dev_check(dev))
return NOTIFY_DONE;

dp = dsa_slave_to_port(dev);
dp = dsa_slave_to_port(dev);

switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
if (!switchdev_work)
return NOTIFY_BAD;
switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
if (!switchdev_work)
return NOTIFY_BAD;

INIT_WORK(&switchdev_work->work,
dsa_slave_switchdev_event_work);
switchdev_work->ds = dp->ds;
switchdev_work->port = dp->index;
switchdev_work->event = event;
INIT_WORK(&switchdev_work->work,
dsa_slave_switchdev_event_work);
switchdev_work->ds = dp->ds;
switchdev_work->port = dp->index;
switchdev_work->event = event;

switch (event) {
case SWITCHDEV_FDB_ADD_TO_DEVICE:
case SWITCHDEV_FDB_DEL_TO_DEVICE:
fdb_info = ptr;

if (!fdb_info->added_by_user) {
Expand All @@ -2156,13 +2154,12 @@ static int dsa_slave_switchdev_event(struct notifier_block *unused,
switchdev_work->vid = fdb_info->vid;

dev_hold(dev);
dsa_schedule_work(&switchdev_work->work);
break;
default:
kfree(switchdev_work);
return NOTIFY_DONE;
}

dsa_schedule_work(&switchdev_work->work);
return NOTIFY_OK;
}

Expand Down

0 comments on commit 447d290

Please sign in to comment.