All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <f4bug@amsat.org>
To: Igor Mammedov <imammedo@redhat.com>
Cc: qemu-devel@nongnu.org,
	Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>,
	Artyom Tarasenko <atar4qemu@gmail.com>
Subject: Re: [Qemu-devel] [PATCH for-2.11 01/27] sparc: convert cpu models to SPARC cpu subclasses
Date: Tue, 22 Aug 2017 22:12:57 -0300	[thread overview]
Message-ID: <3d17f458-8f90-e5ee-da7d-0726a2105ff0@amsat.org> (raw)
In-Reply-To: <20170821125505.37ce8935@nial.brq.redhat.com>

>> On 08/18/2017 07:08 AM, Igor Mammedov wrote:
>>> QOMfy cpu models handling introducing propper cpu types
>>> for each cpu model.
>>>
>>> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
>>> ---
>>> with this and conversion of features to properties,
>>> it would be possible to replace cpu_sparc_init() with
>>> cpu_generic_init() and reuse common -cpu handling
>>> infrastructure.
>>>
>>> CC: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
>>> CC: Artyom Tarasenko <atar4qemu@gmail.com>
>>> CC: Philippe Mathieu-Daudé <f4bug@amsat.org>
>>>
>>> v2:
>>>     * make base class abstract (Philippe Mathieu-Daudé <f4bug@amsat.org>)
>>> ---
>>>    target/sparc/cpu-qom.h |   2 +
>>>    target/sparc/cpu.c     | 121 +++++++++++++++++++++++++++++++++----------------
>>>    2 files changed, 84 insertions(+), 39 deletions(-)
>>>
>>> diff --git a/target/sparc/cpu-qom.h b/target/sparc/cpu-qom.h
>>> index f63af72..af6d57a 100644
>>> --- a/target/sparc/cpu-qom.h
>>> +++ b/target/sparc/cpu-qom.h
>>> @@ -35,6 +35,7 @@
>>>    #define SPARC_CPU_GET_CLASS(obj) \
>>>        OBJECT_GET_CLASS(SPARCCPUClass, (obj), TYPE_SPARC_CPU)
>>>    
>>> +typedef struct sparc_def_t sparc_def_t;
>>>    /**
>>>     * SPARCCPUClass:
>>>     * @parent_realize: The parent class' realize handler.
>>> @@ -49,6 +50,7 @@ typedef struct SPARCCPUClass {
>>>    
>>>        DeviceRealize parent_realize;
>>>        void (*parent_reset)(CPUState *cpu);
>>> +    sparc_def_t *cpu_def;
>>>    } SPARCCPUClass;
>>>    
>>>    typedef struct SPARCCPU SPARCCPU;
>>> diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
>>> index d606eb5..2994c09 100644
>>> --- a/target/sparc/cpu.c
>>> +++ b/target/sparc/cpu.c
>>> @@ -25,8 +25,6 @@
>>>    
>>>    //#define DEBUG_FEATURES
>>>    
>>> -static int cpu_sparc_find_by_name(sparc_def_t *cpu_def, const char *cpu_model);
>>> -
>>>    /* CPUClass::reset() */
>>>    static void sparc_cpu_reset(CPUState *s)
>>>    {
>>> @@ -111,17 +109,9 @@ static int cpu_sparc_register(SPARCCPU *cpu, const char *cpu_model)
>>>    {
>>>        CPUSPARCState *env = &cpu->env;
>>>        char *s = g_strdup(cpu_model);
>>> -    char *featurestr, *name = strtok(s, ",");
>>> -    sparc_def_t def1, *def = &def1;
>>> +    char *featurestr = strtok(s, ",");
>>>        Error *err = NULL;
>>>    
>>> -    if (cpu_sparc_find_by_name(def, name) < 0) {
>>> -        g_free(s);
>>> -        return -1;
>>> -    }
>>> -
>>> -    env->def = g_memdup(def, sizeof(*def));
>>> -
>>>        featurestr = strtok(NULL, ",");
>>>        sparc_cpu_parse_features(CPU(cpu), featurestr, &err);
>>>        g_free(s);
>>> @@ -130,18 +120,18 @@ static int cpu_sparc_register(SPARCCPU *cpu, const char *cpu_model)
>>>            return -1;
>>>        }
>>>    
>>> -    env->version = def->iu_version;
>>> -    env->fsr = def->fpu_version;
>>> -    env->nwindows = def->nwindows;
>>> +    env->version = env->def->iu_version;
>>> +    env->fsr = env->def->fpu_version;
>>> +    env->nwindows = env->def->nwindows;
>>>    #if !defined(TARGET_SPARC64)
>>> -    env->mmuregs[0] |= def->mmu_version;
>>> +    env->mmuregs[0] |= env->def->mmu_version;
>>>        cpu_sparc_set_id(env, 0);
>>> -    env->mxccregs[7] |= def->mxcc_version;
>>> +    env->mxccregs[7] |= env->def->mxcc_version;
>>>    #else
>>> -    env->mmu_version = def->mmu_version;
>>> -    env->maxtl = def->maxtl;
>>> -    env->version |= def->maxtl << 8;
>>> -    env->version |= def->nwindows - 1;
>>> +    env->mmu_version = env->def->mmu_version;
>>> +    env->maxtl = env->def->maxtl;
>>> +    env->version |= env->def->maxtl << 8;
>>> +    env->version |= env->def->nwindows - 1;
>>>    #endif
>>>        return 0;
>>>    }
>>> @@ -149,8 +139,19 @@ static int cpu_sparc_register(SPARCCPU *cpu, const char *cpu_model)
>>>    SPARCCPU *cpu_sparc_init(const char *cpu_model)
>>>    {
>>>        SPARCCPU *cpu;
>>> +    ObjectClass *oc;
>>> +    char *str, *name;
>>> +
>>> +    str = g_strdup(cpu_model);
>>> +    name = strtok(str, ",");
>>
>> you can free 'str' once here:
>>
>>          g_free(str);
>>
>>> +    oc = cpu_class_by_name(TYPE_SPARC_CPU, name);
>>> +    if (oc == NULL) {
>>> +        g_free(str);
>>
>> drop
>>
>>> +        return NULL;
>>> +    }
>>> +    g_free(str);
>>
>> drop
> 
> I'll fix it up if I have to respin series (note this function is removed within series)
> 
> [...]
>   
> 
>> Anyway I can't start Aurelien's image [1] with this commit:
> Can't reproduce it locally (either dirty/clean tree rebuild)
> with ./configure --enable-debug
> 
>   
>> $ sparc-softmmu/qemu-system-sparc -hda debian_etch_sparc_small.qcow2
>> qemu: Unable to find Sparc CPU definition
> for this kind of error guest image doesn't matter as error happens during machine_init()
> 
>> [1] https://people.debian.org/~aurel32/qemu/sparc/
> It boots just fine with default CPU model:
> 
> ./sparc-softmmu/qemu-system-sparc -hda debian_etch_sparc_small.qcow2

Sorry I'v been distracted by something else :/
I might have done something wrong, I'll test it again tomorrow.

> 
> and with explicitly specified one:
> 
> sparc-softmmu/qemu-system-sparc -cpu "Fujitsu MB86904"
> 
> I get from "info qom-tree"
> ...
>   /device[0] (Fujitsu-MB86904-sparc-cpu)
> ...
> 

  reply	other threads:[~2017-08-23  1:13 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-18 10:08 [Qemu-devel] [PATCH for-2.11 00/27] complete cpu QOMification and remove cpu_FOO_init() helpers Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 01/27] sparc: convert cpu models to SPARC cpu subclasses Igor Mammedov
2017-08-18 19:00   ` Philippe Mathieu-Daudé
2017-08-21 10:55     ` Igor Mammedov
2017-08-23  1:12       ` Philippe Mathieu-Daudé [this message]
2017-08-24  2:40         ` Philippe Mathieu-Daudé
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 02/27] sparc: embed sparc_def_t into CPUSPARCState Igor Mammedov
2017-08-24  2:45   ` Philippe Mathieu-Daudé
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 03/27] sparc: convert cpu features to qdev properties Igor Mammedov
2017-08-18 18:24   ` Eduardo Habkost
2017-08-21 11:03     ` Igor Mammedov
2017-08-23 13:07       ` Eduardo Habkost
2017-08-23 14:17         ` Igor Mammedov
2017-08-24 13:32   ` Philippe Mathieu-Daudé
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 04/27] sparc: move adhoc CPUSPARCState initialization to realize time Igor Mammedov
2017-08-24  2:47   ` Philippe Mathieu-Daudé
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 05/27] target-i386: cpu: convert plus/minus properties to global properties Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 06/27] x86: extract legacy cpu features format parser Igor Mammedov
2017-08-18 18:08   ` Eduardo Habkost
2017-08-21 11:06     ` Igor Mammedov
2017-08-23 14:34   ` Eduardo Habkost
2017-08-23 16:29     ` Igor Mammedov
2017-08-23 16:46       ` Eduardo Habkost
2017-08-23 17:37         ` Igor Mammedov
2017-08-23 17:58           ` Eduardo Habkost
2017-08-24  9:18             ` Igor Mammedov
2017-08-24 13:43               ` Igor Mammedov
2017-08-24 13:45               ` Eduardo Habkost
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 07/27] sparc: replace custom cpu feature parsing with cpu_legacy_parse_featurestr() Igor Mammedov
2017-08-24 13:27   ` Philippe Mathieu-Daudé
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 08/27] sparc: replace cpu_sparc_init() with cpu_generic_init() Igor Mammedov
2017-08-18 19:57   ` Philippe Mathieu-Daudé
2017-08-21 11:11     ` Igor Mammedov
2017-08-24  2:51       ` Philippe Mathieu-Daudé
2017-08-24  2:49   ` Philippe Mathieu-Daudé
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 09/27] s390x: replace cpu_s390x_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 10/27] alpha: replace cpu_alpha_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 11/27] hppa: replace cpu_hppa_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 12/27] m68k: replace cpu_m68k_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 13/27] microblaze: replace cpu_mb_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 14/27] nios2: replace cpu_nios2_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 15/27] tilegx: replace cpu_tilegx_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 16/27] xtensa: replace cpu_xtensa_init() " Igor Mammedov
2017-08-24 13:21   ` Philippe Mathieu-Daudé
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 17/27] tricore: replace cpu_tricore_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 18/27] sh4: replace cpu_sh4_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 19/27] arm: replace cpu_arm_init() " Igor Mammedov
2017-08-24 13:26   ` Philippe Mathieu-Daudé
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 20/27] cris: replace cpu_cris_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 21/27] x86: replace cpu_x86_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 22/27] lm32: replace cpu_lm32_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 23/27] moxie: replace cpu_moxie_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 24/27] openrisc: replace cpu_openrisc_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 25/27] unicore32: replace uc32_cpu_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 26/27] ppc: replace cpu_ppc_init() " Igor Mammedov
2017-08-18 10:08 ` [Qemu-devel] [PATCH for-2.11 27/27] fix build failure in nbd_read_reply_entry() Igor Mammedov

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=3d17f458-8f90-e5ee-da7d-0726a2105ff0@amsat.org \
    --to=f4bug@amsat.org \
    --cc=atar4qemu@gmail.com \
    --cc=imammedo@redhat.com \
    --cc=mark.cave-ayland@ilande.co.uk \
    --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.