[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-4.1-testing] x86: add volatile prefix for cpuid asm clauses
# HG changeset patch # User Wei Gang <gang.wei@xxxxxxxxx> # Date 1300122449 0 # Node ID 5dda35f1f32f0b6be4ce321b0e028ee1a2af29ea # Parent 842aed720b84aba65b9dd3b11250f7116a3d81c1 x86: add volatile prefix for cpuid asm clauses cpuid results are possible to be changed now. For example, changing CR4.OSXSAVE bit or setting MSR XCR_XFEATURE_ENABLED_MASK may change XSAVE related cpuid leave return values. The volatile prefix is required to avoid the second cpuid calls following some possible changing operations being optimized in incorrect way by compiler. The sample bug is in xsave_init while debug=3Dn. The second call to cpuid_count() may be optimized and lead to a BUG_ON case while compare xsave_cntxt_size with ebx. Signed-off-by: Wei Gang <gang.wei@xxxxxxxxx> xen-unstable changeset: 23036:9a15ff175e00 xen-unstable date: Mon Mar 14 17:04:42 2011 +0000 --- diff -r 842aed720b84 -r 5dda35f1f32f xen/include/asm-x86/processor.h --- a/xen/include/asm-x86/processor.h Mon Mar 14 17:00:34 2011 +0000 +++ b/xen/include/asm-x86/processor.h Mon Mar 14 17:07:29 2011 +0000 @@ -223,7 +223,7 @@ * resulting in stale register contents being returned. */ #define cpuid(_op,_eax,_ebx,_ecx,_edx) \ - asm ( "cpuid" \ + asm volatile ( "cpuid" \ : "=a" (*(int *)(_eax)), \ "=b" (*(int *)(_ebx)), \ "=c" (*(int *)(_ecx)), \ @@ -239,7 +239,7 @@ unsigned int *ecx, unsigned int *edx) { - asm ( "cpuid" + asm volatile ( "cpuid" : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx) : "0" (op), "c" (count) ); } @@ -251,7 +251,7 @@ { unsigned int eax; - asm ( "cpuid" + asm volatile ( "cpuid" : "=a" (eax) : "0" (op) : "bx", "cx", "dx" ); @@ -262,7 +262,7 @@ { unsigned int eax, ebx; - asm ( "cpuid" + asm volatile ( "cpuid" : "=a" (eax), "=b" (ebx) : "0" (op) : "cx", "dx" ); @@ -273,7 +273,7 @@ { unsigned int eax, ecx; - asm ( "cpuid" + asm volatile ( "cpuid" : "=a" (eax), "=c" (ecx) : "0" (op) : "bx", "dx" ); @@ -284,7 +284,7 @@ { unsigned int eax, edx; - asm ( "cpuid" + asm volatile ( "cpuid" : "=a" (eax), "=d" (edx) : "0" (op) : "bx", "cx" ); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |