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] Make sure the grant table stuff uses locked cmpxchg inst

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Make sure the grant table stuff uses locked cmpxchg instructions even when compiled
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Thu, 09 Jun 2005 10:54:32 +0000
Delivery-date: Thu, 09 Jun 2005 14:01:56 +0000
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/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: Xen Development List <xen-devel@xxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
ChangeSet 1.1696, 2005/06/09 11:54:32+01:00, sos22@xxxxxxxxxxxxxxxxxxxx

        Make sure the grant table stuff uses locked cmpxchg instructions even 
when compiled
        !CONFIG_SMP.
        
        Signed-off-by: Steven Smith <sos22@xxxxxxxxx>



 arch/xen/kernel/gnttab.c                |    5 ++--
 include/asm-xen/asm-i386/synch_bitops.h |   40 ++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+), 2 deletions(-)


diff -Nru a/linux-2.6.11-xen-sparse/arch/xen/kernel/gnttab.c 
b/linux-2.6.11-xen-sparse/arch/xen/kernel/gnttab.c
--- a/linux-2.6.11-xen-sparse/arch/xen/kernel/gnttab.c  2005-06-09 10:02:52 
-04:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/kernel/gnttab.c  2005-06-09 10:02:52 
-04:00
@@ -19,6 +19,7 @@
 #include <asm-xen/xen_proc.h>
 #include <asm-xen/linux-public/privcmd.h>
 #include <asm-xen/gnttab.h>
+#include <asm/synch_bitops.h>
 
 #if 1
 #define ASSERT(_p) \
@@ -125,7 +126,7 @@
         if ( (flags = nflags) & (GTF_reading|GTF_writing) )
             printk(KERN_ALERT "WARNING: g.e. still in use!\n");
     }
-    while ( (nflags = cmpxchg(&shared[ref].flags, flags, 0)) != flags );
+    while ( (nflags = synch_cmpxchg(&shared[ref].flags, flags, 0)) != flags );
 
     put_free_entry(ref);
 }
@@ -172,7 +173,7 @@
      * Otherwise invalidate the grant entry against future use.
      */
     if ( likely(flags != GTF_accept_transfer) ||
-         (cmpxchg(&shared[ref].flags, flags, 0) != GTF_accept_transfer) )
+         (synch_cmpxchg(&shared[ref].flags, flags, 0) != GTF_accept_transfer) )
         while ( unlikely((frame = shared[ref].frame) == 0) )
             cpu_relax();
 
diff -Nru a/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h 
b/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h
--- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h   
2005-06-09 10:02:52 -04:00
+++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h   
2005-06-09 10:02:52 -04:00
@@ -60,6 +60,46 @@
     return oldbit;
 }
 
+struct __synch_xchg_dummy { unsigned long a[100]; };
+#define __synch_xg(x) ((struct __synch_xchg_dummy *)(x))
+
+#define synch_cmpxchg(ptr, old, new) \
+((__typeof__(*(ptr)))__synch_cmpxchg((ptr),\
+                                     (unsigned long)(old), \
+                                     (unsigned long)(new), \
+                                     sizeof(*(ptr))))
+
+static inline unsigned long __synch_cmpxchg(volatile void *ptr,
+                                           unsigned long old,
+                                           unsigned long new, int size)
+{
+       unsigned long prev;
+       switch (size) {
+       case 1:
+               __asm__ __volatile__("lock; cmpxchgb %b1,%2"
+                                    : "=a"(prev)
+                                    : "q"(new), "m"(*__synch_xg(ptr)),
+                                      "0"(old)
+                                    : "memory");
+               return prev;
+       case 2:
+               __asm__ __volatile__("lock; cmpxchgw %w1,%2"
+                                    : "=a"(prev)
+                                    : "q"(new), "m"(*__synch_xg(ptr)),
+                                      "0"(old)
+                                    : "memory");
+               return prev;
+       case 4:
+               __asm__ __volatile__("lock; cmpxchgl %1,%2"
+                                    : "=a"(prev)
+                                    : "q"(new), "m"(*__synch_xg(ptr)),
+                                      "0"(old)
+                                    : "memory");
+               return prev;
+       }
+       return old;
+}
+
 static __inline__ int synch_const_test_bit(int nr, const volatile void * addr)
 {
     return ((1UL << (nr & 31)) & 

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Make sure the grant table stuff uses locked cmpxchg instructions even when compiled, BitKeeper Bot <=