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

Commit e0e31afb authored by Bob Sharp's avatar Bob Sharp Committed by Roland Dreier
Browse files

RDMA/nes: Enable MC/UC after changing MTU



Re-enable multicast and unicast after changing MTU.

Signed-off-by: default avatarBob Sharp <bsharp@neteffect.com>
Signed-off-by: default avatarSweta Bhatt <sweta.bhatt@einfochips.com>
Signed-off-by: default avatarChien Tung <ctung@neteffect.com>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 7a8d1407
Loading
Loading
Loading
Loading
+20 −0
Original line number Original line Diff line number Diff line
@@ -918,6 +918,10 @@ static int nes_netdev_change_mtu(struct net_device *netdev, int new_mtu)
	struct nes_device *nesdev = nesvnic->nesdev;
	struct nes_device *nesdev = nesvnic->nesdev;
	int ret = 0;
	int ret = 0;
	u8 jumbomode = 0;
	u8 jumbomode = 0;
	u32 nic_active;
	u32 nic_active_bit;
	u32 uc_all_active;
	u32 mc_all_active;


	if ((new_mtu < ETH_ZLEN) || (new_mtu > max_mtu))
	if ((new_mtu < ETH_ZLEN) || (new_mtu > max_mtu))
		return -EINVAL;
		return -EINVAL;
@@ -931,8 +935,24 @@ static int nes_netdev_change_mtu(struct net_device *netdev, int new_mtu)
	nes_nic_init_timer_defaults(nesdev, jumbomode);
	nes_nic_init_timer_defaults(nesdev, jumbomode);


	if (netif_running(netdev)) {
	if (netif_running(netdev)) {
		nic_active_bit = 1 << nesvnic->nic_index;
		mc_all_active = nes_read_indexed(nesdev,
				NES_IDX_NIC_MULTICAST_ALL) & nic_active_bit;
		uc_all_active = nes_read_indexed(nesdev,
				NES_IDX_NIC_UNICAST_ALL)  & nic_active_bit;

		nes_netdev_stop(netdev);
		nes_netdev_stop(netdev);
		nes_netdev_open(netdev);
		nes_netdev_open(netdev);

		nic_active = nes_read_indexed(nesdev,
					NES_IDX_NIC_MULTICAST_ALL);
		nic_active |= mc_all_active;
		nes_write_indexed(nesdev, NES_IDX_NIC_MULTICAST_ALL,
							nic_active);

		nic_active = nes_read_indexed(nesdev, NES_IDX_NIC_UNICAST_ALL);
		nic_active |= uc_all_active;
		nes_write_indexed(nesdev, NES_IDX_NIC_UNICAST_ALL, nic_active);
	}
	}


	return ret;
	return ret;