From: Warner Losh <imp@bsdimp.com>
To: qemu-devel@nongnu.org
Cc: Kyle Evans <kevans@freebsd.org>,
qemu-arm@nongnu.org, Warner Losh <imp@bsdimp.com>,
Peter Maydell <peter.maydell@linaro.org>,
Jessica Clarke <jrtc27@jrtc27.com>
Subject: [PATCH 11/14] bsd-user: Sync fork_start/fork_end with linux-user
Date: Mon, 22 Jul 2024 15:43:10 -0600 [thread overview]
Message-ID: <20240722214313.89503-12-imp@bsdimp.com> (raw)
In-Reply-To: <20240722214313.89503-1-imp@bsdimp.com>
From: Jessica Clarke <jrtc27@jrtc27.com>
This reorders some of the calls, deduplicates code between branches and,
most importantly, fixes a double end_exclusive call in the parent that
will cause exclusive_context_count to go negative.
Signed-off-by: Jessica Clarke <jrtc27@jrtc27.com>
Pull-Request: https://github.com/qemu-bsd-user/qemu-bsd-user/pull/52
Reviewed-by: Warner Losh <imp@bsdimp.com>
Signed-off-by: Warner Losh <imp@bsdimp.com>
---
bsd-user/main.c | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/bsd-user/main.c b/bsd-user/main.c
index 82e94a03160..6d81452e51a 100644
--- a/bsd-user/main.c
+++ b/bsd-user/main.c
@@ -35,6 +35,7 @@
#include "qemu/path.h"
#include "qemu/help_option.h"
#include "qemu/module.h"
+#include "qemu/plugin.h"
#include "exec/exec-all.h"
#include "user/guest-base.h"
#include "tcg/startup.h"
@@ -103,8 +104,9 @@ unsigned long target_sgrowsiz = TARGET_SGROWSIZ; /* amount to grow stack */
void fork_start(void)
{
start_exclusive();
- cpu_list_lock();
mmap_fork_start();
+ cpu_list_lock();
+ qemu_plugin_user_prefork_lock();
gdbserver_fork_start();
}
@@ -112,31 +114,29 @@ void fork_end(pid_t pid)
{
bool child = pid == 0;
+ qemu_plugin_user_postfork(child);
+ mmap_fork_end(child);
if (child) {
CPUState *cpu, *next_cpu;
- /*
- * Child processes created by fork() only have a single thread. Discard
- * information about the parent threads.
- */
+ /* Child processes created by fork() only have a single thread.
+ Discard information about the parent threads. */
CPU_FOREACH_SAFE(cpu, next_cpu) {
if (cpu != thread_cpu) {
QTAILQ_REMOVE_RCU(&cpus_queue, cpu, node);
}
}
- mmap_fork_end(child);
- /*
- * qemu_init_cpu_list() takes care of reinitializing the exclusive
- * state, so we don't need to end_exclusive() here.
- */
qemu_init_cpu_list();
get_task_state(thread_cpu)->ts_tid = qemu_get_thread_id();
- gdbserver_fork_end(thread_cpu, pid);
} else {
- mmap_fork_end(child);
cpu_list_unlock();
- gdbserver_fork_end(thread_cpu, pid);
- end_exclusive();
}
+ gdbserver_fork_end(thread_cpu, pid);
+ /*
+ * qemu_init_cpu_list() reinitialized the child exclusive state, but we
+ * also need to keep current_cpu consistent, so call end_exclusive() for
+ * both child and parent.
+ */
+ end_exclusive();
}
void cpu_loop(CPUArchState *env)
--
2.45.1
next prev parent reply other threads:[~2024-07-22 21:47 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-22 21:42 [PATCH 00/14] bsd-user: Misc changes for 9.1 (I hope) Warner Losh
2024-07-22 21:43 ` [PATCH 01/14] bsd-user:Add CPU initialization and management functions Warner Losh
2024-07-22 21:43 ` [PATCH 02/14] bsd-user:Add AArch64 register handling and related functions Warner Losh
2024-07-22 21:43 ` [PATCH 03/14] bsd-user:Add ARM AArch64 support and capabilities Warner Losh
2024-07-22 21:43 ` [PATCH 04/14] bsd-user:Add ARM AArch64 signal handling support Warner Losh
2024-07-22 21:43 ` [PATCH 05/14] bsd-user:Add get_mcontext function for ARM AArch64 Warner Losh
2024-07-22 21:43 ` [PATCH 06/14] bsd-user:Add setup_sigframe_arch " Warner Losh
2024-07-22 21:43 ` [PATCH 07/14] bsd-user:Add set_mcontext " Warner Losh
2024-07-22 21:43 ` [PATCH 08/14] bsd-user:Add AArch64 improvements and signal handling functions Warner Losh
2024-07-22 21:43 ` [PATCH 09/14] bsd-user: Simplify the implementation of execve Warner Losh
2024-07-23 1:03 ` Richard Henderson
2024-07-22 21:43 ` [PATCH 10/14] bsd-user: Hard wire aarch64 to be 4k pages only Warner Losh
2024-07-23 1:10 ` Richard Henderson
2024-07-23 5:01 ` Warner Losh
2024-07-23 5:38 ` Richard Henderson
2024-07-22 21:43 ` Warner Losh [this message]
2024-07-23 1:13 ` [PATCH 11/14] bsd-user: Sync fork_start/fork_end with linux-user Richard Henderson
2024-07-22 21:43 ` [PATCH 12/14] bsd-user: Define TARGET_SIGSTACK_ALIGN and use it to round stack Warner Losh
2024-07-23 1:14 ` Richard Henderson
2024-07-22 21:43 ` [PATCH 13/14] bsd-user: Make compile for non-linux user-mode stuff Warner Losh
2024-07-22 22:01 ` Philippe Mathieu-Daudé
2024-07-22 23:09 ` Alex Bennée
2024-07-23 5:12 ` Warner Losh
2024-07-23 1:15 ` Richard Henderson
2024-07-22 21:43 ` [PATCH 14/14] bsd-user: Add aarch64 build to tree Warner Losh
2024-07-22 21:54 ` Philippe Mathieu-Daudé
2024-07-22 22:06 ` Warner Losh
2024-07-22 22:11 ` Philippe Mathieu-Daudé
2024-07-23 1:17 ` Richard Henderson
2024-07-23 5:08 ` Warner Losh
2024-07-23 5:10 ` Warner Losh
2024-07-23 6:38 ` Philippe Mathieu-Daudé
2024-07-23 16:54 ` Warner Losh
2024-07-23 5:39 ` Richard Henderson
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=20240722214313.89503-12-imp@bsdimp.com \
--to=imp@bsdimp.com \
--cc=jrtc27@jrtc27.com \
--cc=kevans@freebsd.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.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).