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

Commit 4f2aa89c authored by Ajit Khaparde's avatar Ajit Khaparde Committed by David S. Miller
Browse files

be2net: Bug fix to send config commands to hardware after netdev_register



Sending config commands to be2 hardware before netdev_register is
completed, is sometimes causing the async link notification to arrive
even before the driver is ready to handle it. The commands for vlan
config and flow control settings can infact wait till be_open.
This patch takes care of that.

Signed-off-by: default avatarAjit Khaparde <ajitk@serverengines.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9e90c961
Loading
Loading
Loading
Loading
+12 −12
Original line number Original line Diff line number Diff line
@@ -1610,11 +1610,21 @@ static int be_open(struct net_device *netdev)


	status = be_cmd_link_status_query(adapter, &link_up);
	status = be_cmd_link_status_query(adapter, &link_up);
	if (status)
	if (status)
		return status;
		goto ret_sts;
	be_link_status_update(adapter, link_up);
	be_link_status_update(adapter, link_up);


	status = be_vid_config(adapter);
	if (status)
		goto ret_sts;

	status = be_cmd_set_flow_control(adapter,
					adapter->tx_fc, adapter->rx_fc);
	if (status)
		goto ret_sts;

	schedule_delayed_work(&adapter->work, msecs_to_jiffies(100));
	schedule_delayed_work(&adapter->work, msecs_to_jiffies(100));
	return 0;
ret_sts:
	return status;
}
}


static int be_setup(struct be_adapter *adapter)
static int be_setup(struct be_adapter *adapter)
@@ -1648,18 +1658,8 @@ static int be_setup(struct be_adapter *adapter)
	if (status != 0)
	if (status != 0)
		goto rx_qs_destroy;
		goto rx_qs_destroy;


	status = be_vid_config(adapter);
	if (status != 0)
		goto mccqs_destroy;

	status = be_cmd_set_flow_control(adapter,
					adapter->tx_fc, adapter->rx_fc);
	if (status != 0)
		goto mccqs_destroy;
	return 0;
	return 0;


mccqs_destroy:
	be_mcc_queues_destroy(adapter);
rx_qs_destroy:
rx_qs_destroy:
	be_rx_queues_destroy(adapter);
	be_rx_queues_destroy(adapter);
tx_qs_destroy:
tx_qs_destroy: