From: Anthony Liguori <aliguori@us.ibm.com>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [patch 09/11] qemu: handle vmstop from cpu context
Date: Mon, 06 Apr 2009 13:06:38 -0500 [thread overview]
Message-ID: <49DA44AE.6070802@us.ibm.com> (raw)
In-Reply-To: <20090402233746.496016021@localhost.localdomain>
Marcelo Tosatti wrote:
> There are certain cases where cpu context requests a vm stop, such as
> -ENOSPC handling.
>
> IMO its simpler to handle vmstop only through the iothread.
>
> Note there is change in behaviour: now the cpu thread which requested vm_stop
> will actually only stop when it exits back to cpu_main_loop. It might cause
> further damage in between vmstop and cpu_main_loop.
>
Missing SoB line.
Regards,
Anthony Liguori
> Index: trunk/vl.c
> ===================================================================
> --- trunk.orig/vl.c
> +++ trunk/vl.c
> @@ -3551,7 +3551,22 @@ void vm_start(void)
> }
> }
>
> -void vm_stop(int reason)
> +static int vmstop_requested;
> +
> +static int qemu_vmstop_requested(void)
> +{
> + int r = vmstop_requested;
> + vmstop_requested = 0;
> + return r;
> +}
> +
> +static void qemu_system_vmstop_request(int reason)
> +{
> + vmstop_requested = reason;
> + main_loop_break();
> +}
> +
> +static void __vm_stop(int reason)
> {
> if (vm_running) {
> cpu_disable_ticks();
> @@ -3561,6 +3576,21 @@ void vm_stop(int reason)
> }
> }
>
> +void vm_stop(int reason)
> +{
> + QemuThread me;
> + qemu_thread_self(&me);
> +
> + if (!qemu_thread_equal(&me, &io_thread)) {
> + qemu_system_vmstop_request(reason);
> + /* make sure we can't return to cpu_exec */
> + if (cpu_single_env)
> + cpu_single_env->stop = 1;
> + return;
> + }
> + __vm_stop(reason);
> +}
> +
> /* reset/shutdown handler */
>
> typedef struct QEMUResetEntry {
> @@ -3758,6 +3788,8 @@ static int cpu_can_run(CPUState *env)
> return 0;
> if (reset_requested)
> return 0;
> + if (vmstop_requested)
> + return 0;
> return 1;
> }
>
> @@ -4204,6 +4236,8 @@ static void qemu_init_state(void)
>
> static void main_loop(void)
> {
> + int r;
> +
> qemu_thread_self(&io_thread);
> setup_iothread_fd();
>
> @@ -4220,12 +4254,14 @@ static void main_loop(void)
> no_shutdown = 0;
> else
> break;
> - } else if (qemu_powerdown_requested())
> + } else if (qemu_powerdown_requested()) {
> qemu_system_powerdown();
> - else if (qemu_reset_requested()) {
> + } else if (qemu_reset_requested()) {
> pause_all_vcpus();
> qemu_system_reset();
> resume_all_vcpus();
> + } else if ((r = qemu_vmstop_requested())) {
> + vm_stop(r);
> }
> }
> }
>
>
--
Regards,
Anthony Liguori
next prev parent reply other threads:[~2009-04-06 18:06 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-02 23:32 [Qemu-devel] [patch 00/11] iothread v2 Marcelo Tosatti
2009-04-02 23:32 ` [Qemu-devel] [patch 01/11] qemu: create helper for event notification Marcelo Tosatti
2009-04-02 23:32 ` [Qemu-devel] [patch 02/11] qemu: mutex/thread/cond wrappers Marcelo Tosatti
2009-04-06 18:21 ` Anthony Liguori
2009-04-06 19:20 ` Marcelo Tosatti
2009-04-06 19:35 ` Anthony Liguori
2009-04-02 23:32 ` [Qemu-devel] [patch 03/11] qemu: per-arch cpu_has_work Marcelo Tosatti
2009-04-02 23:32 ` [Qemu-devel] [patch 04/11] qemu: introduce main_loop_break Marcelo Tosatti
2009-04-02 23:32 ` [Qemu-devel] [patch 05/11] qemu: separate thread for io Marcelo Tosatti
2009-04-02 23:32 ` [Qemu-devel] [patch 06/11] qemu: per-cpu thread information Marcelo Tosatti
2009-04-02 23:32 ` [Qemu-devel] [patch 07/11] qemu: handle reset/poweroff/shutdown in iothread Marcelo Tosatti
2009-04-02 23:32 ` [Qemu-devel] [patch 08/11] qemu: pause and resume cpu threads Marcelo Tosatti
2009-04-02 23:32 ` [Qemu-devel] [patch 09/11] qemu: handle vmstop from cpu context Marcelo Tosatti
2009-04-06 18:06 ` Anthony Liguori [this message]
2009-04-02 23:33 ` [Qemu-devel] [patch 10/11] qemu: make iothread selectable at compile time Marcelo Tosatti
2009-04-02 23:33 ` [Qemu-devel] [patch 11/11] qemu: basic kvm iothread support Marcelo Tosatti
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=49DA44AE.6070802@us.ibm.com \
--to=aliguori@us.ibm.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.