Skip to content

switchdev: spring cleanup

[email protected] netdev 7 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v7 Latest24 patches 12 repliesIn review
  2. v623 patches 13 repliesSuperseded
  3. v521 patches 22 repliesSuperseded
Earlier versions · 4
VersionPostedPatchesRepliesStatus
v424 patches21 repliesSuperseded
v326 patches8 repliesSuperseded
v226 patches15 repliesSuperseded
v118 patches36 repliesSuperseded

Patches in v7 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/24switchdev: s/netdev_switch_/switchdev_/ and s/NETDEV_SWITCH_/SWITCHDEV_/drivers/net/bonding/bond_main.c drivers/net/ethernet/rocker/rocker.c drivers/net/team/team.c +8 more+166 -1710 replies
2/24switchdev: s/swdev_/switchdev_/drivers/net/ethernet/rocker/rocker.c include/linux/netdevice.h include/net/switchdev.h +2 more+59 -580 replies
3/24switchdev: introduce get/set attrs opsinclude/net/switchdev.h net/switchdev/switchdev.c+212 -00 replies
4/24switchdev: convert parent_id_get to switchdev attr getdrivers/net/ethernet/rocker/rocker.c include/net/switchdev.h net/core/net-sysfs.c +3 more+51 -570 replies
5/24rocker: support prepare-commit transaction modeldrivers/net/ethernet/rocker/rocker.c+451 -2491 reply
6/24switchdev: convert STP update to switchdev attr setdrivers/net/ethernet/rocker/rocker.c include/net/switchdev.h net/bridge/br_stp.c +2 more+31 -501 reply
7/24switchdev: introduce switchdev add/del obj opsinclude/net/switchdev.h net/switchdev/switchdev.c+138 -00 replies
8/24switchdev: add port vlan objinclude/net/switchdev.h+8 -00 replies
9/24rocker: use switchdev add/del obj for bridge port vlansdrivers/net/ethernet/rocker/rocker.c+123 -70 replies
10/24switchdev: add bridge port flags attrdrivers/net/ethernet/rocker/rocker.c include/net/switchdev.h+27 -00 replies
11/24switchdev: add new switchdev bridge setlinknet/switchdev/switchdev.c+140 -110 replies
12/24switchdev: cut over to new switchdev_port_bridge_setlinkdrivers/net/bonding/bond_main.c drivers/net/ethernet/rocker/rocker.c drivers/net/team/team.c+3 -430 replies
13/24switchdev: remove old switchdev_port_bridge_setlinkinclude/net/switchdev.h net/switchdev/switchdev.c+0 -390 replies
14/24bridge: restore br_setlink back to originalnet/bridge/br_netlink.c+1 -100 replies
15/24switchdev: add new switchdev_port_bridge_dellinkinclude/net/switchdev.h net/switchdev/switchdev.c+18 -121 reply
16/24switchdev: cut over to new switchdev_port_bridge_dellinkdrivers/net/bonding/bond_main.c drivers/net/ethernet/rocker/rocker.c drivers/net/team/team.c+3 -21 reply
17/24switchdev: remove unused switchdev_port_bridge_dellinkinclude/net/switchdev.h net/switchdev/switchdev.c+0 -451 reply
18/24bridge: revert br_dellink change back to originalnet/bridge/br_netlink.c+1 -101 reply
19/24switchdev: add new switchdev_port_bridge_getlinkinclude/net/switchdev.h net/switchdev/switchdev.c+38 -00 replies
20/24switchdev: cut over to new switchdev_port_bridge_getlinkdrivers/net/bonding/bond_main.c drivers/net/ethernet/rocker/rocker.c drivers/net/team/team.c+3 -140 replies
21/24switchdev: convert fib_ipv4_add/del over to switchdev_port_obj_add/deldrivers/net/ethernet/rocker/rocker.c include/net/switchdev.h net/switchdev/switchdev.c+55 -560 replies
22/24switchdev: remove NETIF_F_HW_SWITCH_OFFLOAD feature flagdrivers/net/bonding/bond_main.c drivers/net/ethernet/rocker/rocker.c drivers/net/team/team.c +2 more+4 -120 replies
23/24rocker: make checkpatch -f cleandrivers/net/ethernet/rocker/rocker.c drivers/net/ethernet/rocker/rocker.h+23 -241 reply
24/24switchdev: bring documentation up-to-dateDocumentation/networking/switchdev.txt+355 -593 replies

Reviews trailers per patch

All 24 patches have a Reviewed-by or Acked-by.

PatchRoopa PrabhuAndy GospodarekJiri PirkoSridhar Samudrala
1/24A-b A-b
2/24A-b A-b
3/24A-b
4/24A-b
5/24A-b
6/24A-b
7/24A-b A-b
8/24A-b
9/24A-b
10/24A-b
11/24A-b
12/24A-b
13/24A-b
14/24A-b
15/24A-b
16/24A-b
17/24A-b
18/24A-b
19/24A-b
20/24A-b
21/24A-b
22/24A-b
23/24A-b
24/24A-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 4 reviewers.

Read the v7 thread

Cover letter [PATCH net-next v7 00/24] switchdev: spring cleanup

From: Scott Feldman <[email protected]>

v7:

Address review comments:

- [Jiri] split the br_setlink and br_dellink reverts into their own patches
- [Jiri] some parameter cleanup of rocker's memory allocators
- [Jiri] pass trans mode as formal parameter rather than hanging off of rocker_port.

v6:

Address review comments:

- [Jiri] split a couple of patches into one-logical-change per patch
- [Joe Perches] revert checkpatch -f changes for wrapped lines with long symbols.

v5:

Address review comments:

- [Jiri] include Jiri's s/swdev/switchdev rename patches up front.
- [Jiri] squash some patches. Now setlink/dellink/getlink patches are in three parts: new implementation, convert drivers to new, delete old impl.
- [Jiri] some minor variable renames
- [Jiri] use BUG_ON rather than WARN when COMMIT phase fails when PREPARE phase said it was safe to come into the water.
- [Simon] rocker: fix a few transaction prepare-commit cases that were wrong. This was the bulk of the changes in v5.

v4:

Well, it was a lot of work, but now prepare-commit transaction model is how davem advises: if prepare fails, abort the transaction. The driver must do resource reservations up front in prepare phase and return those resources if aborting. Commit phase would use reserved resources. The good news is the driver code (for rocker) now handles resource allocation failures better by not leaving partially device or driver states. This is a side-effect of the prepare phase where state isn't modified; only validation of inputs and resource reservations happen in the prepare phase. Since we're supporting setting attrs and add objs across lower devs in the stacked case, we need to hold rtnl_lock (or ensure rtnl_lock is held) so lower devs don't move on us during the prepare-commit transaction. DSA driver code skips the prepare phase and goes straight for the commit phase since no up-front allocations are done and no device failures (that could be detected in the prepare phase) can happen.

Remove NETIF_F_HW_SWITCH_OFFLOAD from rocker and the swdev_attr_set/get wrappers. DSA doesn't set NETIF_F_HW_SWITCH_OFFLOAD, so it can't be in swdev_attr_set/get. rocker doesn't need it; or rather can't support NETIF_F_HW_SWITCH_OFFLOAD being set/cleared at run-time after the device port is already up and offloading L2/L3. NETIF_F_HW_SWITCH_OFFLOAD is still left as a feature flag for drivers that can use it.

Drop the renaming patch for netdev_switch_notifier. Other renames are a result of moving to the attr get/set or obj add/del model. Everything but the netdev_switch_notifier is still prefixed with "swdev_".

v3:

Move to two-phase prepare-commit transaction model for attr set and obj add. Driver gets a change in prepare phase to NACK transaction if lack of resources or support in device.

v2:

Address review comments:

- [Jiri] squash a few related patches
- [Roopa] don't remove NETIF_F_HW_SWITCH_OFFLOAD
- [Roopa] address VLAN setlink/dellink
- [Ronen] print warning is attr set revert fails

Not address:

- Using something other than "swdev_" prefix
- Vendor extentions

The patch set grew a bit to not only support port attr get/set but also add support for port obj add/del. Example of port objs are VLAN, FDB entries, and FIB entries. The VLAN support now allows the swdev driver to get VLAN ranges and flags like PVID and "untagged". Sridhar will be adding FDB obj support in follow-on patch.

v1:

The main theme of this patch set is to cleanup swdev in preparation for new features or fixes to be added soon. We have a pretty good idea now how to handle stacked drivers in swdev, but there where some loose ends. For example, if a set failed in the middle of walking the lower devs, we would leave the system in an undefined state...there was no way to recover back to the previous state. Speaking of sets, also recognize a pattern that most swdev API accesses are gets or sets of port attributes, so go ahead and make port attr get/set the central swdev API, and convert everything that is set-ish/get-ish to this new API.

Features/fixes that should follow from this cleanup:

- solve the duplicate pkt forwarding issue
- get/set bridge attrs, like ageing_time, from/to device
- get/set more bridge port attrs from/to device

There are some rename cleanups tagging along at the end, to give swdev consistent naming.

And finally, some much needed updates to the switchdev.txt documentation to hopefully capture the state-of-the-art of swdev. Hopefully, we can do a better job keeping this document up-to-date.

Tested with rocker, of course, to make sure nothing functional broke. There are a couple minor tweaks to DSA code for getting switch ID and setting STP updates to use new API, but not expecting amy breakage there.

Jiri Pirko (2):
switchdev: s/netdev_switch_/switchdev_/ and
s/NETDEV_SWITCH_/SWITCHDEV_/
switchdev: s/swdev_/switchdev_/

Scott Feldman (22):
switchdev: introduce get/set attrs ops
switchdev: convert parent_id_get to switchdev attr get
rocker: support prepare-commit transaction model
switchdev: convert STP update to switchdev attr set
switchdev: introduce switchdev add/del obj ops
switchdev: add port vlan obj
rocker: use switchdev add/del obj for bridge port vlans
switchdev: add bridge port flags attr
switchdev: add new switchdev bridge setlink
switchdev: cut over to new switchdev_port_bridge_setlink
switchdev: remove old switchdev_port_bridge_setlink
bridge: restore br_setlink back to original
switchdev: add new switchdev_port_bridge_dellink
switchdev: cut over to new switchdev_port_bridge_dellink
switchdev: remove unused switchdev_port_bridge_dellink
bridge: revert br_dellink change back to original
switchdev: add new switchdev_port_bridge_getlink
switchdev: cut over to new switchdev_port_bridge_getlink
switchdev: convert fib_ipv4_add/del over to
switchdev_port_obj_add/del
switchdev: remove NETIF_F_HW_SWITCH_OFFLOAD feature flag
rocker: make checkpatch -f clean
switchdev: bring documentation up-to-date

 Documentation/networking/switchdev.txt |  414 ++++++++++++--
 drivers/net/bonding/bond_main.c        |   10 +-
 drivers/net/ethernet/rocker/rocker.c   |  972 ++++++++++++++++++++------------
 drivers/net/ethernet/rocker/rocker.h   |   28 +-
 drivers/net/team/team.c                |    7 +-
 include/linux/netdev_features.h        |    5 +-
 include/linux/netdevice.h              |    2 +-
 include/net/switchdev.h                |  213 ++++---
 net/bridge/br.c                        |   22 +-
 net/bridge/br_netlink.c                |   24 +-
 net/bridge/br_stp.c                    |    6 +-
 net/core/ethtool.c                     |    1 -
 net/core/net-sysfs.c                   |   10 +-
 net/core/rtnetlink.c                   |    9 +-
 net/dsa/slave.c                        |   40 +-
 net/ipv4/fib_trie.c                    |   40 +-
 net/switchdev/switchdev.c              |  662 ++++++++++++++++------
 17 files changed, 1723 insertions(+), 742 deletions(-)
Signature · 1 line
1.7.10.4