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] [linux-2.6.18-xen] [IA64] Make some of xen hyperprivops

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [linux-2.6.18-xen] [IA64] Make some of xen hyperprivops transparent
From: "Xen patchbot-linux-2.6.18-xen" <patchbot-linux-2.6.18-xen@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 27 Jul 2007 02:27:09 -0700
Delivery-date: Fri, 27 Jul 2007 02:25:11 -0700
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 Alex Williamson <alex.williamson@xxxxxx>
# Date 1183667819 21600
# Node ID e9426682eb0c31a8a4d25363eb2d180f493d01d5
# Parent  b13d92a565ba38cd2101f4d840190d7d116c82a3
[IA64] Make some of xen hyperprivops transparent

Some of definitions of xen hyperprivops aren't transparent.
This patch fixes them.  While this is done in assembler code
long before, But I chose the easy C version because binary
patching woule eliminate the overhead.

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
---
 include/asm-ia64/xen/privop.h |   75 ++++++++++++++++++++++++++++++++++++------
 1 files changed, 65 insertions(+), 10 deletions(-)

diff -r b13d92a565ba -r e9426682eb0c include/asm-ia64/xen/privop.h
--- a/include/asm-ia64/xen/privop.h     Thu Jul 05 14:33:49 2007 -0600
+++ b/include/asm-ia64/xen/privop.h     Thu Jul 05 14:36:59 2007 -0600
@@ -101,8 +101,24 @@ extern unsigned long xen_thash(unsigned 
 extern unsigned long xen_thash(unsigned long addr);
 #endif
 
-#define ia64_fc(addr)                  xen_fc((unsigned long)(addr))
-#define ia64_thash(addr)               xen_thash((unsigned long)(addr))
+#define ia64_fc(addr)                                                  \
+do {                                                                   \
+       if (is_running_on_xen())                                        \
+               xen_fc((unsigned long)(addr));                          \
+       else                                                            \
+               __ia64_fc(addr);                                        \
+} while (0)
+
+#define ia64_thash(addr)                                               \
+({                                                                     \
+       unsigned long ia64_intri_res;                                   \
+       if (is_running_on_xen())                                        \
+               ia64_intri_res =                                        \
+                       xen_thash((unsigned long)(addr));               \
+       else                                                            \
+               ia64_intri_res = __ia64_thash(addr);                    \
+       ia64_intri_res;                                                 \
+})
 
 /* Note that "ttag" and "cover" are also privilege-sensitive; "ttag"
  * is not currently used (though it may be in a long-format VHPT system!)
@@ -138,9 +154,25 @@ extern unsigned long xen_get_pmd(int ind
 extern unsigned long xen_get_pmd(int index);
 #endif
 
-#define        ia64_get_cpuid(i)               xen_get_cpuid(i)
-#define        ia64_get_pmd(i)                 xen_get_pmd(i)
-
+#define ia64_get_cpuid(i)                                              \
+({                                                                     \
+       unsigned long ia64_intri_res;                                   \
+       if (is_running_on_xen())                                        \
+               ia64_intri_res = xen_get_cpuid(i);                      \
+       else                                                            \
+               ia64_intri_res = __ia64_get_cpuid(i);                   \
+       ia64_intri_res;                                                 \
+})
+
+#define ia64_get_pmd(i)                                                \
+({                                                                     \
+       unsigned long ia64_intri_res;                                   \
+       if (is_running_on_xen())                                        \
+               ia64_intri_res = xen_get_pmd(i);                        \
+       else                                                            \
+               ia64_intri_res = __ia64_get_pmd(i);                     \
+       ia64_intri_res;                                                 \
+})
 
 #ifdef ASM_SUPPORTED
 static inline unsigned long
@@ -424,14 +456,37 @@ xen_set_kr(unsigned long index, unsigned
        }                                                               \
 })
 
+#define ia64_ptcga(addr, size)                                         \
+do {                                                                   \
+       if (is_running_on_xen())                                        \
+               xen_ptcga((addr), (size));                              \
+       else                                                            \
+               __ia64_ptcga((addr), (size));                           \
+} while (0)
+
+#define ia64_set_rr(index, val)                                                
\
+do {                                                                   \
+       if (is_running_on_xen())                                        \
+               xen_set_rr((index), (val));                             \
+       else                                                            \
+               __ia64_set_rr((index), (val));                          \
+} while (0)
+
+#define ia64_get_rr(index)                                             \
+({                                                                     \
+       __u64 ia64_intri_res;                                           \
+       if (is_running_on_xen())                                        \
+               ia64_intri_res = xen_get_rr((index));                   \
+       else                                                            \
+               ia64_intri_res = __ia64_get_rr((index));                \
+       ia64_intri_res;                                                 \
+})
+
+#define ia64_getreg                    xen_ia64_getreg
+#define ia64_setreg                    xen_ia64_setreg
 #define ia64_ssm                       xen_ia64_ssm
 #define ia64_rsm                       xen_ia64_rsm
 #define ia64_intrin_local_irq_restore  xen_ia64_intrin_local_irq_restore
-#define        ia64_ptcga                      xen_ptcga
-#define        ia64_set_rr(index,val)          xen_set_rr(index,val)
-#define        ia64_get_rr(index)              xen_get_rr(index)
-#define ia64_getreg                    xen_ia64_getreg
-#define ia64_setreg                    xen_ia64_setreg
 #define        ia64_get_psr_i                  xen_get_psr_i
 
 /* the remainder of these are not performance-sensitive so its

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [linux-2.6.18-xen] [IA64] Make some of xen hyperprivops transparent, Xen patchbot-linux-2.6.18-xen <=