Skip to content

Commit 03d80a1

Browse files
Geetha sowjanyakuba-moo
authored andcommitted
octeontx2-pf: Add new APIs for queue memory alloc/free.
Group the queue(RX/TX/CQ) memory allocation and free code to single APIs. Signed-off-by: Geetha sowjanya <[email protected]> Reviewed-by: Pavan Chebbi <[email protected]> Reviewed-by: Simon Horman <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent fbc704b commit 03d80a1

File tree

2 files changed

+39
-16
lines changed

2 files changed

+39
-16
lines changed

drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -997,6 +997,8 @@ int otx2_pool_init(struct otx2_nic *pfvf, u16 pool_id,
997997
int otx2_aura_init(struct otx2_nic *pfvf, int aura_id,
998998
int pool_id, int numptrs);
999999
int otx2_init_rsrc(struct pci_dev *pdev, struct otx2_nic *pf);
1000+
void otx2_free_queue_mem(struct otx2_qset *qset);
1001+
int otx2_alloc_queue_mem(struct otx2_nic *pf);
10001002

10011003
/* RSS configuration APIs*/
10021004
int otx2_rss_init(struct otx2_nic *pfvf);

drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1770,15 +1770,23 @@ static void otx2_dim_work(struct work_struct *w)
17701770
dim->state = DIM_START_MEASURE;
17711771
}
17721772

1773-
int otx2_open(struct net_device *netdev)
1773+
void otx2_free_queue_mem(struct otx2_qset *qset)
1774+
{
1775+
kfree(qset->sq);
1776+
qset->sq = NULL;
1777+
kfree(qset->cq);
1778+
qset->cq = NULL;
1779+
kfree(qset->rq);
1780+
qset->rq = NULL;
1781+
kfree(qset->napi);
1782+
qset->napi = NULL;
1783+
}
1784+
1785+
int otx2_alloc_queue_mem(struct otx2_nic *pf)
17741786
{
1775-
struct otx2_nic *pf = netdev_priv(netdev);
1776-
struct otx2_cq_poll *cq_poll = NULL;
17771787
struct otx2_qset *qset = &pf->qset;
1778-
int err = 0, qidx, vec;
1779-
char *irq_name;
1788+
struct otx2_cq_poll *cq_poll;
17801789

1781-
netif_carrier_off(netdev);
17821790

17831791
/* RQ and SQs are mapped to different CQs,
17841792
* so find out max CQ IRQs (i.e CINTs) needed.
@@ -1798,7 +1806,6 @@ int otx2_open(struct net_device *netdev)
17981806
/* CQ size of SQ */
17991807
qset->sqe_cnt = qset->sqe_cnt ? qset->sqe_cnt : Q_COUNT(Q_SIZE_4K);
18001808

1801-
err = -ENOMEM;
18021809
qset->cq = kcalloc(pf->qset.cq_cnt,
18031810
sizeof(struct otx2_cq_queue), GFP_KERNEL);
18041811
if (!qset->cq)
@@ -1814,6 +1821,27 @@ int otx2_open(struct net_device *netdev)
18141821
if (!qset->rq)
18151822
goto err_free_mem;
18161823

1824+
return 0;
1825+
1826+
err_free_mem:
1827+
otx2_free_queue_mem(qset);
1828+
return -ENOMEM;
1829+
}
1830+
1831+
int otx2_open(struct net_device *netdev)
1832+
{
1833+
struct otx2_nic *pf = netdev_priv(netdev);
1834+
struct otx2_cq_poll *cq_poll = NULL;
1835+
struct otx2_qset *qset = &pf->qset;
1836+
int err = 0, qidx, vec;
1837+
char *irq_name;
1838+
1839+
netif_carrier_off(netdev);
1840+
1841+
err = otx2_alloc_queue_mem(pf);
1842+
if (err)
1843+
return err;
1844+
18171845
err = otx2_init_hw_resources(pf);
18181846
if (err)
18191847
goto err_free_mem;
@@ -1979,10 +2007,7 @@ int otx2_open(struct net_device *netdev)
19792007
otx2_disable_napi(pf);
19802008
otx2_free_hw_resources(pf);
19812009
err_free_mem:
1982-
kfree(qset->sq);
1983-
kfree(qset->cq);
1984-
kfree(qset->rq);
1985-
kfree(qset->napi);
2010+
otx2_free_queue_mem(qset);
19862011
return err;
19872012
}
19882013
EXPORT_SYMBOL(otx2_open);
@@ -2047,11 +2072,7 @@ int otx2_stop(struct net_device *netdev)
20472072
for (qidx = 0; qidx < netdev->num_tx_queues; qidx++)
20482073
netdev_tx_reset_queue(netdev_get_tx_queue(netdev, qidx));
20492074

2050-
2051-
kfree(qset->sq);
2052-
kfree(qset->cq);
2053-
kfree(qset->rq);
2054-
kfree(qset->napi);
2075+
otx2_free_queue_mem(qset);
20552076
/* Do not clear RQ/SQ ringsize settings */
20562077
memset_startat(qset, 0, sqe_cnt);
20572078
return 0;

0 commit comments

Comments
 (0)