From 51a12a507f243f569025e04379684e9f4f320fcd Mon Sep 17 00:00:00 2001 From: Bahadir Balban Date: Wed, 18 Nov 2009 10:55:53 +0200 Subject: [PATCH] Error recovery fixes to mm0 and l4_map_helper --- conts/libl4/include/l4lib/arch-arm/syslib.h | 8 +++++++- conts/posix/mm0/mm/init.c | 10 +++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/conts/libl4/include/l4lib/arch-arm/syslib.h b/conts/libl4/include/l4lib/arch-arm/syslib.h index 3ba9270..b8b2245 100644 --- a/conts/libl4/include/l4lib/arch-arm/syslib.h +++ b/conts/libl4/include/l4lib/arch-arm/syslib.h @@ -322,10 +322,16 @@ void *l4_del_virtual(void *virt, int npages); static inline void *l4_map_helper(void *phys, int npages) { struct task_ids ids; + int err; + void *virt = l4_new_virtual(npages); l4_getid(&ids); - l4_map(phys, virt, npages, MAP_USR_RW_FLAGS, ids.tid); + + if ((err = l4_map(phys, virt, npages, + MAP_USR_RW_FLAGS, ids.tid)) < 0) + return PTR_ERR(err); + return virt; } diff --git a/conts/posix/mm0/mm/init.c b/conts/posix/mm0/mm/init.c index bd13c1b..d23044b 100644 --- a/conts/posix/mm0/mm/init.c +++ b/conts/posix/mm0/mm/init.c @@ -271,9 +271,13 @@ void init_physmem_secondary(struct membank *membank) * Use free pages from the bank as * the space for struct page array */ - membank[0].page_array = - l4_map_helper((void *)membank[0].free, - pg_npages); + if (IS_ERR(membank[0].page_array = + l4_map_helper((void *)membank[0].free, + pg_npages))) { + printf("FATAL: Page array mapping failed. err=%d\n", + (int)membank[0].page_array); + BUG(); + } /* Update free memory left */ membank[0].free += pg_npages * PAGE_SIZE;