From: "Andreas Färber" <afaerber@suse.de>
To: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
Cc: Igor Mammedov <imammedo@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC qom-cpu v2 2/8] x86: add x86_cpu_unrealizefn() for cpu apic remove
Date: Tue, 10 Sep 2013 14:26:05 +0200 [thread overview]
Message-ID: <522F0FDD.9030103@suse.de> (raw)
In-Reply-To: <c80d40ea1465f12caca606a34452bffb035738ec.1378796990.git.chen.fan.fnst@cn.fujitsu.com>
Am 10.09.2013 11:43, schrieb Chen Fan:
> Implement x86_cpu_unrealizefn() for corresponding x86_cpu_realizefn(),
> which is mostly used to clear the apic related information at here.
>
> Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
> ---
> hw/cpu/icc_bus.c | 11 +++++++++++
> hw/i386/kvm/apic.c | 6 ++++++
> hw/intc/apic.c | 7 +++++++
> hw/intc/apic_common.c | 11 +++++++++++
> include/hw/cpu/icc_bus.h | 1 +
> include/hw/i386/apic_internal.h | 1 +
> target-i386/cpu-qom.h | 1 +
> target-i386/cpu.c | 35 +++++++++++++++++++++++++++++++++++
> 8 files changed, 73 insertions(+)
Some nitpicks below, mostly about adopting the latest concepts.
> diff --git a/hw/cpu/icc_bus.c b/hw/cpu/icc_bus.c
> index 8748cc5..45e87d1 100644
> --- a/hw/cpu/icc_bus.c
> +++ b/hw/cpu/icc_bus.c
> @@ -54,11 +54,22 @@ static void icc_device_realize(DeviceState *dev, Error **errp)
> }
> }
>
> +static void icc_device_unrealize(DeviceState *dev, Error **errp)
> +{
> + ICCDevice *id = ICC_DEVICE(dev);
> + ICCDeviceClass *idc = ICC_DEVICE_GET_CLASS(id);
> +
> + if (idc->exit) {
> + idc->exit(id);
->unrealize
> + }
> +}
> +
> static void icc_device_class_init(ObjectClass *oc, void *data)
> {
> DeviceClass *dc = DEVICE_CLASS(oc);
>
> dc->realize = icc_device_realize;
> + dc->unrealize = icc_device_unrealize;
> dc->bus_type = TYPE_ICC_BUS;
> }
>
> diff --git a/hw/i386/kvm/apic.c b/hw/i386/kvm/apic.c
> index 5609063..8f028a1 100644
> --- a/hw/i386/kvm/apic.c
> +++ b/hw/i386/kvm/apic.c
> @@ -181,11 +181,17 @@ static void kvm_apic_init(APICCommonState *s)
> }
> }
>
> +static void kvm_apic_exit(APICCommonState *s)
kvm_apic_unrealize
> +{
> + memory_region_destroy(&s->io_memory);
> +}
> +
> static void kvm_apic_class_init(ObjectClass *klass, void *data)
> {
> APICCommonClass *k = APIC_COMMON_CLASS(klass);
>
> k->init = kvm_apic_init;
> + k->exit = kvm_apic_exit;
> k->set_base = kvm_apic_set_base;
> k->set_tpr = kvm_apic_set_tpr;
> k->get_tpr = kvm_apic_get_tpr;
> diff --git a/hw/intc/apic.c b/hw/intc/apic.c
> index a913186..23488b4 100644
> --- a/hw/intc/apic.c
> +++ b/hw/intc/apic.c
> @@ -882,11 +882,18 @@ static void apic_init(APICCommonState *s)
> msi_supported = true;
> }
>
> +static void apic_uninit(APICCommonState *s)
apic_unrealize
> +{
> + memory_region_destroy(&s->io_memory);
> + local_apics[s->idx] = NULL;
> +}
> +
> static void apic_class_init(ObjectClass *klass, void *data)
> {
> APICCommonClass *k = APIC_COMMON_CLASS(klass);
>
> k->init = apic_init;
> + k->exit = apic_uninit;
> k->set_base = apic_set_base;
> k->set_tpr = apic_set_tpr;
> k->get_tpr = apic_get_tpr;
> diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c
> index 5568621..32c2f74 100644
> --- a/hw/intc/apic_common.c
> +++ b/hw/intc/apic_common.c
> @@ -316,6 +316,16 @@ static int apic_init_common(ICCDevice *dev)
> return 0;
> }
>
> +static void apic_exit_common(ICCDevice *dev)
> +{
> + APICCommonState *s = APIC_COMMON(dev);
> + APICCommonClass *info;
acc please
> +
> + info = APIC_COMMON_GET_CLASS(s);
> + if (info->exit)
> + info->exit(s);
Braces missing -> checkpatch.pl
> +}
> +
> static void apic_dispatch_pre_save(void *opaque)
> {
> APICCommonState *s = APIC_COMMON(opaque);
> @@ -387,6 +397,7 @@ static void apic_common_class_init(ObjectClass *klass, void *data)
> dc->no_user = 1;
> dc->props = apic_properties_common;
> idc->init = apic_init_common;
> + idc->exit = apic_exit_common;
> }
>
> static const TypeInfo apic_common_type = {
> diff --git a/include/hw/cpu/icc_bus.h b/include/hw/cpu/icc_bus.h
> index b550070..15d5374 100644
> --- a/include/hw/cpu/icc_bus.h
> +++ b/include/hw/cpu/icc_bus.h
> @@ -67,6 +67,7 @@ typedef struct ICCDeviceClass {
> /*< public >*/
>
> int (*init)(ICCDevice *dev); /* TODO replace with QOM realize */
> + void (*exit)(ICCDevice *dev);
DeviceUnrealize unrealize;
> } ICCDeviceClass;
>
> #define TYPE_ICC_DEVICE "icc-device"
> diff --git a/include/hw/i386/apic_internal.h b/include/hw/i386/apic_internal.h
> index 1b0a7fb..87d5248 100644
> --- a/include/hw/i386/apic_internal.h
> +++ b/include/hw/i386/apic_internal.h
> @@ -81,6 +81,7 @@ typedef struct APICCommonClass
> ICCDeviceClass parent_class;
>
> void (*init)(APICCommonState *s);
> + void (*exit)(APICCommonState *s);
DeviceUnrealize unrealize;
> void (*set_base)(APICCommonState *s, uint64_t val);
> void (*set_tpr)(APICCommonState *s, uint8_t val);
> uint8_t (*get_tpr)(APICCommonState *s);
> diff --git a/target-i386/cpu-qom.h b/target-i386/cpu-qom.h
> index c4447c2..1e520be 100644
> --- a/target-i386/cpu-qom.h
> +++ b/target-i386/cpu-qom.h
> @@ -50,6 +50,7 @@ typedef struct X86CPUClass {
> /*< public >*/
>
> DeviceRealize parent_realize;
> + DeviceUnrealize parent_unrealize;
> void (*parent_reset)(CPUState *cpu);
> } X86CPUClass;
>
> diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> index 2b99683..6f9154d 100644
> --- a/target-i386/cpu.c
> +++ b/target-i386/cpu.c
> @@ -2339,10 +2339,31 @@ static void x86_cpu_apic_realize(X86CPU *cpu, Error **errp)
> return;
> }
> }
> +
> +static void x86_cpu_apic_unrealize(X86CPU *cpu, Error **errp)
> +{
> + CPUX86State *env = &cpu->env;
> + Error *local_err = NULL;
> +
> + if (env->apic_state == NULL) {
> + return;
> + }
> +
> + object_property_set_bool(OBJECT(env->apic_state), false, "realized", &local_err);
> + if (local_err != NULL) {
> + error_propagate(errp, local_err);
> + return;
> + }
> +
> + qdev_free(env->apic_state);
> +}
> #else
> static void x86_cpu_apic_realize(X86CPU *cpu, Error **errp)
> {
> }
> +static void x86_cpu_apic_unrealize(X86CPU *cpu, Error **errp)
> +{
> +}
> #endif
>
> static void x86_cpu_realizefn(DeviceState *dev, Error **errp)
> @@ -2418,6 +2439,18 @@ out:
> }
> }
>
> +static void x86_cpu_unrealizefn(DeviceState *dev, Error **errp)
> +{
> + X86CPU *cpu = X86_CPU(dev);
> + Error *local_err = NULL;
> +
> + x86_cpu_apic_unrealize(cpu, &local_err);
> + if (local_err != NULL) {
> + error_propagate(errp, local_err);
> + return;
> + }
> +}
> +
> /* Enables contiguous-apic-ID mode, for compatibility */
> static bool compat_apic_id_mode;
>
> @@ -2549,7 +2582,9 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
> DeviceClass *dc = DEVICE_CLASS(oc);
>
> xcc->parent_realize = dc->realize;
> + xcc->parent_unrealize = dc->unrealize;
> dc->realize = x86_cpu_realizefn;
> + dc->unrealize = x86_cpu_unrealizefn;
> dc->bus_type = TYPE_ICC_BUS;
> dc->props = x86_cpu_properties;
>
Regards,
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
next prev parent reply other threads:[~2013-09-10 12:26 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-10 9:43 [Qemu-devel] [RFC qom-cpu v2 0/8] i386: add cpu hot remove support Chen Fan
2013-09-10 9:43 ` [Qemu-devel] [RFC qom-cpu v2 1/8] apic: remove apic_no from apic_init_common() Chen Fan
2013-09-10 12:09 ` Igor Mammedov
2013-09-10 12:16 ` Andreas Färber
2013-09-11 5:37 ` chenfan
2013-09-10 9:43 ` [Qemu-devel] [RFC qom-cpu v2 2/8] x86: add x86_cpu_unrealizefn() for cpu apic remove Chen Fan
2013-09-10 12:26 ` Andreas Färber [this message]
2013-09-10 9:43 ` [Qemu-devel] [RFC qom-cpu v2 3/8] qmp: add 'cpu-del' command support Chen Fan
2013-09-10 15:52 ` Eric Blake
2013-09-11 2:32 ` chenfan
2013-09-10 9:43 ` [Qemu-devel] [RFC qom-cpu v2 4/8] qom cpu: rename variable 'cpu_added_notifier' to 'cpu_hotplug_notifier' Chen Fan
2013-09-10 9:43 ` [Qemu-devel] [RFC qom-cpu v2 5/8] qom cpu: add UNPLUG cpu notifier support Chen Fan
2013-09-10 9:43 ` [Qemu-devel] [RFC qom-cpu v2 6/8] i386: implement pc interface pc_hot_del_cpu() Chen Fan
2013-09-10 9:43 ` [Qemu-devel] [RFC qom-cpu v2 7/8] piix4: implement function cpu_status_write() for vcpu ejection Chen Fan
2013-09-10 9:43 ` [Qemu-devel] [RFC qom-cpu v2 8/8] cpus: release allocated vCPU objects Chen Fan
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=522F0FDD.9030103@suse.de \
--to=afaerber@suse.de \
--cc=chen.fan.fnst@cn.fujitsu.com \
--cc=imammedo@redhat.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.