From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53513) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZwRXe-0003VG-Ne for qemu-devel@nongnu.org; Wed, 11 Nov 2015 04:18:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZwRWv-0007R5-Pt for qemu-devel@nongnu.org; Wed, 11 Nov 2015 04:18:10 -0500 Received: from mx1.redhat.com ([209.132.183.28]:56696) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZwRWv-0007Qt-Jp for qemu-devel@nongnu.org; Wed, 11 Nov 2015 04:17:25 -0500 References: <1447159964-22987-1-git-send-email-asmetanin@virtuozzo.com> <1447159964-22987-3-git-send-email-asmetanin@virtuozzo.com> <5641EDA2.6020707@redhat.com> <564305B4.9060907@virtuozzo.com> From: Paolo Bonzini Message-ID: <5643079E.8010908@redhat.com> Date: Wed, 11 Nov 2015 10:17:18 +0100 MIME-Version: 1.0 In-Reply-To: <564305B4.9060907@virtuozzo.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2 2/5] target-i386/kvm: Hyper-V SynIC MSR's support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: asmetanin@virtuozzo.com, qemu-devel@nongnu.org Cc: Eduardo Habkost , kvm@vger.kernel.org, Marcelo Tosatti , Roman Kagan , "Denis V. Lunev" , =?UTF-8?Q?Andreas_F=c3=a4rber?= , Richard Henderson On 11/11/2015 10:09, Andrey Smetanin wrote: >> >> I would prefer to put this in kvm_arch_init_vcpu, if possible. >> > Ok. I think the kvm_arch_init_vcpu() is called after migration restores > cpu->env->msr_hv_synic_* values, so unconditional initialization of > cpu->env->msr_hv_synic_* values can overwrite migrated values. The chec= k > "if (!env->msr_hv_synic_version) {" is neccessary for first time > initialization to protect against such overwriting. This is why this > code migrates 'msr_hv_synic_version' value. No, kvm_arch_init_vcpu is called at the very beginning, when the VCPU thread is created. main -> machine_class->init -> pc_init1 -> pc_cpus_init -> pc_new_cpu -> cpu_x86_create -> object_property_set_bool -> x86_cpu_realizefn -> qemu_init_vcpu -> qemu_kvm_start_vcpu -> qemu_kvm_cpu_thread_fn (in new thread) -> kvm_init_vcpu -> kvm_arch_init_vcpu This is long before qemu_start_incoming_migration, which is among the last things done before calling main_loop Paolo