diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2012-01-15 00:08:14 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2012-01-15 00:08:14 +0000 |
commit | 19c997ffb187fa972ee676f70314969915c35584 (patch) | |
tree | 1fedd675c12139ce0991a5a3ad286a5f769b575e /sys/powerpc/include | |
parent | e19a997d4a9c059fd70e3096ca9be23cf2f7a7c3 (diff) | |
download | FreeBSD-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.h | 4 |
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 |