代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/gazelle 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From 4267e381b25e42f19b2dd160fbf08efb5d8bd0fb Mon Sep 17 00:00:00 2001
From: jiangheng <jiangheng14@huawei.com>
Date: Mon, 4 Sep 2023 11:16:12 +0800
Subject: [PATCH] kernelevent: kernel event thread report kernel events to app
thread directly without passing through lstack thread
---
src/lstack/core/lstack_protocol_stack.c | 53 +++++++++++++------------
1 file changed, 27 insertions(+), 26 deletions(-)
diff --git a/src/lstack/core/lstack_protocol_stack.c b/src/lstack/core/lstack_protocol_stack.c
index 3a6e792..ca0b046 100644
--- a/src/lstack/core/lstack_protocol_stack.c
+++ b/src/lstack/core/lstack_protocol_stack.c
@@ -38,7 +38,7 @@
#include "lstack_stack_stat.h"
#include "lstack_protocol_stack.h"
-#define KERNEL_EVENT_100us 100
+#define KERNEL_EVENT_10us 10
static PER_THREAD struct protocol_stack *g_stack_p = NULL;
static struct protocol_stack_group g_stack_group = {0};
@@ -258,6 +258,29 @@ static int32_t create_thread(void *arg, char *thread_name, stack_thread_func fun
return 0;
}
+static void wakeup_kernel_event(struct protocol_stack *stack)
+{
+ if (stack->kernel_event_num <= 0) {
+ return;
+ }
+
+ for (int32_t i = 0; i < stack->kernel_event_num; i++) {
+ struct wakeup_poll *wakeup = stack->kernel_events[i].data.ptr;
+ if (wakeup->type == WAKEUP_CLOSE) {
+ continue;
+ }
+
+ __atomic_store_n(&wakeup->have_kernel_event, true, __ATOMIC_RELEASE);
+ if (__atomic_load_n(&wakeup->in_wait, __ATOMIC_ACQUIRE)) {
+ __atomic_store_n(&wakeup->in_wait, false, __ATOMIC_RELEASE);
+ rte_mb();
+ pthread_mutex_unlock(&wakeup->wait);
+ }
+ }
+
+ return;
+}
+
static void* gazelle_kernelevent_thread(void *arg)
{
struct thread_params *t_params = (struct thread_params*) arg;
@@ -272,8 +295,9 @@ static void* gazelle_kernelevent_thread(void *arg)
for (;;) {
stack->kernel_event_num = posix_api->epoll_wait_fn(stack->epollfd, stack->kernel_events, KERNEL_EPOLL_MAX, -1);
- while (stack->kernel_event_num > 0) {
- usleep(KERNEL_EVENT_100us);
+ if (stack->kernel_event_num > 0) {
+ wakeup_kernel_event(stack);
+ usleep(KERNEL_EVENT_10us);
}
}
@@ -416,28 +440,6 @@ END1:
return NULL;
}
-static void wakeup_kernel_event(struct protocol_stack *stack)
-{
- if (stack->kernel_event_num == 0) {
- return;
- }
-
- for (int32_t i = 0; i < stack->kernel_event_num; i++) {
- struct wakeup_poll *wakeup = stack->kernel_events[i].data.ptr;
- if (wakeup->type == WAKEUP_CLOSE) {
- continue;
- }
-
- __atomic_store_n(&wakeup->have_kernel_event, true, __ATOMIC_RELEASE);
- if (list_is_null(&wakeup->wakeup_list[stack->stack_idx])) {
- list_add_node(&stack->wakeup_list, &wakeup->wakeup_list[stack->stack_idx]);
- }
- }
-
- stack->kernel_event_num = 0;
-}
-
-
static void* gazelle_stack_thread(void *arg)
{
struct thread_params *t_params = (struct thread_params*) arg;
@@ -485,7 +487,6 @@ static void* gazelle_stack_thread(void *arg)
read_recv_list(stack, read_connect_number);
if ((wakeup_tick & 0xf) == 0) {
- wakeup_kernel_event(stack);
wakeup_stack_epoll(stack);
}
--
2.27.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。