mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-02 16:55:16 -04:00
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 <gakula@marvell.com> Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20241023161843.15543-3-gakula@marvell.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
fbc704b310
commit
03d80a1ba5
@@ -997,6 +997,8 @@ int otx2_pool_init(struct otx2_nic *pfvf, u16 pool_id,
|
||||
int otx2_aura_init(struct otx2_nic *pfvf, int aura_id,
|
||||
int pool_id, int numptrs);
|
||||
int otx2_init_rsrc(struct pci_dev *pdev, struct otx2_nic *pf);
|
||||
void otx2_free_queue_mem(struct otx2_qset *qset);
|
||||
int otx2_alloc_queue_mem(struct otx2_nic *pf);
|
||||
|
||||
/* RSS configuration APIs*/
|
||||
int otx2_rss_init(struct otx2_nic *pfvf);
|
||||
|
||||
@@ -1770,15 +1770,23 @@ static void otx2_dim_work(struct work_struct *w)
|
||||
dim->state = DIM_START_MEASURE;
|
||||
}
|
||||
|
||||
int otx2_open(struct net_device *netdev)
|
||||
void otx2_free_queue_mem(struct otx2_qset *qset)
|
||||
{
|
||||
struct otx2_nic *pf = netdev_priv(netdev);
|
||||
struct otx2_cq_poll *cq_poll = NULL;
|
||||
struct otx2_qset *qset = &pf->qset;
|
||||
int err = 0, qidx, vec;
|
||||
char *irq_name;
|
||||
kfree(qset->sq);
|
||||
qset->sq = NULL;
|
||||
kfree(qset->cq);
|
||||
qset->cq = NULL;
|
||||
kfree(qset->rq);
|
||||
qset->rq = NULL;
|
||||
kfree(qset->napi);
|
||||
qset->napi = NULL;
|
||||
}
|
||||
|
||||
int otx2_alloc_queue_mem(struct otx2_nic *pf)
|
||||
{
|
||||
struct otx2_qset *qset = &pf->qset;
|
||||
struct otx2_cq_poll *cq_poll;
|
||||
|
||||
netif_carrier_off(netdev);
|
||||
|
||||
/* RQ and SQs are mapped to different CQs,
|
||||
* so find out max CQ IRQs (i.e CINTs) needed.
|
||||
@@ -1798,7 +1806,6 @@ int otx2_open(struct net_device *netdev)
|
||||
/* CQ size of SQ */
|
||||
qset->sqe_cnt = qset->sqe_cnt ? qset->sqe_cnt : Q_COUNT(Q_SIZE_4K);
|
||||
|
||||
err = -ENOMEM;
|
||||
qset->cq = kcalloc(pf->qset.cq_cnt,
|
||||
sizeof(struct otx2_cq_queue), GFP_KERNEL);
|
||||
if (!qset->cq)
|
||||
@@ -1814,6 +1821,27 @@ int otx2_open(struct net_device *netdev)
|
||||
if (!qset->rq)
|
||||
goto err_free_mem;
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_mem:
|
||||
otx2_free_queue_mem(qset);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
int otx2_open(struct net_device *netdev)
|
||||
{
|
||||
struct otx2_nic *pf = netdev_priv(netdev);
|
||||
struct otx2_cq_poll *cq_poll = NULL;
|
||||
struct otx2_qset *qset = &pf->qset;
|
||||
int err = 0, qidx, vec;
|
||||
char *irq_name;
|
||||
|
||||
netif_carrier_off(netdev);
|
||||
|
||||
err = otx2_alloc_queue_mem(pf);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = otx2_init_hw_resources(pf);
|
||||
if (err)
|
||||
goto err_free_mem;
|
||||
@@ -1979,10 +2007,7 @@ int otx2_open(struct net_device *netdev)
|
||||
otx2_disable_napi(pf);
|
||||
otx2_free_hw_resources(pf);
|
||||
err_free_mem:
|
||||
kfree(qset->sq);
|
||||
kfree(qset->cq);
|
||||
kfree(qset->rq);
|
||||
kfree(qset->napi);
|
||||
otx2_free_queue_mem(qset);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(otx2_open);
|
||||
@@ -2047,11 +2072,7 @@ int otx2_stop(struct net_device *netdev)
|
||||
for (qidx = 0; qidx < netdev->num_tx_queues; qidx++)
|
||||
netdev_tx_reset_queue(netdev_get_tx_queue(netdev, qidx));
|
||||
|
||||
|
||||
kfree(qset->sq);
|
||||
kfree(qset->cq);
|
||||
kfree(qset->rq);
|
||||
kfree(qset->napi);
|
||||
otx2_free_queue_mem(qset);
|
||||
/* Do not clear RQ/SQ ringsize settings */
|
||||
memset_startat(qset, 0, sqe_cnt);
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user