From: Igor Mammedov <imammedo@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org, "Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH 2/2] target-i386: make cpu_x86_create() get Error argument
Date: Fri, 14 Dec 2012 11:18:18 +0100 [thread overview]
Message-ID: <20121214111818.25ad95d2@thinkpad.mammed.net> (raw)
In-Reply-To: <1355336183-18858-3-git-send-email-ehabkost@redhat.com>
On Wed, 12 Dec 2012 16:16:23 -0200
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Instead of forcing the caller to guess what went wrong while creating
> the CPU object, return error information in a Error argument.
>
> Also, as cpu_x86_create() won't print error messages itself anymore,
> change cpu_x86_init() to print any error returned by cpu_x86_create()
> or cpu_x86_realize().
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> target-i386/cpu.c | 8 ++++++--
> target-i386/cpu.h | 2 +-
> target-i386/helper.c | 21 ++++++++++++++-------
> 3 files changed, 21 insertions(+), 10 deletions(-)
>
> diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> index b242bf1..fba872d 100644
> --- a/target-i386/cpu.c
> +++ b/target-i386/cpu.c
> @@ -1542,7 +1542,7 @@ static void filter_features_for_kvm(X86CPU *cpu)
> /* Create and initialize a X86CPU object, based on the full CPU model string
> * (that may include "+feature,-feature,feature=xxx" feature strings)
> */
> -X86CPU *cpu_x86_create(const char *cpu_model)
> +X86CPU *cpu_x86_create(const char *cpu_model, Error **errp)
> {
> X86CPU *cpu;
> CPUX86State *env;
> @@ -1559,12 +1559,14 @@ X86CPU *cpu_x86_create(const char *cpu_model)
>
> model_pieces = g_strsplit(cpu_model, ",", 2);
> if (!model_pieces[0]) {
> + error_setg(errp, "invalid CPU model string: %s", cpu_model);
> goto error;
> }
> name = model_pieces[0];
> features = model_pieces[1];
>
> if (cpu_x86_find_by_name(def, name) < 0) {
> + error_setg(errp, "CPU model not found: %s", name);
> goto error;
> }
>
> @@ -1575,13 +1577,15 @@ X86CPU *cpu_x86_create(const char *cpu_model)
> &def->svm_features, &def->cpuid_7_0_ebx_features);
>
> if (cpu_x86_parse_featurestr(def, features) < 0) {
> + error_setg(errp, "Error parsing feature string: %s",
> + features ? features : "(none)");
It could be simplified, it shouldn't get here if features == NULL
> goto error;
> }
>
> cpudef_2_x86_cpu(cpu, def, &error);
>
> if (error) {
> - fprintf(stderr, "%s\n", error_get_pretty(error));
> + error_propagate(errp, error);
Why do it here but not above?
> error_free(error);
> goto error;
> }
> diff --git a/target-i386/cpu.h b/target-i386/cpu.h
[...]
>
> X86CPU *cpu_x86_init(const char *cpu_model)
> {
> - X86CPU *cpu;
> + X86CPU *cpu = NULL;
> Error *error = NULL;
>
> - cpu = cpu_x86_create(cpu_model);
> - if (!cpu) {
> - return NULL;
> + cpu = cpu_x86_create(cpu_model, &error);
> + if (error) {
> + goto error;
> }
>
> x86_cpu_realize(OBJECT(cpu), &error);
if x86_cpu_realize() behave as visit* functions, i.e. return early if
error has been already set, error check & goto could be removed here
and above and consolidated at function exit.
> if (error) {
> - error_free(error);
> - object_delete(OBJECT(cpu));
> - return NULL;
> + goto error;
> }
> return cpu;
> +
> +error:
> + if (cpu) {
> + object_delete(OBJECT(cpu));
> + }
> + error_report("%s", error_get_pretty(error));
> + error_free(error);
> + return NULL;
> }
>
> #if !defined(CONFIG_USER_ONLY)
> --
> 1.7.11.7
>
--
Regards,
Igor
next prev parent reply other threads:[~2012-12-14 10:18 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-12 18:16 [Qemu-devel] [PATCH 0/2] target-i386: move CPU object creation to cpu.c (v2) Eduardo Habkost
2012-12-12 18:16 ` [Qemu-devel] [PATCH 1/2] target-i386: move CPU object creation to cpu.c Eduardo Habkost
2012-12-14 10:26 ` Igor Mammedov
2012-12-14 12:42 ` Eduardo Habkost
2012-12-12 18:16 ` [Qemu-devel] [PATCH 2/2] target-i386: make cpu_x86_create() get Error argument Eduardo Habkost
2012-12-14 10:18 ` Igor Mammedov [this message]
2012-12-14 12:38 ` Eduardo Habkost
-- strict thread matches above, loose matches on Subject: below --
2012-12-11 0:30 [Qemu-devel] [PATCH 0/2] target-i386: move CPU object creation to cpu.c Eduardo Habkost
2012-12-11 0:30 ` [Qemu-devel] [PATCH 2/2] target-i386: make cpu_x86_create() get Error argument 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=20121214111818.25ad95d2@thinkpad.mammed.net \
--to=imammedo@redhat.com \
--cc=afaerber@suse.de \
--cc=ehabkost@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.