From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([209.51.188.92]:50705) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gmGM3-000682-Jj for qemu-devel@nongnu.org; Wed, 23 Jan 2019 06:06:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gmGM0-0000JC-JZ for qemu-devel@nongnu.org; Wed, 23 Jan 2019 06:05:58 -0500 Received: from mail-lj1-x242.google.com ([2a00:1450:4864:20::242]:38368) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gmGLu-0000Ge-3u for qemu-devel@nongnu.org; Wed, 23 Jan 2019 06:05:52 -0500 Received: by mail-lj1-x242.google.com with SMTP id c19-v6so1545423lja.5 for ; Wed, 23 Jan 2019 03:05:49 -0800 (PST) MIME-Version: 1.0 References: <20190123073402.28465-1-r@hev.cc> In-Reply-To: From: Heiher Date: Wed, 23 Jan 2019 19:05:36 +0800 Message-ID: Content-Type: text/plain; charset="UTF-8" Subject: Re: [Qemu-devel] [PATCH RFC v1] i386: hvf: Fix smp boot hangs List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: Richard Henderson , Eduardo Habkost , qemu-devel@nongnu.org On Wed, Jan 23, 2019 at 5:45 PM Paolo Bonzini wrote: > > On 23/01/19 08:34, Heiher wrote: > > The machine that with hvf accelerator and smp sometimes boot hangs > > because all processors are executing instructions at startup, > > including early I/O emulations. We should just allow the bootstrap > > processor to initialize the machine and then to wake up slave > > processors by interrupt. > > > > Signed-off-by: Heiher > > --- > > target/i386/hvf/hvf.c | 5 ----- > > 1 file changed, 5 deletions(-) > > > > diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c > > index e193022c03..0921fcba45 100644 > > --- a/target/i386/hvf/hvf.c > > +++ b/target/i386/hvf/hvf.c > > @@ -499,7 +499,6 @@ void hvf_reset_vcpu(CPUState *cpu) { > > } > > > > hv_vm_sync_tsc(0); > > - cpu->halted = 0; > > hv_vcpu_invalidate_tlb(cpu->hvf_fd); > > hv_vcpu_flush(cpu->hvf_fd); > > } > > @@ -582,8 +581,6 @@ int hvf_init_vcpu(CPUState *cpu) > > > > wvmcs(cpu->hvf_fd, VMCS_TPR_THRESHOLD, 0); > > > > - hvf_reset_vcpu(cpu); > > Why this? It looks redundant. I think it is enough to reset vcpu from x86_cpu_reset, likes kvm. https://git.qemu.org/?p=qemu.git;a=blob;f=target/i386/cpu.c;h=2f5412592d30ea7a24810f3bf6a8c7d4b035a0f9;hb=952bc8b3c2cbba78261923a1e8ca55cda261dee9#l4732 Do you think it is correct? > > > x86cpu = X86_CPU(cpu); > > x86cpu->env.xsave_buf = qemu_memalign(4096, 4096); > > > > @@ -659,8 +656,6 @@ int hvf_vcpu_exec(CPUState *cpu) > > int ret = 0; > > uint64_t rip = 0; > > > > - cpu->halted = 0; > > - > > if (hvf_process_events(cpu)) { > > return EXCP_HLT; > > } > > > > Looks good apart from the question above. > > Paoo Thank you reply. -- Best regards! Hev https://hev.cc