tlk: 6/19 update
[3rdparty/ote_partner/tlk.git] / arch / arm / arm / task.c
index a6cb5a3..1aec32b 100644 (file)
@@ -197,6 +197,7 @@ task_map_t *arch_task_setup_mmio(task_t *task, u_int id, addr_t paddr, u_int siz
        mptr->offset = (paddr & PAGE_MASK);
 
        mptr->id = id;
+       mptr->map_attrs = NULL;
 
        task_add_mapping(task, mptr);
 
@@ -209,9 +210,16 @@ void arch_task_unmap_memory(task_t *task, task_map_t *mptr)
        if ((mptr->flags & TM_PHYS_CONTIG) == 0)
                free(mptr->u_phys.pagelist);
 
-       arch_task_unmap(task, mptr);
+       /* If the task pages are not yet mapped (e.g. error while loading a task)
+        * the page table does not yet exist.
+        */
+       if (task->page_table) {
+               arch_task_unmap(task, mptr);
+               ASSERT(mptr->map_attrs);
+       }
        task_delete_mapping(task, mptr);
-       free(mptr->map_attrs);
+       if (mptr->map_attrs)
+               free(mptr->map_attrs);
        free(mptr);
 }