* [PATCH 0/3] accel/kvm: Cleanups around kvm_arch_put_registers()
@ 2025-10-07 8:16 Philippe Mathieu-Daudé
2025-10-07 8:16 ` [PATCH 1/3] accel/kvm: Do not expect more then KVM_PUT_FULL_STATE Philippe Mathieu-Daudé
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-07 8:16 UTC (permalink / raw)
To: qemu-devel
Cc: Weiwei Li, David Hildenbrand, Philippe Mathieu-Daudé,
Christian Borntraeger, Daniel Henrique Barboza, qemu-s390x,
Song Gao, Liu Zhiwei, Matthew Rosato, Eric Farman,
Richard Henderson, Halil Pasic, kvm, Aurelien Jarno,
Aleksandar Rikalo, Marcelo Tosatti, Huacai Chen, qemu-riscv,
Nicholas Piggin, Harsh Prateek Bora, Chinmay Rath,
Ilya Leoshkevich, Thomas Huth, qemu-ppc, Alistair Francis,
Paolo Bonzini, Palmer Dabbelt, Jiaxun Yang
Extracted from a bigger series aiming to make accelerator
synchronization of vcpu state slightly clearer. Here KVM
patches around kvm_arch_put_registers():
- Move KVM_PUT_[RESET|RUNTIME|FULL]_STATE to an enum
- Factor common code out of kvm_cpu_synchronize_post_*()
Philippe Mathieu-Daudé (3):
accel/kvm: Do not expect more then KVM_PUT_FULL_STATE
accel/kvm: Introduce KvmPutState enum
accel/kvm: Factor kvm_cpu_synchronize_put() out
include/system/kvm.h | 16 +++++++------
accel/kvm/kvm-all.c | 47 +++++++++++++++-----------------------
target/i386/kvm/kvm.c | 6 ++---
target/loongarch/kvm/kvm.c | 8 +++----
target/mips/kvm.c | 6 ++---
target/ppc/kvm.c | 2 +-
target/riscv/kvm/kvm-cpu.c | 2 +-
target/s390x/kvm/kvm.c | 2 +-
8 files changed, 41 insertions(+), 48 deletions(-)
--
2.51.0
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 1/3] accel/kvm: Do not expect more then KVM_PUT_FULL_STATE 2025-10-07 8:16 [PATCH 0/3] accel/kvm: Cleanups around kvm_arch_put_registers() Philippe Mathieu-Daudé @ 2025-10-07 8:16 ` Philippe Mathieu-Daudé 2025-10-07 8:20 ` Harsh Prateek Bora 2025-10-07 8:16 ` [PATCH 2/3] accel/kvm: Introduce KvmPutState enum Philippe Mathieu-Daudé 2025-10-07 8:16 ` [PATCH 3/3] accel/kvm: Factor kvm_cpu_synchronize_put() out Philippe Mathieu-Daudé 2 siblings, 1 reply; 9+ messages in thread From: Philippe Mathieu-Daudé @ 2025-10-07 8:16 UTC (permalink / raw) To: qemu-devel Cc: Weiwei Li, David Hildenbrand, Philippe Mathieu-Daudé, Christian Borntraeger, Daniel Henrique Barboza, qemu-s390x, Song Gao, Liu Zhiwei, Matthew Rosato, Eric Farman, Richard Henderson, Halil Pasic, kvm, Aurelien Jarno, Aleksandar Rikalo, Marcelo Tosatti, Huacai Chen, qemu-riscv, Nicholas Piggin, Harsh Prateek Bora, Chinmay Rath, Ilya Leoshkevich, Thomas Huth, qemu-ppc, Alistair Francis, Paolo Bonzini, Palmer Dabbelt, Jiaxun Yang KVM_PUT_FULL_STATE is the higher level defined so far in "system/kvm.h"; do not check for more. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- target/loongarch/kvm/kvm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c index e5ea2dba9da..45292edcb1c 100644 --- a/target/loongarch/kvm/kvm.c +++ b/target/loongarch/kvm/kvm.c @@ -397,7 +397,7 @@ static int kvm_loongarch_put_csr(CPUState *cs, int level) &env->CSR_RVACFG); /* CPUID is constant after poweron, it should be set only once */ - if (level >= KVM_PUT_FULL_STATE) { + if (level == KVM_PUT_FULL_STATE) { ret |= kvm_set_one_reg(cs, KVM_IOC_CSRID(LOONGARCH_CSR_CPUID), &env->CSR_CPUID); } @@ -801,7 +801,7 @@ int kvm_arch_put_registers(CPUState *cs, int level, Error **errp) once = 1; } - if (level >= KVM_PUT_FULL_STATE) { + if (level == KVM_PUT_FULL_STATE) { /* * only KVM_PUT_FULL_STATE is required, kvm kernel will clear * guest_addr for KVM_PUT_RESET_STATE -- 2.51.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/3] accel/kvm: Do not expect more then KVM_PUT_FULL_STATE 2025-10-07 8:16 ` [PATCH 1/3] accel/kvm: Do not expect more then KVM_PUT_FULL_STATE Philippe Mathieu-Daudé @ 2025-10-07 8:20 ` Harsh Prateek Bora 0 siblings, 0 replies; 9+ messages in thread From: Harsh Prateek Bora @ 2025-10-07 8:20 UTC (permalink / raw) To: Philippe Mathieu-Daudé, qemu-devel Cc: Weiwei Li, David Hildenbrand, Christian Borntraeger, Daniel Henrique Barboza, qemu-s390x, Song Gao, Liu Zhiwei, Matthew Rosato, Eric Farman, Richard Henderson, Halil Pasic, kvm, Aurelien Jarno, Aleksandar Rikalo, Marcelo Tosatti, Huacai Chen, qemu-riscv, Nicholas Piggin, Chinmay Rath, Ilya Leoshkevich, Thomas Huth, qemu-ppc, Alistair Francis, Paolo Bonzini, Palmer Dabbelt, Jiaxun Yang On 10/7/25 13:46, Philippe Mathieu-Daudé wrote: > KVM_PUT_FULL_STATE is the higher level defined so far in s/higher/highest ? With that, Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com> > "system/kvm.h"; do not check for more. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > target/loongarch/kvm/kvm.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c > index e5ea2dba9da..45292edcb1c 100644 > --- a/target/loongarch/kvm/kvm.c > +++ b/target/loongarch/kvm/kvm.c > @@ -397,7 +397,7 @@ static int kvm_loongarch_put_csr(CPUState *cs, int level) > &env->CSR_RVACFG); > > /* CPUID is constant after poweron, it should be set only once */ > - if (level >= KVM_PUT_FULL_STATE) { > + if (level == KVM_PUT_FULL_STATE) { > ret |= kvm_set_one_reg(cs, KVM_IOC_CSRID(LOONGARCH_CSR_CPUID), > &env->CSR_CPUID); > } > @@ -801,7 +801,7 @@ int kvm_arch_put_registers(CPUState *cs, int level, Error **errp) > once = 1; > } > > - if (level >= KVM_PUT_FULL_STATE) { > + if (level == KVM_PUT_FULL_STATE) { > /* > * only KVM_PUT_FULL_STATE is required, kvm kernel will clear > * guest_addr for KVM_PUT_RESET_STATE ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/3] accel/kvm: Introduce KvmPutState enum 2025-10-07 8:16 [PATCH 0/3] accel/kvm: Cleanups around kvm_arch_put_registers() Philippe Mathieu-Daudé 2025-10-07 8:16 ` [PATCH 1/3] accel/kvm: Do not expect more then KVM_PUT_FULL_STATE Philippe Mathieu-Daudé @ 2025-10-07 8:16 ` Philippe Mathieu-Daudé 2025-10-07 8:30 ` Harsh Prateek Bora 2025-10-07 8:16 ` [PATCH 3/3] accel/kvm: Factor kvm_cpu_synchronize_put() out Philippe Mathieu-Daudé 2 siblings, 1 reply; 9+ messages in thread From: Philippe Mathieu-Daudé @ 2025-10-07 8:16 UTC (permalink / raw) To: qemu-devel Cc: Weiwei Li, David Hildenbrand, Philippe Mathieu-Daudé, Christian Borntraeger, Daniel Henrique Barboza, qemu-s390x, Song Gao, Liu Zhiwei, Matthew Rosato, Eric Farman, Richard Henderson, Halil Pasic, kvm, Aurelien Jarno, Aleksandar Rikalo, Marcelo Tosatti, Huacai Chen, qemu-riscv, Nicholas Piggin, Harsh Prateek Bora, Chinmay Rath, Ilya Leoshkevich, Thomas Huth, qemu-ppc, Alistair Francis, Paolo Bonzini, Palmer Dabbelt, Jiaxun Yang Join the 3 KVM_PUT_*_STATE definitions in a single enum. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- include/system/kvm.h | 16 +++++++++------- target/i386/kvm/kvm.c | 6 +++--- target/loongarch/kvm/kvm.c | 4 ++-- target/mips/kvm.c | 6 +++--- target/ppc/kvm.c | 2 +- target/riscv/kvm/kvm-cpu.c | 2 +- target/s390x/kvm/kvm.c | 2 +- 7 files changed, 20 insertions(+), 18 deletions(-) diff --git a/include/system/kvm.h b/include/system/kvm.h index 4fc09e38910..8f9eecf044c 100644 --- a/include/system/kvm.h +++ b/include/system/kvm.h @@ -340,14 +340,16 @@ int kvm_arch_process_async_events(CPUState *cpu); int kvm_arch_get_registers(CPUState *cpu, Error **errp); -/* state subset only touched by the VCPU itself during runtime */ -#define KVM_PUT_RUNTIME_STATE 1 -/* state subset modified during VCPU reset */ -#define KVM_PUT_RESET_STATE 2 -/* full state set, modified during initialization or on vmload */ -#define KVM_PUT_FULL_STATE 3 +typedef enum kvm_put_state { + /* state subset only touched by the VCPU itself during runtime */ + KVM_PUT_RUNTIME_STATE = 1, + /* state subset modified during VCPU reset */ + KVM_PUT_RESET_STATE = 2, + /* full state set, modified during initialization or on vmload */ + KVM_PUT_FULL_STATE = 3, +} KvmPutState; -int kvm_arch_put_registers(CPUState *cpu, int level, Error **errp); +int kvm_arch_put_registers(CPUState *cpu, KvmPutState level, Error **errp); int kvm_arch_get_default_type(MachineState *ms); diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index 6a3a1c1ed8e..d06f55938cd 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -3911,7 +3911,7 @@ static void kvm_init_msrs(X86CPU *cpu) assert(kvm_buf_set_msrs(cpu) == 0); } -static int kvm_put_msrs(X86CPU *cpu, int level) +static int kvm_put_msrs(X86CPU *cpu, KvmPutState level) { CPUX86State *env = &cpu->env; int i; @@ -5031,7 +5031,7 @@ static int kvm_get_apic(X86CPU *cpu) return 0; } -static int kvm_put_vcpu_events(X86CPU *cpu, int level) +static int kvm_put_vcpu_events(X86CPU *cpu, KvmPutState level) { CPUState *cs = CPU(cpu); CPUX86State *env = &cpu->env; @@ -5274,7 +5274,7 @@ static int kvm_get_nested_state(X86CPU *cpu) return ret; } -int kvm_arch_put_registers(CPUState *cpu, int level, Error **errp) +int kvm_arch_put_registers(CPUState *cpu, KvmPutState level, Error **errp) { X86CPU *x86_cpu = X86_CPU(cpu); int ret; diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c index 45292edcb1c..32cd7c5d003 100644 --- a/target/loongarch/kvm/kvm.c +++ b/target/loongarch/kvm/kvm.c @@ -325,7 +325,7 @@ static int kvm_loongarch_get_csr(CPUState *cs) return ret; } -static int kvm_loongarch_put_csr(CPUState *cs, int level) +static int kvm_loongarch_put_csr(CPUState *cs, KvmPutState level) { int ret = 0; CPULoongArchState *env = cpu_env(cs); @@ -763,7 +763,7 @@ int kvm_arch_get_registers(CPUState *cs, Error **errp) return ret; } -int kvm_arch_put_registers(CPUState *cs, int level, Error **errp) +int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) { int ret; static int once; diff --git a/target/mips/kvm.c b/target/mips/kvm.c index 450947c3fa5..912cd5dfa0e 100644 --- a/target/mips/kvm.c +++ b/target/mips/kvm.c @@ -590,7 +590,7 @@ static void kvm_mips_update_state(void *opaque, bool running, RunState state) } } -static int kvm_mips_put_fpu_registers(CPUState *cs, int level) +static int kvm_mips_put_fpu_registers(CPUState *cs, KvmPutState level) { CPUMIPSState *env = cpu_env(cs); int err, ret = 0; @@ -749,7 +749,7 @@ static int kvm_mips_get_fpu_registers(CPUState *cs) } -static int kvm_mips_put_cp0_registers(CPUState *cs, int level) +static int kvm_mips_put_cp0_registers(CPUState *cs, KvmPutState level) { CPUMIPSState *env = cpu_env(cs); int err, ret = 0; @@ -1177,7 +1177,7 @@ static int kvm_mips_get_cp0_registers(CPUState *cs) return ret; } -int kvm_arch_put_registers(CPUState *cs, int level, Error **errp) +int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) { CPUMIPSState *env = cpu_env(cs); struct kvm_regs regs; diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c index 2521ff65c6c..cd60893a17d 100644 --- a/target/ppc/kvm.c +++ b/target/ppc/kvm.c @@ -907,7 +907,7 @@ int kvmppc_put_books_sregs(PowerPCCPU *cpu) return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_SREGS, &sregs); } -int kvm_arch_put_registers(CPUState *cs, int level, Error **errp) +int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) { PowerPCCPU *cpu = POWERPC_CPU(cs); CPUPPCState *env = &cpu->env; diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c index 187c2c9501e..75ca3fb9fd9 100644 --- a/target/riscv/kvm/kvm-cpu.c +++ b/target/riscv/kvm/kvm-cpu.c @@ -1369,7 +1369,7 @@ int kvm_riscv_sync_mpstate_to_kvm(RISCVCPU *cpu, int state) return 0; } -int kvm_arch_put_registers(CPUState *cs, int level, Error **errp) +int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) { int ret = 0; diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c index 491cc5f9756..916dac1f14e 100644 --- a/target/s390x/kvm/kvm.c +++ b/target/s390x/kvm/kvm.c @@ -468,7 +468,7 @@ static int can_sync_regs(CPUState *cs, int regs) #define KVM_SYNC_REQUIRED_REGS (KVM_SYNC_GPRS | KVM_SYNC_ACRS | \ KVM_SYNC_CRS | KVM_SYNC_PREFIX) -int kvm_arch_put_registers(CPUState *cs, int level, Error **errp) +int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) { CPUS390XState *env = cpu_env(cs); struct kvm_fpu fpu = {}; -- 2.51.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] accel/kvm: Introduce KvmPutState enum 2025-10-07 8:16 ` [PATCH 2/3] accel/kvm: Introduce KvmPutState enum Philippe Mathieu-Daudé @ 2025-10-07 8:30 ` Harsh Prateek Bora 0 siblings, 0 replies; 9+ messages in thread From: Harsh Prateek Bora @ 2025-10-07 8:30 UTC (permalink / raw) To: Philippe Mathieu-Daudé, qemu-devel Cc: Weiwei Li, David Hildenbrand, Christian Borntraeger, Daniel Henrique Barboza, qemu-s390x, Song Gao, Liu Zhiwei, Matthew Rosato, Eric Farman, Richard Henderson, Halil Pasic, kvm, Aurelien Jarno, Aleksandar Rikalo, Marcelo Tosatti, Huacai Chen, qemu-riscv, Nicholas Piggin, Chinmay Rath, Ilya Leoshkevich, Thomas Huth, qemu-ppc, Alistair Francis, Paolo Bonzini, Palmer Dabbelt, Jiaxun Yang On 10/7/25 13:46, Philippe Mathieu-Daudé wrote: > Join the 3 KVM_PUT_*_STATE definitions in a single enum. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com> > --- > include/system/kvm.h | 16 +++++++++------- > target/i386/kvm/kvm.c | 6 +++--- > target/loongarch/kvm/kvm.c | 4 ++-- > target/mips/kvm.c | 6 +++--- > target/ppc/kvm.c | 2 +- > target/riscv/kvm/kvm-cpu.c | 2 +- > target/s390x/kvm/kvm.c | 2 +- > 7 files changed, 20 insertions(+), 18 deletions(-) > > diff --git a/include/system/kvm.h b/include/system/kvm.h > index 4fc09e38910..8f9eecf044c 100644 > --- a/include/system/kvm.h > +++ b/include/system/kvm.h > @@ -340,14 +340,16 @@ int kvm_arch_process_async_events(CPUState *cpu); > > int kvm_arch_get_registers(CPUState *cpu, Error **errp); > > -/* state subset only touched by the VCPU itself during runtime */ > -#define KVM_PUT_RUNTIME_STATE 1 > -/* state subset modified during VCPU reset */ > -#define KVM_PUT_RESET_STATE 2 > -/* full state set, modified during initialization or on vmload */ > -#define KVM_PUT_FULL_STATE 3 > +typedef enum kvm_put_state { > + /* state subset only touched by the VCPU itself during runtime */ > + KVM_PUT_RUNTIME_STATE = 1, > + /* state subset modified during VCPU reset */ > + KVM_PUT_RESET_STATE = 2, > + /* full state set, modified during initialization or on vmload */ > + KVM_PUT_FULL_STATE = 3, > +} KvmPutState; > > -int kvm_arch_put_registers(CPUState *cpu, int level, Error **errp); > +int kvm_arch_put_registers(CPUState *cpu, KvmPutState level, Error **errp); > > int kvm_arch_get_default_type(MachineState *ms); > > diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c > index 6a3a1c1ed8e..d06f55938cd 100644 > --- a/target/i386/kvm/kvm.c > +++ b/target/i386/kvm/kvm.c > @@ -3911,7 +3911,7 @@ static void kvm_init_msrs(X86CPU *cpu) > assert(kvm_buf_set_msrs(cpu) == 0); > } > > -static int kvm_put_msrs(X86CPU *cpu, int level) > +static int kvm_put_msrs(X86CPU *cpu, KvmPutState level) > { > CPUX86State *env = &cpu->env; > int i; > @@ -5031,7 +5031,7 @@ static int kvm_get_apic(X86CPU *cpu) > return 0; > } > > -static int kvm_put_vcpu_events(X86CPU *cpu, int level) > +static int kvm_put_vcpu_events(X86CPU *cpu, KvmPutState level) > { > CPUState *cs = CPU(cpu); > CPUX86State *env = &cpu->env; > @@ -5274,7 +5274,7 @@ static int kvm_get_nested_state(X86CPU *cpu) > return ret; > } > > -int kvm_arch_put_registers(CPUState *cpu, int level, Error **errp) > +int kvm_arch_put_registers(CPUState *cpu, KvmPutState level, Error **errp) > { > X86CPU *x86_cpu = X86_CPU(cpu); > int ret; > diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c > index 45292edcb1c..32cd7c5d003 100644 > --- a/target/loongarch/kvm/kvm.c > +++ b/target/loongarch/kvm/kvm.c > @@ -325,7 +325,7 @@ static int kvm_loongarch_get_csr(CPUState *cs) > return ret; > } > > -static int kvm_loongarch_put_csr(CPUState *cs, int level) > +static int kvm_loongarch_put_csr(CPUState *cs, KvmPutState level) > { > int ret = 0; > CPULoongArchState *env = cpu_env(cs); > @@ -763,7 +763,7 @@ int kvm_arch_get_registers(CPUState *cs, Error **errp) > return ret; > } > > -int kvm_arch_put_registers(CPUState *cs, int level, Error **errp) > +int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) > { > int ret; > static int once; > diff --git a/target/mips/kvm.c b/target/mips/kvm.c > index 450947c3fa5..912cd5dfa0e 100644 > --- a/target/mips/kvm.c > +++ b/target/mips/kvm.c > @@ -590,7 +590,7 @@ static void kvm_mips_update_state(void *opaque, bool running, RunState state) > } > } > > -static int kvm_mips_put_fpu_registers(CPUState *cs, int level) > +static int kvm_mips_put_fpu_registers(CPUState *cs, KvmPutState level) > { > CPUMIPSState *env = cpu_env(cs); > int err, ret = 0; > @@ -749,7 +749,7 @@ static int kvm_mips_get_fpu_registers(CPUState *cs) > } > > > -static int kvm_mips_put_cp0_registers(CPUState *cs, int level) > +static int kvm_mips_put_cp0_registers(CPUState *cs, KvmPutState level) > { > CPUMIPSState *env = cpu_env(cs); > int err, ret = 0; > @@ -1177,7 +1177,7 @@ static int kvm_mips_get_cp0_registers(CPUState *cs) > return ret; > } > > -int kvm_arch_put_registers(CPUState *cs, int level, Error **errp) > +int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) > { > CPUMIPSState *env = cpu_env(cs); > struct kvm_regs regs; > diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c > index 2521ff65c6c..cd60893a17d 100644 > --- a/target/ppc/kvm.c > +++ b/target/ppc/kvm.c > @@ -907,7 +907,7 @@ int kvmppc_put_books_sregs(PowerPCCPU *cpu) > return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_SREGS, &sregs); > } > > -int kvm_arch_put_registers(CPUState *cs, int level, Error **errp) > +int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) > { > PowerPCCPU *cpu = POWERPC_CPU(cs); > CPUPPCState *env = &cpu->env; > diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c > index 187c2c9501e..75ca3fb9fd9 100644 > --- a/target/riscv/kvm/kvm-cpu.c > +++ b/target/riscv/kvm/kvm-cpu.c > @@ -1369,7 +1369,7 @@ int kvm_riscv_sync_mpstate_to_kvm(RISCVCPU *cpu, int state) > return 0; > } > > -int kvm_arch_put_registers(CPUState *cs, int level, Error **errp) > +int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) > { > int ret = 0; > > diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c > index 491cc5f9756..916dac1f14e 100644 > --- a/target/s390x/kvm/kvm.c > +++ b/target/s390x/kvm/kvm.c > @@ -468,7 +468,7 @@ static int can_sync_regs(CPUState *cs, int regs) > #define KVM_SYNC_REQUIRED_REGS (KVM_SYNC_GPRS | KVM_SYNC_ACRS | \ > KVM_SYNC_CRS | KVM_SYNC_PREFIX) > > -int kvm_arch_put_registers(CPUState *cs, int level, Error **errp) > +int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) > { > CPUS390XState *env = cpu_env(cs); > struct kvm_fpu fpu = {}; ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/3] accel/kvm: Factor kvm_cpu_synchronize_put() out 2025-10-07 8:16 [PATCH 0/3] accel/kvm: Cleanups around kvm_arch_put_registers() Philippe Mathieu-Daudé 2025-10-07 8:16 ` [PATCH 1/3] accel/kvm: Do not expect more then KVM_PUT_FULL_STATE Philippe Mathieu-Daudé 2025-10-07 8:16 ` [PATCH 2/3] accel/kvm: Introduce KvmPutState enum Philippe Mathieu-Daudé @ 2025-10-07 8:16 ` Philippe Mathieu-Daudé 2025-10-07 13:30 ` Andrew Jones 2025-10-07 19:34 ` Richard Henderson 2 siblings, 2 replies; 9+ messages in thread From: Philippe Mathieu-Daudé @ 2025-10-07 8:16 UTC (permalink / raw) To: qemu-devel Cc: Weiwei Li, David Hildenbrand, Philippe Mathieu-Daudé, Christian Borntraeger, Daniel Henrique Barboza, qemu-s390x, Song Gao, Liu Zhiwei, Matthew Rosato, Eric Farman, Richard Henderson, Halil Pasic, kvm, Aurelien Jarno, Aleksandar Rikalo, Marcelo Tosatti, Huacai Chen, qemu-riscv, Nicholas Piggin, Harsh Prateek Bora, Chinmay Rath, Ilya Leoshkevich, Thomas Huth, qemu-ppc, Alistair Francis, Paolo Bonzini, Palmer Dabbelt, Jiaxun Yang The same code is duplicated 3 times: factor a common method. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- accel/kvm/kvm-all.c | 47 ++++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 9060599cd73..de79f4ca099 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -2935,22 +2935,32 @@ void kvm_cpu_synchronize_state(CPUState *cpu) } } -static void do_kvm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg) +static bool kvm_cpu_synchronize_put(CPUState *cpu, KvmPutState state, + const char *desc) { Error *err = NULL; - int ret = kvm_arch_put_registers(cpu, KVM_PUT_RESET_STATE, &err); + int ret = kvm_arch_put_registers(cpu, state, &err); if (ret) { if (err) { - error_reportf_err(err, "Restoring resisters after reset: "); + error_reportf_err(err, "Restoring resisters %s: ", desc); } else { - error_report("Failed to put registers after reset: %s", + error_report("Failed to put registers %s: %s", desc, strerror(-ret)); } - cpu_dump_state(cpu, stderr, CPU_DUMP_CODE); - vm_stop(RUN_STATE_INTERNAL_ERROR); + return false; } cpu->vcpu_dirty = false; + + return true; +} + +static void do_kvm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg) +{ + if (kvm_cpu_synchronize_put(cpu, KVM_PUT_RESET_STATE, "after reset")) { + cpu_dump_state(cpu, stderr, CPU_DUMP_CODE); + vm_stop(RUN_STATE_INTERNAL_ERROR); + } } void kvm_cpu_synchronize_post_reset(CPUState *cpu) @@ -2964,19 +2974,9 @@ void kvm_cpu_synchronize_post_reset(CPUState *cpu) static void do_kvm_cpu_synchronize_post_init(CPUState *cpu, run_on_cpu_data arg) { - Error *err = NULL; - int ret = kvm_arch_put_registers(cpu, KVM_PUT_FULL_STATE, &err); - if (ret) { - if (err) { - error_reportf_err(err, "Putting registers after init: "); - } else { - error_report("Failed to put registers after init: %s", - strerror(-ret)); - } + if (kvm_cpu_synchronize_put(cpu, KVM_PUT_FULL_STATE, "after init")) { exit(1); } - - cpu->vcpu_dirty = false; } void kvm_cpu_synchronize_post_init(CPUState *cpu) @@ -3166,20 +3166,11 @@ int kvm_cpu_exec(CPUState *cpu) MemTxAttrs attrs; if (cpu->vcpu_dirty) { - Error *err = NULL; - ret = kvm_arch_put_registers(cpu, KVM_PUT_RUNTIME_STATE, &err); - if (ret) { - if (err) { - error_reportf_err(err, "Putting registers after init: "); - } else { - error_report("Failed to put registers after init: %s", - strerror(-ret)); - } + if (kvm_cpu_synchronize_put(cpu, KVM_PUT_RUNTIME_STATE, + "at runtime")) { ret = -1; break; } - - cpu->vcpu_dirty = false; } kvm_arch_pre_run(cpu, run); -- 2.51.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] accel/kvm: Factor kvm_cpu_synchronize_put() out 2025-10-07 8:16 ` [PATCH 3/3] accel/kvm: Factor kvm_cpu_synchronize_put() out Philippe Mathieu-Daudé @ 2025-10-07 13:30 ` Andrew Jones 2025-10-07 13:53 ` Philippe Mathieu-Daudé 2025-10-07 19:34 ` Richard Henderson 1 sibling, 1 reply; 9+ messages in thread From: Andrew Jones @ 2025-10-07 13:30 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Weiwei Li, David Hildenbrand, Christian Borntraeger, Daniel Henrique Barboza, qemu-s390x, Song Gao, Liu Zhiwei, Matthew Rosato, Eric Farman, Richard Henderson, Halil Pasic, kvm, Aurelien Jarno, Aleksandar Rikalo, Marcelo Tosatti, Huacai Chen, qemu-riscv, Nicholas Piggin, Harsh Prateek Bora, Chinmay Rath, Ilya Leoshkevich, Thomas Huth, qemu-ppc, Alistair Francis, Paolo Bonzini, Palmer Dabbelt, Jiaxun Yang On Tue, Oct 07, 2025 at 10:16:16AM +0200, Philippe Mathieu-Daudé wrote: > The same code is duplicated 3 times: factor a common method. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > accel/kvm/kvm-all.c | 47 ++++++++++++++++++--------------------------- > 1 file changed, 19 insertions(+), 28 deletions(-) > > diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c > index 9060599cd73..de79f4ca099 100644 > --- a/accel/kvm/kvm-all.c > +++ b/accel/kvm/kvm-all.c > @@ -2935,22 +2935,32 @@ void kvm_cpu_synchronize_state(CPUState *cpu) > } > } > > -static void do_kvm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg) > +static bool kvm_cpu_synchronize_put(CPUState *cpu, KvmPutState state, > + const char *desc) > { > Error *err = NULL; > - int ret = kvm_arch_put_registers(cpu, KVM_PUT_RESET_STATE, &err); > + int ret = kvm_arch_put_registers(cpu, state, &err); > if (ret) { > if (err) { > - error_reportf_err(err, "Restoring resisters after reset: "); > + error_reportf_err(err, "Restoring resisters %s: ", desc); > } else { > - error_report("Failed to put registers after reset: %s", > + error_report("Failed to put registers %s: %s", desc, > strerror(-ret)); > } > - cpu_dump_state(cpu, stderr, CPU_DUMP_CODE); > - vm_stop(RUN_STATE_INTERNAL_ERROR); > + return false; > } > > cpu->vcpu_dirty = false; > + > + return true; > +} > + > +static void do_kvm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg) > +{ > + if (kvm_cpu_synchronize_put(cpu, KVM_PUT_RESET_STATE, "after reset")) { This should be !kvm_cpu_synchronize_put() and same comment for the other calls below. Thanks, drew > + cpu_dump_state(cpu, stderr, CPU_DUMP_CODE); > + vm_stop(RUN_STATE_INTERNAL_ERROR); > + } > } > > void kvm_cpu_synchronize_post_reset(CPUState *cpu) > @@ -2964,19 +2974,9 @@ void kvm_cpu_synchronize_post_reset(CPUState *cpu) > > static void do_kvm_cpu_synchronize_post_init(CPUState *cpu, run_on_cpu_data arg) > { > - Error *err = NULL; > - int ret = kvm_arch_put_registers(cpu, KVM_PUT_FULL_STATE, &err); > - if (ret) { > - if (err) { > - error_reportf_err(err, "Putting registers after init: "); > - } else { > - error_report("Failed to put registers after init: %s", > - strerror(-ret)); > - } > + if (kvm_cpu_synchronize_put(cpu, KVM_PUT_FULL_STATE, "after init")) { > exit(1); > } > - > - cpu->vcpu_dirty = false; > } > > void kvm_cpu_synchronize_post_init(CPUState *cpu) > @@ -3166,20 +3166,11 @@ int kvm_cpu_exec(CPUState *cpu) > MemTxAttrs attrs; > > if (cpu->vcpu_dirty) { > - Error *err = NULL; > - ret = kvm_arch_put_registers(cpu, KVM_PUT_RUNTIME_STATE, &err); > - if (ret) { > - if (err) { > - error_reportf_err(err, "Putting registers after init: "); > - } else { > - error_report("Failed to put registers after init: %s", > - strerror(-ret)); > - } > + if (kvm_cpu_synchronize_put(cpu, KVM_PUT_RUNTIME_STATE, > + "at runtime")) { > ret = -1; > break; > } > - > - cpu->vcpu_dirty = false; > } > > kvm_arch_pre_run(cpu, run); > -- > 2.51.0 > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] accel/kvm: Factor kvm_cpu_synchronize_put() out 2025-10-07 13:30 ` Andrew Jones @ 2025-10-07 13:53 ` Philippe Mathieu-Daudé 0 siblings, 0 replies; 9+ messages in thread From: Philippe Mathieu-Daudé @ 2025-10-07 13:53 UTC (permalink / raw) To: Andrew Jones Cc: qemu-devel, Weiwei Li, David Hildenbrand, Christian Borntraeger, Daniel Henrique Barboza, qemu-s390x, Song Gao, Liu Zhiwei, Matthew Rosato, Eric Farman, Richard Henderson, Halil Pasic, kvm, Aurelien Jarno, Aleksandar Rikalo, Marcelo Tosatti, Huacai Chen, qemu-riscv, Nicholas Piggin, Harsh Prateek Bora, Chinmay Rath, Ilya Leoshkevich, Thomas Huth, qemu-ppc, Alistair Francis, Paolo Bonzini, Palmer Dabbelt, Jiaxun Yang On 7/10/25 15:30, Andrew Jones wrote: > On Tue, Oct 07, 2025 at 10:16:16AM +0200, Philippe Mathieu-Daudé wrote: >> The same code is duplicated 3 times: factor a common method. >> >> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >> --- >> accel/kvm/kvm-all.c | 47 ++++++++++++++++++--------------------------- >> 1 file changed, 19 insertions(+), 28 deletions(-) >> >> diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c >> index 9060599cd73..de79f4ca099 100644 >> --- a/accel/kvm/kvm-all.c >> +++ b/accel/kvm/kvm-all.c >> @@ -2935,22 +2935,32 @@ void kvm_cpu_synchronize_state(CPUState *cpu) >> } >> } >> >> -static void do_kvm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg) >> +static bool kvm_cpu_synchronize_put(CPUState *cpu, KvmPutState state, >> + const char *desc) >> { >> Error *err = NULL; >> - int ret = kvm_arch_put_registers(cpu, KVM_PUT_RESET_STATE, &err); >> + int ret = kvm_arch_put_registers(cpu, state, &err); >> if (ret) { >> if (err) { >> - error_reportf_err(err, "Restoring resisters after reset: "); >> + error_reportf_err(err, "Restoring resisters %s: ", desc); >> } else { >> - error_report("Failed to put registers after reset: %s", >> + error_report("Failed to put registers %s: %s", desc, >> strerror(-ret)); >> } >> - cpu_dump_state(cpu, stderr, CPU_DUMP_CODE); >> - vm_stop(RUN_STATE_INTERNAL_ERROR); >> + return false; >> } >> >> cpu->vcpu_dirty = false; >> + >> + return true; >> +} >> + >> +static void do_kvm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg) >> +{ >> + if (kvm_cpu_synchronize_put(cpu, KVM_PUT_RESET_STATE, "after reset")) { > > This should be !kvm_cpu_synchronize_put() and same comment for the other > calls below. Oops! Thanks :) > > Thanks, > drew ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] accel/kvm: Factor kvm_cpu_synchronize_put() out 2025-10-07 8:16 ` [PATCH 3/3] accel/kvm: Factor kvm_cpu_synchronize_put() out Philippe Mathieu-Daudé 2025-10-07 13:30 ` Andrew Jones @ 2025-10-07 19:34 ` Richard Henderson 1 sibling, 0 replies; 9+ messages in thread From: Richard Henderson @ 2025-10-07 19:34 UTC (permalink / raw) To: Philippe Mathieu-Daudé, qemu-devel On 10/7/25 01:16, Philippe Mathieu-Daudé wrote: > The same code is duplicated 3 times: factor a common method. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > accel/kvm/kvm-all.c | 47 ++++++++++++++++++--------------------------- > 1 file changed, 19 insertions(+), 28 deletions(-) > > diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c > index 9060599cd73..de79f4ca099 100644 > --- a/accel/kvm/kvm-all.c > +++ b/accel/kvm/kvm-all.c > @@ -2935,22 +2935,32 @@ void kvm_cpu_synchronize_state(CPUState *cpu) > } > } > > -static void do_kvm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg) > +static bool kvm_cpu_synchronize_put(CPUState *cpu, KvmPutState state, > + const char *desc) > { > Error *err = NULL; > - int ret = kvm_arch_put_registers(cpu, KVM_PUT_RESET_STATE, &err); > + int ret = kvm_arch_put_registers(cpu, state, &err); > if (ret) { > if (err) { > - error_reportf_err(err, "Restoring resisters after reset: "); > + error_reportf_err(err, "Restoring resisters %s: ", desc); > } else { > - error_report("Failed to put registers after reset: %s", > + error_report("Failed to put registers %s: %s", desc, > strerror(-ret)); > } Reviewed-by: Richard Henderson <richard.henderson@linaro.org> For the to-do list: the arch routine really should be using error_setg_errno, not deferring the test of errno to here. But it seems i386 is the only target that actually sets errp. r~ ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-10-07 19:35 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-10-07 8:16 [PATCH 0/3] accel/kvm: Cleanups around kvm_arch_put_registers() Philippe Mathieu-Daudé 2025-10-07 8:16 ` [PATCH 1/3] accel/kvm: Do not expect more then KVM_PUT_FULL_STATE Philippe Mathieu-Daudé 2025-10-07 8:20 ` Harsh Prateek Bora 2025-10-07 8:16 ` [PATCH 2/3] accel/kvm: Introduce KvmPutState enum Philippe Mathieu-Daudé 2025-10-07 8:30 ` Harsh Prateek Bora 2025-10-07 8:16 ` [PATCH 3/3] accel/kvm: Factor kvm_cpu_synchronize_put() out Philippe Mathieu-Daudé 2025-10-07 13:30 ` Andrew Jones 2025-10-07 13:53 ` Philippe Mathieu-Daudé 2025-10-07 19:34 ` Richard Henderson
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).