Message ID | 50909C35.9080702@cn.fujitsu.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> -----Original Message----- > From: kexec-bounces@lists.infradead.org > [mailto:kexec-bounces@lists.infradead.org] On Behalf Of zhangyanfei > Sent: Wednesday, October 31, 2012 12:34 PM > To: x86@kernel.org; kexec@lists.infradead.org; Avi Kivity; Marcelo > Tosatti > Cc: linux-kernel@vger.kernel.org; kvm@vger.kernel.org > Subject: [PATCH v3 2/2] KVM: make crash_clear_loaded_vmcss valid when > loading kvm_intel module > > Signed-off-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> [...] > @@ -7230,6 +7231,10 @@ static int __init vmx_init(void) > if (r) > goto out3; > > +#ifdef CONFIG_KEXEC > + crash_clear_loaded_vmcss = vmclear_local_loaded_vmcss; > +#endif > + Assignment here cannot cover the case where NMI is initiated after VMX is on in kvm_init and before vmclear_local_loaded_vmcss is assigned, though rare but can happen. What does happen if calling vmclear_local_loaded_vmcss before kvm_init? I think it no problem since the list is initially empty. > vmx_disable_intercept_for_msr(MSR_FS_BASE, false); > vmx_disable_intercept_for_msr(MSR_GS_BASE, false); > vmx_disable_intercept_for_msr(MSR_KERNEL_GS_BASE, true); > @@ -7265,6 +7270,10 @@ static void __exit vmx_exit(void) > free_page((unsigned long)vmx_io_bitmap_b); > free_page((unsigned long)vmx_io_bitmap_a); > > +#ifdef CONFIG_KEXEC > + crash_clear_loaded_vmcss = NULL; > +#endif > + > kvm_exit(); > } Also, this is converse to the above. Thanks. HATAYAMA, Daisuke -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
? 2012?10?31? 17:01, Hatayama, Daisuke ??: > > >> -----Original Message----- >> From: kexec-bounces@lists.infradead.org >> [mailto:kexec-bounces@lists.infradead.org] On Behalf Of zhangyanfei >> Sent: Wednesday, October 31, 2012 12:34 PM >> To: x86@kernel.org; kexec@lists.infradead.org; Avi Kivity; Marcelo >> Tosatti >> Cc: linux-kernel@vger.kernel.org; kvm@vger.kernel.org >> Subject: [PATCH v3 2/2] KVM: make crash_clear_loaded_vmcss valid when >> loading kvm_intel module >> >> Signed-off-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> > > [...] > >> @@ -7230,6 +7231,10 @@ static int __init vmx_init(void) >> if (r) >> goto out3; >> >> +#ifdef CONFIG_KEXEC >> + crash_clear_loaded_vmcss = vmclear_local_loaded_vmcss; >> +#endif >> + > > Assignment here cannot cover the case where NMI is initiated after VMX is on in kvm_init and before vmclear_local_loaded_vmcss is assigned, though rare but can happen. > By saying "VMX is on in kvm init", you mean kvm_init enables the VMX feature in the logical processor? No, only there is a vcpu to be created, kvm will enable the VMX feature. I think there is no difference with this assignment before or after kvm_init because the vmcs linked list must be empty before vmx_init is finished. Thanks Zhang Yanfei > What does happen if calling vmclear_local_loaded_vmcss before kvm_init? I think it no problem since the list is initially empty. > >> vmx_disable_intercept_for_msr(MSR_FS_BASE, false); >> vmx_disable_intercept_for_msr(MSR_GS_BASE, false); >> vmx_disable_intercept_for_msr(MSR_KERNEL_GS_BASE, true); >> @@ -7265,6 +7270,10 @@ static void __exit vmx_exit(void) >> free_page((unsigned long)vmx_io_bitmap_b); >> free_page((unsigned long)vmx_io_bitmap_a); >> >> +#ifdef CONFIG_KEXEC >> + crash_clear_loaded_vmcss = NULL; >> +#endif >> + >> kvm_exit(); >> } > > Also, this is converse to the above. > > Thanks. > HATAYAMA, Daisuke > > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Nov 01, 2012 at 01:55:04PM +0800, zhangyanfei wrote: > ? 2012?10?31? 17:01, Hatayama, Daisuke ??: > > > > > >> -----Original Message----- > >> From: kexec-bounces@lists.infradead.org > >> [mailto:kexec-bounces@lists.infradead.org] On Behalf Of zhangyanfei > >> Sent: Wednesday, October 31, 2012 12:34 PM > >> To: x86@kernel.org; kexec@lists.infradead.org; Avi Kivity; Marcelo > >> Tosatti > >> Cc: linux-kernel@vger.kernel.org; kvm@vger.kernel.org > >> Subject: [PATCH v3 2/2] KVM: make crash_clear_loaded_vmcss valid when > >> loading kvm_intel module > >> > >> Signed-off-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> > > > > [...] > > > >> @@ -7230,6 +7231,10 @@ static int __init vmx_init(void) > >> if (r) > >> goto out3; > >> > >> +#ifdef CONFIG_KEXEC > >> + crash_clear_loaded_vmcss = vmclear_local_loaded_vmcss; > >> +#endif > >> + > > > > Assignment here cannot cover the case where NMI is initiated after VMX is on in kvm_init and before vmclear_local_loaded_vmcss is assigned, though rare but can happen. > > > > By saying "VMX is on in kvm init", you mean kvm_init enables the VMX feature in the logical processor? > No, only there is a vcpu to be created, kvm will enable the VMX feature. > > I think there is no difference with this assignment before or after kvm_init because the vmcs linked > list must be empty before vmx_init is finished. The list is not initialized before hardware_enable(), though. Should move the assignment after that. Also, it is possible that the loaded_vmcss_on_cpu list is being modified _while_ crash executes say via NMI, correct? If that is the case, better flag that the list is under manipulation so the vmclear can be skipped. > Thanks > Zhang Yanfei > > > What does happen if calling vmclear_local_loaded_vmcss before kvm_init? I think it no problem since the list is initially empty. > > > >> vmx_disable_intercept_for_msr(MSR_FS_BASE, false); > >> vmx_disable_intercept_for_msr(MSR_GS_BASE, false); > >> vmx_disable_intercept_for_msr(MSR_KERNEL_GS_BASE, true); > >> @@ -7265,6 +7270,10 @@ static void __exit vmx_exit(void) > >> free_page((unsigned long)vmx_io_bitmap_b); > >> free_page((unsigned long)vmx_io_bitmap_a); > >> > >> +#ifdef CONFIG_KEXEC > >> + crash_clear_loaded_vmcss = NULL; > >> +#endif > >> + > >> kvm_exit(); > >> } > > > > Also, this is converse to the above. > > > > Thanks. > > HATAYAMA, Daisuke > > > > > > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
? 2012?11?14? 05:22, Marcelo Tosatti ??: > On Thu, Nov 01, 2012 at 01:55:04PM +0800, zhangyanfei wrote: >> ? 2012?10?31? 17:01, Hatayama, Daisuke ??: >>> >>> >>>> -----Original Message----- >>>> From: kexec-bounces@lists.infradead.org >>>> [mailto:kexec-bounces@lists.infradead.org] On Behalf Of zhangyanfei >>>> Sent: Wednesday, October 31, 2012 12:34 PM >>>> To: x86@kernel.org; kexec@lists.infradead.org; Avi Kivity; Marcelo >>>> Tosatti >>>> Cc: linux-kernel@vger.kernel.org; kvm@vger.kernel.org >>>> Subject: [PATCH v3 2/2] KVM: make crash_clear_loaded_vmcss valid when >>>> loading kvm_intel module >>>> >>>> Signed-off-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> >>> >>> [...] >>> >>>> @@ -7230,6 +7231,10 @@ static int __init vmx_init(void) >>>> if (r) >>>> goto out3; >>>> >>>> +#ifdef CONFIG_KEXEC >>>> + crash_clear_loaded_vmcss = vmclear_local_loaded_vmcss; >>>> +#endif >>>> + >>> >>> Assignment here cannot cover the case where NMI is initiated after VMX is on in kvm_init and before vmclear_local_loaded_vmcss is assigned, though rare but can happen. >>> >> >> By saying "VMX is on in kvm init", you mean kvm_init enables the VMX feature in the logical processor? >> No, only there is a vcpu to be created, kvm will enable the VMX feature. >> >> I think there is no difference with this assignment before or after kvm_init because the vmcs linked >> list must be empty before vmx_init is finished. > > The list is not initialized before hardware_enable(), though. Should > move the assignment after that. > > Also, it is possible that the loaded_vmcss_on_cpu list is being modified > _while_ crash executes say via NMI, correct? If that is the case, better > flag that the list is under manipulation so the vmclear can be skipped. > Thanks for your comments. In the new patchset, I didn't move the crash_clear_loaded_vmcss assignment. I added a new percpu variable vmclear_skipped to indicate everything: 1. Before the loaded_vmcss_on_cpu list is initialized, vmclear_skipped is 1 and this means if the machine crashes and doing kdump, crash_clear_loaded_vmcss still will not be called. 2. If the loaded_vmcss_on_cpu list is under manipulation, vmclear_skipped is set to 1 and after the manipulation is finished, the variable is set to 0. 3. After all loaded vmcss are vmcleared, vmclear_skipped is set to 1. So we needn't repeat to vmclear loaded vmcss in kdump path. Please refer to the new version of the patchset I sent. If you have any suggestions, that'll be helpful. Thanks Zhang -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 4ff0ab9..f6a16b2 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -41,6 +41,7 @@ #include <asm/i387.h> #include <asm/xcr.h> #include <asm/perf_event.h> +#include <asm/kexec.h> #include "trace.h" @@ -7230,6 +7231,10 @@ static int __init vmx_init(void) if (r) goto out3; +#ifdef CONFIG_KEXEC + crash_clear_loaded_vmcss = vmclear_local_loaded_vmcss; +#endif + vmx_disable_intercept_for_msr(MSR_FS_BASE, false); vmx_disable_intercept_for_msr(MSR_GS_BASE, false); vmx_disable_intercept_for_msr(MSR_KERNEL_GS_BASE, true); @@ -7265,6 +7270,10 @@ static void __exit vmx_exit(void) free_page((unsigned long)vmx_io_bitmap_b); free_page((unsigned long)vmx_io_bitmap_a); +#ifdef CONFIG_KEXEC + crash_clear_loaded_vmcss = NULL; +#endif + kvm_exit(); }
Signed-off-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> --- arch/x86/kvm/vmx.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)