• Vladimir Oltean's avatar
    net: switchdev: remove the transaction structure from port attributes · bae33f2b
    Vladimir Oltean authored
    Since the introduction of the switchdev API, port attributes were
    transmitted to drivers for offloading using a two-step transactional
    model, with a prepare phase that was supposed to catch all errors, and a
    commit phase that was supposed to never fail.
    
    Some classes of failures can never be avoided, like hardware access, or
    memory allocation. In the latter case, merely attempting to move the
    memory allocation to the preparation phase makes it impossible to avoid
    memory leaks, since commit 91cf8ece ("switchdev: Remove unused
    transaction item queue") which has removed the unused mechanism of
    passing on the allocated memory between one phase and another.
    
    It is time we admit that separating the preparation from the commit
    phase is something that is best left for the driver to decide, and not
    something that should be baked into the API, especially since there are
    no switchdev callers that depend on this.
    
    This patch removes the struct switchdev_trans member from switchdev port
    attribute notifier structures, and converts drivers to not look at this
    member.
    
    In part, this patch contains a revert of my previous commit 2e554a7a
    ("net: dsa: propagate switchdev vlan_filtering prepare phase to
    drivers").
    
    For the most part, the conversion was trivial except for:
    - Rocker's world implementation based on Broadcom OF-DPA had an odd
      implementation of ofdpa_port_attr_bridge_flags_set. The conversion was
      done mechanically, by pasting the implementation twice, then only
      keeping the code that would get executed during prepare phase on top,
      then only keeping the code that gets executed during the commit phase
      on bottom, then simplifying the resulting code until this was obtained.
    - DSA's offloading of STP state, bridge flags, VLAN filtering and
      multicast router could be converted right away. But the ageing time
      could not, so a shim was introduced and this was left for a further
      commit.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Acked-by: default avatarJiri Pirko <jiri@nvidia.com>
    Reviewed-by: Kurt Kanzenbach <kurt@linutronix.de> # hellcreek
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org> # RTL8366RB
    Reviewed-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    bae33f2b
switchdev.h 10.2 KB