[PATCH v2 1/6] target-arm: kvm: save/restore mp state
Peter Maydell
peter.maydell at linaro.org
Thu Mar 12 08:43:40 PDT 2015
On 4 March 2015 at 14:35, Alex Bennée <alex.bennee at linaro.org> 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 at linaro.org>
>
> ---
> 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
More information about the linux-arm-kernel
mailing list