* [Qemu-devel] [PATCH] vcpu_dirty: share the same field in CPUState for all accelerators
@ 2017-06-18 19:11 Sergio Andres Gomez Del Real
2017-06-19 16:35 ` Paolo Bonzini
0 siblings, 1 reply; 4+ messages in thread
From: Sergio Andres Gomez Del Real @ 2017-06-18 19:11 UTC (permalink / raw)
Cc: Sergio Andres Gomez Del Real, Paolo Bonzini, Richard Henderson,
Eduardo Habkost, James Hogan, Aurelien Jarno, Yongbok Kim,
open list:CPU, open list:Overall
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");
--
2.13.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] vcpu_dirty: share the same field in CPUState for all accelerators
2017-06-18 19:11 [Qemu-devel] [PATCH] vcpu_dirty: share the same field in CPUState for all accelerators Sergio Andres Gomez Del Real
@ 2017-06-19 16:35 ` Paolo Bonzini
2017-06-27 18:36 ` Eric Blake
0 siblings, 1 reply; 4+ messages in thread
From: Paolo Bonzini @ 2017-06-19 16:35 UTC (permalink / raw)
To: Sergio Andres Gomez Del Real
Cc: Richard Henderson, Eduardo Habkost, James Hogan, Aurelien Jarno,
Yongbok Kim, open list:CPU, open list:Overall
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
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] vcpu_dirty: share the same field in CPUState for all accelerators
2017-06-19 16:35 ` Paolo Bonzini
@ 2017-06-27 18:36 ` Eric Blake
2017-06-27 20:08 ` Paolo Bonzini
0 siblings, 1 reply; 4+ messages in thread
From: Eric Blake @ 2017-06-27 18:36 UTC (permalink / raw)
To: Paolo Bonzini, Sergio Andres Gomez Del Real
Cc: James Hogan, Eduardo Habkost, open list:Overall, open list:CPU,
Yongbok Kim, Aurelien Jarno, Richard Henderson
[-- Attachment #1: Type: text/plain, Size: 624 bytes --]
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?
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] vcpu_dirty: share the same field in CPUState for all accelerators
2017-06-27 18:36 ` Eric Blake
@ 2017-06-27 20:08 ` Paolo Bonzini
0 siblings, 0 replies; 4+ messages in thread
From: Paolo Bonzini @ 2017-06-27 20:08 UTC (permalink / raw)
To: Eric Blake, Sergio Andres Gomez Del Real
Cc: James Hogan, Eduardo Habkost, open list:Overall, open list:CPU,
Yongbok Kim, Aurelien Jarno, Richard Henderson
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
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-06-27 20:09 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-18 19:11 [Qemu-devel] [PATCH] vcpu_dirty: share the same field in CPUState for all accelerators Sergio Andres Gomez Del Real
2017-06-19 16:35 ` Paolo Bonzini
2017-06-27 18:36 ` Eric Blake
2017-06-27 20:08 ` Paolo Bonzini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).