[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Xen-devel] [PATCH] small adjustment to asm constraintsforc/s19400



>From: Jan Beulich [mailto:jbeulich@xxxxxxxxxx] 
>Sent: 2009年3月31日 18:55
>
>>>> "Tian, Kevin" <kevin.tian@xxxxxxxxx> 31.03.09 12:21 >>>
>>BTW, another question comes when I'm clearing the code.
>>in load_segments, fs/gs base MSRs are only updated for non 32-on-64
>>domain. I guess that it's just for performance reason as 32bit guest 
>>doesn't require to switch gs base. I want to get your confirmation 
>>since in current low level context S3 resume code, we always restore 
>>those base MSRs even for 32-on-64 case.
>
>Correct - your code isn't performance sensitive, so keeping it 
>simple is
>probably preferable. load_segments() sits in the context 
>switch code, and
>thus it tries to avoid things not needed for a particular guest.
>

Thanks. After recovering those 3 SYSENTER MSRs, now 32-on-64
S3 could succeeds several times which is a big step. However there
seems to be some other instability issues to cause machine 
occasionally reboot after more S3 actions. Both screen and serial
port is dark and thus no more info is available. We'll continue to dig out 
the exact reason. But this shouldn't prevent sending out this 
reasonable fix anyway.

Thanks,
Kevin

-----

Enable S3 for 32bit dom0 on 64bit Xen

Three SYSENTER MSRs should be taken care of at save/restore BSP context,
or else 32bit dom0 rejects working after S3 resume. Thanks for Jan's help to
find this missing part.

Signed-off-by Guanqun Lu <guanqun.lu@xxxxxxxxx>
Signed-off-by Kevin Tian <kevin.tian@xxxxxxxxx>

diff -r e152892a0b1e xen/arch/x86/acpi/suspend.c
--- a/xen/arch/x86/acpi/suspend.c       Tue Mar 31 10:21:55 2009 +0800
+++ b/xen/arch/x86/acpi/suspend.c       Tue Mar 31 19:06:08 2009 +0800
@@ -16,6 +16,7 @@
 
 #if defined(CONFIG_X86_64)
 static unsigned long saved_lstar, saved_cstar;
+static unsigned long saved_sysenter_esp, saved_sysenter_eip;
 #endif
 
 void save_rest_processor_state(void)
@@ -26,6 +27,8 @@
 #if defined(CONFIG_X86_64)
     rdmsrl(MSR_CSTAR, saved_cstar);
     rdmsrl(MSR_LSTAR, saved_lstar);
+    rdmsrl(MSR_IA32_SYSENTER_ESP, saved_sysenter_esp);
+    rdmsrl(MSR_IA32_SYSENTER_EIP, saved_sysenter_eip);
 #endif
 }
 
@@ -41,6 +44,11 @@
     wrmsrl(MSR_CSTAR, saved_cstar);
     wrmsr(MSR_STAR, 0, (FLAT_RING3_CS32<<16) | __HYPERVISOR_CS);
     wrmsr(MSR_SYSCALL_MASK, EF_VM|EF_RF|EF_NT|EF_DF|EF_IE|EF_TF, 0U);    
+
+    /* Recover sysenter MSRs */
+    wrmsrl(MSR_IA32_SYSENTER_ESP, saved_sysenter_esp);
+    wrmsrl(MSR_IA32_SYSENTER_EIP, saved_sysenter_eip);
+    wrmsr(MSR_IA32_SYSENTER_CS, __HYPERVISOR_CS, 0);
 #else /* !defined(CONFIG_X86_64) */
     if ( supervisor_mode_kernel && cpu_has_sep )
         wrmsr(MSR_IA32_SYSENTER_ESP, &init_tss[smp_processor_id()].esp1, 0);

Attachment: 32-on-64-s3.patch
Description: 32-on-64-s3.patch

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.