lkml.org 
[lkml]   [2019]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH net-next v2 6/9] rocker: Check Handle PORT_PRE_BRIDGE_FLAGS
    Date
    In preparation for getting rid of switchdev_port_attr_get(), have rocker
    check for the bridge flags being set through switchdev_port_attr_set()
    with the SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS attribute identifier.

    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    ---
    drivers/net/ethernet/rocker/rocker_main.c | 56 ++++++++++++++++++-----
    1 file changed, 44 insertions(+), 12 deletions(-)

    diff --git a/drivers/net/ethernet/rocker/rocker_main.c b/drivers/net/ethernet/rocker/rocker_main.c
    index 5ce8d5aba603..2102e449c037 100644
    --- a/drivers/net/ethernet/rocker/rocker_main.c
    +++ b/drivers/net/ethernet/rocker/rocker_main.c
    @@ -1566,34 +1566,62 @@ static int rocker_world_port_attr_stp_state_set(struct rocker_port *rocker_port,
    }

    static int
    -rocker_world_port_attr_bridge_flags_set(struct rocker_port *rocker_port,
    - unsigned long brport_flags,
    - struct switchdev_trans *trans)
    +rocker_world_port_attr_bridge_flags_support_get(const struct rocker_port *
    + rocker_port,
    + unsigned long *
    + p_brport_flags_support)
    {
    struct rocker_world_ops *wops = rocker_port->rocker->wops;

    + if (!wops->port_attr_bridge_flags_support_get)
    + return -EOPNOTSUPP;
    + return wops->port_attr_bridge_flags_support_get(rocker_port,
    + p_brport_flags_support);
    +}
    +
    +static int
    +rocker_world_port_attr_bridge_pre_flags_set(struct rocker_port *rocker_port,
    + unsigned long brport_flags,
    + struct switchdev_trans *trans)
    +{
    + struct rocker_world_ops *wops = rocker_port->rocker->wops;
    + unsigned long brport_flags_s;
    + int err;
    +
    if (!wops->port_attr_bridge_flags_set)
    return -EOPNOTSUPP;

    if (switchdev_trans_ph_prepare(trans))
    return 0;

    - return wops->port_attr_bridge_flags_set(rocker_port, brport_flags,
    - trans);
    + err = rocker_world_port_attr_bridge_flags_support_get(rocker_port,
    + &brport_flags_s);
    + if (err)
    + return err;
    +
    + if (brport_flags & ~brport_flags_s)
    + return -EINVAL;
    +
    + return 0;
    }

    static int
    -rocker_world_port_attr_bridge_flags_support_get(const struct rocker_port *
    - rocker_port,
    - unsigned long *
    - p_brport_flags_support)
    +rocker_world_port_attr_bridge_flags_set(struct rocker_port *rocker_port,
    + unsigned long brport_flags,
    + struct switchdev_trans *trans)
    {
    struct rocker_world_ops *wops = rocker_port->rocker->wops;
    + unsigned long brport_flags_s;
    + int err;

    - if (!wops->port_attr_bridge_flags_support_get)
    + if (!wops->port_attr_bridge_flags_set)
    return -EOPNOTSUPP;
    - return wops->port_attr_bridge_flags_support_get(rocker_port,
    - p_brport_flags_support);
    +
    + if (switchdev_trans_ph_prepare(trans))
    + return 0;
    +
    + return wops->port_attr_bridge_flags_set(rocker_port, brport_flags,
    + trans);
    }

    static int
    @@ -2074,6 +2102,10 @@ static int rocker_port_attr_set(struct net_device *dev,
    attr->u.stp_state,
    trans);
    break;
    + case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
    + err = rocker_world_port_attr_bridge_pre_flags_set(rocker_port,
    + attr->u.brport_flags,
    + trans);
    case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
    err = rocker_world_port_attr_bridge_flags_set(rocker_port,
    attr->u.brport_flags,
    --
    2.17.1
    \
     
     \ /
      Last update: 2019-02-15 23:54    [W:3.290 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site