diff mbox series

[net-next,4/4] octeontx2-pf: Export common APIs

Message ID 20240903124048.14235-5-gakula@marvell.com (mailing list archive)
State Superseded
Delegated to: Netdev Maintainers
Headers show
Series Refactoring RVU NIC driver | expand

Checks

Context Check Description
netdev/series_format success Posting correctly formatted
netdev/tree_selection success Clearly marked for net-next
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 7 this patch: 7
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers success CCed 8 of 8 maintainers
netdev/build_clang success Errors and warnings before: 16 this patch: 16
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 28 this patch: 28
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 286 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
netdev/contest success net-next-2024-09-04--00-00 (tests: 713)

Commit Message

Geetha sowjanya Sept. 3, 2024, 12:40 p.m. UTC
Export mbox, hw resources and interrupt configuration functions.
So, that they can be used later by the RVU representor driver.
  
Signed-off-by: Geetha sowjanya <gakula@marvell.com>
---
 .../marvell/octeontx2/nic/otx2_common.c       |  2 +
 .../marvell/octeontx2/nic/otx2_common.h       | 11 +++++
 .../ethernet/marvell/octeontx2/nic/otx2_pf.c  | 40 +++++++++++++------
 .../marvell/octeontx2/nic/otx2_txrx.c         | 17 +++++---
 .../marvell/octeontx2/nic/otx2_txrx.h         |  3 +-
 .../ethernet/marvell/octeontx2/nic/otx2_vf.c  |  6 +--
 6 files changed, 56 insertions(+), 23 deletions(-)

Comments

Jiri Pirko Sept. 3, 2024, 3 p.m. UTC | #1
Tue, Sep 03, 2024 at 02:40:48PM CEST, gakula@marvell.com wrote:
>Export mbox, hw resources and interrupt configuration functions.
>So, that they can be used later by the RVU representor driver.
>  
>Signed-off-by: Geetha sowjanya <gakula@marvell.com>
>---
> .../marvell/octeontx2/nic/otx2_common.c       |  2 +
> .../marvell/octeontx2/nic/otx2_common.h       | 11 +++++
> .../ethernet/marvell/octeontx2/nic/otx2_pf.c  | 40 +++++++++++++------
> .../marvell/octeontx2/nic/otx2_txrx.c         | 17 +++++---
> .../marvell/octeontx2/nic/otx2_txrx.h         |  3 +-
> .../ethernet/marvell/octeontx2/nic/otx2_vf.c  |  6 +--
> 6 files changed, 56 insertions(+), 23 deletions(-)
>
>diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
>index 34e76cfd941b..e38b3eea11f3 100644
>--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
>+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
>@@ -246,6 +246,7 @@ int otx2_hw_set_mtu(struct otx2_nic *pfvf, int mtu)
> 	mutex_unlock(&pfvf->mbox.lock);
> 	return err;
> }
>+EXPORT_SYMBOL(otx2_hw_set_mtu);
> 
> int otx2_config_pause_frm(struct otx2_nic *pfvf)
> {
>@@ -1782,6 +1783,7 @@ void otx2_free_cints(struct otx2_nic *pfvf, int n)
> 		free_irq(vector, &qset->napi[qidx]);
> 	}
> }
>+EXPORT_SYMBOL(otx2_free_cints);
> 
> void otx2_set_cints_affinity(struct otx2_nic *pfvf)
> {
>diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
>index b36b87dae2cb..327254e578d5 100644
>--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
>+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
>@@ -1000,6 +1000,17 @@ int otx2_aura_init(struct otx2_nic *pfvf, int aura_id,
> 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);
>+int otx2_init_hw_resources(struct otx2_nic *pfvf);
>+void otx2_free_hw_resources(struct otx2_nic *pf);
>+int otx2_wq_init(struct otx2_nic *pf);
>+int otx2_check_pf_usable(struct otx2_nic *pf);
>+int otx2_pfaf_mbox_init(struct otx2_nic *pf);
>+int otx2_register_mbox_intr(struct otx2_nic *pf, bool probe_af);
>+int otx2_realloc_msix_vectors(struct otx2_nic *pf);
>+void otx2_pfaf_mbox_destroy(struct otx2_nic *pf);
>+void otx2_disable_mbox_intr(struct otx2_nic *pf);
>+void otx2_disable_napi(struct otx2_nic *pf);
>+irqreturn_t otx2_cq_intr_handler(int irq, void *cq_irq);
> 
> /* RSS configuration APIs*/
> int otx2_rss_init(struct otx2_nic *pfvf);
>diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
>index 5bb6db5a3a73..b4fa2c12721d 100644
>--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
>+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
>@@ -1008,7 +1008,7 @@ static irqreturn_t otx2_pfaf_mbox_intr_handler(int irq, void *pf_irq)
> 	return IRQ_HANDLED;
> }
> 
>-static void otx2_disable_mbox_intr(struct otx2_nic *pf)
>+void otx2_disable_mbox_intr(struct otx2_nic *pf)
> {
> 	int vector = pci_irq_vector(pf->pdev, RVU_PF_INT_VEC_AFPF_MBOX);
> 
>@@ -1016,8 +1016,9 @@ static void otx2_disable_mbox_intr(struct otx2_nic *pf)
> 	otx2_write64(pf, RVU_PF_INT_ENA_W1C, BIT_ULL(0));
> 	free_irq(vector, pf);
> }
>+EXPORT_SYMBOL(otx2_disable_mbox_intr);
> 
>-static int otx2_register_mbox_intr(struct otx2_nic *pf, bool probe_af)
>+int otx2_register_mbox_intr(struct otx2_nic *pf, bool probe_af)
> {
> 	struct otx2_hw *hw = &pf->hw;
> 	struct msg_req *req;
>@@ -1060,8 +1061,9 @@ static int otx2_register_mbox_intr(struct otx2_nic *pf, bool probe_af)
> 
> 	return 0;
> }
>+EXPORT_SYMBOL(otx2_register_mbox_intr);
> 
>-static void otx2_pfaf_mbox_destroy(struct otx2_nic *pf)
>+void otx2_pfaf_mbox_destroy(struct otx2_nic *pf)
> {
> 	struct mbox *mbox = &pf->mbox;
> 
>@@ -1076,8 +1078,9 @@ static void otx2_pfaf_mbox_destroy(struct otx2_nic *pf)
> 	otx2_mbox_destroy(&mbox->mbox);
> 	otx2_mbox_destroy(&mbox->mbox_up);
> }
>+EXPORT_SYMBOL(otx2_pfaf_mbox_destroy);
> 
>-static int otx2_pfaf_mbox_init(struct otx2_nic *pf)
>+int otx2_pfaf_mbox_init(struct otx2_nic *pf)
> {
> 	struct mbox *mbox = &pf->mbox;
> 	void __iomem *hwbase;
>@@ -1124,6 +1127,7 @@ static int otx2_pfaf_mbox_init(struct otx2_nic *pf)
> 	otx2_pfaf_mbox_destroy(pf);
> 	return err;
> }
>+EXPORT_SYMBOL(otx2_pfaf_mbox_init);
> 
> static int otx2_cgx_config_linkevents(struct otx2_nic *pf, bool enable)
> {
>@@ -1379,7 +1383,7 @@ static irqreturn_t otx2_q_intr_handler(int irq, void *data)
> 	return IRQ_HANDLED;
> }
> 
>-static irqreturn_t otx2_cq_intr_handler(int irq, void *cq_irq)
>+irqreturn_t otx2_cq_intr_handler(int irq, void *cq_irq)
> {
> 	struct otx2_cq_poll *cq_poll = (struct otx2_cq_poll *)cq_irq;
> 	struct otx2_nic *pf = (struct otx2_nic *)cq_poll->dev;
>@@ -1398,20 +1402,25 @@ static irqreturn_t otx2_cq_intr_handler(int irq, void *cq_irq)
> 
> 	return IRQ_HANDLED;
> }
>+EXPORT_SYMBOL(otx2_cq_intr_handler);
> 
>-static void otx2_disable_napi(struct otx2_nic *pf)
>+void otx2_disable_napi(struct otx2_nic *pf)
> {
> 	struct otx2_qset *qset = &pf->qset;
> 	struct otx2_cq_poll *cq_poll;
>+	struct work_struct *work;
> 	int qidx;
> 
> 	for (qidx = 0; qidx < pf->hw.cint_cnt; qidx++) {
> 		cq_poll = &qset->napi[qidx];
>-		cancel_work_sync(&cq_poll->dim.work);
>+		work = &cq_poll->dim.work;
>+		if (work->func)
>+			cancel_work_sync(work);
> 		napi_disable(&cq_poll->napi);
> 		netif_napi_del(&cq_poll->napi);
> 	}
> }
>+EXPORT_SYMBOL(otx2_disable_napi);
> 
> static void otx2_free_cq_res(struct otx2_nic *pf)
> {
>@@ -1477,7 +1486,7 @@ static int otx2_get_rbuf_size(struct otx2_nic *pf, int mtu)
> 	return ALIGN(rbuf_size, 2048);
> }
> 
>-static int otx2_init_hw_resources(struct otx2_nic *pf)
>+int otx2_init_hw_resources(struct otx2_nic *pf)
> {
> 	struct nix_lf_free_req *free_req;
> 	struct mbox *mbox = &pf->mbox;
>@@ -1601,8 +1610,9 @@ static int otx2_init_hw_resources(struct otx2_nic *pf)
> 	mutex_unlock(&mbox->lock);
> 	return err;
> }
>+EXPORT_SYMBOL(otx2_init_hw_resources);
> 
>-static void otx2_free_hw_resources(struct otx2_nic *pf)
>+void otx2_free_hw_resources(struct otx2_nic *pf)
> {
> 	struct otx2_qset *qset = &pf->qset;
> 	struct nix_lf_free_req *free_req;
>@@ -1688,6 +1698,7 @@ static void otx2_free_hw_resources(struct otx2_nic *pf)
> 	}
> 	mutex_unlock(&mbox->lock);
> }
>+EXPORT_SYMBOL(otx2_free_hw_resources);
> 
> static bool otx2_promisc_use_mce_list(struct otx2_nic *pfvf)
> {
>@@ -1781,6 +1792,7 @@ void otx2_free_queue_mem(struct otx2_qset *qset)
> 	kfree(qset->napi);
> }
> EXPORT_SYMBOL(otx2_free_queue_mem);
>+
> int otx2_alloc_queue_mem(struct otx2_nic *pf)
> {
> 	struct otx2_qset *qset = &pf->qset;
>@@ -2103,7 +2115,7 @@ static netdev_tx_t otx2_xmit(struct sk_buff *skb, struct net_device *netdev)
> 	sq = &pf->qset.sq[sq_idx];
> 	txq = netdev_get_tx_queue(netdev, qidx);
> 
>-	if (!otx2_sq_append_skb(netdev, sq, skb, qidx)) {
>+	if (!otx2_sq_append_skb(pf, txq, sq, skb, qidx)) {
> 		netif_tx_stop_queue(txq);
> 
> 		/* Check again, incase SQBs got freed up */
>@@ -2808,7 +2820,7 @@ static const struct net_device_ops otx2_netdev_ops = {
> 	.ndo_set_vf_trust	= otx2_ndo_set_vf_trust,
> };
> 
>-static int otx2_wq_init(struct otx2_nic *pf)
>+int otx2_wq_init(struct otx2_nic *pf)
> {
> 	pf->otx2_wq = create_singlethread_workqueue("otx2_wq");
> 	if (!pf->otx2_wq)
>@@ -2819,7 +2831,7 @@ static int otx2_wq_init(struct otx2_nic *pf)
> 	return 0;
> }
> 
>-static int otx2_check_pf_usable(struct otx2_nic *nic)
>+int otx2_check_pf_usable(struct otx2_nic *nic)
> {
> 	u64 rev;
> 
>@@ -2836,8 +2848,9 @@ static int otx2_check_pf_usable(struct otx2_nic *nic)
> 	}
> 	return 0;
> }
>+EXPORT_SYMBOL(otx2_check_pf_usable);
> 
>-static int otx2_realloc_msix_vectors(struct otx2_nic *pf)
>+int otx2_realloc_msix_vectors(struct otx2_nic *pf)
> {
> 	struct otx2_hw *hw = &pf->hw;
> 	int num_vec, err;
>@@ -2859,6 +2872,7 @@ static int otx2_realloc_msix_vectors(struct otx2_nic *pf)
> 
> 	return otx2_register_mbox_intr(pf, false);
> }
>+EXPORT_SYMBOL(otx2_realloc_msix_vectors);
> 
> static int otx2_sriov_vfcfg_init(struct otx2_nic *pf)
> {
>diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
>index 3eb85949677a..fbd9fe98259f 100644
>--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
>+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
>@@ -131,6 +131,7 @@ static void otx2_xdp_snd_pkt_handler(struct otx2_nic *pfvf,
> }
> 
> static void otx2_snd_pkt_handler(struct otx2_nic *pfvf,
>+				 struct net_device *ndev,
> 				 struct otx2_cq_queue *cq,
> 				 struct otx2_snd_queue *sq,
> 				 struct nix_cqe_tx_s *cqe,
>@@ -145,7 +146,7 @@ static void otx2_snd_pkt_handler(struct otx2_nic *pfvf,
> 
> 	if (unlikely(snd_comp->status) && netif_msg_tx_err(pfvf))
> 		net_err_ratelimited("%s: TX%d: Error in send CQ status:%x\n",
>-				    pfvf->netdev->name, cq->cint_idx,
>+				    ndev->name, cq->cint_idx,
> 				    snd_comp->status);
> 
> 	sg = &sq->sg[snd_comp->sqe_id];
>@@ -453,6 +454,7 @@ static int otx2_tx_napi_handler(struct otx2_nic *pfvf,
> 	int tx_pkts = 0, tx_bytes = 0, qidx;
> 	struct otx2_snd_queue *sq;
> 	struct nix_cqe_tx_s *cqe;
>+	struct net_device *ndev;
> 	int processed_cqe = 0;
> 
> 	if (cq->pend_cqe >= budget)
>@@ -464,6 +466,7 @@ static int otx2_tx_napi_handler(struct otx2_nic *pfvf,
> process_cqe:
> 	qidx = cq->cq_idx - pfvf->hw.rx_queues;
> 	sq = &pfvf->qset.sq[qidx];
>+	ndev = pfvf->netdev;
> 
> 	while (likely(processed_cqe < budget) && cq->pend_cqe) {
> 		cqe = (struct nix_cqe_tx_s *)otx2_get_next_cqe(cq);
>@@ -478,7 +481,8 @@ static int otx2_tx_napi_handler(struct otx2_nic *pfvf,
> 		if (cq->cq_type == CQ_XDP)
> 			otx2_xdp_snd_pkt_handler(pfvf, sq, cqe);
> 		else
>-			otx2_snd_pkt_handler(pfvf, cq, &pfvf->qset.sq[qidx],
>+			otx2_snd_pkt_handler(pfvf, ndev, cq,
>+					     &pfvf->qset.sq[qidx],
> 					     cqe, budget, &tx_pkts, &tx_bytes);
> 
> 		cqe->hdr.cqe_type = NIX_XQE_TYPE_INVALID;
>@@ -505,7 +509,7 @@ static int otx2_tx_napi_handler(struct otx2_nic *pfvf,
> 		/* Check if queue was stopped earlier due to ring full */
> 		smp_mb();
> 		if (netif_tx_queue_stopped(txq) &&
>-		    netif_carrier_ok(pfvf->netdev))
>+		    netif_carrier_ok(ndev))
> 			netif_tx_wake_queue(txq);


I don't understand the this change you do in otx2_tx_napi_handler() and
otx2_snd_pkt_handler(). What are you trying to achieve?
Also, it is unrelated to the rest of the patch (export functions)


> 	}
> 	return 0;
>@@ -594,6 +598,7 @@ int otx2_napi_handler(struct napi_struct *napi, int budget)
> 	}
> 	return workdone;
> }
>+EXPORT_SYMBOL(otx2_napi_handler);
> 
> void otx2_sqe_flush(void *dev, struct otx2_snd_queue *sq,
> 		    int size, int qidx)
>@@ -1141,13 +1146,13 @@ static void otx2_set_txtstamp(struct otx2_nic *pfvf, struct sk_buff *skb,
> 	}
> }
> 
>-bool otx2_sq_append_skb(struct net_device *netdev, struct otx2_snd_queue *sq,
>+bool otx2_sq_append_skb(void *dev, struct netdev_queue *txq,

1) This looks like unrelated to the rest of the patch (export functions)
2) Why void *? Avoid that please. Just have arg
struct otx2_nic *pfvf
no?



>+			struct otx2_snd_queue *sq,
> 			struct sk_buff *skb, u16 qidx)
> {
>-	struct netdev_queue *txq = netdev_get_tx_queue(netdev, qidx);
>-	struct otx2_nic *pfvf = netdev_priv(netdev);
> 	int offset, num_segs, free_desc;
> 	struct nix_sqe_hdr_s *sqe_hdr;
>+	struct otx2_nic *pfvf = dev;
> 
> 	/* Check if there is enough room between producer
> 	 * and consumer index.
>diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h
>index 3f1d2655ff77..e1db5f961877 100644
>--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h
>+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h
>@@ -167,7 +167,8 @@ static inline u64 otx2_iova_to_phys(void *iommu_domain, dma_addr_t dma_addr)
> }
> 
> int otx2_napi_handler(struct napi_struct *napi, int budget);
>-bool otx2_sq_append_skb(struct net_device *netdev, struct otx2_snd_queue *sq,
>+bool otx2_sq_append_skb(void *dev, struct netdev_queue *txq,
>+			struct otx2_snd_queue *sq,
> 			struct sk_buff *skb, u16 qidx);
> void cn10k_sqe_flush(void *dev, struct otx2_snd_queue *sq,
> 		     int size, int qidx);
>diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
>index 79a8acac6283..0486fca8b573 100644
>--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
>+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
>@@ -395,7 +395,7 @@ static netdev_tx_t otx2vf_xmit(struct sk_buff *skb, struct net_device *netdev)
> 	sq = &vf->qset.sq[qidx];
> 	txq = netdev_get_tx_queue(netdev, qidx);
> 
>-	if (!otx2_sq_append_skb(netdev, sq, skb, qidx)) {
>+	if (!otx2_sq_append_skb(vf, txq, sq, skb, qidx)) {
> 		netif_tx_stop_queue(txq);
> 
> 		/* Check again, incase SQBs got freed up */
>@@ -500,7 +500,7 @@ static const struct net_device_ops otx2vf_netdev_ops = {
> 	.ndo_setup_tc = otx2_setup_tc,
> };
> 
>-static int otx2_wq_init(struct otx2_nic *vf)
>+static int otx2_vf_wq_init(struct otx2_nic *vf)
> {
> 	vf->otx2_wq = create_singlethread_workqueue("otx2vf_wq");
> 	if (!vf->otx2_wq)
>@@ -689,7 +689,7 @@ static int otx2vf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> 		goto err_ptp_destroy;
> 	}
> 
>-	err = otx2_wq_init(vf);
>+	err = otx2_vf_wq_init(vf);
> 	if (err)
> 		goto err_unreg_netdev;
> 
>-- 
>2.25.1
>
Geetha sowjanya Sept. 4, 2024, 6:20 a.m. UTC | #2
>-----Original Message-----
>From: Jiri Pirko <jiri@resnulli.us>
>Sent: Tuesday, September 3, 2024 8:31 PM
>To: Geethasowjanya Akula <gakula@marvell.com>
>Cc: netdev@vger.kernel.org; linux-kernel@vger.kernel.org; kuba@kernel.org;
>davem@davemloft.net; pabeni@redhat.com; edumazet@google.com; Sunil
>Kovvuri Goutham <sgoutham@marvell.com>; Subbaraya Sundeep Bhatta
><sbhatta@marvell.com>; Hariprasad Kelam <hkelam@marvell.com>
>Subject: [EXTERNAL] Re: [net-next PATCH 4/4] octeontx2-pf: Export common
>APIs
>
>Tue, Sep 03, 2024 at 02: 40: 48PM CEST, gakula@ marvell. com wrote: >Export
>mbox, hw resources and interrupt configuration functions. >So, that they can
>be used later by the RVU representor driver. > >Signed-off-by: Geetha sowjanya
><gakula@ marvell. com> 
>Tue, Sep 03, 2024 at 02:40:48PM CEST, gakula@marvell.com wrote:
>>Export mbox, hw resources and interrupt configuration functions.
>>So, that they can be used later by the RVU representor driver.
>>
>>Signed-off-by: Geetha sowjanya <gakula@marvell.com>
>>---
>> .../marvell/octeontx2/nic/otx2_common.c       |  2 +
>> .../marvell/octeontx2/nic/otx2_common.h       | 11 +++++
>> .../ethernet/marvell/octeontx2/nic/otx2_pf.c  | 40 +++++++++++++------
>> .../marvell/octeontx2/nic/otx2_txrx.c         | 17 +++++---
>> .../marvell/octeontx2/nic/otx2_txrx.h         |  3 +-
>> .../ethernet/marvell/octeontx2/nic/otx2_vf.c  |  6 +--
>> 6 files changed, 56 insertions(+), 23 deletions(-)
>>
>>diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
>>b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
>>index 34e76cfd941b..e38b3eea11f3 100644
>>--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
>>+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
>>@@ -246,6 +246,7 @@ int otx2_hw_set_mtu(struct otx2_nic *pfvf, int mtu)
>> 	mutex_unlock(&pfvf->mbox.lock);
>> 	return err;
>> }
>>+EXPORT_SYMBOL(otx2_hw_set_mtu);
>>
>> int otx2_config_pause_frm(struct otx2_nic *pfvf)  { @@ -1782,6 +1783,7
>>@@ void otx2_free_cints(struct otx2_nic *pfvf, int n)
>> 		free_irq(vector, &qset->napi[qidx]);
>> 	}
>> }
>>+EXPORT_SYMBOL(otx2_free_cints);
>>
>> void otx2_set_cints_affinity(struct otx2_nic *pfvf)  { diff --git
>>a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
>>b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
>>index b36b87dae2cb..327254e578d5 100644
>>--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
>>+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
>>@@ -1000,6 +1000,17 @@ int otx2_aura_init(struct otx2_nic *pfvf, int
>>aura_id,  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);
>>+int otx2_init_hw_resources(struct otx2_nic *pfvf); void
>>+otx2_free_hw_resources(struct otx2_nic *pf); int otx2_wq_init(struct
>>+otx2_nic *pf); int otx2_check_pf_usable(struct otx2_nic *pf); int
>>+otx2_pfaf_mbox_init(struct otx2_nic *pf); int
>>+otx2_register_mbox_intr(struct otx2_nic *pf, bool probe_af); int
>>+otx2_realloc_msix_vectors(struct otx2_nic *pf); void
>>+otx2_pfaf_mbox_destroy(struct otx2_nic *pf); void
>>+otx2_disable_mbox_intr(struct otx2_nic *pf); void
>>+otx2_disable_napi(struct otx2_nic *pf); irqreturn_t
>>+otx2_cq_intr_handler(int irq, void *cq_irq);
>>
>> /* RSS configuration APIs*/
>> int otx2_rss_init(struct otx2_nic *pfvf); diff --git
>>a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
>>b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
>>index 5bb6db5a3a73..b4fa2c12721d 100644
>>--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
>>+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
>>@@ -1008,7 +1008,7 @@ static irqreturn_t otx2_pfaf_mbox_intr_handler(int
>irq, void *pf_irq)
>> 	return IRQ_HANDLED;
>> }
>>
>>-static void otx2_disable_mbox_intr(struct otx2_nic *pf)
>>+void otx2_disable_mbox_intr(struct otx2_nic *pf)
>> {
>> 	int vector = pci_irq_vector(pf->pdev, RVU_PF_INT_VEC_AFPF_MBOX);
>>
>>@@ -1016,8 +1016,9 @@ static void otx2_disable_mbox_intr(struct otx2_nic
>*pf)
>> 	otx2_write64(pf, RVU_PF_INT_ENA_W1C, BIT_ULL(0));
>> 	free_irq(vector, pf);
>> }
>>+EXPORT_SYMBOL(otx2_disable_mbox_intr);
>>
>>-static int otx2_register_mbox_intr(struct otx2_nic *pf, bool probe_af)
>>+int otx2_register_mbox_intr(struct otx2_nic *pf, bool probe_af)
>> {
>> 	struct otx2_hw *hw = &pf->hw;
>> 	struct msg_req *req;
>>@@ -1060,8 +1061,9 @@ static int otx2_register_mbox_intr(struct
>>otx2_nic *pf, bool probe_af)
>>
>> 	return 0;
>> }
>>+EXPORT_SYMBOL(otx2_register_mbox_intr);
>>
>>-static void otx2_pfaf_mbox_destroy(struct otx2_nic *pf)
>>+void otx2_pfaf_mbox_destroy(struct otx2_nic *pf)
>> {
>> 	struct mbox *mbox = &pf->mbox;
>>
>>@@ -1076,8 +1078,9 @@ static void otx2_pfaf_mbox_destroy(struct otx2_nic
>*pf)
>> 	otx2_mbox_destroy(&mbox->mbox);
>> 	otx2_mbox_destroy(&mbox->mbox_up);
>> }
>>+EXPORT_SYMBOL(otx2_pfaf_mbox_destroy);
>>
>>-static int otx2_pfaf_mbox_init(struct otx2_nic *pf)
>>+int otx2_pfaf_mbox_init(struct otx2_nic *pf)
>> {
>> 	struct mbox *mbox = &pf->mbox;
>> 	void __iomem *hwbase;
>>@@ -1124,6 +1127,7 @@ static int otx2_pfaf_mbox_init(struct otx2_nic *pf)
>> 	otx2_pfaf_mbox_destroy(pf);
>> 	return err;
>> }
>>+EXPORT_SYMBOL(otx2_pfaf_mbox_init);
>>
>> static int otx2_cgx_config_linkevents(struct otx2_nic *pf, bool
>>enable)  { @@ -1379,7 +1383,7 @@ static irqreturn_t
>>otx2_q_intr_handler(int irq, void *data)
>> 	return IRQ_HANDLED;
>> }
>>
>>-static irqreturn_t otx2_cq_intr_handler(int irq, void *cq_irq)
>>+irqreturn_t otx2_cq_intr_handler(int irq, void *cq_irq)
>> {
>> 	struct otx2_cq_poll *cq_poll = (struct otx2_cq_poll *)cq_irq;
>> 	struct otx2_nic *pf = (struct otx2_nic *)cq_poll->dev; @@ -1398,20
>>+1402,25 @@ static irqreturn_t otx2_cq_intr_handler(int irq, void
>>*cq_irq)
>>
>> 	return IRQ_HANDLED;
>> }
>>+EXPORT_SYMBOL(otx2_cq_intr_handler);
>>
>>-static void otx2_disable_napi(struct otx2_nic *pf)
>>+void otx2_disable_napi(struct otx2_nic *pf)
>> {
>> 	struct otx2_qset *qset = &pf->qset;
>> 	struct otx2_cq_poll *cq_poll;
>>+	struct work_struct *work;
>> 	int qidx;
>>
>> 	for (qidx = 0; qidx < pf->hw.cint_cnt; qidx++) {
>> 		cq_poll = &qset->napi[qidx];
>>-		cancel_work_sync(&cq_poll->dim.work);
>>+		work = &cq_poll->dim.work;
>>+		if (work->func)
>>+			cancel_work_sync(work);
>> 		napi_disable(&cq_poll->napi);
>> 		netif_napi_del(&cq_poll->napi);
>> 	}
>> }
>>+EXPORT_SYMBOL(otx2_disable_napi);
>>
>> static void otx2_free_cq_res(struct otx2_nic *pf)  { @@ -1477,7
>>+1486,7 @@ static int otx2_get_rbuf_size(struct otx2_nic *pf, int mtu)
>> 	return ALIGN(rbuf_size, 2048);
>> }
>>
>>-static int otx2_init_hw_resources(struct otx2_nic *pf)
>>+int otx2_init_hw_resources(struct otx2_nic *pf)
>> {
>> 	struct nix_lf_free_req *free_req;
>> 	struct mbox *mbox = &pf->mbox;
>>@@ -1601,8 +1610,9 @@ static int otx2_init_hw_resources(struct otx2_nic
>*pf)
>> 	mutex_unlock(&mbox->lock);
>> 	return err;
>> }
>>+EXPORT_SYMBOL(otx2_init_hw_resources);
>>
>>-static void otx2_free_hw_resources(struct otx2_nic *pf)
>>+void otx2_free_hw_resources(struct otx2_nic *pf)
>> {
>> 	struct otx2_qset *qset = &pf->qset;
>> 	struct nix_lf_free_req *free_req;
>>@@ -1688,6 +1698,7 @@ static void otx2_free_hw_resources(struct otx2_nic
>*pf)
>> 	}
>> 	mutex_unlock(&mbox->lock);
>> }
>>+EXPORT_SYMBOL(otx2_free_hw_resources);
>>
>> static bool otx2_promisc_use_mce_list(struct otx2_nic *pfvf)  { @@
>>-1781,6 +1792,7 @@ void otx2_free_queue_mem(struct otx2_qset *qset)
>> 	kfree(qset->napi);
>> }
>> EXPORT_SYMBOL(otx2_free_queue_mem);
>>+
>> int otx2_alloc_queue_mem(struct otx2_nic *pf)  {
>> 	struct otx2_qset *qset = &pf->qset;
>>@@ -2103,7 +2115,7 @@ static netdev_tx_t otx2_xmit(struct sk_buff *skb,
>struct net_device *netdev)
>> 	sq = &pf->qset.sq[sq_idx];
>> 	txq = netdev_get_tx_queue(netdev, qidx);
>>
>>-	if (!otx2_sq_append_skb(netdev, sq, skb, qidx)) {
>>+	if (!otx2_sq_append_skb(pf, txq, sq, skb, qidx)) {
>> 		netif_tx_stop_queue(txq);
>>
>> 		/* Check again, incase SQBs got freed up */ @@ -2808,7
>+2820,7 @@
>>static const struct net_device_ops otx2_netdev_ops = {
>> 	.ndo_set_vf_trust	= otx2_ndo_set_vf_trust,
>> };
>>
>>-static int otx2_wq_init(struct otx2_nic *pf)
>>+int otx2_wq_init(struct otx2_nic *pf)
>> {
>> 	pf->otx2_wq = create_singlethread_workqueue("otx2_wq");
>> 	if (!pf->otx2_wq)
>>@@ -2819,7 +2831,7 @@ static int otx2_wq_init(struct otx2_nic *pf)
>> 	return 0;
>> }
>>
>>-static int otx2_check_pf_usable(struct otx2_nic *nic)
>>+int otx2_check_pf_usable(struct otx2_nic *nic)
>> {
>> 	u64 rev;
>>
>>@@ -2836,8 +2848,9 @@ static int otx2_check_pf_usable(struct otx2_nic
>*nic)
>> 	}
>> 	return 0;
>> }
>>+EXPORT_SYMBOL(otx2_check_pf_usable);
>>
>>-static int otx2_realloc_msix_vectors(struct otx2_nic *pf)
>>+int otx2_realloc_msix_vectors(struct otx2_nic *pf)
>> {
>> 	struct otx2_hw *hw = &pf->hw;
>> 	int num_vec, err;
>>@@ -2859,6 +2872,7 @@ static int otx2_realloc_msix_vectors(struct
>>otx2_nic *pf)
>>
>> 	return otx2_register_mbox_intr(pf, false); }
>>+EXPORT_SYMBOL(otx2_realloc_msix_vectors);
>>
>> static int otx2_sriov_vfcfg_init(struct otx2_nic *pf)  { diff --git
>>a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
>>b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
>>index 3eb85949677a..fbd9fe98259f 100644
>>--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
>>+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
>>@@ -131,6 +131,7 @@ static void otx2_xdp_snd_pkt_handler(struct
>>otx2_nic *pfvf,  }
>>
>> static void otx2_snd_pkt_handler(struct otx2_nic *pfvf,
>>+				 struct net_device *ndev,
>> 				 struct otx2_cq_queue *cq,
>> 				 struct otx2_snd_queue *sq,
>> 				 struct nix_cqe_tx_s *cqe,
>>@@ -145,7 +146,7 @@ static void otx2_snd_pkt_handler(struct otx2_nic
>>*pfvf,
>>
>> 	if (unlikely(snd_comp->status) && netif_msg_tx_err(pfvf))
>> 		net_err_ratelimited("%s: TX%d: Error in send CQ status:%x\n",
>>-				    pfvf->netdev->name, cq->cint_idx,
>>+				    ndev->name, cq->cint_idx,
>> 				    snd_comp->status);
>>
>> 	sg = &sq->sg[snd_comp->sqe_id];
>>@@ -453,6 +454,7 @@ static int otx2_tx_napi_handler(struct otx2_nic *pfvf,
>> 	int tx_pkts = 0, tx_bytes = 0, qidx;
>> 	struct otx2_snd_queue *sq;
>> 	struct nix_cqe_tx_s *cqe;
>>+	struct net_device *ndev;
>> 	int processed_cqe = 0;
>>
>> 	if (cq->pend_cqe >= budget)
>>@@ -464,6 +466,7 @@ static int otx2_tx_napi_handler(struct otx2_nic
>>*pfvf,
>> process_cqe:
>> 	qidx = cq->cq_idx - pfvf->hw.rx_queues;
>> 	sq = &pfvf->qset.sq[qidx];
>>+	ndev = pfvf->netdev;
>>
>> 	while (likely(processed_cqe < budget) && cq->pend_cqe) {
>> 		cqe = (struct nix_cqe_tx_s *)otx2_get_next_cqe(cq); @@ -
>478,7 +481,8
>>@@ static int otx2_tx_napi_handler(struct otx2_nic *pfvf,
>> 		if (cq->cq_type == CQ_XDP)
>> 			otx2_xdp_snd_pkt_handler(pfvf, sq, cqe);
>> 		else
>>-			otx2_snd_pkt_handler(pfvf, cq, &pfvf->qset.sq[qidx],
>>+			otx2_snd_pkt_handler(pfvf, ndev, cq,
>>+					     &pfvf->qset.sq[qidx],
>> 					     cqe, budget, &tx_pkts, &tx_bytes);
>>
>> 		cqe->hdr.cqe_type = NIX_XQE_TYPE_INVALID; @@ -505,7
>+509,7 @@ static
>>int otx2_tx_napi_handler(struct otx2_nic *pfvf,
>> 		/* Check if queue was stopped earlier due to ring full */
>> 		smp_mb();
>> 		if (netif_tx_queue_stopped(txq) &&
>>-		    netif_carrier_ok(pfvf->netdev))
>>+		    netif_carrier_ok(ndev))
>> 			netif_tx_wake_queue(txq);
>
>
>I don't understand the this change you do in otx2_tx_napi_handler() and
>otx2_snd_pkt_handler(). What are you trying to achieve?
Will add this changes into "Introduce RVU representors"
patchset where it explains why this changes are required.

>Also, it is unrelated to the rest of the patch (export functions)
>
>
>> 	}
>> 	return 0;
>>@@ -594,6 +598,7 @@ int otx2_napi_handler(struct napi_struct *napi, int
>budget)
>> 	}
>> 	return workdone;
>> }
>>+EXPORT_SYMBOL(otx2_napi_handler);
>>
>> void otx2_sqe_flush(void *dev, struct otx2_snd_queue *sq,
>> 		    int size, int qidx)
>>@@ -1141,13 +1146,13 @@ static void otx2_set_txtstamp(struct otx2_nic
>*pfvf, struct sk_buff *skb,
>> 	}
>> }
>>
>>-bool otx2_sq_append_skb(struct net_device *netdev, struct
>>otx2_snd_queue *sq,
>>+bool otx2_sq_append_skb(void *dev, struct netdev_queue *txq,
>
>1) This looks like unrelated to the rest of the patch (export functions)
>2) Why void *? Avoid that please. Just have arg struct otx2_nic *pfvf no?
Will change it to otx2_nic and move this change to " Introduce RVU representors"
patchset where related changes are present. 
>
>
>
>>+			struct otx2_snd_queue *sq,
>> 			struct sk_buff *skb, u16 qidx)
>> {
>>-	struct netdev_queue *txq = netdev_get_tx_queue(netdev, qidx);
>>-	struct otx2_nic *pfvf = netdev_priv(netdev);
>> 	int offset, num_segs, free_desc;
>> 	struct nix_sqe_hdr_s *sqe_hdr;
>>+	struct otx2_nic *pfvf = dev;
>>
>> 	/* Check if there is enough room between producer
>> 	 * and consumer index.
>>diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h
>>b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h
>>index 3f1d2655ff77..e1db5f961877 100644
>>--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h
>>+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h
>>@@ -167,7 +167,8 @@ static inline u64 otx2_iova_to_phys(void
>>*iommu_domain, dma_addr_t dma_addr)  }
>>
>> int otx2_napi_handler(struct napi_struct *napi, int budget); -bool
>>otx2_sq_append_skb(struct net_device *netdev, struct otx2_snd_queue
>>*sq,
>>+bool otx2_sq_append_skb(void *dev, struct netdev_queue *txq,
>>+			struct otx2_snd_queue *sq,
>> 			struct sk_buff *skb, u16 qidx);
>> void cn10k_sqe_flush(void *dev, struct otx2_snd_queue *sq,
>> 		     int size, int qidx);
>>diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
>>b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
>>index 79a8acac6283..0486fca8b573 100644
>>--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
>>+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
>>@@ -395,7 +395,7 @@ static netdev_tx_t otx2vf_xmit(struct sk_buff *skb,
>struct net_device *netdev)
>> 	sq = &vf->qset.sq[qidx];
>> 	txq = netdev_get_tx_queue(netdev, qidx);
>>
>>-	if (!otx2_sq_append_skb(netdev, sq, skb, qidx)) {
>>+	if (!otx2_sq_append_skb(vf, txq, sq, skb, qidx)) {
>> 		netif_tx_stop_queue(txq);
>>
>> 		/* Check again, incase SQBs got freed up */ @@ -500,7 +500,7
>@@
>>static const struct net_device_ops otx2vf_netdev_ops = {
>> 	.ndo_setup_tc = otx2_setup_tc,
>> };
>>
>>-static int otx2_wq_init(struct otx2_nic *vf)
>>+static int otx2_vf_wq_init(struct otx2_nic *vf)
>> {
>> 	vf->otx2_wq = create_singlethread_workqueue("otx2vf_wq");
>> 	if (!vf->otx2_wq)
>>@@ -689,7 +689,7 @@ static int otx2vf_probe(struct pci_dev *pdev, const
>struct pci_device_id *id)
>> 		goto err_ptp_destroy;
>> 	}
>>
>>-	err = otx2_wq_init(vf);
>>+	err = otx2_vf_wq_init(vf);
>> 	if (err)
>> 		goto err_unreg_netdev;
>>
>>--
>>2.25.1
>>
diff mbox series

Patch

diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
index 34e76cfd941b..e38b3eea11f3 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
@@ -246,6 +246,7 @@  int otx2_hw_set_mtu(struct otx2_nic *pfvf, int mtu)
 	mutex_unlock(&pfvf->mbox.lock);
 	return err;
 }
+EXPORT_SYMBOL(otx2_hw_set_mtu);
 
 int otx2_config_pause_frm(struct otx2_nic *pfvf)
 {
@@ -1782,6 +1783,7 @@  void otx2_free_cints(struct otx2_nic *pfvf, int n)
 		free_irq(vector, &qset->napi[qidx]);
 	}
 }
+EXPORT_SYMBOL(otx2_free_cints);
 
 void otx2_set_cints_affinity(struct otx2_nic *pfvf)
 {
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
index b36b87dae2cb..327254e578d5 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
@@ -1000,6 +1000,17 @@  int otx2_aura_init(struct otx2_nic *pfvf, int aura_id,
 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);
+int otx2_init_hw_resources(struct otx2_nic *pfvf);
+void otx2_free_hw_resources(struct otx2_nic *pf);
+int otx2_wq_init(struct otx2_nic *pf);
+int otx2_check_pf_usable(struct otx2_nic *pf);
+int otx2_pfaf_mbox_init(struct otx2_nic *pf);
+int otx2_register_mbox_intr(struct otx2_nic *pf, bool probe_af);
+int otx2_realloc_msix_vectors(struct otx2_nic *pf);
+void otx2_pfaf_mbox_destroy(struct otx2_nic *pf);
+void otx2_disable_mbox_intr(struct otx2_nic *pf);
+void otx2_disable_napi(struct otx2_nic *pf);
+irqreturn_t otx2_cq_intr_handler(int irq, void *cq_irq);
 
 /* RSS configuration APIs*/
 int otx2_rss_init(struct otx2_nic *pfvf);
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
index 5bb6db5a3a73..b4fa2c12721d 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
@@ -1008,7 +1008,7 @@  static irqreturn_t otx2_pfaf_mbox_intr_handler(int irq, void *pf_irq)
 	return IRQ_HANDLED;
 }
 
-static void otx2_disable_mbox_intr(struct otx2_nic *pf)
+void otx2_disable_mbox_intr(struct otx2_nic *pf)
 {
 	int vector = pci_irq_vector(pf->pdev, RVU_PF_INT_VEC_AFPF_MBOX);
 
@@ -1016,8 +1016,9 @@  static void otx2_disable_mbox_intr(struct otx2_nic *pf)
 	otx2_write64(pf, RVU_PF_INT_ENA_W1C, BIT_ULL(0));
 	free_irq(vector, pf);
 }
+EXPORT_SYMBOL(otx2_disable_mbox_intr);
 
-static int otx2_register_mbox_intr(struct otx2_nic *pf, bool probe_af)
+int otx2_register_mbox_intr(struct otx2_nic *pf, bool probe_af)
 {
 	struct otx2_hw *hw = &pf->hw;
 	struct msg_req *req;
@@ -1060,8 +1061,9 @@  static int otx2_register_mbox_intr(struct otx2_nic *pf, bool probe_af)
 
 	return 0;
 }
+EXPORT_SYMBOL(otx2_register_mbox_intr);
 
-static void otx2_pfaf_mbox_destroy(struct otx2_nic *pf)
+void otx2_pfaf_mbox_destroy(struct otx2_nic *pf)
 {
 	struct mbox *mbox = &pf->mbox;
 
@@ -1076,8 +1078,9 @@  static void otx2_pfaf_mbox_destroy(struct otx2_nic *pf)
 	otx2_mbox_destroy(&mbox->mbox);
 	otx2_mbox_destroy(&mbox->mbox_up);
 }
+EXPORT_SYMBOL(otx2_pfaf_mbox_destroy);
 
-static int otx2_pfaf_mbox_init(struct otx2_nic *pf)
+int otx2_pfaf_mbox_init(struct otx2_nic *pf)
 {
 	struct mbox *mbox = &pf->mbox;
 	void __iomem *hwbase;
@@ -1124,6 +1127,7 @@  static int otx2_pfaf_mbox_init(struct otx2_nic *pf)
 	otx2_pfaf_mbox_destroy(pf);
 	return err;
 }
+EXPORT_SYMBOL(otx2_pfaf_mbox_init);
 
 static int otx2_cgx_config_linkevents(struct otx2_nic *pf, bool enable)
 {
@@ -1379,7 +1383,7 @@  static irqreturn_t otx2_q_intr_handler(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
-static irqreturn_t otx2_cq_intr_handler(int irq, void *cq_irq)
+irqreturn_t otx2_cq_intr_handler(int irq, void *cq_irq)
 {
 	struct otx2_cq_poll *cq_poll = (struct otx2_cq_poll *)cq_irq;
 	struct otx2_nic *pf = (struct otx2_nic *)cq_poll->dev;
@@ -1398,20 +1402,25 @@  static irqreturn_t otx2_cq_intr_handler(int irq, void *cq_irq)
 
 	return IRQ_HANDLED;
 }
+EXPORT_SYMBOL(otx2_cq_intr_handler);
 
-static void otx2_disable_napi(struct otx2_nic *pf)
+void otx2_disable_napi(struct otx2_nic *pf)
 {
 	struct otx2_qset *qset = &pf->qset;
 	struct otx2_cq_poll *cq_poll;
+	struct work_struct *work;
 	int qidx;
 
 	for (qidx = 0; qidx < pf->hw.cint_cnt; qidx++) {
 		cq_poll = &qset->napi[qidx];
-		cancel_work_sync(&cq_poll->dim.work);
+		work = &cq_poll->dim.work;
+		if (work->func)
+			cancel_work_sync(work);
 		napi_disable(&cq_poll->napi);
 		netif_napi_del(&cq_poll->napi);
 	}
 }
+EXPORT_SYMBOL(otx2_disable_napi);
 
 static void otx2_free_cq_res(struct otx2_nic *pf)
 {
@@ -1477,7 +1486,7 @@  static int otx2_get_rbuf_size(struct otx2_nic *pf, int mtu)
 	return ALIGN(rbuf_size, 2048);
 }
 
-static int otx2_init_hw_resources(struct otx2_nic *pf)
+int otx2_init_hw_resources(struct otx2_nic *pf)
 {
 	struct nix_lf_free_req *free_req;
 	struct mbox *mbox = &pf->mbox;
@@ -1601,8 +1610,9 @@  static int otx2_init_hw_resources(struct otx2_nic *pf)
 	mutex_unlock(&mbox->lock);
 	return err;
 }
+EXPORT_SYMBOL(otx2_init_hw_resources);
 
-static void otx2_free_hw_resources(struct otx2_nic *pf)
+void otx2_free_hw_resources(struct otx2_nic *pf)
 {
 	struct otx2_qset *qset = &pf->qset;
 	struct nix_lf_free_req *free_req;
@@ -1688,6 +1698,7 @@  static void otx2_free_hw_resources(struct otx2_nic *pf)
 	}
 	mutex_unlock(&mbox->lock);
 }
+EXPORT_SYMBOL(otx2_free_hw_resources);
 
 static bool otx2_promisc_use_mce_list(struct otx2_nic *pfvf)
 {
@@ -1781,6 +1792,7 @@  void otx2_free_queue_mem(struct otx2_qset *qset)
 	kfree(qset->napi);
 }
 EXPORT_SYMBOL(otx2_free_queue_mem);
+
 int otx2_alloc_queue_mem(struct otx2_nic *pf)
 {
 	struct otx2_qset *qset = &pf->qset;
@@ -2103,7 +2115,7 @@  static netdev_tx_t otx2_xmit(struct sk_buff *skb, struct net_device *netdev)
 	sq = &pf->qset.sq[sq_idx];
 	txq = netdev_get_tx_queue(netdev, qidx);
 
-	if (!otx2_sq_append_skb(netdev, sq, skb, qidx)) {
+	if (!otx2_sq_append_skb(pf, txq, sq, skb, qidx)) {
 		netif_tx_stop_queue(txq);
 
 		/* Check again, incase SQBs got freed up */
@@ -2808,7 +2820,7 @@  static const struct net_device_ops otx2_netdev_ops = {
 	.ndo_set_vf_trust	= otx2_ndo_set_vf_trust,
 };
 
-static int otx2_wq_init(struct otx2_nic *pf)
+int otx2_wq_init(struct otx2_nic *pf)
 {
 	pf->otx2_wq = create_singlethread_workqueue("otx2_wq");
 	if (!pf->otx2_wq)
@@ -2819,7 +2831,7 @@  static int otx2_wq_init(struct otx2_nic *pf)
 	return 0;
 }
 
-static int otx2_check_pf_usable(struct otx2_nic *nic)
+int otx2_check_pf_usable(struct otx2_nic *nic)
 {
 	u64 rev;
 
@@ -2836,8 +2848,9 @@  static int otx2_check_pf_usable(struct otx2_nic *nic)
 	}
 	return 0;
 }
+EXPORT_SYMBOL(otx2_check_pf_usable);
 
-static int otx2_realloc_msix_vectors(struct otx2_nic *pf)
+int otx2_realloc_msix_vectors(struct otx2_nic *pf)
 {
 	struct otx2_hw *hw = &pf->hw;
 	int num_vec, err;
@@ -2859,6 +2872,7 @@  static int otx2_realloc_msix_vectors(struct otx2_nic *pf)
 
 	return otx2_register_mbox_intr(pf, false);
 }
+EXPORT_SYMBOL(otx2_realloc_msix_vectors);
 
 static int otx2_sriov_vfcfg_init(struct otx2_nic *pf)
 {
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
index 3eb85949677a..fbd9fe98259f 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c
@@ -131,6 +131,7 @@  static void otx2_xdp_snd_pkt_handler(struct otx2_nic *pfvf,
 }
 
 static void otx2_snd_pkt_handler(struct otx2_nic *pfvf,
+				 struct net_device *ndev,
 				 struct otx2_cq_queue *cq,
 				 struct otx2_snd_queue *sq,
 				 struct nix_cqe_tx_s *cqe,
@@ -145,7 +146,7 @@  static void otx2_snd_pkt_handler(struct otx2_nic *pfvf,
 
 	if (unlikely(snd_comp->status) && netif_msg_tx_err(pfvf))
 		net_err_ratelimited("%s: TX%d: Error in send CQ status:%x\n",
-				    pfvf->netdev->name, cq->cint_idx,
+				    ndev->name, cq->cint_idx,
 				    snd_comp->status);
 
 	sg = &sq->sg[snd_comp->sqe_id];
@@ -453,6 +454,7 @@  static int otx2_tx_napi_handler(struct otx2_nic *pfvf,
 	int tx_pkts = 0, tx_bytes = 0, qidx;
 	struct otx2_snd_queue *sq;
 	struct nix_cqe_tx_s *cqe;
+	struct net_device *ndev;
 	int processed_cqe = 0;
 
 	if (cq->pend_cqe >= budget)
@@ -464,6 +466,7 @@  static int otx2_tx_napi_handler(struct otx2_nic *pfvf,
 process_cqe:
 	qidx = cq->cq_idx - pfvf->hw.rx_queues;
 	sq = &pfvf->qset.sq[qidx];
+	ndev = pfvf->netdev;
 
 	while (likely(processed_cqe < budget) && cq->pend_cqe) {
 		cqe = (struct nix_cqe_tx_s *)otx2_get_next_cqe(cq);
@@ -478,7 +481,8 @@  static int otx2_tx_napi_handler(struct otx2_nic *pfvf,
 		if (cq->cq_type == CQ_XDP)
 			otx2_xdp_snd_pkt_handler(pfvf, sq, cqe);
 		else
-			otx2_snd_pkt_handler(pfvf, cq, &pfvf->qset.sq[qidx],
+			otx2_snd_pkt_handler(pfvf, ndev, cq,
+					     &pfvf->qset.sq[qidx],
 					     cqe, budget, &tx_pkts, &tx_bytes);
 
 		cqe->hdr.cqe_type = NIX_XQE_TYPE_INVALID;
@@ -505,7 +509,7 @@  static int otx2_tx_napi_handler(struct otx2_nic *pfvf,
 		/* Check if queue was stopped earlier due to ring full */
 		smp_mb();
 		if (netif_tx_queue_stopped(txq) &&
-		    netif_carrier_ok(pfvf->netdev))
+		    netif_carrier_ok(ndev))
 			netif_tx_wake_queue(txq);
 	}
 	return 0;
@@ -594,6 +598,7 @@  int otx2_napi_handler(struct napi_struct *napi, int budget)
 	}
 	return workdone;
 }
+EXPORT_SYMBOL(otx2_napi_handler);
 
 void otx2_sqe_flush(void *dev, struct otx2_snd_queue *sq,
 		    int size, int qidx)
@@ -1141,13 +1146,13 @@  static void otx2_set_txtstamp(struct otx2_nic *pfvf, struct sk_buff *skb,
 	}
 }
 
-bool otx2_sq_append_skb(struct net_device *netdev, struct otx2_snd_queue *sq,
+bool otx2_sq_append_skb(void *dev, struct netdev_queue *txq,
+			struct otx2_snd_queue *sq,
 			struct sk_buff *skb, u16 qidx)
 {
-	struct netdev_queue *txq = netdev_get_tx_queue(netdev, qidx);
-	struct otx2_nic *pfvf = netdev_priv(netdev);
 	int offset, num_segs, free_desc;
 	struct nix_sqe_hdr_s *sqe_hdr;
+	struct otx2_nic *pfvf = dev;
 
 	/* Check if there is enough room between producer
 	 * and consumer index.
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h
index 3f1d2655ff77..e1db5f961877 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h
@@ -167,7 +167,8 @@  static inline u64 otx2_iova_to_phys(void *iommu_domain, dma_addr_t dma_addr)
 }
 
 int otx2_napi_handler(struct napi_struct *napi, int budget);
-bool otx2_sq_append_skb(struct net_device *netdev, struct otx2_snd_queue *sq,
+bool otx2_sq_append_skb(void *dev, struct netdev_queue *txq,
+			struct otx2_snd_queue *sq,
 			struct sk_buff *skb, u16 qidx);
 void cn10k_sqe_flush(void *dev, struct otx2_snd_queue *sq,
 		     int size, int qidx);
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
index 79a8acac6283..0486fca8b573 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
@@ -395,7 +395,7 @@  static netdev_tx_t otx2vf_xmit(struct sk_buff *skb, struct net_device *netdev)
 	sq = &vf->qset.sq[qidx];
 	txq = netdev_get_tx_queue(netdev, qidx);
 
-	if (!otx2_sq_append_skb(netdev, sq, skb, qidx)) {
+	if (!otx2_sq_append_skb(vf, txq, sq, skb, qidx)) {
 		netif_tx_stop_queue(txq);
 
 		/* Check again, incase SQBs got freed up */
@@ -500,7 +500,7 @@  static const struct net_device_ops otx2vf_netdev_ops = {
 	.ndo_setup_tc = otx2_setup_tc,
 };
 
-static int otx2_wq_init(struct otx2_nic *vf)
+static int otx2_vf_wq_init(struct otx2_nic *vf)
 {
 	vf->otx2_wq = create_singlethread_workqueue("otx2vf_wq");
 	if (!vf->otx2_wq)
@@ -689,7 +689,7 @@  static int otx2vf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 		goto err_ptp_destroy;
 	}
 
-	err = otx2_wq_init(vf);
+	err = otx2_vf_wq_init(vf);
 	if (err)
 		goto err_unreg_netdev;