diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-09-27 13:58:00 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-09-27 13:58:00 +0200 |
commit | dad00a77da3ebfd0f6fa725dbbc98469984b2341 (patch) | |
tree | 723188261324e1621c37fde0ec25ebad6adae216 /sys/src/9/pc/mtrr.c | |
parent | b8d4c6ff17bbfdf6619454bbdbd65612a6d7defb (diff) |
kernel: get rid of 36 bit Paerange mask in mtrr (supporting machines with more than 64GB of memory)
Diffstat (limited to 'sys/src/9/pc/mtrr.c')
-rw-r--r-- | sys/src/9/pc/mtrr.c | 17 |
1 files changed, 0 insertions, 17 deletions
diff --git a/sys/src/9/pc/mtrr.c b/sys/src/9/pc/mtrr.c index c4ce1b176..3c41cd275 100644 --- a/sys/src/9/pc/mtrr.c +++ b/sys/src/9/pc/mtrr.c @@ -34,8 +34,6 @@ enum { Extl2, Extapm, Extaddrsz, - - Paerange = 1LL << 36, }; enum { @@ -116,18 +114,9 @@ physmask(void) cpuid(Extaddrsz, regs); mask = (1LL << (regs[0] & 0xFF)) - 1; /* ax */ } - mask &= Paerange - 1; /* x86 sanity */ return mask; } -/* limit physical addresses to 36 bits on the x86 */ -static void -sanity(Mtrreg *mtrr) -{ - mtrr->base &= Paerange - 1; - mtrr->mask &= Paerange - 1; -} - static int ispow2(uvlong ul) { @@ -138,7 +127,6 @@ ispow2(uvlong ul) static int mtrrdec(Mtrreg *mtrr, uvlong *ptr, uvlong *size, int *type) { - sanity(mtrr); *ptr = mtrr->base & ~(BY2PG-1); *type = mtrr->base & 0xff; *size = (physmask() ^ (mtrr->mask & ~(BY2PG-1))) + 1; @@ -150,7 +138,6 @@ mtrrenc(Mtrreg *mtrr, uvlong ptr, uvlong size, int type, int ok) { mtrr->base = ptr | (type & 0xff); mtrr->mask = (physmask() & ~(size - 1)) | (ok? 1<<11: 0); - sanity(mtrr); } /* @@ -162,13 +149,11 @@ mtrrget(Mtrreg *mtrr, uint i) { rdmsr(MTRRPhysBase0 + 2*i, &mtrr->base); rdmsr(MTRRPhysMask0 + 2*i, &mtrr->mask); - sanity(mtrr); } static void mtrrput(Mtrreg *mtrr, uint i) { - sanity(mtrr); wrmsr(MTRRPhysBase0 + 2*i, mtrr->base); wrmsr(MTRRPhysMask0 + 2*i, mtrr->mask); } @@ -275,8 +260,6 @@ mtrr0(uvlong base, uvlong size, char *tstr) return "mtrrs not supported"; if(base & (BY2PG-1) || size & (BY2PG-1) || size == 0) return "mtrr base or size not 4k aligned or zero size"; - if(base + size >= Paerange) - return "mtrr range exceeds 36 bits"; if(!ispow2(size)) return "mtrr size not power of 2"; if(base & (size - 1)) |