lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID:
 <CH0PR18MB433942172399A580C86D6BA9CD9C2@CH0PR18MB4339.namprd18.prod.outlook.com>
Date: Wed, 4 Sep 2024 06:20:55 +0000
From: Geethasowjanya Akula <gakula@...vell.com>
To: Jiri Pirko <jiri@...nulli.us>
CC: "netdev@...r.kernel.org" <netdev@...r.kernel.org>,
        "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
        "kuba@...nel.org" <kuba@...nel.org>,
        "davem@...emloft.net"
	<davem@...emloft.net>,
        "pabeni@...hat.com" <pabeni@...hat.com>,
        "edumazet@...gle.com" <edumazet@...gle.com>,
        Sunil Kovvuri Goutham
	<sgoutham@...vell.com>,
        Subbaraya Sundeep Bhatta <sbhatta@...vell.com>,
        Hariprasad Kelam <hkelam@...vell.com>
Subject: RE: [EXTERNAL] Re: [net-next PATCH 4/4] octeontx2-pf: Export common
 APIs



>-----Original Message-----
>From: Jiri Pirko <jiri@...nulli.us>
>Sent: Tuesday, September 3, 2024 8:31 PM
>To: Geethasowjanya Akula <gakula@...vell.com>
>Cc: netdev@...r.kernel.org; linux-kernel@...r.kernel.org; kuba@...nel.org;
>davem@...emloft.net; pabeni@...hat.com; edumazet@...gle.com; Sunil
>Kovvuri Goutham <sgoutham@...vell.com>; Subbaraya Sundeep Bhatta
><sbhatta@...vell.com>; Hariprasad Kelam <hkelam@...vell.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@...vell.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@...vell.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
>>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ