[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCHv4 2/5] migration: Mark CPU states dirty before inc
From: |
Juan Quintela |
Subject: |
Re: [Qemu-ppc] [PATCHv4 2/5] migration: Mark CPU states dirty before incoming migration/loadvm |
Date: |
Tue, 30 May 2017 15:03:23 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) |
David Gibson <address@hidden> wrote:
> As a rule, CPU internal state should never be updated when
> !cpu->kvm_vcpu_dirty (or the HAX equivalent). If that is done, then
> subsequent calls to cpu_synchronize_state() - usually safe and idempotent -
> will clobber state.
>
> However, we routinely do this during a loadvm or incoming migration.
> Usually this is called shortly after a reset, which will clear all the cpu
> dirty flags with cpu_synchronize_all_post_reset(). Nothing is expected
> to set the dirty flags again before the cpu state is loaded from the
> incoming stream.
>
> This means that it isn't safe to call cpu_synchronize_state() from a
> post_load handler, which is non-obvious and potentially inconvenient.
>
> We could cpu_synchronize_all_state() before the loadvm, but that would be
> overkill since a) we expect the state to already be synchronized from the
> reset and b) we expect to completely rewrite the state with a call to
> cpu_synchronize_all_post_init() at the end of qemu_loadvm_state().
>
> To clear this up, this patch introduces cpu_synchronize_pre_loadvm() and
> associated helpers, which simply marks the cpu state as dirty without
> actually changing anything. i.e. it says we want to discard any existing
> KVM (or HAX) state and replace it with what we're going to load.
>
> Cc: Juan Quintela <address@hidden>
> Cc: Dave Gilbert <address@hidden>
> Signed-off-by: David Gibson <address@hidden>
Reviewed-by: Juan Quintela <address@hidden>
>
> +static void do_kvm_cpu_synchronize_pre_loadvm(CPUState *cpu, run_on_cpu_data
> arg)
> +{
> + cpu->kvm_vcpu_dirty = true;
> +}
> +
> +void kvm_cpu_synchronize_pre_loadvm(CPUState *cpu)
> +{
> + run_on_cpu(cpu, do_kvm_cpu_synchronize_pre_loadvm, RUN_ON_CPU_NULL);
> +}
They are exactly the same, does it make sense to only have a copy?
I don't really know, so I do the reviewed-by anyways.
- [Qemu-ppc] [PATCHv4 0/5] Clean up compatibility mode handling, David Gibson, 2017/05/26
- [Qemu-ppc] [PATCHv4 1/5] qapi: add explicit null to string input and output visitors, David Gibson, 2017/05/26
- [Qemu-ppc] [PATCHv4 5/5] ppc: Rework CPU compatibility testing across migration, David Gibson, 2017/05/26
- [Qemu-ppc] [PATCHv4 3/5] pseries: Move CPU compatibility property to machine, David Gibson, 2017/05/26
- Re: [Qemu-ppc] [PATCHv4 0/5] Clean up compatibility mode handling, Greg Kurz, 2017/05/29