netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Peng Li <lipeng321@huawei.com>
To: <davem@davemloft.net>
Cc: <netdev@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<linuxarm@huawei.com>, <salil.mehta@huawei.com>,
	<lipeng321@huawei.com>
Subject: [PATCH net-next 15/23] {topost} net: hns3: refactor the get/put_vector function
Date: Thu, 8 Mar 2018 11:06:40 +0800	[thread overview]
Message-ID: <1520478408-116992-16-git-send-email-lipeng321@huawei.com> (raw)
In-Reply-To: <1520478408-116992-1-git-send-email-lipeng321@huawei.com>

From: Yunsheng Lin <linyunsheng@huawei.com>

There is a get_vector function, which allocate the vectors
for a client, but there is not a put_vector to free the
vector.

This patch introduces the put_vector function in order to
fix the coalesce configuration lost problem during reset
process.

Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: Peng Li <lipeng321@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns3/hnae3.h        |  3 +++
 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c    |  4 ++++
 .../ethernet/hisilicon/hns3/hns3pf/hclge_main.c    | 28 ++++++++++++++++------
 .../ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c  | 12 +++++++---
 4 files changed, 37 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
index 3c653eb..70441d2 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
@@ -265,6 +265,8 @@ struct hnae3_ae_dev {
  *   Get tc size of handle
  * get_vector()
  *   Get vector number and vector information
+ * put_vector()
+ *   Put the vector in hdev
  * map_ring_to_vector()
  *   Map rings to vector
  * unmap_ring_from_vector()
@@ -376,6 +378,7 @@ struct hnae3_ae_ops {
 
 	int (*get_vector)(struct hnae3_handle *handle, u16 vector_num,
 			  struct hnae3_vector_info *vector_info);
+	int (*put_vector)(struct hnae3_handle *handle, int vector_num);
 	int (*map_ring_to_vector)(struct hnae3_handle *handle,
 				  int vector_num,
 				  struct hnae3_ring_chain_node *vr_chain);
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
index 2bed73e..fef65b9 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
@@ -2709,6 +2709,10 @@ static int hns3_nic_uninit_vector_data(struct hns3_nic_priv *priv)
 		if (ret)
 			return ret;
 
+		ret = h->ae_algo->ops->put_vector(h, tqp_vector->vector_irq);
+		if (ret)
+			return ret;
+
 		hns3_free_vector_ring_chain(tqp_vector, &vector_ring_chain);
 
 		if (priv->tqp_vector[i].irq_init_flag == HNS3_VECTOR_INITED) {
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
index c0f6939..323f95b 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -2969,6 +2969,24 @@ static int hclge_get_vector_index(struct hclge_dev *hdev, int vector)
 	return -EINVAL;
 }
 
+static int hclge_put_vector(struct hnae3_handle *handle, int vector)
+{
+	struct hclge_vport *vport = hclge_get_vport(handle);
+	struct hclge_dev *hdev = vport->back;
+	int vector_id;
+
+	vector_id = hclge_get_vector_index(hdev, vector);
+	if (vector_id < 0) {
+		dev_err(&hdev->pdev->dev,
+			"Get vector index fail. vector_id =%d\n", vector_id);
+		return vector_id;
+	}
+
+	hclge_free_vector(hdev, vector_id);
+
+	return 0;
+}
+
 static u32 hclge_get_rss_key_size(struct hnae3_handle *handle)
 {
 	return HCLGE_RSS_KEY_SIZE;
@@ -3523,18 +3541,13 @@ static int hclge_unmap_ring_frm_vector(struct hnae3_handle *handle,
 	}
 
 	ret = hclge_bind_ring_with_vector(vport, vector_id, false, ring_chain);
-	if (ret) {
+	if (ret)
 		dev_err(&handle->pdev->dev,
 			"Unmap ring from vector fail. vectorid=%d, ret =%d\n",
 			vector_id,
 			ret);
-		return ret;
-	}
-
-	/* Free this MSIX or MSI vector */
-	hclge_free_vector(hdev, vector_id);
 
-	return 0;
+	return ret;
 }
 
 int hclge_cmd_set_promisc_mode(struct hclge_dev *hdev,
@@ -5996,6 +6009,7 @@ static const struct hnae3_ae_ops hclge_ops = {
 	.map_ring_to_vector = hclge_map_ring_to_vector,
 	.unmap_ring_from_vector = hclge_unmap_ring_frm_vector,
 	.get_vector = hclge_get_vector,
+	.put_vector = hclge_put_vector,
 	.set_promisc_mode = hclge_set_promisc_mode,
 	.set_loopback = hclge_set_loopback,
 	.start = hclge_ae_start,
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
index eee5e20..6bce99a 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
@@ -627,13 +627,18 @@ static int hclgevf_unmap_ring_from_vector(
 	}
 
 	ret = hclgevf_bind_ring_to_vector(handle, false, vector, ring_chain);
-	if (ret) {
+	if (ret)
 		dev_err(&handle->pdev->dev,
 			"Unmap ring from vector fail. vector=%d, ret =%d\n",
 			vector_id,
 			ret);
-		return ret;
-	}
+
+	return ret;
+}
+
+static int hclgevf_put_vector(struct hnae3_handle *handle, int vector)
+{
+	struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
 
 	hclgevf_free_vector(hdev, vector);
 
@@ -1464,6 +1469,7 @@ static const struct hnae3_ae_ops hclgevf_ops = {
 	.map_ring_to_vector = hclgevf_map_ring_to_vector,
 	.unmap_ring_from_vector = hclgevf_unmap_ring_from_vector,
 	.get_vector = hclgevf_get_vector,
+	.put_vector = hclgevf_put_vector,
 	.reset_queue = hclgevf_reset_tqp,
 	.set_promisc_mode = hclgevf_set_promisc_mode,
 	.get_mac_addr = hclgevf_get_mac_addr,
-- 
2.9.3

  parent reply	other threads:[~2018-03-08  3:06 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-08  3:06 [PATCH net-next 00/23] net: hns3: HNS3 bug fixes & code improvements Peng Li
2018-03-08  3:06 ` [PATCH net-next 01/23] {topost} net: hns3: VF should get the real rss_size instead of rss_size_max Peng Li
2018-03-08  3:06 ` [PATCH net-next 02/23] {topost} net: hns3: add existence check when remove old uc mac address Peng Li
2018-03-08  3:06 ` [PATCH net-next 03/23] {topost} net: hns3: set the cmdq out_vld bit to 0 after used Peng Li
2018-03-08  3:06 ` [PATCH net-next 04/23] {topost} net: hns3: fix endian issue when PF get mbx message flag Peng Li
2018-03-08  3:06 ` [PATCH net-next 05/23] {topost} net: hns3: fix for netdev not running problem after calling net_stop and net_open Peng Li
2018-03-08  3:06 ` [PATCH net-next 06/23] {topost} net: hns3: fix for ipv6 address loss problem after setting channels Peng Li
2018-03-08  3:06 ` [PATCH net-next 07/23] {topost} net: hns3: unify the pause params setup function Peng Li
2018-03-08  3:06 ` [PATCH net-next 08/23] {topost} net: hns3: fix rx path skb->truesize reporting bug Peng Li
2018-03-08  3:06 ` [PATCH net-next 09/23] {topost} net: hns3: add support for querying pfc puase packets statistic Peng Li
2018-03-08  3:06 ` [PATCH net-next 10/23] {topost} net: hns3: refactor the hclge_get/set_rss function Peng Li
2018-03-08  3:06 ` [PATCH net-next 11/23] {topost} net: hns3: refactor the hclge_get/set_rss_tuple function Peng Li
2018-03-08  3:06 ` [PATCH net-next 12/23] {topost} net: hns3: fix for RSS configuration loss problem during reset Peng Li
2018-03-08  3:06 ` [PATCH net-next 13/23] {topost} net: hns3: fix for pause configuration lost " Peng Li
2018-03-08  3:06 ` [PATCH net-next 14/23] {topost} net: hns3: fix for use-after-free when setting ring parameter Peng Li
2018-03-08  3:06 ` Peng Li [this message]
2018-03-08  3:06 ` [PATCH net-next 16/23] {topost} net: hns3: fix for coalesce configuration lost during reset Peng Li
2018-03-08  3:06 ` [PATCH net-next 17/23] {topost} net: hns3: refactor the coalesce related struct Peng Li
2018-03-08  3:06 ` [PATCH net-next 18/23] {topost} net: hns3: fix for coal configuation lost when setting the channel Peng Li
2018-03-08  3:06 ` [PATCH net-next 19/23] {topost} net: hns3: fix for loopback failure when vlan filter is enable Peng Li
2018-03-08  3:06 ` [PATCH net-next 20/23] {topost} net: hns3: fix for buffer overflow smatch warning Peng Li
2018-03-08  3:06 ` [PATCH net-next 21/23] {topost} net: hns3: fix the queue id for tqp enable&&reset Peng Li
2018-03-08  3:06 ` [PATCH net-next 22/23] {topost} net: hns3: set the max ring num when alloc netdev Peng Li
2018-03-08  3:06 ` [PATCH net-next 23/23] {topost} net: hns3: add support for VF driver inner interface hclgevf_ops.get_tqps_and_rss_info Peng Li
2018-03-08  5:00 ` [PATCH net-next 00/23] net: hns3: HNS3 bug fixes & code improvements David Miller
2018-03-08  8:46   ` lipeng (Y)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1520478408-116992-16-git-send-email-lipeng321@huawei.com \
    --to=lipeng321@huawei.com \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=netdev@vger.kernel.org \
    --cc=salil.mehta@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).