On 4 March 2015 at 14:35, Alex Bennée <alex.bennee@xxxxxxxxxx> wrote: > This adds the saving and restore of the current Multi-Processing state > of the machine. While the KVM_GET/SET_MP_STATE API exposes a number of > potential states for x86 we only use two for ARM. Either the process is > running or not. We then save this state into the cpu_powered TCG state > to avoid changing the serialisation format. > > Signed-off-by: Alex Bennée <alex.bennee@xxxxxxxxxx> > > --- > v2 > - make mpstate field runtime dependant (kvm_enabled()) > - drop initial KVM_CAP_MP_STATE requirement > - re-use cpu_powered instead of new field > > diff --git a/target-arm/machine.c b/target-arm/machine.c > index 9446e5a..185f9a2 100644 > --- a/target-arm/machine.c > +++ b/target-arm/machine.c > @@ -161,6 +161,7 @@ static const VMStateInfo vmstate_cpsr = { > .put = put_cpsr, > }; > > + > static void cpu_pre_save(void *opaque) > { > ARMCPU *cpu = opaque; > @@ -170,6 +171,20 @@ static void cpu_pre_save(void *opaque) > /* This should never fail */ > abort(); > } > +#if defined CONFIG_KVM > + if (kvm_check_extension(CPU(cpu)->kvm_state, KVM_CAP_MP_STATE)) { > + struct kvm_mp_state mp_state; > + int ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_MP_STATE, &mp_state); > + if (ret) { > + fprintf(stderr, "%s: failed to get MP_STATE %d/%s\n", > + __func__, ret, strerror(ret)); > + abort(); > + } > + cpu->powered_off = > + (mp_state.mp_state == KVM_MP_STATE_RUNNABLE) > + ? false : true; Ternary operator to produce a true-or-false result is a bit redundant... > + } > +#endif Why is this in pre-save/post-load rather than in the kvm_arch_get/put_registers functions like all the other syncing code? -- PMM -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html