From: Tyler Retzlaff <roretzla@linux.microsoft.com>
To: dev@dpdk.org
Cc: david.marchand@redhat.com,
Tyler Retzlaff <roretzla@linux.microsoft.com>,
stable@dpdk.org
Subject: [PATCH 2/2] eal/windows: fix create thread failure behavior
Date: Thu, 2 Mar 2023 10:44:42 -0800 [thread overview]
Message-ID: <1677782682-27200-2-git-send-email-roretzla@linux.microsoft.com> (raw)
In-Reply-To: <1677782682-27200-1-git-send-email-roretzla@linux.microsoft.com>
In rte_thread_create setting affinity after CreateThread may fail. Such
a failure is reported but strands the newly created thread in a
suspended state.
Resolve the above issue by notifying the newly created thread that
it should terminate as soon as it is resumed, while still continuing to
free the ctx.
Fixes: ce6e911d20f6 ("eal: add thread lifetime API")
Cc: stable@dpdk.org
Cc: roretzla@linux.microsoft.com
Signed-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
---
lib/eal/windows/rte_thread.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/lib/eal/windows/rte_thread.c b/lib/eal/windows/rte_thread.c
index 8556a84..e528ac9 100644
--- a/lib/eal/windows/rte_thread.c
+++ b/lib/eal/windows/rte_thread.c
@@ -19,6 +19,7 @@ struct eal_tls_key {
struct thread_routine_ctx {
rte_thread_func thread_func;
+ bool thread_init_failed;
void *routine_args;
};
@@ -167,9 +168,13 @@ struct thread_routine_ctx {
thread_func_wrapper(void *arg)
{
struct thread_routine_ctx ctx = *(struct thread_routine_ctx *)arg;
+ const bool thread_exit = __atomic_load_n(&ctx.thread_init_failed, __ATOMIC_ACQUIRE);
free(arg);
+ if (thread_exit)
+ return 0;
+
return (DWORD)ctx.thread_func(ctx.routine_args);
}
@@ -183,6 +188,7 @@ struct thread_routine_ctx {
HANDLE thread_handle = NULL;
GROUP_AFFINITY thread_affinity;
struct thread_routine_ctx *ctx;
+ bool thread_exit = false;
ctx = calloc(1, sizeof(*ctx));
if (ctx == NULL) {
@@ -192,6 +198,7 @@ struct thread_routine_ctx {
}
ctx->routine_args = args;
ctx->thread_func = thread_func;
+ ctx->thread_init_failed = false;
thread_handle = CreateThread(NULL, 0, thread_func_wrapper, ctx,
CREATE_SUSPENDED, &tid);
@@ -209,23 +216,29 @@ struct thread_routine_ctx {
);
if (ret != 0) {
RTE_LOG(DEBUG, EAL, "Unable to convert cpuset to thread affinity\n");
- goto cleanup;
+ thread_exit = true;
+ goto resume_thread;
}
if (!SetThreadGroupAffinity(thread_handle,
&thread_affinity, NULL)) {
ret = thread_log_last_error("SetThreadGroupAffinity()");
- goto cleanup;
+ thread_exit = true;
+ goto resume_thread;
}
}
ret = rte_thread_set_priority(*thread_id,
thread_attr->priority);
if (ret != 0) {
RTE_LOG(DEBUG, EAL, "Unable to set thread priority\n");
- goto cleanup;
+ thread_exit = true;
+ goto resume_thread;
}
}
+resume_thread:
+ __atomic_store_n(&ctx->thread_init_failed, thread_exit, __ATOMIC_RELEASE);
+
if (ResumeThread(thread_handle) == (DWORD)-1) {
ret = thread_log_last_error("ResumeThread()");
goto cleanup;
--
1.8.3.1
next prev parent reply other threads:[~2023-03-02 18:44 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-02 18:44 [PATCH 1/2] eal: fix failure race and behavior of thread create Tyler Retzlaff
2023-03-02 18:44 ` Tyler Retzlaff [this message]
2023-03-07 14:33 ` David Marchand
2023-03-09 9:17 ` David Marchand
2023-03-09 9:58 ` Thomas Monjalon
2023-03-09 20:49 ` Tyler Retzlaff
2023-03-09 21:05 ` David Marchand
2023-03-13 23:31 ` [PATCH v2 0/2] fix race in rte_thread_create failure path Tyler Retzlaff
2023-03-13 23:31 ` [PATCH v2 1/2] eal: make cpusetp to rte thread set affinity const Tyler Retzlaff
2023-03-13 23:31 ` [PATCH v2 2/2] eal: fix failure path race setting new thread affinity Tyler Retzlaff
2023-03-14 11:47 ` [PATCH v2 0/2] fix race in rte_thread_create failure path David Marchand
2023-03-14 13:59 ` Tyler Retzlaff
2023-03-14 22:44 ` [PATCH v3 " Tyler Retzlaff
2023-03-14 22:44 ` [PATCH v3 1/2] eal: make cpusetp to rte thread set affinity const Tyler Retzlaff
2023-03-14 22:44 ` [PATCH v3 2/2] eal: fix failure path race setting new thread affinity Tyler Retzlaff
2023-03-14 22:50 ` [PATCH v4 0/2] fix race in rte_thread_create failure path Tyler Retzlaff
2023-03-14 22:50 ` [PATCH v4 1/2] eal: make cpusetp to rte thread set affinity const Tyler Retzlaff
2023-03-14 22:50 ` [PATCH v4 2/2] eal: fix failure path race setting new thread affinity Tyler Retzlaff
2023-03-15 1:20 ` Stephen Hemminger
2023-03-15 1:26 ` Tyler Retzlaff
2023-03-16 0:04 ` [PATCH v4 0/2] fix race in rte_thread_create failure path Tyler Retzlaff
2023-03-16 0:04 ` [PATCH v4 1/2] eal: make cpusetp to rte thread set affinity const Tyler Retzlaff
2023-03-16 0:04 ` [PATCH v4 2/2] eal: fix failure path race setting new thread affinity Tyler Retzlaff
2023-03-16 0:07 ` [PATCH v5 0/2] fix race in rte_thread_create failure path Tyler Retzlaff
2023-03-16 0:07 ` [PATCH v5 1/2] eal: make cpusetp to rte thread set affinity const Tyler Retzlaff
2023-03-16 0:07 ` [PATCH v5 2/2] eal: fix failure path race setting new thread affinity Tyler Retzlaff
2023-03-17 10:45 ` David Marchand
2023-03-17 14:49 ` Tyler Retzlaff
2023-03-17 18:51 ` David Marchand
2023-03-17 21:20 ` Tyler Retzlaff
2023-03-17 18:52 ` [PATCH v6] eal/unix: fix thread creation David Marchand
2023-03-17 21:24 ` Tyler Retzlaff
2023-03-18 18:26 ` David Marchand
2023-03-18 18:26 ` David Marchand
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=1677782682-27200-2-git-send-email-roretzla@linux.microsoft.com \
--to=roretzla@linux.microsoft.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=stable@dpdk.org \
/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).