DPDK patches and discussions
 help / color / mirror / Atom feed
From: Chaoyong He <chaoyong.he@corigine.com>
To: dev@dpdk.org
Cc: oss-drivers@corigine.com, Long Wu <long.wu@corigine.com>,
	Chaoyong He <chaoyong.he@corigine.com>
Subject: [PATCH 2/2] net/nfp: enhance the flower service framework
Date: Thu, 10 Oct 2024 15:45:57 +0800	[thread overview]
Message-ID: <20241010074557.3622716-3-chaoyong.he@corigine.com> (raw)
In-Reply-To: <20241010074557.3622716-1-chaoyong.he@corigine.com>

From: Long Wu <long.wu@corigine.com>

Some DPDK applications may not have the service core which
can be used for the NFP flower service, so enhance the flower
service framework by adding an alarm for this situation.

Signed-off-by: Long Wu <long.wu@corigine.com>
Reviewed-by: Chaoyong He <chaoyong.he@corigine.com>
---
 drivers/net/nfp/flower/nfp_flower_service.c | 70 +++++++++++++++++++--
 1 file changed, 65 insertions(+), 5 deletions(-)

diff --git a/drivers/net/nfp/flower/nfp_flower_service.c b/drivers/net/nfp/flower/nfp_flower_service.c
index 782f083b71..aac11dbb94 100644
--- a/drivers/net/nfp/flower/nfp_flower_service.c
+++ b/drivers/net/nfp/flower/nfp_flower_service.c
@@ -5,6 +5,7 @@
 
 #include "nfp_flower_service.h"
 
+#include <rte_alarm.h>
 #include <rte_spinlock.h>
 
 #include "nfp_flower_ctrl.h"
@@ -16,9 +17,13 @@
 /* Driver limitation, PMD can enlarge it if need. */
 #define MAX_FLOWER_SERVICE_SLOT 8
 
+#define FLOWER_ALARM_INTERVAL 3000
+
 struct nfp_flower_service {
 	/** Flower service is enabled */
 	bool service_enabled;
+	/** Flower alarm is enabled */
+	bool alarm_enabled;
 	/** Flower service info */
 	struct nfp_service_info info;
 	/** Store flower cards' information */
@@ -33,6 +38,52 @@ nfp_flower_service_handle_get(struct nfp_net_hw_priv *hw_priv)
 	return hw_priv->pf_dev->process_share.fl_service;
 }
 
+static void
+nfp_flower_service_alarm_func(void *arg)
+{
+	int ret;
+	uint16_t slot;
+	struct nfp_net_hw_priv *hw_priv;
+	struct nfp_flower_service *service_handle;
+
+	service_handle = arg;
+	if (!service_handle->alarm_enabled)
+		goto alarm_set;
+
+	rte_spinlock_lock(&service_handle->spinlock);
+	for (slot = 0; slot < MAX_FLOWER_SERVICE_SLOT; slot++) {
+		hw_priv = service_handle->slots[slot];
+		if (hw_priv == NULL)
+			continue;
+
+		nfp_flower_ctrl_vnic_process(hw_priv);
+	}
+	rte_spinlock_unlock(&service_handle->spinlock);
+
+alarm_set:
+	ret = rte_eal_alarm_set(FLOWER_ALARM_INTERVAL, nfp_flower_service_alarm_func, arg);
+	if (ret < 0)
+		PMD_DRV_LOG(ERR, "Set flower service alarm failed.");
+}
+
+static int
+nfp_flower_service_alarm_enable(struct nfp_flower_service *service_handle)
+{
+	int ret;
+
+	ret = rte_eal_alarm_set(FLOWER_ALARM_INTERVAL, nfp_flower_service_alarm_func,
+			(void *)service_handle);
+	if (ret < 0) {
+		PMD_DRV_LOG(ERR, "Flower service alarm initialization failed.");
+		return ret;
+	}
+
+	rte_spinlock_init(&service_handle->spinlock);
+	service_handle->alarm_enabled = true;
+
+	return 0;
+}
+
 static int
 nfp_flower_service_func(void *arg)
 {
@@ -109,11 +160,15 @@ nfp_flower_service_start(struct nfp_net_hw_priv *hw_priv)
 	}
 
 	/* Enable flower service when driver initializes the first NIC */
-	if (!service_handle->service_enabled) {
+	if (!service_handle->service_enabled && !service_handle->alarm_enabled) {
 		ret = nfp_flower_service_enable(service_handle);
 		if (ret != 0) {
-			PMD_DRV_LOG(ERR, "Could not enable flower service");
-			return -ESRCH;
+			PMD_DRV_LOG(INFO, "Could not enable flower service.");
+			ret = nfp_flower_service_alarm_enable(service_handle);
+			if (ret != 0) {
+				PMD_DRV_LOG(ERR, "Could not set flower service alarm.");
+				return ret;
+			}
 		}
 	}
 
@@ -157,8 +212,13 @@ nfp_flower_service_stop(struct nfp_net_hw_priv *hw_priv)
 	if (count > 1)
 		return;
 
-	if (nfp_service_disable(&service_handle->info) != 0)
-		PMD_DRV_LOG(ERR, "Could not disable service");
+	if (service_handle->service_enabled) {
+		if (nfp_service_disable(&service_handle->info) != 0)
+			PMD_DRV_LOG(ERR, "Could not disable service.");
+	} else if (service_handle->alarm_enabled) {
+		rte_eal_alarm_cancel(nfp_flower_service_alarm_func,
+				(void *)service_handle);
+	}
 }
 
 int
-- 
2.39.1


  parent reply	other threads:[~2024-10-10  7:46 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-10  7:45 [PATCH 0/2] " Chaoyong He
2024-10-10  7:45 ` [PATCH 1/2] net/nfp: rename flower service flag Chaoyong He
2024-10-10  7:45 ` Chaoyong He [this message]
2024-10-10 14:55   ` [PATCH 2/2] net/nfp: enhance the flower service framework Stephen Hemminger
2024-10-11  2:23     ` Chaoyong He
2024-10-12  0:23 ` [PATCH 0/2] " Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241010074557.3622716-3-chaoyong.he@corigine.com \
    --to=chaoyong.he@corigine.com \
    --cc=dev@dpdk.org \
    --cc=long.wu@corigine.com \
    --cc=oss-drivers@corigine.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).