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-unstable] [XEN] Fix 64-bit build.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [XEN] Fix 64-bit build.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 07 Nov 2006 23:30:25 +0000
Delivery-date: Tue, 07 Nov 2006 15:30:38 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxxx
# Node ID e10a13f1320708951014c3e38a606c6eb651e943
# Parent  e32b74b2d7f43a0ec3807893664fe1c5ddd312eb
[XEN] Fix 64-bit build.

This required fiddling the asm constraints of the atomic bitops. It
seems gcc isn't entirely happy with "+m": the manual says that the
'+' modifier should be used only when a register constraint is
available.

Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 xen/arch/x86/hvm/vioapic.c   |    7 ++---
 xen/arch/x86/hvm/vmx/vmcs.c  |    2 -
 xen/include/asm-x86/bitops.h |   58 ++++++++++++++++++++++---------------------
 3 files changed, 35 insertions(+), 32 deletions(-)

diff -r e32b74b2d7f4 -r e10a13f13207 xen/arch/x86/hvm/vioapic.c
--- a/xen/arch/x86/hvm/vioapic.c        Tue Nov 07 18:13:12 2006 +0000
+++ b/xen/arch/x86/hvm/vioapic.c        Tue Nov 07 23:14:09 2006 +0000
@@ -399,7 +399,8 @@ static void ioapic_deliver(struct vioapi
     struct vlapic *target;
 
     HVM_DBG_LOG(DBG_LEVEL_IOAPIC,
-                "dest %x dest_mode %x delivery_mode %x vector %x trig_mode 
%x\n",
+                "dest=%x dest_mode=%x delivery_mode=%x "
+                "vector=%x trig_mode=%x\n",
                 dest, dest_mode, delivery_mode, vector, trig_mode);
 
     deliver_bitmask = ioapic_get_delivery_bitmask(
@@ -430,8 +431,8 @@ static void ioapic_deliver(struct vioapi
         }
         else
         {
-            HVM_DBG_LOG(DBG_LEVEL_IOAPIC,
-                        "null round robin mask %x vector %x delivery_mode 
%x\n",
+            HVM_DBG_LOG(DBG_LEVEL_IOAPIC, "null round robin: "
+                        "mask=%x vector=%x delivery_mode=%x\n",
                         deliver_bitmask, vector, dest_LowestPrio);
         }
         break;
diff -r e32b74b2d7f4 -r e10a13f13207 xen/arch/x86/hvm/vmx/vmcs.c
--- a/xen/arch/x86/hvm/vmx/vmcs.c       Tue Nov 07 18:13:12 2006 +0000
+++ b/xen/arch/x86/hvm/vmx/vmcs.c       Tue Nov 07 23:14:09 2006 +0000
@@ -420,7 +420,7 @@ static int construct_vmcs(struct vcpu *v
     error |= __vmwrite(CPU_BASED_VM_EXEC_CONTROL,
                        v->arch.hvm_vcpu.u.vmx.exec_control);
     error |= __vmwrite(VIRTUAL_APIC_PAGE_ADDR,
-                       page_to_maddr(v->arch.hvm_vcpu.vlapic->regs_page));
+                       page_to_maddr(vcpu_vlapic(v)->regs_page));
     error |= __vmwrite(TPR_THRESHOLD, 0);
 #endif
 
diff -r e32b74b2d7f4 -r e10a13f13207 xen/include/asm-x86/bitops.h
--- a/xen/include/asm-x86/bitops.h      Tue Nov 07 18:13:12 2006 +0000
+++ b/xen/include/asm-x86/bitops.h      Tue Nov 07 23:14:09 2006 +0000
@@ -14,10 +14,12 @@
 #endif
 
 /*
- * We use the "+m" constraint because the memory operand is both read from
- * and written to. Since the operand is in fact a word array, we also
- * specify "memory" in the clobbers list to indicate that words other than
- * the one directly addressed by the memory operand may be modified.
+ * We specify the memory operand as both input and output because the memory
+ * operand is both read from and written to. Since the operand is in fact a
+ * word array, we also specify "memory" in the clobbers list to indicate that
+ * words other than the one directly addressed by the memory operand may be
+ * modified. We don't use "+m" because the gcc manual says that it should be
+ * used only when the constraint allows the operand to reside in a register.
  */
 
 #define ADDR (*(volatile long *) addr)
@@ -36,8 +38,8 @@ static __inline__ void set_bit(int nr, v
 {
        __asm__ __volatile__( LOCK_PREFIX
                "btsl %1,%0"
-               :"+m" (ADDR)
-               :"dIr" (nr) : "memory");
+               :"=m" (ADDR)
+               :"dIr" (nr), "m" (ADDR) : "memory");
 }
 
 /**
@@ -53,8 +55,8 @@ static __inline__ void __set_bit(int nr,
 {
        __asm__(
                "btsl %1,%0"
-               :"+m" (ADDR)
-               :"dIr" (nr) : "memory");
+               :"=m" (ADDR)
+               :"dIr" (nr), "m" (ADDR) : "memory");
 }
 
 /**
@@ -71,8 +73,8 @@ static __inline__ void clear_bit(int nr,
 {
        __asm__ __volatile__( LOCK_PREFIX
                "btrl %1,%0"
-               :"+m" (ADDR)
-               :"dIr" (nr) : "memory");
+               :"=m" (ADDR)
+               :"dIr" (nr), "m" (ADDR) : "memory");
 }
 
 /**
@@ -88,8 +90,8 @@ static __inline__ void __clear_bit(int n
 {
        __asm__(
                "btrl %1,%0"
-               :"+m" (ADDR)
-               :"dIr" (nr) : "memory");
+               :"=m" (ADDR)
+               :"dIr" (nr), "m" (ADDR) : "memory");
 }
 
 #define smp_mb__before_clear_bit()     barrier()
@@ -108,8 +110,8 @@ static __inline__ void __change_bit(int 
 {
        __asm__ __volatile__(
                "btcl %1,%0"
-               :"+m" (ADDR)
-               :"dIr" (nr) : "memory");
+               :"=m" (ADDR)
+               :"dIr" (nr), "m" (ADDR) : "memory");
 }
 
 /**
@@ -125,8 +127,8 @@ static __inline__ void change_bit(int nr
 {
        __asm__ __volatile__( LOCK_PREFIX
                "btcl %1,%0"
-               :"+m" (ADDR)
-               :"dIr" (nr) : "memory");
+               :"=m" (ADDR)
+               :"dIr" (nr), "m" (ADDR) : "memory");
 }
 
 /**
@@ -143,8 +145,8 @@ static __inline__ int test_and_set_bit(i
 
        __asm__ __volatile__( LOCK_PREFIX
                "btsl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit),"+m" (ADDR)
-               :"dIr" (nr) : "memory");
+               :"=r" (oldbit),"=m" (ADDR)
+               :"dIr" (nr), "m" (ADDR) : "memory");
        return oldbit;
 }
 
@@ -163,8 +165,8 @@ static __inline__ int __test_and_set_bit
 
        __asm__(
                "btsl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit),"+m" (ADDR)
-               :"dIr" (nr) : "memory");
+               :"=r" (oldbit),"=m" (ADDR)
+               :"dIr" (nr), "m" (ADDR) : "memory");
        return oldbit;
 }
 
@@ -182,8 +184,8 @@ static __inline__ int test_and_clear_bit
 
        __asm__ __volatile__( LOCK_PREFIX
                "btrl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit),"+m" (ADDR)
-               :"dIr" (nr) : "memory");
+               :"=r" (oldbit),"=m" (ADDR)
+               :"dIr" (nr), "m" (ADDR) : "memory");
        return oldbit;
 }
 
@@ -202,8 +204,8 @@ static __inline__ int __test_and_clear_b
 
        __asm__(
                "btrl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit),"+m" (ADDR)
-               :"dIr" (nr) : "memory");
+               :"=r" (oldbit),"=m" (ADDR)
+               :"dIr" (nr), "m" (ADDR) : "memory");
        return oldbit;
 }
 
@@ -214,8 +216,8 @@ static __inline__ int __test_and_change_
 
        __asm__ __volatile__(
                "btcl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit),"+m" (ADDR)
-               :"dIr" (nr) : "memory");
+               :"=r" (oldbit),"=m" (ADDR)
+               :"dIr" (nr), "m" (ADDR) : "memory");
        return oldbit;
 }
 
@@ -233,8 +235,8 @@ static __inline__ int test_and_change_bi
 
        __asm__ __volatile__( LOCK_PREFIX
                "btcl %2,%1\n\tsbbl %0,%0"
-               :"=r" (oldbit),"+m" (ADDR)
-               :"dIr" (nr) : "memory");
+               :"=r" (oldbit),"=m" (ADDR)
+               :"dIr" (nr), "m" (ADDR) : "memory");
        return oldbit;
 }
 

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [XEN] Fix 64-bit build., Xen patchbot-unstable <=