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-devel

[Xen-devel] [PATCH 2/3] linux/x86: avoid casting hypercall return value

To: <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH 2/3] linux/x86: avoid casting hypercall return value
From: "Jan Beulich" <jbeulich@xxxxxxxxxx>
Date: Tue, 29 Jan 2008 10:46:39 +0000
Delivery-date: Tue, 29 Jan 2008 02:48:25 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
.., being a little more type correct and producing better code on
64-bits.

As usual, written and tested on 2.6.24 and made apply to the 2.6.18
tree without further testing.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>

Index: head-2008-01-28/include/asm-i386/mach-xen/asm/hypercall.h
===================================================================
--- head-2008-01-28.orig/include/asm-i386/mach-xen/asm/hypercall.h      
2008-01-29 09:53:01.000000000 +0100
+++ head-2008-01-28/include/asm-i386/mach-xen/asm/hypercall.h   2008-01-29 
10:09:17.000000000 +0100
@@ -52,40 +52,43 @@
 
 #define _hypercall0(type, name)                        \
 ({                                             \
-       long __res;                             \
+       type __res;                             \
        asm volatile (                          \
                HYPERCALL_STR(name)             \
                : "=a" (__res)                  \
                :                               \
                : "memory" );                   \
-       (type)__res;                            \
+       __res;                                  \
 })
 
 #define _hypercall1(type, name, a1)                            \
 ({                                                             \
-       long __res, __ign1;                                     \
+       type __res;                                             \
+       long __ign1;                                            \
        asm volatile (                                          \
                HYPERCALL_STR(name)                             \
                : "=a" (__res), "=b" (__ign1)                   \
                : "1" ((long)(a1))                              \
                : "memory" );                                   \
-       (type)__res;                                            \
+       __res;                                                  \
 })
 
 #define _hypercall2(type, name, a1, a2)                                \
 ({                                                             \
-       long __res, __ign1, __ign2;                             \
+       type __res;                                             \
+       long __ign1, __ign2;                                    \
        asm volatile (                                          \
                HYPERCALL_STR(name)                             \
                : "=a" (__res), "=b" (__ign1), "=c" (__ign2)    \
                : "1" ((long)(a1)), "2" ((long)(a2))            \
                : "memory" );                                   \
-       (type)__res;                                            \
+       __res;                                                  \
 })
 
 #define _hypercall3(type, name, a1, a2, a3)                    \
 ({                                                             \
-       long __res, __ign1, __ign2, __ign3;                     \
+       type __res;                                             \
+       long __ign1, __ign2, __ign3;                            \
        asm volatile (                                          \
                HYPERCALL_STR(name)                             \
                : "=a" (__res), "=b" (__ign1), "=c" (__ign2),   \
@@ -93,12 +96,13 @@
                : "1" ((long)(a1)), "2" ((long)(a2)),           \
                "3" ((long)(a3))                                \
                : "memory" );                                   \
-       (type)__res;                                            \
+       __res;                                                  \
 })
 
 #define _hypercall4(type, name, a1, a2, a3, a4)                        \
 ({                                                             \
-       long __res, __ign1, __ign2, __ign3, __ign4;             \
+       type __res;                                             \
+       long __ign1, __ign2, __ign3, __ign4;                    \
        asm volatile (                                          \
                HYPERCALL_STR(name)                             \
                : "=a" (__res), "=b" (__ign1), "=c" (__ign2),   \
@@ -106,12 +110,13 @@
                : "1" ((long)(a1)), "2" ((long)(a2)),           \
                "3" ((long)(a3)), "4" ((long)(a4))              \
                : "memory" );                                   \
-       (type)__res;                                            \
+       __res;                                                  \
 })
 
 #define _hypercall5(type, name, a1, a2, a3, a4, a5)            \
 ({                                                             \
-       long __res, __ign1, __ign2, __ign3, __ign4, __ign5;     \
+       type __res;                                             \
+       long __ign1, __ign2, __ign3, __ign4, __ign5;            \
        asm volatile (                                          \
                HYPERCALL_STR(name)                             \
                : "=a" (__res), "=b" (__ign1), "=c" (__ign2),   \
@@ -120,7 +125,7 @@
                "3" ((long)(a3)), "4" ((long)(a4)),             \
                "5" ((long)(a5))                                \
                : "memory" );                                   \
-       (type)__res;                                            \
+       __res;                                                  \
 })
 
 static inline int __must_check
Index: head-2008-01-28/include/asm-x86_64/mach-xen/asm/hypercall.h
===================================================================
--- head-2008-01-28.orig/include/asm-x86_64/mach-xen/asm/hypercall.h    
2008-01-29 10:03:28.000000000 +0100
+++ head-2008-01-28/include/asm-x86_64/mach-xen/asm/hypercall.h 2008-01-29 
10:15:17.000000000 +0100
@@ -56,40 +56,43 @@
 
 #define _hypercall0(type, name)                        \
 ({                                             \
-       long __res;                             \
+       type __res;                             \
        asm volatile (                          \
                HYPERCALL_STR(name)             \
                : "=a" (__res)                  \
                :                               \
                : "memory" );                   \
-       (type)__res;                            \
+       __res;                                  \
 })
 
 #define _hypercall1(type, name, a1)                            \
 ({                                                             \
-       long __res, __ign1;                                     \
+       type __res;                                             \
+       long __ign1;                                            \
        asm volatile (                                          \
                HYPERCALL_STR(name)                             \
                : "=a" (__res), "=D" (__ign1)                   \
                : "1" ((long)(a1))                              \
                : "memory" );                                   \
-       (type)__res;                                            \
+       __res;                                                  \
 })
 
 #define _hypercall2(type, name, a1, a2)                                \
 ({                                                             \
-       long __res, __ign1, __ign2;                             \
+       type __res;                                             \
+       long __ign1, __ign2;                                    \
        asm volatile (                                          \
                HYPERCALL_STR(name)                             \
                : "=a" (__res), "=D" (__ign1), "=S" (__ign2)    \
                : "1" ((long)(a1)), "2" ((long)(a2))            \
                : "memory" );                                   \
-       (type)__res;                                            \
+       __res;                                                  \
 })
 
 #define _hypercall3(type, name, a1, a2, a3)                    \
 ({                                                             \
-       long __res, __ign1, __ign2, __ign3;                     \
+       type __res;                                             \
+       long __ign1, __ign2, __ign3;                            \
        asm volatile (                                          \
                HYPERCALL_STR(name)                             \
                : "=a" (__res), "=D" (__ign1), "=S" (__ign2),   \
@@ -97,12 +100,13 @@
                : "1" ((long)(a1)), "2" ((long)(a2)),           \
                "3" ((long)(a3))                                \
                : "memory" );                                   \
-       (type)__res;                                            \
+       __res;                                                  \
 })
 
 #define _hypercall4(type, name, a1, a2, a3, a4)                        \
 ({                                                             \
-       long __res, __ign1, __ign2, __ign3;                     \
+       type __res;                                             \
+       long __ign1, __ign2, __ign3;                            \
        register long __arg4 asm("r10") = (long)(a4);           \
        asm volatile (                                          \
                HYPERCALL_STR(name)                             \
@@ -111,12 +115,13 @@
                : "1" ((long)(a1)), "2" ((long)(a2)),           \
                  "3" ((long)(a3))                              \
                : "memory" );                                   \
-       (type)__res;                                            \
+       __res;                                                  \
 })
 
 #define _hypercall5(type, name, a1, a2, a3, a4, a5)            \
 ({                                                             \
-       long __res, __ign1, __ign2, __ign3;                     \
+       type __res;                                             \
+       long __ign1, __ign2, __ign3;                            \
        register long __arg4 asm("r10") = (long)(a4);           \
        register long __arg5 asm("r8") = (long)(a5);            \
        asm volatile (                                          \
@@ -126,7 +131,7 @@
                : "1" ((long)(a1)), "2" ((long)(a2)),           \
                  "3" ((long)(a3))                              \
                : "memory" );                                   \
-       (type)__res;                                            \
+       __res;                                                  \
 })
 
 static inline int __must_check



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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH 2/3] linux/x86: avoid casting hypercall return value, Jan Beulich <=