From ba1eaa12dc7bac51231e2185ed09fdac248468fe Mon Sep 17 00:00:00 2001 From: Sparchatus Date: Thu, 24 Mar 2022 08:05:03 +0000 Subject: [PATCH] Added test for paging_unmap --- lib/grading/test_paging.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/lib/grading/test_paging.c b/lib/grading/test_paging.c index 3261988..20fa9df 100644 --- a/lib/grading/test_paging.c +++ b/lib/grading/test_paging.c @@ -136,13 +136,43 @@ static errval_t test_paging_map_frame(struct paging_state *paging_state) { if(*((uint8_t *)retaddr + (rand() % mapping_size)) != val) { return ERR_INVALID_ARGS; } - - vaddr += LARGE_PAGE_SIZE; } return SYS_ERR_OK; } +static errval_t test_paging_unmap(struct paging_state *paging_state) { + errval_t err; + + void *retaddr; + struct capref frame; + err = frame_alloc(&frame, BASE_PAGE_SIZE, NULL); + if (err_is_fail(err)) { + return err_push(err, LIB_ERR_FRAME_ALLOC); + } + err = paging_map_frame_attr(paging_state, &retaddr, BASE_PAGE_SIZE, frame, VREGION_FLAGS_READ_WRITE); + if (err_is_fail(err)) { + return err_push(err, LIB_ERR_PMAP_NOT_MAPPED); + } + err = paging_unmap(paging_state, retaddr); + if (err_is_fail(err)) { + return err_push(err, LIB_ERR_PMAP_UNMAP); + } + + // check that it was unmapped + // *(uint8_t *) retaddr = 1; + + err = paging_map_fixed_attr(paging_state, (lvaddr_t) retaddr, frame, BASE_PAGE_SIZE, VREGION_FLAGS_READ_WRITE); + if (err_is_fail(err)) { + return err_push(err, LIB_ERR_PMAP_NOT_MAPPED); + } + + *(uint8_t *) retaddr = 1; + assert(*(uint8_t *)retaddr == 1); + + return SYS_ERR_OK; +} + static errval_t test_paging_foreign(struct paging_state *ignored) { errval_t err; @@ -191,6 +221,7 @@ void do_test_paging(void) { test_paging_run(test_paging_full_l2, "test_paging_full_l2", get_current_paging_state()); test_paging_run(test_paging_big_regions, "test_paging_big_regions", get_current_paging_state()); test_paging_run(test_paging_map_frame, "test_paging_map_frame", get_current_paging_state()); + test_paging_run(test_paging_unmap, "test_paging_unmap", get_current_paging_state()); test_paging_run(test_paging_foreign, "test_paging_foreign", NULL); // Test paging