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);