Message ID | 20170618191101.3457-1-Sergio.G.DelReal@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 18/06/2017 21:11, Sergio Andres Gomez Del Real wrote: > This patch simply replaces the separate boolean field in CPUState that > kvm, hax (and upcoming hvf) have for keeping track of vcpu dirtiness > with a single shared field. > > Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com> > --- > include/qom/cpu.h | 5 +++-- > kvm-all.c | 18 +++++++++--------- > target/i386/hax-all.c | 12 ++++++------ > target/mips/kvm.c | 4 ++-- > 4 files changed, 20 insertions(+), 19 deletions(-) > > diff --git a/include/qom/cpu.h b/include/qom/cpu.h > index 89ddb686fb..2098eeae03 100644 > --- a/include/qom/cpu.h > +++ b/include/qom/cpu.h > @@ -369,7 +369,6 @@ struct CPUState { > vaddr mem_io_vaddr; > > int kvm_fd; > - bool kvm_vcpu_dirty; > struct KVMState *kvm_state; > struct kvm_run *kvm_run; > > @@ -386,6 +385,9 @@ struct CPUState { > uint32_t can_do_io; > int32_t exception_index; /* used by m68k TCG */ > > + /* shared by kvm, hax and hvf */ > + bool vcpu_dirty; > + > /* Used to keep track of an outstanding cpu throttle thread for migration > * autoconverge > */ > @@ -400,7 +402,6 @@ struct CPUState { > icount_decr_u16 u16; > } icount_decr; > > - bool hax_vcpu_dirty; > struct hax_vcpu_state *hax_vcpu; > > /* The pending_tlb_flush flag is set and cleared atomically to > diff --git a/kvm-all.c b/kvm-all.c > index ab8262f672..a5eaff270e 100644 > --- a/kvm-all.c > +++ b/kvm-all.c > @@ -318,7 +318,7 @@ int kvm_init_vcpu(CPUState *cpu) > > cpu->kvm_fd = ret; > cpu->kvm_state = s; > - cpu->kvm_vcpu_dirty = true; > + cpu->vcpu_dirty = true; > > mmap_size = kvm_ioctl(s, KVM_GET_VCPU_MMAP_SIZE, 0); > if (mmap_size < 0) { > @@ -1864,15 +1864,15 @@ void kvm_flush_coalesced_mmio_buffer(void) > > static void do_kvm_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data arg) > { > - if (!cpu->kvm_vcpu_dirty) { > + if (!cpu->vcpu_dirty) { > kvm_arch_get_registers(cpu); > - cpu->kvm_vcpu_dirty = true; > + cpu->vcpu_dirty = true; > } > } > > void kvm_cpu_synchronize_state(CPUState *cpu) > { > - if (!cpu->kvm_vcpu_dirty) { > + if (!cpu->vcpu_dirty) { > run_on_cpu(cpu, do_kvm_cpu_synchronize_state, RUN_ON_CPU_NULL); > } > } > @@ -1880,7 +1880,7 @@ void kvm_cpu_synchronize_state(CPUState *cpu) > static void do_kvm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg) > { > kvm_arch_put_registers(cpu, KVM_PUT_RESET_STATE); > - cpu->kvm_vcpu_dirty = false; > + cpu->vcpu_dirty = false; > } > > void kvm_cpu_synchronize_post_reset(CPUState *cpu) > @@ -1891,7 +1891,7 @@ void kvm_cpu_synchronize_post_reset(CPUState *cpu) > static void do_kvm_cpu_synchronize_post_init(CPUState *cpu, run_on_cpu_data arg) > { > kvm_arch_put_registers(cpu, KVM_PUT_FULL_STATE); > - cpu->kvm_vcpu_dirty = false; > + cpu->vcpu_dirty = false; > } > > void kvm_cpu_synchronize_post_init(CPUState *cpu) > @@ -1901,7 +1901,7 @@ void kvm_cpu_synchronize_post_init(CPUState *cpu) > > static void do_kvm_cpu_synchronize_pre_loadvm(CPUState *cpu, run_on_cpu_data arg) > { > - cpu->kvm_vcpu_dirty = true; > + cpu->vcpu_dirty = true; > } > > void kvm_cpu_synchronize_pre_loadvm(CPUState *cpu) > @@ -1981,9 +1981,9 @@ int kvm_cpu_exec(CPUState *cpu) > do { > MemTxAttrs attrs; > > - if (cpu->kvm_vcpu_dirty) { > + if (cpu->vcpu_dirty) { > kvm_arch_put_registers(cpu, KVM_PUT_RUNTIME_STATE); > - cpu->kvm_vcpu_dirty = false; > + cpu->vcpu_dirty = false; > } > > kvm_arch_pre_run(cpu, run); > diff --git a/target/i386/hax-all.c b/target/i386/hax-all.c > index 097db5cae1..3ada8b54d4 100644 > --- a/target/i386/hax-all.c > +++ b/target/i386/hax-all.c > @@ -232,7 +232,7 @@ int hax_init_vcpu(CPUState *cpu) > } > > cpu->hax_vcpu = hax_global.vm->vcpus[cpu->cpu_index]; > - cpu->hax_vcpu_dirty = true; > + cpu->vcpu_dirty = true; > qemu_register_reset(hax_reset_vcpu_state, (CPUArchState *) (cpu->env_ptr)); > > return ret; > @@ -598,12 +598,12 @@ static void do_hax_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data arg) > CPUArchState *env = cpu->env_ptr; > > hax_arch_get_registers(env); > - cpu->hax_vcpu_dirty = true; > + cpu->vcpu_dirty = true; > } > > void hax_cpu_synchronize_state(CPUState *cpu) > { > - if (!cpu->hax_vcpu_dirty) { > + if (!cpu->vcpu_dirty) { > run_on_cpu(cpu, do_hax_cpu_synchronize_state, RUN_ON_CPU_NULL); > } > } > @@ -614,7 +614,7 @@ static void do_hax_cpu_synchronize_post_reset(CPUState *cpu, > CPUArchState *env = cpu->env_ptr; > > hax_vcpu_sync_state(env, 1); > - cpu->hax_vcpu_dirty = false; > + cpu->vcpu_dirty = false; > } > > void hax_cpu_synchronize_post_reset(CPUState *cpu) > @@ -627,7 +627,7 @@ static void do_hax_cpu_synchronize_post_init(CPUState *cpu, run_on_cpu_data arg) > CPUArchState *env = cpu->env_ptr; > > hax_vcpu_sync_state(env, 1); > - cpu->hax_vcpu_dirty = false; > + cpu->vcpu_dirty = false; > } > > void hax_cpu_synchronize_post_init(CPUState *cpu) > @@ -637,7 +637,7 @@ void hax_cpu_synchronize_post_init(CPUState *cpu) > > static void do_hax_cpu_synchronize_pre_loadvm(CPUState *cpu, run_on_cpu_data arg) > { > - cpu->hax_vcpu_dirty = true; > + cpu->vcpu_dirty = true; > } > > void hax_cpu_synchronize_pre_loadvm(CPUState *cpu) > diff --git a/target/mips/kvm.c b/target/mips/kvm.c > index 0982e874bb..3317905e71 100644 > --- a/target/mips/kvm.c > +++ b/target/mips/kvm.c > @@ -523,7 +523,7 @@ static void kvm_mips_update_state(void *opaque, int running, RunState state) > * already saved and can be restored when it is synced back to KVM. > */ > if (!running) { > - if (!cs->kvm_vcpu_dirty) { > + if (!cs->vcpu_dirty) { > ret = kvm_mips_save_count(cs); > if (ret < 0) { > fprintf(stderr, "Failed saving count\n"); > @@ -539,7 +539,7 @@ static void kvm_mips_update_state(void *opaque, int running, RunState state) > return; > } > > - if (!cs->kvm_vcpu_dirty) { > + if (!cs->vcpu_dirty) { > ret = kvm_mips_restore_count(cs); > if (ret < 0) { > fprintf(stderr, "Failed restoring count\n"); > Thanks, I queued this patch for 2.9. Paolo
On 06/19/2017 11:35 AM, Paolo Bonzini wrote: > > > On 18/06/2017 21:11, Sergio Andres Gomez Del Real wrote: >> This patch simply replaces the separate boolean field in CPUState that >> kvm, hax (and upcoming hvf) have for keeping track of vcpu dirtiness >> with a single shared field. >> >> Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com> >> --- >> > > Thanks, I queued this patch for 2.9. As in qemu-stable 2.9.1, or did you mean 2.10 mainline?
On 27/06/2017 20:36, Eric Blake wrote: > On 06/19/2017 11:35 AM, Paolo Bonzini wrote: >> >> >> On 18/06/2017 21:11, Sergio Andres Gomez Del Real wrote: >>> This patch simply replaces the separate boolean field in CPUState that >>> kvm, hax (and upcoming hvf) have for keeping track of vcpu dirtiness >>> with a single shared field. >>> >>> Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com> >>> --- > >>> >> >> Thanks, I queued this patch for 2.9. > > As in qemu-stable 2.9.1, or did you mean 2.10 mainline? 2.10 of course. Paolo
diff --git a/include/qom/cpu.h b/include/qom/cpu.h index 89ddb686fb..2098eeae03 100644 --- a/include/qom/cpu.h +++ b/include/qom/cpu.h @@ -369,7 +369,6 @@ struct CPUState { vaddr mem_io_vaddr; int kvm_fd; - bool kvm_vcpu_dirty; struct KVMState *kvm_state; struct kvm_run *kvm_run; @@ -386,6 +385,9 @@ struct CPUState { uint32_t can_do_io; int32_t exception_index; /* used by m68k TCG */ + /* shared by kvm, hax and hvf */ + bool vcpu_dirty; + /* Used to keep track of an outstanding cpu throttle thread for migration * autoconverge */ @@ -400,7 +402,6 @@ struct CPUState { icount_decr_u16 u16; } icount_decr; - bool hax_vcpu_dirty; struct hax_vcpu_state *hax_vcpu; /* The pending_tlb_flush flag is set and cleared atomically to diff --git a/kvm-all.c b/kvm-all.c index ab8262f672..a5eaff270e 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -318,7 +318,7 @@ int kvm_init_vcpu(CPUState *cpu) cpu->kvm_fd = ret; cpu->kvm_state = s; - cpu->kvm_vcpu_dirty = true; + cpu->vcpu_dirty = true; mmap_size = kvm_ioctl(s, KVM_GET_VCPU_MMAP_SIZE, 0); if (mmap_size < 0) { @@ -1864,15 +1864,15 @@ void kvm_flush_coalesced_mmio_buffer(void) static void do_kvm_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data arg) { - if (!cpu->kvm_vcpu_dirty) { + if (!cpu->vcpu_dirty) { kvm_arch_get_registers(cpu); - cpu->kvm_vcpu_dirty = true; + cpu->vcpu_dirty = true; } } void kvm_cpu_synchronize_state(CPUState *cpu) { - if (!cpu->kvm_vcpu_dirty) { + if (!cpu->vcpu_dirty) { run_on_cpu(cpu, do_kvm_cpu_synchronize_state, RUN_ON_CPU_NULL); } } @@ -1880,7 +1880,7 @@ void kvm_cpu_synchronize_state(CPUState *cpu) static void do_kvm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg) { kvm_arch_put_registers(cpu, KVM_PUT_RESET_STATE); - cpu->kvm_vcpu_dirty = false; + cpu->vcpu_dirty = false; } void kvm_cpu_synchronize_post_reset(CPUState *cpu) @@ -1891,7 +1891,7 @@ void kvm_cpu_synchronize_post_reset(CPUState *cpu) static void do_kvm_cpu_synchronize_post_init(CPUState *cpu, run_on_cpu_data arg) { kvm_arch_put_registers(cpu, KVM_PUT_FULL_STATE); - cpu->kvm_vcpu_dirty = false; + cpu->vcpu_dirty = false; } void kvm_cpu_synchronize_post_init(CPUState *cpu) @@ -1901,7 +1901,7 @@ void kvm_cpu_synchronize_post_init(CPUState *cpu) static void do_kvm_cpu_synchronize_pre_loadvm(CPUState *cpu, run_on_cpu_data arg) { - cpu->kvm_vcpu_dirty = true; + cpu->vcpu_dirty = true; } void kvm_cpu_synchronize_pre_loadvm(CPUState *cpu) @@ -1981,9 +1981,9 @@ int kvm_cpu_exec(CPUState *cpu) do { MemTxAttrs attrs; - if (cpu->kvm_vcpu_dirty) { + if (cpu->vcpu_dirty) { kvm_arch_put_registers(cpu, KVM_PUT_RUNTIME_STATE); - cpu->kvm_vcpu_dirty = false; + cpu->vcpu_dirty = false; } kvm_arch_pre_run(cpu, run); diff --git a/target/i386/hax-all.c b/target/i386/hax-all.c index 097db5cae1..3ada8b54d4 100644 --- a/target/i386/hax-all.c +++ b/target/i386/hax-all.c @@ -232,7 +232,7 @@ int hax_init_vcpu(CPUState *cpu) } cpu->hax_vcpu = hax_global.vm->vcpus[cpu->cpu_index]; - cpu->hax_vcpu_dirty = true; + cpu->vcpu_dirty = true; qemu_register_reset(hax_reset_vcpu_state, (CPUArchState *) (cpu->env_ptr)); return ret; @@ -598,12 +598,12 @@ static void do_hax_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data arg) CPUArchState *env = cpu->env_ptr; hax_arch_get_registers(env); - cpu->hax_vcpu_dirty = true; + cpu->vcpu_dirty = true; } void hax_cpu_synchronize_state(CPUState *cpu) { - if (!cpu->hax_vcpu_dirty) { + if (!cpu->vcpu_dirty) { run_on_cpu(cpu, do_hax_cpu_synchronize_state, RUN_ON_CPU_NULL); } } @@ -614,7 +614,7 @@ static void do_hax_cpu_synchronize_post_reset(CPUState *cpu, CPUArchState *env = cpu->env_ptr; hax_vcpu_sync_state(env, 1); - cpu->hax_vcpu_dirty = false; + cpu->vcpu_dirty = false; } void hax_cpu_synchronize_post_reset(CPUState *cpu) @@ -627,7 +627,7 @@ static void do_hax_cpu_synchronize_post_init(CPUState *cpu, run_on_cpu_data arg) CPUArchState *env = cpu->env_ptr; hax_vcpu_sync_state(env, 1); - cpu->hax_vcpu_dirty = false; + cpu->vcpu_dirty = false; } void hax_cpu_synchronize_post_init(CPUState *cpu) @@ -637,7 +637,7 @@ void hax_cpu_synchronize_post_init(CPUState *cpu) static void do_hax_cpu_synchronize_pre_loadvm(CPUState *cpu, run_on_cpu_data arg) { - cpu->hax_vcpu_dirty = true; + cpu->vcpu_dirty = true; } void hax_cpu_synchronize_pre_loadvm(CPUState *cpu) diff --git a/target/mips/kvm.c b/target/mips/kvm.c index 0982e874bb..3317905e71 100644 --- a/target/mips/kvm.c +++ b/target/mips/kvm.c @@ -523,7 +523,7 @@ static void kvm_mips_update_state(void *opaque, int running, RunState state) * already saved and can be restored when it is synced back to KVM. */ if (!running) { - if (!cs->kvm_vcpu_dirty) { + if (!cs->vcpu_dirty) { ret = kvm_mips_save_count(cs); if (ret < 0) { fprintf(stderr, "Failed saving count\n"); @@ -539,7 +539,7 @@ static void kvm_mips_update_state(void *opaque, int running, RunState state) return; } - if (!cs->kvm_vcpu_dirty) { + if (!cs->vcpu_dirty) { ret = kvm_mips_restore_count(cs); if (ret < 0) { fprintf(stderr, "Failed restoring count\n");
This patch simply replaces the separate boolean field in CPUState that kvm, hax (and upcoming hvf) have for keeping track of vcpu dirtiness with a single shared field. Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com> --- include/qom/cpu.h | 5 +++-- kvm-all.c | 18 +++++++++--------- target/i386/hax-all.c | 12 ++++++------ target/mips/kvm.c | 4 ++-- 4 files changed, 20 insertions(+), 19 deletions(-)