* [Xenomai-core] [RFC] heap: rename sys_sem_heap syscall to sys_heap_info
@ 2011-08-01 20:20 Gilles Chanteperdrix
2011-08-02 19:16 ` Gilles Chanteperdrix
0 siblings, 1 reply; 3+ messages in thread
From: Gilles Chanteperdrix @ 2011-08-01 20:20 UTC (permalink / raw)
To: xenomai
And add the count of used bytes to the xnheap_desc structure. This allows
for checking for leaks in unit tests.
---
include/asm-generic/syscall.h | 2 +-
include/nucleus/heap.h | 7 +++++++
ksrc/nucleus/shadow.c | 31 ++++++++++++++++++++++++++-----
src/skins/common/sem_heap.c | 4 ++--
4 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/include/asm-generic/syscall.h b/include/asm-generic/syscall.h
index 4154b46..a9cdc87 100644
--- a/include/asm-generic/syscall.h
+++ b/include/asm-generic/syscall.h
@@ -32,7 +32,7 @@
#define __xn_sys_info 4 /* xnshadow_get_info(muxid,&info) */
#define __xn_sys_arch 5 /* r = xnarch_local_syscall(args) */
#define __xn_sys_trace 6 /* r = xntrace_xxx(...) */
-#define __xn_sys_sem_heap 7
+#define __xn_sys_heap_info 7
#define __xn_sys_current 8 /* threadh = xnthread_handle(cur) */
#define __xn_sys_current_info 9 /* r = xnshadow_current_info(&info) */
#define __xn_sys_mayday 10 /* request mayday fixup */
diff --git a/include/nucleus/heap.h b/include/nucleus/heap.h
index 253dca3..53b3bb4 100644
--- a/include/nucleus/heap.h
+++ b/include/nucleus/heap.h
@@ -281,10 +281,17 @@ int xnheap_check_block(xnheap_t *heap,
#define XNHEAP_DEV_NAME "/dev/rtheap"
#define XNHEAP_DEV_MINOR 254
+/* Possible arguments to the sys_heap_info syscall */
+#define XNHEAP_PROC_PRIVATE_HEAP 0
+#define XNHEAP_PROC_SHARED_HEAP 1
+#define XNHEAP_SYS_HEAP 2
+#define XNHEAP_SYS_STACKPOOL 3
+
struct xnheap_desc {
unsigned long handle;
unsigned int size;
unsigned long area;
+ unsigned long used;
};
#endif /* !_XENO_NUCLEUS_HEAP_H */
diff --git a/ksrc/nucleus/shadow.c b/ksrc/nucleus/shadow.c
index a228c91..bd0096f 100644
--- a/ksrc/nucleus/shadow.c
+++ b/ksrc/nucleus/shadow.c
@@ -2052,18 +2052,39 @@ static int xnshadow_sys_trace(struct pt_regs *regs)
return err;
}
-static int xnshadow_sys_sem_heap(struct pt_regs *regs)
+static int xnshadow_sys_heap_info(struct pt_regs *regs)
{
struct xnheap_desc hd, __user *u_hd;
struct xnheap *heap;
- unsigned global;
+ unsigned heap_nr;
- global = __xn_reg_arg2(regs);
+ heap_nr = __xn_reg_arg2(regs);
u_hd = (struct xnheap_desc __user *)__xn_reg_arg1(regs);
- heap = &xnsys_ppd_get(global)->sem_heap;
+
+ switch(heap_nr) {
+ case XNHEAP_PROC_PRIVATE_HEAP:
+ case XNHEAP_PROC_SHARED_HEAP:
+ heap = &xnsys_ppd_get(heap_nr)->sem_heap;
+ break;
+
+ case XNHEAP_SYS_HEAP:
+ heap = &kheap;
+ break;
+
+#if CONFIG_XENO_OPT_SYS_STACKPOOLSZ > 0
+ case XNHEAP_SYS_STACKPOOL:
+ heap = &kstacks;
+ break;
+#endif
+
+ default:
+ return -EINVAL;
+ }
+
hd.handle = (unsigned long)heap;
hd.size = xnheap_extentsize(heap);
hd.area = xnheap_base_memory(heap);
+ hd.used = xnheap_used_mem(heap);
return __xn_safe_copy_to_user(u_hd, &hd, sizeof(*u_hd));
}
@@ -2122,7 +2143,7 @@ static xnsysent_t __systab[] = {
[__xn_sys_completion] = {&xnshadow_sys_completion, __xn_exec_lostage},
[__xn_sys_barrier] = {&xnshadow_sys_barrier, __xn_exec_lostage},
[__xn_sys_trace] = {&xnshadow_sys_trace, __xn_exec_any},
- [__xn_sys_sem_heap] = {&xnshadow_sys_sem_heap, __xn_exec_lostage},
+ [__xn_sys_heap_info] = {&xnshadow_sys_heap_info, __xn_exec_lostage},
[__xn_sys_current] = {&xnshadow_sys_current, __xn_exec_any},
[__xn_sys_current_info] =
{&xnshadow_sys_current_info, __xn_exec_shadow},
diff --git a/src/skins/common/sem_heap.c b/src/skins/common/sem_heap.c
index 2c9514e..baaa6a6 100644
--- a/src/skins/common/sem_heap.c
+++ b/src/skins/common/sem_heap.c
@@ -57,10 +57,10 @@ static void *map_sem_heap(unsigned int shared)
int ret;
hdesc = shared ? &global_hdesc : &private_hdesc;
- ret = XENOMAI_SYSCALL2(__xn_sys_sem_heap, hdesc, shared);
+ ret = XENOMAI_SYSCALL2(__xn_sys_heap_info, hdesc, shared);
if (ret < 0) {
errno = -ret;
- perror("Xenomai: sys_sem_heap");
+ perror("Xenomai: sys_heap_info");
return MAP_FAILED;
}
--
1.7.2.5
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-08-02 19:58 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-08-01 20:20 [Xenomai-core] [RFC] heap: rename sys_sem_heap syscall to sys_heap_info Gilles Chanteperdrix
2011-08-02 19:16 ` Gilles Chanteperdrix
2011-08-02 19:58 ` Philippe Gerum
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.