From: "Andreas Färber" <afaerber@suse.de>
To: Valentin Rakush <valentin.rakush@gmail.com>, qemu-devel@nongnu.org
Cc: Eduardo Habkost <ehabkost@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
Luiz Capitulino <lcapitulino@redhat.com>,
asmetanin@virtuozzo.com, den@openvz.org
Subject: Re: [Qemu-devel] [PATCH RFC] qmp, target-i386: device_list_properties for TYPE_CPU
Date: Fri, 12 Feb 2016 12:30:34 +0100 [thread overview]
Message-ID: <56BDC25A.9030003@suse.de> (raw)
In-Reply-To: <1455268436-1244-1-git-send-email-valentin.rakush@gmail.com>
Hi,
Am 12.02.2016 um 10:13 schrieb Valentin Rakush:
> This is RFC because there is another implementation option: it is
> possible to implement this functionality in the object_finalize for
> all available targets. All targets change will require more testing.
> Please let me know if all targets should be changed at once.
I thought I had already seen some Fujitsu/IBM patch to fix this...
(pointers appreciated) It should be fixed on the level where the problem
is introduced - i.e. if qom/cpu.c calls the cpu_exec_init() in
instance_init it needs to call the corresponding exit function in
instance_finalize; dito for target-i386/cpu.c or wherever. Or we try to
move it from instance_init to realize, avoiding it getting called in the
first place.
>
> This patch changes qmp_device_list_properties and only target-i386
> to allow TYPE_CPU class properties to be quered with QMP interface and
> with -device core2duo-x86_64-cpu,help command line.
>
> Signed-off-by: Valentin Rakush <valentin.rakush@gmail.com>
> Cc: Luiz Capitulino <lcapitulino@redhat.com>
> Cc: Eric Blake <eblake@redhat.com>
> Cc: Markus Armbruster <armbru@redhat.com>
> Cc: Andreas Färber <afaerber@suse.de>
> Cc: Daniel P. Berrange <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> ---
> qmp.c | 19 +++++++++++++++++++
> target-i386/cpu.c | 32 ++++++++++++++++++++++++++++++--
> 2 files changed, 49 insertions(+), 2 deletions(-)
>
> diff --git a/qmp.c b/qmp.c
> index 6ae7230..2721f16 100644
> --- a/qmp.c
> +++ b/qmp.c
> @@ -516,6 +516,7 @@ DevicePropertyInfoList *qmp_device_list_properties(const char *typename,
> Error **errp)
> {
> ObjectClass *klass;
> + ObjectClass *cpu_klass;
Please use cpu_class, only "class" is a reserved identifier.
> Object *obj;
> ObjectProperty *prop;
> ObjectPropertyIterator iter;
> @@ -580,6 +581,24 @@ DevicePropertyInfoList *qmp_device_list_properties(const char *typename,
> prop_list = entry;
> }
>
> + cpu_klass = object_class_dynamic_cast(klass, TYPE_CPU);
> + if (cpu_klass) {
> + CPUState *tmp_cpu = CPU(obj);
> + CPUState *cs = first_cpu;
> +
> + CPU_FOREACH(cs) {
> + if (tmp_cpu->cpu_index == cs->cpu_index) {
> +#if defined(CONFIG_USER_ONLY)
> + cpu_list_lock();
> +#endif
> + QTAILQ_REMOVE(&cpus, cs, node);
> +#if defined(CONFIG_USER_ONLY)
> + cpu_list_unlock();
> +#endif
> + }
> + }
> + }
> +
> object_unref(obj);
>
> return prop_list;
> diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> index 3fa14bf..8c32794 100644
> --- a/target-i386/cpu.c
> +++ b/target-i386/cpu.c
> @@ -1479,7 +1479,7 @@ static void host_x86_cpu_class_init(ObjectClass *oc, void *data)
>
> dc->props = host_x86_cpu_properties;
> /* Reason: host_x86_cpu_initfn() dies when !kvm_enabled() */
> - dc->cannot_destroy_with_object_finalize_yet = true;
> + dc->cannot_destroy_with_object_finalize_yet = false;
> }
>
> static void host_x86_cpu_initfn(Object *obj)
> @@ -3225,11 +3225,39 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
> cc->cpu_exec_enter = x86_cpu_exec_enter;
> cc->cpu_exec_exit = x86_cpu_exec_exit;
>
> + object_class_property_add(oc, "family", "int",
> + x86_cpuid_version_get_family,
> + x86_cpuid_version_set_family, NULL, NULL, NULL);
You add class properties here but I don't see you deleting the previous
instance properties anywhere?
> + object_class_property_add(oc, "model", "int",
> + x86_cpuid_version_get_model,
> + x86_cpuid_version_set_model, NULL, NULL, NULL);
> + object_class_property_add(oc, "stepping", "int",
> + x86_cpuid_version_get_stepping,
> + x86_cpuid_version_set_stepping, NULL, NULL, NULL);
> + object_class_property_add_str(oc, "vendor",
> + x86_cpuid_get_vendor,
> + x86_cpuid_set_vendor, NULL);
> + object_class_property_add_str(oc, "model-id",
> + x86_cpuid_get_model_id,
> + x86_cpuid_set_model_id, NULL);
> + object_class_property_add(oc, "tsc-frequency", "int",
> + x86_cpuid_get_tsc_freq,
> + x86_cpuid_set_tsc_freq, NULL, NULL, NULL);
> + object_class_property_add(oc, "apic-id", "int",
> + x86_cpuid_get_apic_id,
> + x86_cpuid_set_apic_id, NULL, NULL, NULL);
> + object_class_property_add(oc, "feature-words", "X86CPUFeatureWordInfo",
> + x86_cpu_get_feature_words,
> + NULL, NULL, NULL, NULL);
> + object_class_property_add(oc, "filtered-features", "X86CPUFeatureWordInfo",
> + x86_cpu_get_feature_words,
> + NULL, NULL, NULL, NULL);
> +
> /*
> * Reason: x86_cpu_initfn() calls cpu_exec_init(), which saves the
> * object in cpus -> dangling pointer after final object_unref().
> */
> - dc->cannot_destroy_with_object_finalize_yet = true;
> + dc->cannot_destroy_with_object_finalize_yet = false;
This looks bogus, Markus will need to take a close look.
> }
>
> static const TypeInfo x86_cpu_type_info = {
>
Regards,
Andreas
--
SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Graham Norton; HRB 21284 (AG Nürnberg)
next prev parent reply other threads:[~2016-02-12 11:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-12 9:13 [Qemu-devel] [PATCH RFC] qmp, target-i386: device_list_properties for TYPE_CPU Valentin Rakush
2016-02-12 11:30 ` Andreas Färber [this message]
2016-02-12 18:21 ` Eduardo Habkost
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=56BDC25A.9030003@suse.de \
--to=afaerber@suse.de \
--cc=armbru@redhat.com \
--cc=asmetanin@virtuozzo.com \
--cc=den@openvz.org \
--cc=ehabkost@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=valentin.rakush@gmail.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.