• Vladimir Oltean's avatar
    net: switchdev: pass flags and mask to both {PRE_,}BRIDGE_FLAGS attributes · e18f4c18
    Vladimir Oltean authored
    This switchdev attribute offers a counterproductive API for a driver
    writer, because although br_switchdev_set_port_flag gets passed a
    "flags" and a "mask", those are passed piecemeal to the driver, so while
    the PRE_BRIDGE_FLAGS listener knows what changed because it has the
    "mask", the BRIDGE_FLAGS listener doesn't, because it only has the final
    value. But certain drivers can offload only certain combinations of
    settings, like for example they cannot change unicast flooding
    independently of multicast flooding - they must be both on or both off.
    The way the information is passed to switchdev makes drivers not
    expressive enough, and unable to reject this request ahead of time, in
    the PRE_BRIDGE_FLAGS notifier, so they are forced to reject it during
    the deferred BRIDGE_FLAGS attribute, where the rejection is currently
    ignored.
    
    This patch also changes drivers to make use of the "mask" field for edge
    detection when possible.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e18f4c18
port.c 21.8 KB