summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/include
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2012-01-15 00:08:14 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2012-01-15 00:08:14 +0000
commit19c997ffb187fa972ee676f70314969915c35584 (patch)
tree1fedd675c12139ce0991a5a3ad286a5f769b575e /sys/powerpc/include
parente19a997d4a9c059fd70e3096ca9be23cf2f7a7c3 (diff)
downloadFreeBSD-src-19c997ffb187fa972ee676f70314969915c35584.zip
FreeBSD-src-19c997ffb187fa972ee676f70314969915c35584.tar.gz
Rework SLB trap handling so that double-faults into an SLB trap handler are
possible, and double faults within an SLB trap handler are not. The result is that it possible to take an SLB fault at any time, on any address, for any reason, at any point in the kernel. This lets us do two important things. First, it removes the (soft) 16 GB RAM ceiling on PPC64 as well as any architectural limitations on KVA space. Second, it lets the kernel tolerate poorly designed hypervisors that have a tendency to fail to restore the SLB properly after a hypervisor context switch. MFC after: 6 weeks
Diffstat (limited to 'sys/powerpc/include')
-rw-r--r--sys/powerpc/include/pcpu.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/powerpc/include/pcpu.h b/sys/powerpc/include/pcpu.h
index 2dac1b4..62094f8 100644
--- a/sys/powerpc/include/pcpu.h
+++ b/sys/powerpc/include/pcpu.h
@@ -55,7 +55,9 @@ struct pmap;
#define PCPU_MD_AIM64_FIELDS \
struct slb pc_slb[64]; \
- struct slb **pc_userslb;
+ struct slb **pc_userslb; \
+ register_t pc_slbsave[18]; \
+ uint8_t pc_slbstack[1024];
#ifdef __powerpc64__
#define PCPU_MD_AIM_FIELDS PCPU_MD_AIM64_FIELDS
OpenPOWER on IntegriCloud