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;
+
+    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
 


Reply via email to