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

Merge branch 'hns3-fixes'



Jijie Shao says:

====================
There are some bugfix for the HNS3 ethernet driver

There are some bugfix for the HNS3 ethernet driver
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents b472b996 968fde83
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -3535,6 +3535,9 @@ static int hns3_alloc_ring_buffers(struct hns3_enet_ring *ring)
		ret = hns3_alloc_and_attach_buffer(ring, i);
		if (ret)
			goto out_buffer_fail;

		if (!(i % HNS3_RESCHED_BD_NUM))
			cond_resched();
	}

	return 0;
@@ -5107,6 +5110,7 @@ int hns3_init_all_ring(struct hns3_nic_priv *priv)
		}

		u64_stats_init(&priv->ring[i].syncp);
		cond_resched();
	}

	return 0;
+2 −0
Original line number Diff line number Diff line
@@ -214,6 +214,8 @@ enum hns3_nic_state {
#define HNS3_CQ_MODE_EQE			1U
#define HNS3_CQ_MODE_CQE			0U

#define HNS3_RESCHED_BD_NUM			1024

enum hns3_pkt_l2t_type {
	HNS3_L2_TYPE_UNICAST,
	HNS3_L2_TYPE_MULTICAST,
+16 −5
Original line number Diff line number Diff line
@@ -3086,9 +3086,7 @@ static void hclge_push_link_status(struct hclge_dev *hdev)

static void hclge_update_link_status(struct hclge_dev *hdev)
{
	struct hnae3_handle *rhandle = &hdev->vport[0].roce;
	struct hnae3_handle *handle = &hdev->vport[0].nic;
	struct hnae3_client *rclient = hdev->roce_client;
	struct hnae3_client *client = hdev->nic_client;
	int state;
	int ret;
@@ -3112,8 +3110,15 @@ static void hclge_update_link_status(struct hclge_dev *hdev)

		client->ops->link_status_change(handle, state);
		hclge_config_mac_tnl_int(hdev, state);

		if (test_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state)) {
			struct hnae3_handle *rhandle = &hdev->vport[0].roce;
			struct hnae3_client *rclient = hdev->roce_client;

			if (rclient && rclient->ops->link_status_change)
			rclient->ops->link_status_change(rhandle, state);
				rclient->ops->link_status_change(rhandle,
								 state);
		}

		hclge_push_link_status(hdev);
	}
@@ -11319,6 +11324,12 @@ static int hclge_init_client_instance(struct hnae3_client *client,
	return ret;
}

static bool hclge_uninit_need_wait(struct hclge_dev *hdev)
{
	return test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) ||
	       test_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state);
}

static void hclge_uninit_client_instance(struct hnae3_client *client,
					 struct hnae3_ae_dev *ae_dev)
{
@@ -11327,7 +11338,7 @@ static void hclge_uninit_client_instance(struct hnae3_client *client,

	if (hdev->roce_client) {
		clear_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state);
		while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
		while (hclge_uninit_need_wait(hdev))
			msleep(HCLGE_WAIT_RESET_DONE);

		hdev->roce_client->ops->uninit_instance(&vport->roce, 0);