Skip to content

Commit 0d3e663

Browse files
Yunsheng Lindavem330
authored andcommitted
net: hns3: refactor the get/put_vector function
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> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent ec77789 commit 0d3e663

File tree

4 files changed

+37
-10
lines changed

4 files changed

+37
-10
lines changed

drivers/net/ethernet/hisilicon/hns3/hnae3.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@ struct hnae3_ae_dev {
265265
* Get tc size of handle
266266
* get_vector()
267267
* Get vector number and vector information
268+
* put_vector()
269+
* Put the vector in hdev
268270
* map_ring_to_vector()
269271
* Map rings to vector
270272
* unmap_ring_from_vector()
@@ -375,6 +377,7 @@ struct hnae3_ae_ops {
375377

376378
int (*get_vector)(struct hnae3_handle *handle, u16 vector_num,
377379
struct hnae3_vector_info *vector_info);
380+
int (*put_vector)(struct hnae3_handle *handle, int vector_num);
378381
int (*map_ring_to_vector)(struct hnae3_handle *handle,
379382
int vector_num,
380383
struct hnae3_ring_chain_node *vr_chain);

drivers/net/ethernet/hisilicon/hns3/hns3_enet.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2721,6 +2721,10 @@ static int hns3_nic_uninit_vector_data(struct hns3_nic_priv *priv)
27212721
if (ret)
27222722
return ret;
27232723

2724+
ret = h->ae_algo->ops->put_vector(h, tqp_vector->vector_irq);
2725+
if (ret)
2726+
return ret;
2727+
27242728
hns3_free_vector_ring_chain(tqp_vector, &vector_ring_chain);
27252729

27262730
if (priv->tqp_vector[i].irq_init_flag == HNS3_VECTOR_INITED) {

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2969,6 +2969,24 @@ static int hclge_get_vector_index(struct hclge_dev *hdev, int vector)
29692969
return -EINVAL;
29702970
}
29712971

2972+
static int hclge_put_vector(struct hnae3_handle *handle, int vector)
2973+
{
2974+
struct hclge_vport *vport = hclge_get_vport(handle);
2975+
struct hclge_dev *hdev = vport->back;
2976+
int vector_id;
2977+
2978+
vector_id = hclge_get_vector_index(hdev, vector);
2979+
if (vector_id < 0) {
2980+
dev_err(&hdev->pdev->dev,
2981+
"Get vector index fail. vector_id =%d\n", vector_id);
2982+
return vector_id;
2983+
}
2984+
2985+
hclge_free_vector(hdev, vector_id);
2986+
2987+
return 0;
2988+
}
2989+
29722990
static u32 hclge_get_rss_key_size(struct hnae3_handle *handle)
29732991
{
29742992
return HCLGE_RSS_KEY_SIZE;
@@ -3523,18 +3541,13 @@ static int hclge_unmap_ring_frm_vector(struct hnae3_handle *handle,
35233541
}
35243542

35253543
ret = hclge_bind_ring_with_vector(vport, vector_id, false, ring_chain);
3526-
if (ret) {
3544+
if (ret)
35273545
dev_err(&handle->pdev->dev,
35283546
"Unmap ring from vector fail. vectorid=%d, ret =%d\n",
35293547
vector_id,
35303548
ret);
3531-
return ret;
3532-
}
3533-
3534-
/* Free this MSIX or MSI vector */
3535-
hclge_free_vector(hdev, vector_id);
35363549

3537-
return 0;
3550+
return ret;
35383551
}
35393552

35403553
int hclge_cmd_set_promisc_mode(struct hclge_dev *hdev,
@@ -5994,6 +6007,7 @@ static const struct hnae3_ae_ops hclge_ops = {
59946007
.map_ring_to_vector = hclge_map_ring_to_vector,
59956008
.unmap_ring_from_vector = hclge_unmap_ring_frm_vector,
59966009
.get_vector = hclge_get_vector,
6010+
.put_vector = hclge_put_vector,
59976011
.set_promisc_mode = hclge_set_promisc_mode,
59986012
.set_loopback = hclge_set_loopback,
59996013
.start = hclge_ae_start,

drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -627,13 +627,18 @@ static int hclgevf_unmap_ring_from_vector(
627627
}
628628

629629
ret = hclgevf_bind_ring_to_vector(handle, false, vector, ring_chain);
630-
if (ret) {
630+
if (ret)
631631
dev_err(&handle->pdev->dev,
632632
"Unmap ring from vector fail. vector=%d, ret =%d\n",
633633
vector_id,
634634
ret);
635-
return ret;
636-
}
635+
636+
return ret;
637+
}
638+
639+
static int hclgevf_put_vector(struct hnae3_handle *handle, int vector)
640+
{
641+
struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
637642

638643
hclgevf_free_vector(hdev, vector);
639644

@@ -1466,6 +1471,7 @@ static const struct hnae3_ae_ops hclgevf_ops = {
14661471
.map_ring_to_vector = hclgevf_map_ring_to_vector,
14671472
.unmap_ring_from_vector = hclgevf_unmap_ring_from_vector,
14681473
.get_vector = hclgevf_get_vector,
1474+
.put_vector = hclgevf_put_vector,
14691475
.reset_queue = hclgevf_reset_tqp,
14701476
.set_promisc_mode = hclgevf_set_promisc_mode,
14711477
.get_mac_addr = hclgevf_get_mac_addr,

0 commit comments

Comments
 (0)