Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3bc32d03 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'mlxsw-cleanup-neigh-handling'



Jiri Pirko says:

====================
mlxsw: cleanup neigh handling

Ido says:

This series addresses long standing issues in the mlxsw driver
concerning neighbour reflection. It also prepares the code for follow-up
changes dealing with proper resource cleanup and nexthop reflection.

The first two patches convert the neighbour reflection code to use an
ordered workqueue, to prevent re-ordering of NEIGH_UPDATE events that
may happen following subsequent patches.

The third to fifth patches remove the ndo_neigh_{construct,destroy}
entry points from the driver, thereby relying only on NEIGH_UPDATE
events for neighbour reflection. This simplifies the code considerably.

Last patches are fallout and adjust nits in the code I noticed while
going over it.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents fcdc103d fd76d910
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -4145,8 +4145,6 @@ static const struct net_device_ops bond_netdev_ops = {
	.ndo_add_slave		= bond_enslave,
	.ndo_del_slave		= bond_release,
	.ndo_fix_features	= bond_fix_features,
	.ndo_neigh_construct	= netdev_default_l2upper_neigh_construct,
	.ndo_neigh_destroy	= netdev_default_l2upper_neigh_destroy,
	.ndo_bridge_setlink	= switchdev_port_bridge_setlink,
	.ndo_bridge_getlink	= switchdev_port_bridge_getlink,
	.ndo_bridge_dellink	= switchdev_port_bridge_dellink,
+3 −3
Original line number Diff line number Diff line
@@ -1901,11 +1901,11 @@ int mlxsw_core_schedule_dw(struct delayed_work *dwork, unsigned long delay)
}
EXPORT_SYMBOL(mlxsw_core_schedule_dw);

int mlxsw_core_schedule_odw(struct delayed_work *dwork, unsigned long delay)
bool mlxsw_core_schedule_work(struct work_struct *work)
{
	return queue_delayed_work(mlxsw_owq, dwork, delay);
	return queue_work(mlxsw_owq, work);
}
EXPORT_SYMBOL(mlxsw_core_schedule_odw);
EXPORT_SYMBOL(mlxsw_core_schedule_work);

void mlxsw_core_flush_owq(void)
{
+1 −1
Original line number Diff line number Diff line
@@ -207,7 +207,7 @@ enum devlink_port_type mlxsw_core_port_type_get(struct mlxsw_core *mlxsw_core,
						u8 local_port);

int mlxsw_core_schedule_dw(struct delayed_work *dwork, unsigned long delay);
int mlxsw_core_schedule_odw(struct delayed_work *dwork, unsigned long delay);
bool mlxsw_core_schedule_work(struct work_struct *work);
void mlxsw_core_flush_owq(void);

#define MLXSW_CONFIG_PROFILE_SWID_COUNT 8
+0 −2
Original line number Diff line number Diff line
@@ -1400,8 +1400,6 @@ static const struct net_device_ops mlxsw_sp_port_netdev_ops = {
	.ndo_get_offload_stats	= mlxsw_sp_port_get_offload_stats,
	.ndo_vlan_rx_add_vid	= mlxsw_sp_port_add_vid,
	.ndo_vlan_rx_kill_vid	= mlxsw_sp_port_kill_vid,
	.ndo_neigh_construct	= mlxsw_sp_router_neigh_construct,
	.ndo_neigh_destroy	= mlxsw_sp_router_neigh_destroy,
	.ndo_fdb_add		= switchdev_port_fdb_add,
	.ndo_fdb_del		= switchdev_port_fdb_del,
	.ndo_fdb_dump		= switchdev_port_fdb_dump,
+0 −4
Original line number Diff line number Diff line
@@ -599,10 +599,6 @@ static inline void mlxsw_sp_port_dcb_fini(struct mlxsw_sp_port *mlxsw_sp_port)

int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp);
void mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp);
int mlxsw_sp_router_neigh_construct(struct net_device *dev,
				    struct neighbour *n);
void mlxsw_sp_router_neigh_destroy(struct net_device *dev,
				   struct neighbour *n);
int mlxsw_sp_router_netevent_event(struct notifier_block *unused,
				   unsigned long event, void *ptr);

Loading