DPDK patches and discussions
 help / color / mirror / Atom feed
From: Tyler Retzlaff <roretzla@linux.microsoft.com>
To: dev@dpdk.org
Cc: "Morten Brørup" <mb@smartsharesystems.com>,
	"Akhil Goyal" <gakhil@marvell.com>,
	"Aman Singh" <aman.deep.singh@intel.com>,
	"Anatoly Burakov" <anatoly.burakov@intel.com>,
	"Andrew Rybchenko" <andrew.rybchenko@oktetlabs.ru>,
	"Bruce Richardson" <bruce.richardson@intel.com>,
	"Chengwen Feng" <fengchengwen@huawei.com>,
	"Dariusz Sosnowski" <dsosnowski@nvidia.com>,
	"Dmitry Kozlyuk" <dmitry.kozliuk@gmail.com>,
	"Fan Zhang" <fanzhang.oss@gmail.com>,
	"Ferruh Yigit" <ferruh.yigit@amd.com>,
	"Harman Kalra" <hkalra@marvell.com>,
	"Harry van Haaren" <harry.van.haaren@intel.com>,
	"Honnappa Nagarahalli" <honnappa.nagarahalli@arm.com>,
	"Jiayu Hu" <hujiayu.hu@foxmail.com>,
	"Jingjing Wu" <jingjing.wu@intel.com>,
	"Kevin Laatz" <kevin.laatz@intel.com>,
	"Konstantin Ananyev" <konstantin.v.ananyev@yandex.ru>,
	"Matan Azrad" <matan@nvidia.com>, "Ori Kam" <orika@nvidia.com>,
	"Pallavi Kadam" <pallavi.kadam@intel.com>,
	"Reshma Pattan" <reshma.pattan@intel.com>,
	"Sameh Gobriel" <sameh.gobriel@intel.com>,
	"Suanming Mou" <suanmingm@nvidia.com>,
	"Thomas Monjalon" <thomas@monjalon.net>,
	"Tyler Retzlaff" <roretzla@linux.microsoft.com>,
	"Viacheslav Ovsiienko" <viacheslavo@nvidia.com>,
	"Vladimir Medvedkin" <vladimir.medvedkin@intel.com>,
	"Volodymyr Fialko" <vfialko@marvell.com>,
	"Yipeng Wang" <yipeng1.wang@intel.com>,
	"Konstantin Ananyev" <konstantin.ananyev@huawei.com>
Subject: [PATCH v2 02/19] eal/linux: remove use of VLAs
Date: Thu, 18 Apr 2024 13:02:25 -0700	[thread overview]
Message-ID: <1713470562-17415-3-git-send-email-roretzla@linux.microsoft.com> (raw)
In-Reply-To: <1713470562-17415-1-git-send-email-roretzla@linux.microsoft.com>

From: Konstantin Ananyev <konstantin.ananyev@huawei.com>

1) ./lib/eal/linux/eal_interrupts.c:1073:16
    : warning: ISO C90 forbids variable length array ‘events’

eal_intr_handle_interrupts() is called by eal_intr_thread_main()
so it seems ok to simply alloc space for events from heap and reuse the
same buffer through the life of the thread.

2) ./lib/eal/linux/eal_interrupts.c:1319:16
    : warning: ISO C90 forbids variable length array ‘evs’

make eal_epoll_wait() to use fixed size array and use it though multiple
iterations to preocess upt to @maxevents events.
Note that techically it is not one to one raplacement, as here we might
reduce number of events returned by first call to epoll_wait(..., timeout);

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
---
 lib/eal/linux/eal_interrupts.c | 59 +++++++++++++++++++++++++++++++++++++-----
 1 file changed, 52 insertions(+), 7 deletions(-)

diff --git a/lib/eal/linux/eal_interrupts.c b/lib/eal/linux/eal_interrupts.c
index 6436f79..58e3b8e 100644
--- a/lib/eal/linux/eal_interrupts.c
+++ b/lib/eal/linux/eal_interrupts.c
@@ -34,6 +34,8 @@
 #define EAL_INTR_EPOLL_WAIT_FOREVER (-1)
 #define NB_OTHER_INTR               1
 
+#define MAX_ITER_EVNUM	RTE_EVENT_ETH_INTR_RING_SIZE
+
 static RTE_DEFINE_PER_LCORE(int, _epfd) = -1; /**< epoll fd per thread */
 
 /**
@@ -1068,9 +1070,9 @@ struct rte_intr_source {
  *  void
  */
 static void
-eal_intr_handle_interrupts(int pfd, unsigned totalfds)
+eal_intr_handle_interrupts(int pfd, struct epoll_event events[],
+	unsigned totalfds)
 {
-	struct epoll_event events[totalfds];
 	int nfds = 0;
 
 	for(;;) {
@@ -1106,6 +1108,12 @@ struct rte_intr_source {
 static __rte_noreturn uint32_t
 eal_intr_thread_main(__rte_unused void *arg)
 {
+	uint32_t n, nb_event;
+	struct epoll_event *events, *p;
+
+	nb_event = 0;
+	events = NULL;
+
 	/* host thread, never break out */
 	for (;;) {
 		/* build up the epoll fd with all descriptors we are to
@@ -1159,8 +1167,23 @@ struct rte_intr_source {
 				numfds++;
 		}
 		rte_spinlock_unlock(&intr_lock);
+
+		/* alloc space for events, when necessary */
+		if (numfds > nb_event) {
+			n = numfds + MAX_ITER_EVNUM;
+			p = realloc(events, n * sizeof(events[0]));
+			if (p == NULL) {
+				EAL_LOG(ERR, "failed to allocate %u events",
+					numfds);
+				numfds = nb_event;
+			} else {
+				nb_event = n;
+				events = p;
+			}
+		}
+
 		/* serve the interrupt */
-		eal_intr_handle_interrupts(pfd, numfds);
+		eal_intr_handle_interrupts(pfd, events, numfds);
 
 		/**
 		 * when we return, we need to rebuild the
@@ -1168,6 +1191,8 @@ struct rte_intr_source {
 		 */
 		close(pfd);
 	}
+
+	free(events);
 }
 
 int
@@ -1316,8 +1341,9 @@ struct rte_intr_source {
 eal_epoll_wait(int epfd, struct rte_epoll_event *events,
 	       int maxevents, int timeout, bool interruptible)
 {
-	struct epoll_event evs[maxevents];
 	int rc;
+	uint32_t i, k, n, num;
+	struct epoll_event evs[MAX_ITER_EVNUM];
 
 	if (!events) {
 		EAL_LOG(ERR, "rte_epoll_event can't be NULL");
@@ -1328,12 +1354,31 @@ struct rte_intr_source {
 	if (epfd == RTE_EPOLL_PER_THREAD)
 		epfd = rte_intr_tls_epfd();
 
+	num = maxevents;
+	n = RTE_MIN(RTE_DIM(evs), num);
+
+	/* Process events in chunks of MAX_ITER_EVNUM */
+
 	while (1) {
-		rc = epoll_wait(epfd, evs, maxevents, timeout);
+		rc = epoll_wait(epfd, evs, n, timeout);
 		if (likely(rc > 0)) {
+
 			/* epoll_wait has at least one fd ready to read */
-			rc = eal_epoll_process_event(evs, rc, events);
-			break;
+			for (i = 0, k = 0; rc > 0;) {
+				k += rc;
+				rc = eal_epoll_process_event(evs, rc,
+						events + i);
+				i += rc;
+
+				/*
+				 * try to read more events that are already
+				 * available (up to maxevents in total).
+				 */
+				n = RTE_MIN(RTE_DIM(evs), num - k);
+				rc = (n == 0) ? 0 : epoll_wait(epfd, evs, n, 0);
+			}
+			return i;
+
 		} else if (rc < 0) {
 			if (errno == EINTR) {
 				if (interruptible)
-- 
1.8.3.1


  parent reply	other threads:[~2024-04-18 20:03 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-17 23:41 [PATCH 00/16] remove use of VLAs for Windows built code Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 01/16] eal: include header required for alloca Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 02/16] hash: remove use of VLAs for Windows built code Tyler Retzlaff
2024-04-18  6:45   ` Morten Brørup
2024-04-17 23:41 ` [PATCH 03/16] ethdev: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 04/16] gro: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 05/16] latencystats: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 06/16] lpm: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 07/16] rcu: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 08/16] app/testpmd: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 09/16] test: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 10/16] common/idpf: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 11/16] net/i40e: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 12/16] net/ice: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 13/16] net/ixgbe: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 14/16] common/mlx5: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 15/16] net/mlx5: " Tyler Retzlaff
2024-04-17 23:41 ` [PATCH 16/16] build: enable vla warnings on " Tyler Retzlaff
2024-04-18  6:48   ` Morten Brørup
2024-04-18 15:12     ` Tyler Retzlaff
2024-04-18 15:23       ` Bruce Richardson
2024-04-18 19:22         ` Morten Brørup
2024-04-18  6:49 ` [PATCH 00/16] remove use of VLAs for " Morten Brørup
2024-04-18 12:11 ` Konstantin Ananyev
2024-04-18 15:15   ` Tyler Retzlaff
2024-04-18 15:35     ` Konstantin Ananyev
2024-04-18 20:02 ` [PATCH v2 00/19] remove use of VLAs for Windows Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 01/19] eal: include header required for alloca Tyler Retzlaff
2024-04-18 20:02   ` Tyler Retzlaff [this message]
2024-04-18 20:02   ` [PATCH v2 03/19] eal/common: remove use of VLAs Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 04/19] ethdev: remove use of VLAs for Windows built code Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 05/19] hash: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 06/19] hash/thash: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 07/19] rcu: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 08/19] gro: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 09/19] latencystats: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 10/19] lpm: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 11/19] app/testpmd: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 12/19] test: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 13/19] common/idpf: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 14/19] net/i40e: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 15/19] net/ice: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 16/19] net/ixgbe: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 17/19] common/mlx5: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 18/19] net/mlx5: " Tyler Retzlaff
2024-04-18 20:02   ` [PATCH v2 19/19] build: enable vla warnings on " Tyler Retzlaff

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=1713470562-17415-3-git-send-email-roretzla@linux.microsoft.com \
    --to=roretzla@linux.microsoft.com \
    --cc=aman.deep.singh@intel.com \
    --cc=anatoly.burakov@intel.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=dmitry.kozliuk@gmail.com \
    --cc=dsosnowski@nvidia.com \
    --cc=fanzhang.oss@gmail.com \
    --cc=fengchengwen@huawei.com \
    --cc=ferruh.yigit@amd.com \
    --cc=gakhil@marvell.com \
    --cc=harry.van.haaren@intel.com \
    --cc=hkalra@marvell.com \
    --cc=honnappa.nagarahalli@arm.com \
    --cc=hujiayu.hu@foxmail.com \
    --cc=jingjing.wu@intel.com \
    --cc=kevin.laatz@intel.com \
    --cc=konstantin.ananyev@huawei.com \
    --cc=konstantin.v.ananyev@yandex.ru \
    --cc=matan@nvidia.com \
    --cc=mb@smartsharesystems.com \
    --cc=orika@nvidia.com \
    --cc=pallavi.kadam@intel.com \
    --cc=reshma.pattan@intel.com \
    --cc=sameh.gobriel@intel.com \
    --cc=suanmingm@nvidia.com \
    --cc=thomas@monjalon.net \
    --cc=vfialko@marvell.com \
    --cc=viacheslavo@nvidia.com \
    --cc=vladimir.medvedkin@intel.com \
    --cc=yipeng1.wang@intel.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).