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