summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/include/asm/hvcall.h
diff options
context:
space:
mode:
authorIan Munsie <imunsie@au1.ibm.com>2012-12-03 19:36:13 +0100
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2013-01-10 07:00:42 +0100
commita413f474a0ff29404bf1af5c024215476ed6ca01 (patch)
treed147d35ef9f846167738e5a9ca2964353634330a /arch/powerpc/include/asm/hvcall.h
parentpowerpc/kexec: Add kexec "hold" support for Book3e processors (diff)
downloadlinux-a413f474a0ff29404bf1af5c024215476ed6ca01.tar.xz
linux-a413f474a0ff29404bf1af5c024215476ed6ca01.zip
powerpc: Disable relocation on exceptions whenever PR KVM is active
For PR KVM we allow userspace to map 0xc000000000000000. Because transitioning from userspace to the guest kernel may use the relocated exception vectors we have to disable relocation on exceptions whenever PR KVM is active as we cannot trust that address. This issue does not apply to HV KVM, since changing from a guest to the hypervisor will never use the relocated exception vectors. Currently the hypervisor interface only allows us to toggle relocation on exceptions on a partition wide scope, so we need to globally disable relocation on exceptions when the first PR KVM instance is started and only re-enable them when all PR KVM instances have been destroyed. It's a bit heavy handed, but until the hypervisor gives us a lightweight way to toggle relocation on exceptions on a single thread it's only real option. Signed-off-by: Ian Munsie <imunsie@au1.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/include/asm/hvcall.h')
-rw-r--r--arch/powerpc/include/asm/hvcall.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h
index 0975e5c0bb19..4bc2c3dad6ad 100644
--- a/arch/powerpc/include/asm/hvcall.h
+++ b/arch/powerpc/include/asm/hvcall.h
@@ -395,6 +395,15 @@ static inline unsigned long cmo_get_page_size(void)
{
return CMO_PageSize;
}
+
+extern long pSeries_enable_reloc_on_exc(void);
+extern long pSeries_disable_reloc_on_exc(void);
+
+#else
+
+#define pSeries_enable_reloc_on_exc() do {} while (0)
+#define pSeries_disable_reloc_on_exc() do {} while (0)
+
#endif /* CONFIG_PPC_PSERIES */
#endif /* __ASSEMBLY__ */