With the bridge no longer calling switchdev_port_attr_get() to obtain the supported bridge port flags from a driver but instead trying to set the bridge port flags directly and relying on driver to reject unsupported configurations, we can effectively get rid of switchdev_port_attr_get() entirely since this was the only place where it was called.
Unified · Split
| @@ -233,7 +233,7 @@ the bridge's FDB. It's possible, but not optimal, to enable learning on the · 232 unmodified lines | |||
| 233 | device port and on the bridge port, and disable learning_sync. | 233 | device port and on the bridge port, and disable learning_sync. |
| 234 | 234 | ||
| 235 | To support learning, the driver implements switchdev op | 235 | To support learning, the driver implements switchdev op |
| 236 | switchdev_port_attr_get/set for SWITCHDEV_ATTR_PORT_ID_BRIDGE_FLAGS. | 236 | switchdev_port_attr_set for SWITCHDEV_ATTR_PORT_ID_{PRE}_BRIDGE_FLAGS. |
| 237 | 237 | ||
| 238 | FDB Ageing | 238 | FDB Ageing |
| 239 | ^^^^^^^^^^ | 239 | ^^^^^^^^^^ |
| @@ -431,12 +431,6 @@ static void mlxsw_sp_bridge_vlan_put(struct mlxsw_sp_bridge_vlan *bridge_vlan) · 430 unmodified lines | |||
| 431 | mlxsw_sp_bridge_vlan_destroy(bridge_vlan); | 431 | mlxsw_sp_bridge_vlan_destroy(bridge_vlan); |
| 432 | } | 432 | } |
| 433 | 433 | ||
| 434 | static int mlxsw_sp_port_attr_get(struct net_device *dev, | ||
| 435 | struct switchdev_attr *attr) | ||
| 436 | { | ||
| 437 | return -EOPNOTSUPP; | ||
| 438 | } | ||
| 439 | |||
| 440 | static int | 434 | static int |
| 441 | mlxsw_sp_port_bridge_vlan_stp_set(struct mlxsw_sp_port *mlxsw_sp_port, | 435 | mlxsw_sp_port_bridge_vlan_stp_set(struct mlxsw_sp_port *mlxsw_sp_port, |
| 442 | struct mlxsw_sp_bridge_vlan *bridge_vlan, | 436 | struct mlxsw_sp_bridge_vlan *bridge_vlan, |
| @@ -1945,7 +1939,6 @@ static struct mlxsw_sp_port *mlxsw_sp_lag_rep_port(struct mlxsw_sp *mlxsw_sp, · 1502 unmodified lines | |||
| 1945 | } | 1939 | } |
| 1946 | 1940 | ||
| 1947 | static const struct switchdev_ops mlxsw_sp_port_switchdev_ops = { | 1941 | static const struct switchdev_ops mlxsw_sp_port_switchdev_ops = { |
| 1948 | .switchdev_port_attr_get = mlxsw_sp_port_attr_get, | ||
| 1949 | .switchdev_port_attr_set = mlxsw_sp_port_attr_set, | 1942 | .switchdev_port_attr_set = mlxsw_sp_port_attr_set, |
| 1950 | }; | 1943 | }; |
| 1951 | 1944 | ||
| @@ -2066,12 +2066,6 @@ static const struct net_device_ops rocker_port_netdev_ops = { · 2065 unmodified lines | |||
| 2066 | * swdev interface | 2066 | * swdev interface |
| 2067 | ********************/ | 2067 | ********************/ |
| 2068 | 2068 | ||
| 2069 | static int rocker_port_attr_get(struct net_device *dev, | ||
| 2070 | struct switchdev_attr *attr) | ||
| 2071 | { | ||
| 2072 | return -EOPNOTSUPP; | ||
| 2073 | } | ||
| 2074 | |||
| 2075 | static int rocker_port_attr_set(struct net_device *dev, | 2069 | static int rocker_port_attr_set(struct net_device *dev, |
| 2076 | const struct switchdev_attr *attr, | 2070 | const struct switchdev_attr *attr, |
| 2077 | struct switchdev_trans *trans) | 2071 | struct switchdev_trans *trans) |
| @@ -2148,7 +2142,6 @@ static int rocker_port_obj_del(struct net_device *dev, · 70 unmodified lines | |||
| 2148 | } | 2142 | } |
| 2149 | 2143 | ||
| 2150 | static const struct switchdev_ops rocker_port_switchdev_ops = { | 2144 | static const struct switchdev_ops rocker_port_switchdev_ops = { |
| 2151 | .switchdev_port_attr_get = rocker_port_attr_get, | ||
| 2152 | .switchdev_port_attr_set = rocker_port_attr_set, | 2145 | .switchdev_port_attr_set = rocker_port_attr_set, |
| 2153 | }; | 2146 | }; |
| 2154 | 2147 | ||
| @@ -640,12 +640,6 @@ static void ethsw_teardown_irqs(struct fsl_mc_device *sw_dev) · 639 unmodified lines | |||
| 640 | fsl_mc_free_irqs(sw_dev); | 640 | fsl_mc_free_irqs(sw_dev); |
| 641 | } | 641 | } |
| 642 | 642 | ||
| 643 | static int swdev_port_attr_get(struct net_device *netdev, | ||
| 644 | struct switchdev_attr *attr) | ||
| 645 | { | ||
| 646 | return -EOPNOTSUPP; | ||
| 647 | } | ||
| 648 | |||
| 649 | static int port_attr_stp_state_set(struct net_device *netdev, | 643 | static int port_attr_stp_state_set(struct net_device *netdev, |
| 650 | struct switchdev_trans *trans, | 644 | struct switchdev_trans *trans, |
| 651 | u8 state) | 645 | u8 state) |
| @@ -932,7 +926,6 @@ static int swdev_port_obj_del(struct net_device *netdev, · 280 unmodified lines | |||
| 932 | } | 926 | } |
| 933 | 927 | ||
| 934 | static const struct switchdev_ops ethsw_port_switchdev_ops = { | 928 | static const struct switchdev_ops ethsw_port_switchdev_ops = { |
| 935 | .switchdev_port_attr_get = swdev_port_attr_get, | ||
| 936 | .switchdev_port_attr_set = swdev_port_attr_set, | 929 | .switchdev_port_attr_set = swdev_port_attr_set, |
| 937 | }; | 930 | }; |
| 938 | 931 | ||
| @@ -179,8 +179,6 @@ switchdev_notifier_info_to_extack(const struct switchdev_notifier_info *info) · 178 unmodified lines | |||
| 179 | #ifdef CONFIG_NET_SWITCHDEV | 179 | #ifdef CONFIG_NET_SWITCHDEV |
| 180 | 180 | ||
| 181 | void switchdev_deferred_process(void); | 181 | void switchdev_deferred_process(void); |
| 182 | int switchdev_port_attr_get(struct net_device *dev, | ||
| 183 | struct switchdev_attr *attr); | ||
| 184 | int switchdev_port_attr_set(struct net_device *dev, | 182 | int switchdev_port_attr_set(struct net_device *dev, |
| 185 | const struct switchdev_attr *attr); | 183 | const struct switchdev_attr *attr); |
| 186 | int switchdev_port_obj_add(struct net_device *dev, | 184 | int switchdev_port_obj_add(struct net_device *dev, |
| @@ -225,12 +223,6 @@ static inline void switchdev_deferred_process(void) · 38 unmodified lines | |||
| 225 | { | 223 | { |
| 226 | } | 224 | } |
| 227 | 225 | ||
| 228 | static inline int switchdev_port_attr_get(struct net_device *dev, | ||
| 229 | struct switchdev_attr *attr) | ||
| 230 | { | ||
| 231 | return -EOPNOTSUPP; | ||
| 232 | } | ||
| 233 | |||
| 234 | static inline int switchdev_port_attr_set(struct net_device *dev, | 226 | static inline int switchdev_port_attr_set(struct net_device *dev, |
| 235 | const struct switchdev_attr *attr) | 227 | const struct switchdev_attr *attr) |
| 236 | { | 228 | { |
| @@ -385,12 +385,6 @@ static int dsa_slave_get_port_parent_id(struct net_device *dev, · 384 unmodified lines | |||
| 385 | return 0; | 385 | return 0; |
| 386 | } | 386 | } |
| 387 | 387 | ||
| 388 | static int dsa_slave_port_attr_get(struct net_device *dev, | ||
| 389 | struct switchdev_attr *attr) | ||
| 390 | { | ||
| 391 | return -EOPNOTSUPP; | ||
| 392 | } | ||
| 393 | |||
| 394 | static inline netdev_tx_t dsa_slave_netpoll_send_skb(struct net_device *dev, | 388 | static inline netdev_tx_t dsa_slave_netpoll_send_skb(struct net_device *dev, |
| 395 | struct sk_buff *skb) | 389 | struct sk_buff *skb) |
| 396 | { | 390 | { |
| @@ -1057,7 +1051,6 @@ static const struct net_device_ops dsa_slave_netdev_ops = { · 660 unmodified lines | |||
| 1057 | }; | 1051 | }; |
| 1058 | 1052 | ||
| 1059 | static const struct switchdev_ops dsa_slave_switchdev_ops = { | 1053 | static const struct switchdev_ops dsa_slave_switchdev_ops = { |
| 1060 | .switchdev_port_attr_get = dsa_slave_port_attr_get, | ||
| 1061 | .switchdev_port_attr_set = dsa_slave_port_attr_set, | 1054 | .switchdev_port_attr_set = dsa_slave_port_attr_set, |
| 1062 | }; | 1055 | }; |
| 1063 | 1056 | ||