1.1 --- a/libexec/lib/src/external_pager.cc Tue Jun 25 13:53:18 2024 +0200
1.2 +++ b/libexec/lib/src/external_pager.cc Tue Jun 25 13:56:26 2024 +0200
1.3 @@ -90,7 +90,7 @@
1.4 MemoryArea *r = *it;
1.5
1.6 if (r->is_mapped())
1.7 - ipc_detach_dataspace((void *) r->dataspace_start());
1.8 + ipc_detach_dataspace((void *) r->dataspace_start(), NULL);
1.9 }
1.10
1.11 /* Free all capabilities. */
2.1 --- a/libexec/lib/src/segment.cc Tue Jun 25 13:53:18 2024 +0200
2.2 +++ b/libexec/lib/src/segment.cc Tue Jun 25 13:56:26 2024 +0200
2.3 @@ -39,7 +39,7 @@
2.4 if (_allocated)
2.5 {
2.6 if (_attached)
2.7 - ipc_detach_dataspace(_buf);
2.8 + ipc_detach_dataspace(_buf, NULL);
2.9
2.10 /* Also unmap the dataspace, not apparently done by the underlying
2.11 functions. */
3.1 --- a/libfsclient/lib/src/file.cc Tue Jun 25 13:53:18 2024 +0200
3.2 +++ b/libfsclient/lib/src/file.cc Tue Jun 25 13:56:26 2024 +0200
3.3 @@ -120,7 +120,7 @@
3.4 }
3.5
3.6 if (file->memory != NULL)
3.7 - ipc_detach_dataspace(file->memory);
3.8 + ipc_detach_dataspace(file->memory, NULL);
3.9
3.10 file_init(file);
3.11 }
3.12 @@ -380,7 +380,7 @@
3.13
3.14 if (file->memory != NULL)
3.15 {
3.16 - err = ipc_detach_dataspace(file->memory);
3.17 + err = ipc_detach_dataspace(file->memory, NULL);
3.18 if (err)
3.19 return err;
3.20
3.21 @@ -419,7 +419,7 @@
3.22
3.23 if (file->memory != NULL)
3.24 {
3.25 - err = ipc_detach_dataspace(file->memory);
3.26 + err = ipc_detach_dataspace(file->memory, NULL);
3.27 if (err)
3.28 return err;
3.29
3.30 @@ -766,7 +766,7 @@
3.31 _update_extent(pipe);
3.32
3.33 if (pipe->memory != NULL)
3.34 - err = ipc_detach_dataspace(pipe->memory);
3.35 + err = ipc_detach_dataspace(pipe->memory, NULL);
3.36
3.37 if (err)
3.38 return err;
4.1 --- a/libipc/include/ipc/mem_ipc.h Tue Jun 25 13:53:18 2024 +0200
4.2 +++ b/libipc/include/ipc/mem_ipc.h Tue Jun 25 13:56:26 2024 +0200
4.3 @@ -40,7 +40,7 @@
4.4 rm_flags_t flags, unsigned char align,
4.5 void **addr);
4.6
4.7 -long ipc_detach_dataspace(void *addr);
4.8 +long ipc_detach_dataspace(void *addr, l4_cap_idx_t *cap);
4.9
4.10 long ipc_dataspace_size(l4_cap_idx_t cap, offset_t *size);
4.11
5.1 --- a/libipc/lib/src/mem_ipc.c Tue Jun 25 13:53:18 2024 +0200
5.2 +++ b/libipc/lib/src/mem_ipc.c Tue Jun 25 13:56:26 2024 +0200
5.3 @@ -107,9 +107,9 @@
5.4 return err;
5.5 }
5.6
5.7 -/* Detach a dataspace region. Equivalent to l4re_rm_detach_unmap. */
5.8 +/* Detach a dataspace region. Equivalent to l4re_rm_detach_ds_unmap. */
5.9
5.10 -long ipc_detach_dataspace(void *addr)
5.11 +long ipc_detach_dataspace(void *addr, l4_cap_idx_t *cap)
5.12 {
5.13 long err;
5.14
5.15 @@ -117,7 +117,10 @@
5.16 if (err)
5.17 return err;
5.18
5.19 - err = l4re_rm_detach_unmap((l4_addr_t) addr, L4RE_THIS_TASK_CAP);
5.20 + if (cap != NULL)
5.21 + err = l4re_rm_detach_ds_unmap((l4_addr_t) addr, cap, L4RE_THIS_TASK_CAP);
5.22 + else
5.23 + err = l4re_rm_detach_unmap((l4_addr_t) addr, L4RE_THIS_TASK_CAP);
5.24
5.25 ipc_semaphore_up(ipc_mem_semaphore);
5.26
6.1 --- a/libipc/lib/src/message.c Tue Jun 25 13:53:18 2024 +0200
6.2 +++ b/libipc/lib/src/message.c Tue Jun 25 13:56:26 2024 +0200
6.3 @@ -436,7 +436,7 @@
6.4 void ipc_message_discard_dataspace(ipc_message_t *msg, l4_cap_idx_t mem, l4_addr_t addr)
6.5 {
6.6 ipc_message_discard_capability(msg, mem);
6.7 - ipc_detach_dataspace((void *) addr);
6.8 + ipc_detach_dataspace((void *) addr, NULL);
6.9 }
6.10
6.11 /* Reserve the given number slots from zero for incoming capabilities. */
7.1 --- a/libmem/lib/src/memory_incremental.cc Tue Jun 25 13:53:18 2024 +0200
7.2 +++ b/libmem/lib/src/memory_incremental.cc Tue Jun 25 13:56:26 2024 +0200
7.3 @@ -24,6 +24,7 @@
7.4
7.5 #include "memory_incremental.h"
7.6
7.7 +#include <ipc/cap_alloc.h>
7.8 #include <ipc/mem_ipc.h>
7.9
7.10 #include <stdlib.h>
7.11 @@ -101,7 +102,13 @@
7.12
7.13 void MemoryIncremental::deallocate(Region *region)
7.14 {
7.15 - ipc_detach_dataspace((void *) region->start);
7.16 + l4_cap_idx_t cap;
7.17 +
7.18 + ipc_detach_dataspace((void *) region->start, &cap);
7.19 +
7.20 + if (l4_is_valid_cap(cap))
7.21 + ipc_cap_free_um(cap);
7.22 +
7.23 delete region;
7.24 }
7.25