Use explicit page pool in page table manipulation.
Change-Id: Ibc3c21f815dfae54a541581941e553f79caaaace
diff --git a/src/load.c b/src/load.c
index 1a894d7..3334726 100644
--- a/src/load.c
+++ b/src/load.c
@@ -38,12 +38,13 @@
* disabled. When switching to the partitions, the caching is initially disabled
* so the data must be available without the cache.
*/
-static bool copy_to_unmapped(paddr_t to, const void *from, size_t size)
+static bool copy_to_unmapped(paddr_t to, const void *from, size_t size,
+ struct mpool *ppool)
{
paddr_t to_end = pa_add(to, size);
void *ptr;
- ptr = mm_identity_map(to, to_end, MM_MODE_W);
+ ptr = mm_identity_map(to, to_end, MM_MODE_W, ppool);
if (!ptr) {
return false;
}
@@ -51,7 +52,7 @@
memcpy(ptr, from, size);
arch_mm_write_back_dcache(ptr, size);
- mm_unmap(to, to_end, 0);
+ mm_unmap(to, to_end, 0, ppool);
return true;
}
@@ -106,7 +107,7 @@
* Loads the primary VM.
*/
bool load_primary(const struct memiter *cpio, uintreg_t kernel_arg,
- struct memiter *initrd)
+ struct memiter *initrd, struct mpool *ppool)
{
struct memiter it;
paddr_t primary_begin = layout_primary_begin();
@@ -117,7 +118,8 @@
}
dlog("Copying primary to %p\n", pa_addr(primary_begin));
- if (!copy_to_unmapped(primary_begin, it.next, it.limit - it.next)) {
+ if (!copy_to_unmapped(primary_begin, it.next, it.limit - it.next,
+ ppool)) {
dlog("Unable to relocate kernel for primary vm.\n");
return false;
}
@@ -130,7 +132,7 @@
{
struct vm *vm;
- if (!vm_init(MAX_CPUS, &vm)) {
+ if (!vm_init(MAX_CPUS, ppool, &vm)) {
dlog("Unable to initialise primary vm\n");
return false;
}
@@ -147,13 +149,13 @@
pa_init(UINT64_C(1024) * 1024 * 1024 * 1024),
MM_MODE_R | MM_MODE_W | MM_MODE_X |
MM_MODE_NOINVALIDATE,
- NULL)) {
+ NULL, ppool)) {
dlog("Unable to initialise memory for primary vm\n");
return false;
}
- if (!mm_vm_unmap_hypervisor(&vm->ptable,
- MM_MODE_NOINVALIDATE)) {
+ if (!mm_vm_unmap_hypervisor(&vm->ptable, MM_MODE_NOINVALIDATE,
+ ppool)) {
dlog("Unable to unmap hypervisor from primary vm\n");
return false;
}
@@ -244,7 +246,7 @@
*/
bool load_secondary(const struct memiter *cpio,
const struct boot_params *params,
- struct boot_params_update *update)
+ struct boot_params_update *update, struct mpool *ppool)
{
struct vm *primary;
struct memiter it;
@@ -313,12 +315,12 @@
}
if (!copy_to_unmapped(secondary_mem_begin, kernel.next,
- kernel.limit - kernel.next)) {
+ kernel.limit - kernel.next, ppool)) {
dlog("Unable to copy kernel\n");
continue;
}
- if (!vm_init(cpu, &vm)) {
+ if (!vm_init(cpu, ppool, &vm)) {
dlog("Unable to initialise VM\n");
continue;
}
@@ -329,21 +331,22 @@
pa_add(pa_init(PL011_BASE), PAGE_SIZE),
MM_MODE_R | MM_MODE_W | MM_MODE_D |
MM_MODE_NOINVALIDATE,
- NULL);
+ NULL, ppool);
/* Grant the VM access to the memory. */
if (!mm_vm_identity_map(&vm->ptable, secondary_mem_begin,
secondary_mem_end,
MM_MODE_R | MM_MODE_W | MM_MODE_X |
MM_MODE_NOINVALIDATE,
- &secondary_entry)) {
+ &secondary_entry, ppool)) {
dlog("Unable to initialise memory\n");
continue;
}
/* Deny the primary VM access to this memory. */
if (!mm_vm_unmap(&primary->ptable, secondary_mem_begin,
- secondary_mem_end, MM_MODE_NOINVALIDATE)) {
+ secondary_mem_end, MM_MODE_NOINVALIDATE,
+ ppool)) {
dlog("Unable to unmap secondary VM from primary VM\n");
return false;
}