mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 01:10:04 +00:00
net: bridge: Stop calling switchdev_port_attr_get()
Now that all switchdev drivers have been converted to check the SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS flags and report flags that they do not support accordingly, we can migrate the bridge code to try to set that attribute first, check the results and then do the actual setting. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
93700458ff
commit
1ef0764486
1 changed files with 5 additions and 6 deletions
|
@ -64,21 +64,19 @@ int br_switchdev_set_port_flag(struct net_bridge_port *p,
|
||||||
{
|
{
|
||||||
struct switchdev_attr attr = {
|
struct switchdev_attr attr = {
|
||||||
.orig_dev = p->dev,
|
.orig_dev = p->dev,
|
||||||
.id = SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS_SUPPORT,
|
.id = SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS,
|
||||||
|
.u.brport_flags = mask,
|
||||||
};
|
};
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (mask & ~BR_PORT_FLAGS_HW_OFFLOAD)
|
if (mask & ~BR_PORT_FLAGS_HW_OFFLOAD)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err = switchdev_port_attr_get(p->dev, &attr);
|
err = switchdev_port_attr_set(p->dev, &attr);
|
||||||
if (err == -EOPNOTSUPP)
|
if (err == -EOPNOTSUPP)
|
||||||
return 0;
|
return 0;
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
/* Check if specific bridge flag attribute offload is supported */
|
if (err) {
|
||||||
if (!(attr.u.brport_flags_support & mask)) {
|
|
||||||
br_warn(p->br, "bridge flag offload is not supported %u(%s)\n",
|
br_warn(p->br, "bridge flag offload is not supported %u(%s)\n",
|
||||||
(unsigned int)p->port_no, p->dev->name);
|
(unsigned int)p->port_no, p->dev->name);
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
@ -87,6 +85,7 @@ int br_switchdev_set_port_flag(struct net_bridge_port *p,
|
||||||
attr.id = SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS;
|
attr.id = SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS;
|
||||||
attr.flags = SWITCHDEV_F_DEFER;
|
attr.flags = SWITCHDEV_F_DEFER;
|
||||||
attr.u.brport_flags = flags;
|
attr.u.brport_flags = flags;
|
||||||
|
|
||||||
err = switchdev_port_attr_set(p->dev, &attr);
|
err = switchdev_port_attr_set(p->dev, &attr);
|
||||||
if (err) {
|
if (err) {
|
||||||
br_warn(p->br, "error setting offload flag on port %u(%s)\n",
|
br_warn(p->br, "error setting offload flag on port %u(%s)\n",
|
||||||
|
|
Loading…
Reference in a new issue