revert part of 3db8b916e merge
PATCH 1/1 revert part of 3db8b916e merge
kvm_*_mpstate() cannot be called from kvm_arch_*_registers() since kvm_arch_*_registers() sometimes called from io thread, but kvm_*_mpstate() can be called only by cpu thread.
qemu-kvm.c +0 -23
@@ -1431,26 +1431,3 @@ void qemu_kvm_cpu_stop(CPUState *env)if (kvm_enabled ()) env->kvm_cpu_state.stopped =1 ; } - -void kvm_arch_get_registers (CPUState *env) -{ -kvm_save_registers (env); -kvm_save_mpstate (env); -} - -void kvm_arch_put_registers (CPUState *env) -{ -kvm_load_registers (env); -kvm_load_mpstate (env); -} - - -void cpu_synchronize_state (CPUState *env,int modified) -{ -if (kvm_enabled ()) { -if (modified) -kvm_arch_put_registers (env); -else -kvm_arch_get_registers (env); - } -}
qemu-kvm.h +18 -3
@@ -216,10 +216,25 @@ int kvm_log_stop(target_phys_addr_t phys_addr, target_phys_addr_t len);static inline int kvm_sync_vcpus (void ) {return 0 ; } -void kvm_arch_get_registers (CPUState *env); -void kvm_arch_put_registers (CPUState *env); +static inline void kvm_arch_get_registers (CPUState *env) +{ +kvm_save_registers (env); +} -void cpu_synchronize_state (CPUState *env,int modified); +static inline void kvm_arch_put_registers (CPUState *env) +{ +kvm_load_registers (env); +} + +static inline void cpu_synchronize_state (CPUState *env,int modified) +{ +if (kvm_enabled ()) { +if (modified) +kvm_arch_put_registers (env); +else +kvm_arch_get_registers (env); + } +}uint32_t kvm_arch_get_supported_cpuid (CPUState *env,uint32_t function,int reg);
target-i386/machine.c +4 -1
@@ -32,7 +32,10 @@ void cpu_save(QEMUFile *f, void *opaque)int32_t pending_irq;int i, bit; -cpu_synchronize_state (env,0 ); +if (kvm_enabled ()) { +kvm_save_registers (env); +kvm_save_mpstate (env); + }for (i =0 ; i <CPU_NB_REGS ; i++)qemu_put_betls (f, &env->regs[i]);
--
Gleb.
Quoted 5 lines · Gleb Natapov
kvm_*_mpstate() cannot be called from kvm_arch_*_registers() since kvm_arch_*_registers() sometimes called from io thread, but kvm_*_mpstate() can be called only by cpu thread.
I really dislike vcpu functions to be called from outside the vcpu thread. Who are the callers?
Quoted 84 lines
Signed-off-by Gleb Natapov <[email protected]>qemu-kvm.c +0
-23@@ -1431,26 +1431,3 @@ void qemu_kvm_cpu_stop(CPUState *env)if (kvm_enabled ()) env->kvm_cpu_state.stopped =1 ; } - -void kvm_arch_get_registers (CPUState *env) -{ -kvm_save_registers (env); -kvm_save_mpstate (env); -} - -void kvm_arch_put_registers (CPUState *env) -{ -kvm_load_registers (env); -kvm_load_mpstate (env); -} - - -void cpu_synchronize_state (CPUState *env,int modified) -{ -if (kvm_enabled ()) { -if (modified) -kvm_arch_put_registers (env); -else -kvm_arch_get_registers (env); - } -}qemu-kvm.h +18
-3@@ -216,10 +216,25 @@ int kvm_log_stop(target_phys_addr_t phys_addr, target_phys_addr_t len);static inline int kvm_sync_vcpus (void ) {return 0 ; } -void kvm_arch_get_registers (CPUState *env); -void kvm_arch_put_registers (CPUState *env); +static inline void kvm_arch_get_registers (CPUState *env) +{ +kvm_save_registers (env); +} -void cpu_synchronize_state (CPUState *env,int modified); +static inline void kvm_arch_put_registers (CPUState *env) +{ +kvm_load_registers (env); +} + +static inline void cpu_synchronize_state (CPUState *env,int modified) +{ +if (kvm_enabled ()) { +if (modified) +kvm_arch_put_registers (env); +else +kvm_arch_get_registers (env); + } +}uint32_t kvm_arch_get_supported_cpuid (CPUState *env,uint32_t function,int reg);target-i386/machine.c +4
-2@@ -32,7 +32,10 @@ void cpu_save(QEMUFile *f, void *opaque)int32_t pending_irq;int i, bit; -cpu_synchronize_state (env,0 ); +if (kvm_enabled ()) { +kvm_save_registers (env); +kvm_save_mpstate (env); + }for (i =0 ; i <CPU_NB_REGS ; i++)qemu_put_betls (f, &env->regs[i]); --Gleb.
Signature · 1 line
Do not meddle in the internals of kernels, for they are subtle and quick to panic.
Quoted 10 lines · Avi Kivity
Quoted 5 lines · Gleb Natapov
kvm_*_mpstate() cannot be called from kvm_arch_*_registers() since kvm_arch_*_registers() sometimes called from io thread, but kvm_*_mpstate() can be called only by cpu thread.
I really dislike vcpu functions to be called from outside the vcpu thread. Who are the callers?
monitor.c. May be others (git grep cpu_synchronize_state). But kvm_save_registers() does the right thing and calls another function on vcpu thread.
Quoted 71 lines
Quoted 71 lines
Signed-off-by Gleb Natapov <[email protected]>qemu-kvm.c +0
-23@@ -1431,26 +1431,3 @@ void qemu_kvm_cpu_stop(CPUState *env)if (kvm_enabled ()) env->kvm_cpu_state.stopped =1 ; } - -void kvm_arch_get_registers (CPUState *env) -{ -kvm_save_registers (env); -kvm_save_mpstate (env); -} - -void kvm_arch_put_registers (CPUState *env) -{ -kvm_load_registers (env); -kvm_load_mpstate (env); -} - - -void cpu_synchronize_state (CPUState *env,int modified) -{ -if (kvm_enabled ()) { -if (modified) -kvm_arch_put_registers (env); -else -kvm_arch_get_registers (env); - } -}qemu-kvm.h +18
-1@@ -216,10 +216,25 @@ int kvm_log_stop(target_phys_addr_t phys_addr, target_phys_addr_t len);static inline int kvm_sync_vcpus (void ) {return 0 ; } -void kvm_arch_get_registers(CPUState *env); -void kvm_arch_put_registers (CPUState *env); +static inline void kvm_arch_get_registers (CPUState *env) +{ +kvm_save_registers (env); +} -void cpu_synchronize_state(CPUState *env, int modified); +static inline void kvm_arch_put_registers (CPUState *env) +{ +kvm_load_registers (env); +} + +static inline void cpu_synchronize_state (CPUState *env,int modified) +{ +if (kvm_enabled ()) { +if (modified) +kvm_arch_put_registers (env); +else +kvm_arch_get_registers (env); + } +}uint32_t kvm_arch_get_supported_cpuid (CPUState *env,uint32_t function,int reg);target-i386/machine.c +1
-0@@ -32,7 +32,10 @@ void cpu_save(QEMUFile *f, void *opaque)int32_t pending_irq;int i, bit; -cpu_synchronize_state (env,0 ); +if (kvm_enabled ()) {
Quoted 12 lines
Quoted 8 lines
target-i386/machine.c +3
-1+kvm_save_registers (env); +kvm_save_mpstate (env); + }for (i =0 ; i <CPU_NB_REGS ; i++)qemu_put_betls (f, &env->regs[i]); -- Gleb.Signature · 1 line
Do not meddle in the internals of kernels, for they are subtle and quick to panic.
--
Gleb.
Avi Kivity
AppliedQuoted 4 lines · Gleb Natapov
kvm_*_mpstate() cannot be called from kvm_arch_*_registers() since kvm_arch_*_registers() sometimes called from io thread, but kvm_*_mpstate() can be called only by cpu thread.
Applied, thanks.
Signature · 1 line
error compiling committee.c: too many arguments to function