diff options
author | jhibbits <jhibbits@FreeBSD.org> | 2015-11-21 06:03:46 +0000 |
---|---|---|
committer | jhibbits <jhibbits@FreeBSD.org> | 2015-11-21 06:03:46 +0000 |
commit | c5f1bced2235ce9258be40f613bd19e7c66500fc (patch) | |
tree | 1fb74543e08ec0017394fa3ccbe533748bf4c282 /sys/powerpc/booke | |
parent | c4d318f006ab7a786ecffa936c0b7388f6e08a39 (diff) | |
download | FreeBSD-src-c5f1bced2235ce9258be40f613bd19e7c66500fc.zip FreeBSD-src-c5f1bced2235ce9258be40f613bd19e7c66500fc.tar.gz |
trunc_page() goes through unsigned long, which is too short.
sizeof(unsigned long) < sizeof(vm_paddr_t) on Book-E, which uses 36-bit
addressing. With this, a CCSR with a physical address above 4GB successfully
maps.
Sponsored by: Alex Perez/Inertial Computing
Diffstat (limited to 'sys/powerpc/booke')
-rw-r--r-- | sys/powerpc/booke/pmap.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/powerpc/booke/pmap.c b/sys/powerpc/booke/pmap.c index 645d606..2539c33e 100644 --- a/sys/powerpc/booke/pmap.c +++ b/sys/powerpc/booke/pmap.c @@ -3298,7 +3298,7 @@ pmap_early_io_map(vm_paddr_t pa, vm_size_t size) return (tlb1[i].virt + (pa - tlb1[i].phys)); } - pa_base = trunc_page(pa); + pa_base = rounddown(pa, PAGE_SIZE); size = roundup(size + (pa - pa_base), PAGE_SIZE); tlb1_map_base = roundup2(tlb1_map_base, 1 << (ilog2(size) & ~1)); va = tlb1_map_base + (pa - pa_base); |