WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-4.1-testing] x86: add volatile prefix for cpuid asm

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-4.1-testing] x86: add volatile prefix for cpuid asm clauses
From: Xen patchbot-4.1-testing <patchbot@xxxxxxx>
Date: Fri, 18 Mar 2011 21:25:09 +0000
Delivery-date: Fri, 18 Mar 2011 14:25:34 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# 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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-4.1-testing] x86: add volatile prefix for cpuid asm clauses, Xen patchbot-4 . 1-testing <=