diff --git a/libsel4simple/include/simple/simple.h b/libsel4simple/include/simple/simple.h
index b7f65be..11ed8a0 100644
--- a/libsel4simple/include/simple/simple.h
+++ b/libsel4simple/include/simple/simple.h
@@ -37,7 +37,7 @@
  *
  * @param The path to where to put this cap
  */
-typedef seL4_Error (*simple_get_frame_cap_fn)(void *data, void *paddr, int size_bits, cspacepath_t *path);
+typedef seL4_Error(*simple_get_frame_cap_fn)(void *data, void *paddr, int size_bits, cspacepath_t *path);
 
 /**
  * Request mapped address to a region of physical memory.
@@ -80,7 +80,7 @@
  *
  * @param vspace to assign
 */
-typedef seL4_Error (*simple_ASIDPool_assign_fn)(void *data, seL4_CPtr vspace);
+typedef seL4_Error(*simple_ASIDPool_assign_fn)(void *data, seL4_CPtr vspace);
 
 /**
  * Get the total number of caps this library can address
@@ -101,7 +101,7 @@
  *
  * @param the nth starting at 0
 */
-typedef seL4_CPtr (*simple_get_nth_cap_fn)(void *data, int n);
+typedef seL4_CPtr(*simple_get_nth_cap_fn)(void *data, int n);
 
 /**
  * Get the cap to init caps with numbering based on bootinfo.h
@@ -111,7 +111,7 @@
  * @param the value of the enum matching in bootinfo.h
 */
 
-typedef seL4_CPtr (*simple_get_init_cap_fn)(void *data, seL4_CPtr cap);
+typedef seL4_CPtr(*simple_get_init_cap_fn)(void *data, seL4_CPtr cap);
 
 /**
  * Get the size of the threads cnode in bits
@@ -119,7 +119,7 @@
  * @param data for the underlying implementation
 */
 
-typedef uint8_t  (*simple_get_cnode_size_fn)(void *data);
+typedef uint8_t (*simple_get_cnode_size_fn)(void *data);
 
 /**
  * Get the amount of untyped caps available
@@ -141,7 +141,7 @@
  * @param the physical address of the returned cap
 */
 
-typedef seL4_CPtr (*simple_get_nth_untyped_fn)(void *data, int n, size_t *size_bits, uintptr_t *paddr, bool *device);
+typedef seL4_CPtr(*simple_get_nth_untyped_fn)(void *data, int n, size_t *size_bits, uintptr_t *paddr, bool *device);
 
 /**
  * Get the amount of user image caps available
@@ -161,7 +161,7 @@
  *
 */
 
-typedef seL4_CPtr (*simple_get_nth_userimage_fn)(void *data, int n);
+typedef seL4_CPtr(*simple_get_nth_userimage_fn)(void *data, int n);
 
 /**
  * Get number of available cores
@@ -182,14 +182,14 @@
  * @param path Path to where to put this cap
  *
 */
-typedef seL4_Error (*simple_get_iospace_fn)(void *data, uint16_t domainID, uint16_t deviceID, cspacepath_t *path);
+typedef seL4_Error(*simple_get_iospace_fn)(void *data, uint16_t domainID, uint16_t deviceID, cspacepath_t *path);
 #endif
 
 /*
  * Get the sched ctrl for the requested core (0 for uniprocessor).
  * @return seL4_CapNull if CONFIG_RT is disabled
  */
-typedef seL4_CPtr (*simple_get_sched_ctrl_fn)(void *data, int core);
+typedef seL4_CPtr(*simple_get_sched_ctrl_fn)(void *data, int core);
 
 /**
  *
@@ -245,8 +245,8 @@
     arch_simple_t arch_simple;
 } simple_t;
 
-static inline void *
-simple_get_frame_info(simple_t *simple, void *paddr, int size_bits, seL4_CPtr *frame_cap, seL4_Word *ut_offset)
+static inline void *simple_get_frame_info(simple_t *simple, void *paddr, int size_bits, seL4_CPtr *frame_cap,
+                                          seL4_Word *ut_offset)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -260,8 +260,7 @@
     return simple->frame_info(simple->data, paddr, size_bits, frame_cap, ut_offset);
 }
 
-static inline seL4_Error
-simple_get_frame_cap(simple_t *simple, void *paddr, int size_bits, cspacepath_t *path)
+static inline seL4_Error simple_get_frame_cap(simple_t *simple, void *paddr, int size_bits, cspacepath_t *path)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -274,8 +273,7 @@
     return simple->frame_cap(simple->data, paddr, size_bits, path);
 }
 
-static inline void *
-simple_get_frame_vaddr(simple_t *simple, void *paddr, int size_bits)
+static inline void *simple_get_frame_vaddr(simple_t *simple, void *paddr, int size_bits)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -303,8 +301,7 @@
     return simple->arch_simple.irq(simple->data, irq, path.root, path.capPtr, path.capDepth);
 }
 
-static inline seL4_Error
-simple_get_IRQ_handler(simple_t *simple, int irq, cspacepath_t path)
+static inline seL4_Error simple_get_IRQ_handler(simple_t *simple, int irq, cspacepath_t path)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -317,8 +314,7 @@
     return simple->arch_simple.irq(simple->data, irq, path.root, path.capPtr, path.capDepth);
 }
 
-static inline seL4_Error
-simple_ASIDPool_assign(simple_t *simple, seL4_CPtr vspace)
+static inline seL4_Error simple_ASIDPool_assign(simple_t *simple, seL4_CPtr vspace)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -333,7 +329,8 @@
 }
 
 static inline
-seL4_Error simple_get_IOPort_cap(simple_t *simple, uint16_t start_port, uint16_t end_port, seL4_Word root, seL4_Word dest, seL4_Word depth)
+seL4_Error simple_get_IOPort_cap(simple_t *simple, uint16_t start_port, uint16_t end_port, seL4_Word root,
+                                 seL4_Word dest, seL4_Word depth)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -343,8 +340,7 @@
     return arch_simple_get_IOPort_cap(&simple->arch_simple, start_port, end_port, root, dest, depth);
 }
 
-static inline int
-simple_get_cap_count(simple_t *simple)
+static inline int simple_get_cap_count(simple_t *simple)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -356,8 +352,7 @@
     return simple->cap_count(simple->data);
 }
 
-static inline seL4_CPtr
-simple_get_nth_cap(simple_t *simple, int n)
+static inline seL4_CPtr simple_get_nth_cap(simple_t *simple, int n)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -372,8 +367,7 @@
     return simple->nth_cap(simple->data, n);
 }
 
-static inline int
-simple_get_cnode_size_bits(simple_t *simple)
+static inline int simple_get_cnode_size_bits(simple_t *simple)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -387,8 +381,7 @@
     return simple->cnode_size(simple->data);
 }
 
-static inline seL4_CPtr
-simple_init_cap(simple_t *simple, seL4_CPtr cap)
+static inline seL4_CPtr simple_init_cap(simple_t *simple, seL4_CPtr cap)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -403,20 +396,17 @@
     return simple->init_cap(simple->data, cap);
 }
 
-static inline seL4_CPtr
-simple_get_cnode(simple_t *simple)
+static inline seL4_CPtr simple_get_cnode(simple_t *simple)
 {
     return simple_init_cap(simple, seL4_CapInitThreadCNode);
 }
 
-static inline seL4_CPtr
-simple_get_tcb(simple_t *simple)
+static inline seL4_CPtr simple_get_tcb(simple_t *simple)
 {
     return simple_init_cap(simple, seL4_CapInitThreadTCB);
 }
 
-static inline seL4_CPtr
-simple_get_sc(UNUSED simple_t *simple)
+static inline seL4_CPtr simple_get_sc(UNUSED simple_t *simple)
 {
 #ifdef CONFIG_KERNEL_MCS
     return simple_init_cap(simple, seL4_CapInitThreadSC);
@@ -425,26 +415,22 @@
 #endif
 }
 
-static inline seL4_CPtr
-simple_get_pd(simple_t *simple)
+static inline seL4_CPtr simple_get_pd(simple_t *simple)
 {
     return simple_init_cap(simple, seL4_CapInitThreadPD);
 }
 
-static inline seL4_CPtr
-simple_get_irq_ctrl(simple_t *simple)
+static inline seL4_CPtr simple_get_irq_ctrl(simple_t *simple)
 {
     return simple_init_cap(simple, seL4_CapIRQControl);
 }
 
-static inline seL4_CPtr
-simple_get_init_cap(simple_t *simple, seL4_CPtr cap)
+static inline seL4_CPtr simple_get_init_cap(simple_t *simple, seL4_CPtr cap)
 {
     return simple_init_cap(simple, cap);
 }
 
-static inline int
-simple_get_untyped_count(simple_t *simple)
+static inline int simple_get_untyped_count(simple_t *simple)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -458,8 +444,8 @@
     return simple->untyped_count(simple->data);
 }
 
-static inline seL4_CPtr
-simple_get_nth_untyped(simple_t *simple, int n, size_t *size_bits, uintptr_t *paddr, bool *device)
+static inline seL4_CPtr simple_get_nth_untyped(simple_t *simple, int n, size_t *size_bits, uintptr_t *paddr,
+                                               bool *device)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -473,8 +459,7 @@
     return simple->nth_untyped(simple->data, n, size_bits, paddr, device);
 }
 
-static inline int
-simple_get_userimage_count(simple_t *simple)
+static inline int simple_get_userimage_count(simple_t *simple)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -488,8 +473,7 @@
     return simple->userimage_count(simple->data);
 }
 
-static inline seL4_CPtr
-simple_get_nth_userimage(simple_t *simple, int n)
+static inline seL4_CPtr simple_get_nth_userimage(simple_t *simple, int n)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -502,8 +486,7 @@
     return simple->nth_userimage(simple->data, n);
 }
 
-static inline int
-simple_get_core_count(simple_t *simple)
+static inline int simple_get_core_count(simple_t *simple)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -518,8 +501,7 @@
 }
 
 #ifdef CONFIG_IOMMU
-static inline seL4_CPtr
-simple_get_iospace(simple_t *simple, uint16_t domainID, uint16_t deviceID, cspacepath_t *path)
+static inline seL4_CPtr simple_get_iospace(simple_t *simple, uint16_t domainID, uint16_t deviceID, cspacepath_t *path)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -535,8 +517,7 @@
 #endif
 
 #ifdef CONFIG_ARM_SMMU
-static inline seL4_Error
-simple_get_iospace_cap_count(simple_t *simple, int *count)
+static inline seL4_Error simple_get_iospace_cap_count(simple_t *simple, int *count)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -558,8 +539,7 @@
     return simple->arch_simple.iospace_cap_count(simple->data, count);
 }
 
-static inline seL4_CPtr
-simple_get_nth_iospace_cap(simple_t *simple, int n)
+static inline seL4_CPtr simple_get_nth_iospace_cap(simple_t *simple, int n)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -578,8 +558,7 @@
 }
 #endif
 
-static inline void
-simple_print(simple_t *simple)
+static inline void simple_print(simple_t *simple)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -593,8 +572,7 @@
     simple->print(simple->data);
 }
 
-static inline seL4_CPtr
-simple_get_sched_ctrl(simple_t *simple, int core)
+static inline seL4_CPtr simple_get_sched_ctrl(simple_t *simple, int core)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -612,8 +590,7 @@
     return simple->sched_ctrl(simple->data, core);
 }
 
-static inline ssize_t
-simple_get_extended_bootinfo_length(simple_t *simple, seL4_Word type)
+static inline ssize_t simple_get_extended_bootinfo_length(simple_t *simple, seL4_Word type)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
@@ -626,8 +603,7 @@
     return simple->extended_bootinfo_len(simple->data, type);
 }
 
-static inline ssize_t
-simple_get_extended_bootinfo(simple_t *simple, seL4_Word type, void *dest, ssize_t max_len)
+static inline ssize_t simple_get_extended_bootinfo(simple_t *simple, seL4_Word type, void *dest, ssize_t max_len)
 {
     if (!simple) {
         ZF_LOGE("Simple is NULL");
diff --git a/libsel4vka/include/vka/object.h b/libsel4vka/include/vka/object.h
index b7665d8..5c948c8 100644
--- a/libsel4vka/include/vka/object.h
+++ b/libsel4vka/include/vka/object.h
@@ -37,9 +37,8 @@
 /*
  * Generic object allocator used by functions below, can also be used directly
  */
-static inline int
-vka_alloc_object_at_maybe_dev(vka_t *vka, seL4_Word type, seL4_Word size_bits, uintptr_t paddr,
-                    bool can_use_dev, vka_object_t *result)
+static inline int vka_alloc_object_at_maybe_dev(vka_t *vka, seL4_Word type, seL4_Word size_bits, uintptr_t paddr,
+                                                bool can_use_dev, vka_object_t *result)
 {
     int error = -1;
     if (!(type < seL4_ObjectTypeCount)) {
@@ -62,14 +61,14 @@
         error = vka_utspace_alloc_maybe_device(vka, &path, type, size_bits, can_use_dev, &result->ut);
         if (unlikely(error)) {
             ZF_LOGE("Failed to allocate object of size %lu, error %d",
-                     BIT(size_bits), error);
+                    BIT(size_bits), error);
             goto error;
         }
     } else {
         error = vka_utspace_alloc_at(vka, &path, type, size_bits, paddr, &result->ut);
         if (unlikely(error)) {
             ZF_LOGE("Failed to allocate object of size %lu at paddr %p, error %d",
-                    BIT(size_bits), (void*)paddr, error);
+                    BIT(size_bits), (void *)paddr, error);
             goto error;
         }
     }
@@ -87,14 +86,12 @@
     return error;
 }
 
-static inline int
-vka_alloc_object_at(vka_t *vka, seL4_Word type, seL4_Word size_bits, uintptr_t paddr,
-                    vka_object_t *result)
+static inline int vka_alloc_object_at(vka_t *vka, seL4_Word type, seL4_Word size_bits, uintptr_t paddr,
+                                      vka_object_t *result)
 {
     return vka_alloc_object_at_maybe_dev(vka, type, size_bits, paddr, false, result);
 }
-static inline int
-vka_alloc_object(vka_t *vka, seL4_Word type, seL4_Word size_bits, vka_object_t *result)
+static inline int vka_alloc_object(vka_t *vka, seL4_Word type, seL4_Word size_bits, vka_object_t *result)
 {
     return vka_alloc_object_at(vka, type, size_bits, VKA_NO_PADDR, result);
 }
@@ -102,15 +99,13 @@
 /* convenient wrapper that throws away the vka_object_t and just returns the cptr -
  * note you cannot use this if you intend to free the object */
 static inline seL4_CPtr vka_alloc_object_leaky(vka_t *vka, seL4_Word type, seL4_Word size_bits) WARN_UNUSED_RESULT;
-static inline seL4_CPtr
-vka_alloc_object_leaky(vka_t *vka, seL4_Word type, seL4_Word size_bits)
+static inline seL4_CPtr vka_alloc_object_leaky(vka_t *vka, seL4_Word type, seL4_Word size_bits)
 {
     vka_object_t result = {.cptr = 0, .ut = 0, .type = 0, size_bits = 0};
     return vka_alloc_object(vka, type, size_bits, &result) == -1 ? 0 : result.cptr;
 }
 
-static inline void
-vka_free_object(vka_t *vka, vka_object_t *object)
+static inline void vka_free_object(vka_t *vka, vka_object_t *object)
 {
     cspacepath_t path;
     vka_cspace_make_path(vka, object->cptr, &path);
@@ -127,8 +122,7 @@
     vka_utspace_free(vka, object->type, object->size_bits, object->ut);
 }
 
-static inline uintptr_t
-vka_object_paddr(vka_t *vka, vka_object_t *object)
+static inline uintptr_t vka_object_paddr(vka_t *vka, vka_object_t *object)
 {
     return vka_utspace_paddr(vka, object->ut, object->type, object->size_bits);
 }
@@ -160,7 +154,8 @@
 #endif
 }
 
-static inline int vka_alloc_sched_context_size(UNUSED vka_t *vka, UNUSED vka_object_t *result, UNUSED uint32_t size_bits)
+static inline int vka_alloc_sched_context_size(UNUSED vka_t *vka, UNUSED vka_object_t *result,
+                                               UNUSED uint32_t size_bits)
 {
 #ifdef CONFIG_KERNEL_MCS
     if (size_bits < seL4_MinSchedContextBits) {
@@ -305,7 +300,7 @@
 vka_get_object_size(seL4_Word objectType, seL4_Word objectSize)
 {
     switch (objectType) {
-        /* Generic objects. */
+    /* Generic objects. */
     case seL4_UntypedObject:
         return objectSize;
     case seL4_TCBObject:
