aboutsummaryrefslogtreecommitdiff
path: root/arch/ia64/include/asm/paravirt_privop.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-11-20 15:07:40 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2008-11-20 15:07:40 -0800
commit906430a99ec8ca48f264e835a264df89fc50dfd4 (patch)
tree58ed30debffc01a06df2a6a617daa6d33683441b /arch/ia64/include/asm/paravirt_privop.h
parentba721d318b24154eb7806a8673d3fc030fd39f7e (diff)
parent0090d481ee4c5d9a54ae2c457ab3ef9111dd4a91 (diff)
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6: [IA64] xen: fix xen_get_eflags. [IA64] ia64/pv_ops/pv_cpu_ops: fix _IA64_REG_IP case. [IA64] remove duplicate include iommu.h [IA64] use mprintk instead of printk, in ia64_mca_modify_original_stack [IA64] Rationalize kernel mode alignment checking
Diffstat (limited to 'arch/ia64/include/asm/paravirt_privop.h')
-rw-r--r--arch/ia64/include/asm/paravirt_privop.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/ia64/include/asm/paravirt_privop.h b/arch/ia64/include/asm/paravirt_privop.h
index d577aac1183..0b597424fcf 100644
--- a/arch/ia64/include/asm/paravirt_privop.h
+++ b/arch/ia64/include/asm/paravirt_privop.h
@@ -78,6 +78,19 @@ extern unsigned long ia64_native_getreg_func(int regnum);
ia64_native_rsm(mask); \
} while (0)
+/* returned ip value should be the one in the caller,
+ * not in __paravirt_getreg() */
+#define paravirt_getreg(reg) \
+ ({ \
+ unsigned long res; \
+ BUILD_BUG_ON(!__builtin_constant_p(reg)); \
+ if ((reg) == _IA64_REG_IP) \
+ res = ia64_native_getreg(_IA64_REG_IP); \
+ else \
+ res = pv_cpu_ops.getreg(reg); \
+ res; \
+ })
+
/******************************************************************************
* replacement of hand written assembly codes.
*/