From: Thomas Huth <thuth@redhat.com>
To: Bharata B Rao <bharata@linux.vnet.ibm.com>, qemu-devel@nongnu.org
Cc: mjrosato@linux.vnet.ibm.com,
Zhu Guihua <zhugh.fnst@cn.fujitsu.com>,
ehabkost@redhat.com, imammedo@redhat.com, aik@ozlabs.ru,
agraf@suse.de, mdroth@linux.vnet.ibm.com,
Gu Zheng <guz.fnst@cn.fujitsu.com>,
qemu-ppc@nongnu.org, tyreld@linux.vnet.ibm.com,
nfont@linux.vnet.ibm.com, Chen Fan <chen.fan.fnst@cn.fujitsu.com>,
pbonzini@redhat.com, afaerber@suse.de,
david@gibson.dropbear.id.au
Subject: Re: [Qemu-devel] [PATCH v7 05/13] cpu: Reclaim vCPU objects
Date: Fri, 19 Feb 2016 16:21:21 +0100 [thread overview]
Message-ID: <56C732F1.9080003@redhat.com> (raw)
In-Reply-To: <1453960195-15181-6-git-send-email-bharata@linux.vnet.ibm.com>
On 28.01.2016 06:49, Bharata B Rao wrote:
> From: Gu Zheng <guz.fnst@cn.fujitsu.com>
>
> In order to deal well with the kvm vcpus (which can not be removed without any
> protection), we do not close KVM vcpu fd, just record and mark it as stopped
> into a list, so that we can reuse it for the appending cpu hot-add request if
> possible. It is also the approach that kvm guys suggested:
> https://www.mail-archive.com/kvm@vger.kernel.org/msg102839.html
>
> Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
> Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
> Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
> Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
> [- Explicit CPU_REMOVE() from qemu_kvm/tcg_destroy_vcpu()
> isn't needed as it is done from cpu_exec_exit()
> - Use iothread mutex instead of global mutex during
> destroy
> - Don't cleanup vCPU object from vCPU thread context
> but leave it to the callers (device_add/device_del)]
> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> cpus.c | 38 +++++++++++++++++++++++++++++++++++
> include/qom/cpu.h | 10 +++++++++
> include/sysemu/kvm.h | 1 +
> kvm-all.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++-
> kvm-stub.c | 5 +++++
> 5 files changed, 110 insertions(+), 1 deletion(-)
>
> diff --git a/cpus.c b/cpus.c
> index 1e97cc4..c5631f0 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -953,6 +953,18 @@ void async_run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data)
> qemu_cpu_kick(cpu);
> }
>
> +static void qemu_kvm_destroy_vcpu(CPUState *cpu)
> +{
> + if (kvm_destroy_vcpu(cpu) < 0) {
> + error_report("kvm_destroy_vcpu failed");
> + exit(EXIT_FAILURE);
> + }
> +}
> +
> +static void qemu_tcg_destroy_vcpu(CPUState *cpu)
> +{
Will this be populated by a later patch in your series? If not, maybe
add a debugging statement here so that it is clear that there is a TODO
left here?
> +}
> +
> static void flush_queued_work(CPUState *cpu)
> {
> struct qemu_work_item *wi;
> @@ -1053,6 +1065,11 @@ static void *qemu_kvm_cpu_thread_fn(void *arg)
> }
> }
> qemu_kvm_wait_io_event(cpu);
> + if (cpu->exit && !cpu_can_run(cpu)) {
> + qemu_kvm_destroy_vcpu(cpu);
> + qemu_mutex_unlock_iothread();
> + return NULL;
> + }
> }
You could increase readability of the code by changing the condition of
the loop instead - currently it is a "while (1)" ... you could turn that
into a "do { ... } while (!cpu->exit || cpu_can_run(cpu))" and then
destroy the cpu after the loop.
> return NULL;
...
> diff --git a/include/qom/cpu.h b/include/qom/cpu.h
> index 2e5229d..32a2c71 100644
> --- a/include/qom/cpu.h
> +++ b/include/qom/cpu.h
> @@ -232,6 +232,7 @@ struct kvm_run;
> * @halted: Nonzero if the CPU is in suspended state.
> * @stop: Indicates a pending stop request.
> * @stopped: Indicates the CPU has been artificially stopped.
> + * @exit: Indicates the CPU has exited due to an unplug operation.
There is also a "exit_request" member in this struct already ... maybe
you could name your new variable differently to avoid confusion?
Something like "remove_request" or "unplug_request" ?
> * @crash_occurred: Indicates the OS reported a crash (panic) for this CPU
> * @tcg_exit_req: Set to force TCG to stop executing linked TBs for this
> * CPU and return to its top level loop.
> @@ -284,6 +285,7 @@ struct CPUState {
> bool created;
> bool stop;
> bool stopped;
> + bool exit;
> bool crash_occurred;
> bool exit_request;
> uint32_t interrupt_request;
...
Apart from that, the patch looks fine to me.
Thomas
next prev parent reply other threads:[~2016-02-19 15:21 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-28 5:49 [Qemu-devel] [PATCH v7 00/13] sPAPR CPU hotplug Bharata B Rao
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 01/13] machine: Don't allow CPU toplogies with partially filled cores Bharata B Rao
2016-01-28 19:04 ` Eduardo Habkost
2016-01-29 3:52 ` David Gibson
2016-01-29 14:24 ` Eduardo Habkost
2016-01-29 15:10 ` Igor Mammedov
2016-01-29 15:36 ` Eduardo Habkost
2016-01-29 16:52 ` Igor Mammedov
2016-01-29 17:24 ` Eduardo Habkost
2016-02-01 9:41 ` Igor Mammedov
2016-02-03 17:38 ` Eduardo Habkost
2016-02-04 9:38 ` Igor Mammedov
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 02/13] exec: Remove cpu from cpus list during cpu_exec_exit() Bharata B Rao
2016-01-28 19:19 ` Eduardo Habkost
2016-01-29 6:14 ` Bharata B Rao
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 03/13] exec: Do vmstate unregistration from cpu_exec_exit() Bharata B Rao
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 04/13] cpu: Don't realize CPU from cpu_generic_init() Bharata B Rao
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 05/13] cpu: Reclaim vCPU objects Bharata B Rao
2016-02-19 15:21 ` Thomas Huth [this message]
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 06/13] cpu: Add a sync version of cpu_remove() Bharata B Rao
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 07/13] xics, xics_kvm: Handle CPU unplug correctly Bharata B Rao
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 08/13] target-ppc: Introduce PowerPC specific CPU core device Bharata B Rao
2016-02-01 2:39 ` David Gibson
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 09/13] spapr: Enable CPU hotplug for pseries-2.6 and add CPU DRC DT entries Bharata B Rao
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 10/13] spapr: CPU hotplug support Bharata B Rao
2016-02-01 3:07 ` David Gibson
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 11/13] spapr: CPU hot unplug support Bharata B Rao
2016-02-01 3:13 ` David Gibson
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 12/13] qmp: Add query-ppc-cpu-cores command Bharata B Rao
2016-01-28 20:52 ` Eric Blake
2016-01-29 6:34 ` Bharata B Rao
2016-01-29 15:45 ` Igor Mammedov
2016-02-01 8:43 ` Bharata B Rao
2016-02-01 9:56 ` Igor Mammedov
2016-01-28 5:49 ` [Qemu-devel] [PATCH v7 13/13] hmp: Add "info ppc-cpu-cores" command Bharata B Rao
2016-01-28 21:56 ` Eric Blake
2016-01-29 6:49 ` Bharata B Rao
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=56C732F1.9080003@redhat.com \
--to=thuth@redhat.com \
--cc=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=aik@ozlabs.ru \
--cc=bharata@linux.vnet.ibm.com \
--cc=chen.fan.fnst@cn.fujitsu.com \
--cc=david@gibson.dropbear.id.au \
--cc=ehabkost@redhat.com \
--cc=guz.fnst@cn.fujitsu.com \
--cc=imammedo@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=mjrosato@linux.vnet.ibm.com \
--cc=nfont@linux.vnet.ibm.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=tyreld@linux.vnet.ibm.com \
--cc=zhugh.fnst@cn.fujitsu.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 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.