On 09.03.20 15:40, Christian Borntraeger wrote:
>
>
> On 09.03.20 14:37, David Hildenbrand wrote:
>
>>>
>>> +#if !defined(CONFIG_USER_ONLY)
>>> +static bool machine_is_pv(MachineState *ms)
>>> +{
>>> + Object *obj;
>>> +
>>> + /* we have to bail out for the "none" machine */
>>> + obj = object_dynamic_cast(OBJECT(ms), TYPE_S390_CCW_MACHINE);
>>> + if (!obj) {
>>> + return false;
>>> + }
>>> + return S390_CCW_MACHINE(obj)->pv;
>>
>> Maybe you want to cache the machine, so you can avoid the
>> lookup+conversion on every new CPU.
>>
>
> something like the following?
>
>
> diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c
> index c513f8efe0..cd12c29b9a 100644
> --- a/target/s390x/cpu.c
> +++ b/target/s390x/cpu.c
> @@ -185,13 +185,18 @@ static void s390_cpu_disas_set_info(CPUState *cpu,
> disassemble_info *info)
> static bool machine_is_pv(MachineState *ms)
> {
> Object *obj;
> + static S390CcwMachineState *ccw;
> +
Move this up please (reverse christmas tree ;) )
> + if (ccw)
> + return ccw->pv;
>
> /* we have to bail out for the "none" machine */
> obj = object_dynamic_cast(OBJECT(ms), TYPE_S390_CCW_MACHINE);
> if (!obj) {
> return false;
> }
> - return S390_CCW_MACHINE(obj)->pv;
> + ccw = S390_CCW_MACHINE(obj);
> + return ccw->pv;
> }
> #endif
Yeah, guess this makes sense.
--
Thanks,
David / dhildenb