hw: enable mappings beyond 4G on x86_64

Fix #2498
This commit is contained in:
Stefan Kalkowski 2017-08-18 13:44:35 +02:00 committed by Christian Helmuth
parent 264e64d3ec
commit b8cd58e6a5
1 changed files with 3 additions and 2 deletions

View File

@ -515,6 +515,7 @@ class Hw::Pml4_table
static constexpr size_t PAGE_SIZE_LOG2 = SIZE_LOG2_512GB;
static constexpr size_t SIZE_LOG2 = SIZE_LOG2_256TB;
static constexpr size_t SIZE_MASK = (1UL << SIZE_LOG2) - 1;
static constexpr size_t MAX_ENTRIES = 512;
static constexpr size_t PAGE_SIZE = 1UL << PAGE_SIZE_LOG2;
static constexpr size_t PAGE_MASK = ~((1UL << PAGE_SIZE_LOG2) - 1);
@ -593,8 +594,8 @@ class Hw::Pml4_table
template <typename FUNC>
void _range_op(addr_t vo, addr_t pa, size_t size, FUNC &&func)
{
for (size_t i = vo >> PAGE_SIZE_LOG2; size > 0;
i = vo >> PAGE_SIZE_LOG2) {
for (size_t i = (vo & SIZE_MASK) >> PAGE_SIZE_LOG2; size > 0;
i = (vo & SIZE_MASK) >> PAGE_SIZE_LOG2) {
assert (i < MAX_ENTRIES);
addr_t end = (vo + PAGE_SIZE) & PAGE_MASK;
size_t sz = Genode::min(size, end-vo);