sel4utils: Deferred rights reservation creation Updated sel4utils to support the new vspace interface function: 'vspace_reserve_deferred_rights_range_at_fn'. This enables the user to create vspace reservations without passing the rights of the memory region. The rights being deferred to the mapping invocation.
diff --git a/libsel4utils/include/sel4utils/vspace.h b/libsel4utils/include/sel4utils/vspace.h index 17d589d..5a5fa86 100644 --- a/libsel4utils/include/sel4utils/vspace.h +++ b/libsel4utils/include/sel4utils/vspace.h
@@ -65,6 +65,7 @@ seL4_CapRights_t rights; int cacheable; int malloced; + bool rights_deferred; struct sel4utils_res *next; };
diff --git a/libsel4utils/include/sel4utils/vspace_internal.h b/libsel4utils/include/sel4utils/vspace_internal.h index 55f545d..f1a391b 100644 --- a/libsel4utils/include/sel4utils/vspace_internal.h +++ b/libsel4utils/include/sel4utils/vspace_internal.h
@@ -445,6 +445,8 @@ int cacheable, void **vaddr); reservation_t sel4utils_reserve_range_at(vspace_t *vspace, void *vaddr, size_t size, seL4_CapRights_t rights, int cacheable); +reservation_t sel4utils_reserve_deferred_rights_range_at(vspace_t *vspace, void *vaddr, + size_t size, int cacheable); void sel4utils_free_reservation(vspace_t *vspace, reservation_t reservation); void sel4utils_free_reservation_by_vaddr(vspace_t *vspace, void *vaddr); void sel4utils_tear_down(vspace_t *vspace, vka_t *vka);
diff --git a/libsel4utils/src/vspace/bootstrap.c b/libsel4utils/src/vspace/bootstrap.c index 655fdf2..ad06562 100644 --- a/libsel4utils/src/vspace/bootstrap.c +++ b/libsel4utils/src/vspace/bootstrap.c
@@ -75,6 +75,7 @@ vspace->reserve_range_aligned = sel4utils_reserve_range_aligned; vspace->reserve_range_at = sel4utils_reserve_range_at; + vspace->reserve_deferred_rights_range_at = sel4utils_reserve_deferred_rights_range_at; vspace->free_reservation = sel4utils_free_reservation; vspace->free_reservation_by_vaddr = sel4utils_free_reservation_by_vaddr;
diff --git a/libsel4utils/src/vspace/vspace.c b/libsel4utils/src/vspace/vspace.c index 032cfb8..01254d0 100644 --- a/libsel4utils/src/vspace/vspace.c +++ b/libsel4utils/src/vspace/vspace.c
@@ -597,6 +597,15 @@ return reservation; } +reservation_t sel4utils_reserve_deferred_rights_range_at(vspace_t *vspace, void *vaddr, size_t size, int cacheable) +{ + reservation_t reservation = sel4utils_reserve_range_at(vspace, vaddr, size, seL4_NoRights, cacheable); + if (reservation.res != NULL) { + ((sel4utils_res_t *)reservation.res)->rights_deferred = true; + } + return reservation; +} + void sel4utils_free_reservation(vspace_t *vspace, reservation_t reservation) { sel4utils_alloc_data_t *data = get_alloc_data(vspace);