On Mon, Aug 03, 2020 at 11:05:33AM +0200, Claudio Fontana wrote: > register a "CpusAccel" interface for HVF as well. > > Signed-off-by: Claudio Fontana <cfont...@suse.de> > --- > softmmu/cpus.c | 63 -------------------- > target/i386/hvf/Makefile.objs | 2 +- > target/i386/hvf/hvf-cpus.c | 131 > ++++++++++++++++++++++++++++++++++++++++++ > target/i386/hvf/hvf-cpus.h | 17 ++++++ > target/i386/hvf/hvf.c | 3 + > 5 files changed, 152 insertions(+), 64 deletions(-) > create mode 100644 target/i386/hvf/hvf-cpus.c > create mode 100644 target/i386/hvf/hvf-cpus.h > > diff --git a/softmmu/cpus.c b/softmmu/cpus.c > index 586b4acaab..d327b2685c 100644 > --- a/softmmu/cpus.c > +++ b/softmmu/cpus.c > @@ -33,7 +33,6 @@ > #include "exec/gdbstub.h" > #include "sysemu/hw_accel.h" > #include "sysemu/kvm.h" > -#include "sysemu/hvf.h"
I wonder if the declarations should be moved from sysemu/hvf.h to someplace inside target/i386/hvf/: int hvf_init_vcpu(CPUState *); int hvf_vcpu_exec(CPUState *); void hvf_cpu_synchronize_state(CPUState *); void hvf_cpu_synchronize_post_reset(CPUState *); void hvf_cpu_synchronize_post_init(CPUState *); void hvf_cpu_synchronize_pre_loadvm(CPUState *); void hvf_vcpu_destroy(CPUState *); They're not used outside of target/i386/hvf/ I also wonder if we need stubs at all? > #include "exec/exec-all.h" > #include "qemu/thread.h" > #include "qemu/plugin.h" > @@ -391,48 +390,6 @@ void qemu_wait_io_event(CPUState *cpu) > qemu_wait_io_event_common(cpu); > } > > -/* The HVF-specific vCPU thread function. This one should only run when the > host > - * CPU supports the VMX "unrestricted guest" feature. */ > -static void *qemu_hvf_cpu_thread_fn(void *arg) > -{ > - CPUState *cpu = arg; > - > - int r; > - > - assert(hvf_enabled()); > - > - rcu_register_thread(); > - > - qemu_mutex_lock_iothread(); > - qemu_thread_get_self(cpu->thread); > - > - cpu->thread_id = qemu_get_thread_id(); > - cpu->can_do_io = 1; > - current_cpu = cpu; > - > - hvf_init_vcpu(cpu); > - > - /* signal CPU creation */ > - cpu_thread_signal_created(cpu); > - qemu_guest_random_seed_thread_part2(cpu->random_seed); > - > - do { > - if (cpu_can_run(cpu)) { > - r = hvf_vcpu_exec(cpu); > - if (r == EXCP_DEBUG) { > - cpu_handle_guest_debug(cpu); > - } > - } > - qemu_wait_io_event(cpu); > - } while (!cpu->unplug || cpu_can_run(cpu)); > - > - hvf_vcpu_destroy(cpu); > - cpu_thread_signal_destroyed(cpu); > - qemu_mutex_unlock_iothread(); > - rcu_unregister_thread(); > - return NULL; > -} > - > void cpus_kick_thread(CPUState *cpu) > { > #ifndef _WIN32 > @@ -603,24 +560,6 @@ void cpu_remove_sync(CPUState *cpu) > qemu_mutex_lock_iothread(); > } > > -static void qemu_hvf_start_vcpu(CPUState *cpu) > -{ > - char thread_name[VCPU_THREAD_NAME_SIZE]; > - > - /* HVF currently does not support TCG, and only runs in > - * unrestricted-guest mode. */ > - assert(hvf_enabled()); > - > - cpu->thread = g_malloc0(sizeof(QemuThread)); > - cpu->halt_cond = g_malloc0(sizeof(QemuCond)); > - qemu_cond_init(cpu->halt_cond); > - > - snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/HVF", > - cpu->cpu_index); > - qemu_thread_create(cpu->thread, thread_name, qemu_hvf_cpu_thread_fn, > - cpu, QEMU_THREAD_JOINABLE); > -} > - > void cpus_register_accel(CpusAccel *ca) > { > assert(ca != NULL); > @@ -648,8 +587,6 @@ void qemu_init_vcpu(CPUState *cpu) > if (cpus_accel) { > /* accelerator already implements the CpusAccel interface */ > cpus_accel->create_vcpu_thread(cpu); > - } else if (hvf_enabled()) { > - qemu_hvf_start_vcpu(cpu); > } else { > assert(0); > } > diff --git a/target/i386/hvf/Makefile.objs b/target/i386/hvf/Makefile.objs > index 927b86bc67..af9f7dcfc1 100644 > --- a/target/i386/hvf/Makefile.objs > +++ b/target/i386/hvf/Makefile.objs > @@ -1,2 +1,2 @@ > -obj-y += hvf.o > +obj-y += hvf.o hvf-cpus.o > obj-y += x86.o x86_cpuid.o x86_decode.o x86_descr.o x86_emu.o x86_flags.o > x86_mmu.o x86hvf.o x86_task.o > diff --git a/target/i386/hvf/hvf-cpus.c b/target/i386/hvf/hvf-cpus.c > new file mode 100644 > index 0000000000..9540157f1e > --- /dev/null > +++ b/target/i386/hvf/hvf-cpus.c I'd prefer singular form in variables and file names. More on that in the comment to patch 2. Besides that it works fine, Reviewed-by: Roman Bolshakov <r.bolsha...@yadro.com> Tested-by: Roman Bolshakov <r.bolsha...@yadro.com> Regards, Roman