[Xenomai-git] Philippe Gerum : cobalt/posix: introduce kernel tracepoints (WIP)

2014-04-30 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 338d69f5578bc6a560fe9de20d1340f6922e12af
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=338d69f5578bc6a560fe9de20d1340f6922e12af

Author: Philippe Gerum r...@xenomai.org
Date:   Sat Apr 26 15:09:17 2014 +0200

cobalt/posix: introduce kernel tracepoints (WIP)

---

 kernel/cobalt/posix/nsem.c |   16 +-
 kernel/cobalt/posix/sem.c  |   38 ++-
 kernel/cobalt/posix/thread.c   |   95 --
 kernel/cobalt/trace/cobalt-posix.h |  578 
 4 files changed, 696 insertions(+), 31 deletions(-)

diff --git a/kernel/cobalt/posix/nsem.c b/kernel/cobalt/posix/nsem.c
index e719560..f771ca5 100644
--- a/kernel/cobalt/posix/nsem.c
+++ b/kernel/cobalt/posix/nsem.c
@@ -24,13 +24,15 @@
 #include cobalt/kernel/tree.h
 #include internal.h
 #include sem.h
+#include thread.h
+#include trace/events/cobalt-posix.h
 
 DEFINE_XNLOCK(nsem_lock);
 
 struct nsem {
struct cobalt_sem *sem;
struct cobalt_sem_shadow __user *usem;
-   unsigned refs;
+   unsigned int refs;
struct xnid id;
 };
 
@@ -47,7 +49,7 @@ static struct nsem *nsem_search(struct cobalt_process *cc, 
xnhandle_t handle)
 
 static struct cobalt_sem_shadow __user *
 nsem_open(struct cobalt_process *cc, struct cobalt_sem_shadow __user *ushadow, 
-   const char *name, int oflags, mode_t mode, unsigned value)
+   const char *name, int oflags, mode_t mode, unsigned int value)
 {
struct cobalt_sem_shadow shadow;
struct cobalt_sem *sem;
@@ -142,6 +144,8 @@ nsem_open(struct cobalt_process *cc, struct 
cobalt_sem_shadow __user *ushadow,
xnlock_put_irqrestore(nsem_lock, s);
}
 
+   trace_cobalt_psem_open(name, handle, oflags, mode, value);
+
return u-usem;
 }
 
@@ -206,8 +210,11 @@ int cobalt_sem_open(struct cobalt_sem_shadow __user 
*__user *u_addr,
return -EINVAL;
 
usm = nsem_open(cc, usm, name, oflags, mode, value);
-   if (IS_ERR(usm))
+   if (IS_ERR(usm)) {
+   trace_cobalt_psem_open_failed(name, oflags, mode,
+ value, PTR_ERR(usm));
return PTR_ERR(usm);
+   }
 
__xn_put_user(usm, u_addr);
 
@@ -224,6 +231,7 @@ int cobalt_sem_close(struct cobalt_sem_shadow __user *usm)
return -EPERM;
 
handle = cobalt_get_handle_from_user(usm-handle);
+   trace_cobalt_psem_close(handle);
 
return nsem_close(cc, handle);
 }
@@ -241,6 +249,8 @@ int cobalt_sem_unlink(const char __user *u_name)
if (len = sizeof(name))
return -ENAMETOOLONG;
 
+   trace_cobalt_psem_unlink(name);
+
if (name[0] != '/')
return -EINVAL;
 
diff --git a/kernel/cobalt/posix/sem.c b/kernel/cobalt/posix/sem.c
index 5865b5c..8d6b4ed 100644
--- a/kernel/cobalt/posix/sem.c
+++ b/kernel/cobalt/posix/sem.c
@@ -37,6 +37,7 @@
 #include thread.h
 #include clock.h
 #include sem.h
+#include trace/events/cobalt-posix.h
 
 #define SEM_NAMED0x8000
 
@@ -94,12 +95,16 @@ cobalt_sem_init_inner(const char *name, struct 
cobalt_sem_shadow *sm,
int ret, sflags;
spl_t s;
 
-   if ((flags  SEM_PULSE) != 0  value  0)
-   return ERR_PTR(-EINVAL);
+   if ((flags  SEM_PULSE) != 0  value  0) {
+   ret = -EINVAL;
+   goto out;
+   }
 
sem = xnmalloc(sizeof(*sem));
-   if (sem == NULL)
-   return ERR_PTR(-ENOSPC);
+   if (sem == NULL) {
+   ret = -ENOSPC;
+   goto out;
+   }
 
ksformat(sem-name, sizeof(sem-name), %s, name);
 
@@ -168,13 +173,17 @@ cobalt_sem_init_inner(const char *name, struct 
cobalt_sem_shadow *sm,
sm-datp_offset = -sm-datp_offset;
xnlock_put_irqrestore(nklock, s);
 
+   trace_cobalt_psem_init(sem-name, sem-handle, flags, value);
+
return sem;
 
-  err_lock_put:
+err_lock_put:
xnlock_put_irqrestore(nklock, s);
xnheap_free(sys_ppd-sem_heap, datp);
-  err_free_sem:
+err_free_sem:
xnfree(sem);
+out:
+   trace_cobalt_psem_init_failed(name, flags, value, ret);
 
return ERR_PTR(ret);
 }
@@ -689,6 +698,7 @@ int cobalt_sem_post(struct cobalt_sem_shadow __user *u_sem)
xnhandle_t handle;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_post(handle);
 
return sem_post(handle);
 }
@@ -698,6 +708,7 @@ int cobalt_sem_wait(struct cobalt_sem_shadow __user *u_sem)
xnhandle_t handle;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_wait(handle);
 
return sem_wait(handle);
 }
@@ -708,6 +719,7 @@ int cobalt_sem_timedwait(struct cobalt_sem_shadow __user 
*u_sem,
xnhandle_t handle;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_timedwait(handle);
 
return sem_timedwait(handle, u_ts);
 }

[Xenomai-git] Philippe Gerum : cobalt/posix: introduce kernel tracepoints (WIP)

2014-04-29 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 0b01c40091127d6a0b033e3a6e590ccd693764dd
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=0b01c40091127d6a0b033e3a6e590ccd693764dd

Author: Philippe Gerum r...@xenomai.org
Date:   Sat Apr 26 15:09:17 2014 +0200

cobalt/posix: introduce kernel tracepoints (WIP)

---

 kernel/cobalt/posix/sem.c  |   38 ++-
 kernel/cobalt/posix/thread.c   |   95 +--
 kernel/cobalt/thread.c |4 +-
 kernel/cobalt/trace/cobalt-posix.h |  492 
 4 files changed, 599 insertions(+), 30 deletions(-)

diff --git a/kernel/cobalt/posix/sem.c b/kernel/cobalt/posix/sem.c
index 5865b5c..8d6b4ed 100644
--- a/kernel/cobalt/posix/sem.c
+++ b/kernel/cobalt/posix/sem.c
@@ -37,6 +37,7 @@
 #include thread.h
 #include clock.h
 #include sem.h
+#include trace/events/cobalt-posix.h
 
 #define SEM_NAMED0x8000
 
@@ -94,12 +95,16 @@ cobalt_sem_init_inner(const char *name, struct 
cobalt_sem_shadow *sm,
int ret, sflags;
spl_t s;
 
-   if ((flags  SEM_PULSE) != 0  value  0)
-   return ERR_PTR(-EINVAL);
+   if ((flags  SEM_PULSE) != 0  value  0) {
+   ret = -EINVAL;
+   goto out;
+   }
 
sem = xnmalloc(sizeof(*sem));
-   if (sem == NULL)
-   return ERR_PTR(-ENOSPC);
+   if (sem == NULL) {
+   ret = -ENOSPC;
+   goto out;
+   }
 
ksformat(sem-name, sizeof(sem-name), %s, name);
 
@@ -168,13 +173,17 @@ cobalt_sem_init_inner(const char *name, struct 
cobalt_sem_shadow *sm,
sm-datp_offset = -sm-datp_offset;
xnlock_put_irqrestore(nklock, s);
 
+   trace_cobalt_psem_init(sem-name, sem-handle, flags, value);
+
return sem;
 
-  err_lock_put:
+err_lock_put:
xnlock_put_irqrestore(nklock, s);
xnheap_free(sys_ppd-sem_heap, datp);
-  err_free_sem:
+err_free_sem:
xnfree(sem);
+out:
+   trace_cobalt_psem_init_failed(name, flags, value, ret);
 
return ERR_PTR(ret);
 }
@@ -689,6 +698,7 @@ int cobalt_sem_post(struct cobalt_sem_shadow __user *u_sem)
xnhandle_t handle;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_post(handle);
 
return sem_post(handle);
 }
@@ -698,6 +708,7 @@ int cobalt_sem_wait(struct cobalt_sem_shadow __user *u_sem)
xnhandle_t handle;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_wait(handle);
 
return sem_wait(handle);
 }
@@ -708,6 +719,7 @@ int cobalt_sem_timedwait(struct cobalt_sem_shadow __user 
*u_sem,
xnhandle_t handle;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_timedwait(handle);
 
return sem_timedwait(handle, u_ts);
 }
@@ -717,6 +729,7 @@ int cobalt_sem_trywait(struct cobalt_sem_shadow __user 
*u_sem)
xnhandle_t handle;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_trywait(handle);
 
return sem_trywait(handle);
 }
@@ -724,13 +737,14 @@ int cobalt_sem_trywait(struct cobalt_sem_shadow __user 
*u_sem)
 int cobalt_sem_getvalue(struct cobalt_sem_shadow __user *u_sem, int __user 
*u_sval)
 {
xnhandle_t handle;
-   int err, sval;
+   int ret, sval;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
 
-   err = sem_getvalue(handle, sval);
-   if (err  0)
-   return err;
+   ret = sem_getvalue(handle, sval);
+   trace_cobalt_psem_getvalue(handle, ret ? -1 : sval);
+   if (ret)
+   return ret;
 
return __xn_safe_copy_to_user(u_sval, sval, sizeof(sval));
 }
@@ -743,6 +757,8 @@ int cobalt_sem_destroy(struct cobalt_sem_shadow __user 
*u_sem)
if (__xn_safe_copy_from_user(sm, u_sem, sizeof(sm)))
return -EFAULT;
 
+   trace_cobalt_psem_destroy(sm.handle);
+
err = sem_destroy(sm);
if (err  0)
return err;
@@ -778,6 +794,7 @@ int cobalt_sem_broadcast_np(struct cobalt_sem_shadow __user 
*u_sem)
int err;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_broadcast(u_sem-handle);
 
xnlock_get_irqsave(nklock, s);
sm = xnregistry_lookup(handle, NULL);
@@ -802,6 +819,7 @@ int cobalt_sem_inquire(struct cobalt_sem_shadow __user 
*u_sem,
spl_t s;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_inquire(handle);
 
nrpids = waitsz / sizeof(pid_t);
 
diff --git a/kernel/cobalt/posix/thread.c b/kernel/cobalt/posix/thread.c
index 83f58d0..e11e777 100644
--- a/kernel/cobalt/posix/thread.c
+++ b/kernel/cobalt/posix/thread.c
@@ -40,6 +40,9 @@
 #include signal.h
 #include timer.h
 #include clock.h
+#include sem.h
+#define CREATE_TRACE_POINTS
+#include trace/events/cobalt-posix.h
 
 xnticks_t cobalt_time_slice;
 
@@ -812,18 +815,19 @@ int cobalt_thread_setschedparam_ex(unsigned 

[Xenomai-git] Philippe Gerum : cobalt/posix: introduce kernel tracepoints (WIP)

2014-04-28 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: fd4a55eee75271b0f642972e079061283459443a
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=fd4a55eee75271b0f642972e079061283459443a

Author: Philippe Gerum r...@xenomai.org
Date:   Sat Apr 26 15:09:17 2014 +0200

cobalt/posix: introduce kernel tracepoints (WIP)

---

 kernel/cobalt/posix/sem.c  |   38 ++-
 kernel/cobalt/posix/thread.c   |   95 +--
 kernel/cobalt/thread.c |4 +-
 kernel/cobalt/trace/cobalt-posix.h |  492 
 4 files changed, 599 insertions(+), 30 deletions(-)

diff --git a/kernel/cobalt/posix/sem.c b/kernel/cobalt/posix/sem.c
index 718618c..bc0ccf6 100644
--- a/kernel/cobalt/posix/sem.c
+++ b/kernel/cobalt/posix/sem.c
@@ -37,6 +37,7 @@
 #include thread.h
 #include clock.h
 #include sem.h
+#include trace/events/cobalt-posix.h
 
 #define SEM_NAMED0x8000
 
@@ -94,12 +95,16 @@ cobalt_sem_init_inner(const char *name, struct 
cobalt_sem_shadow *sm,
int ret, sflags;
spl_t s;
 
-   if ((flags  SEM_PULSE) != 0  value  0)
-   return ERR_PTR(-EINVAL);
+   if ((flags  SEM_PULSE) != 0  value  0) {
+   ret = -EINVAL;
+   goto out;
+   }
 
sem = xnmalloc(sizeof(*sem));
-   if (sem == NULL)
-   return ERR_PTR(-ENOSPC);
+   if (sem == NULL) {
+   ret = -ENOSPC;
+   goto out;
+   }
 
ksformat(sem-name, sizeof(sem-name), %s, name);
 
@@ -168,13 +173,17 @@ cobalt_sem_init_inner(const char *name, struct 
cobalt_sem_shadow *sm,
sm-datp_offset = -sm-datp_offset;
xnlock_put_irqrestore(nklock, s);
 
+   trace_cobalt_psem_init(sem-name, sem-handle, flags, value);
+
return sem;
 
-  err_lock_put:
+err_lock_put:
xnlock_put_irqrestore(nklock, s);
xnheap_free(sys_ppd-sem_heap, datp);
-  err_free_sem:
+err_free_sem:
xnfree(sem);
+out:
+   trace_cobalt_psem_init_failed(name, flags, value, ret);
 
return ERR_PTR(ret);
 }
@@ -683,6 +692,7 @@ int cobalt_sem_post(struct cobalt_sem_shadow __user *u_sem)
xnhandle_t handle;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_post(handle);
 
return sem_post(handle);
 }
@@ -692,6 +702,7 @@ int cobalt_sem_wait(struct cobalt_sem_shadow __user *u_sem)
xnhandle_t handle;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_wait(handle);
 
return sem_wait(handle);
 }
@@ -702,6 +713,7 @@ int cobalt_sem_timedwait(struct cobalt_sem_shadow __user 
*u_sem,
xnhandle_t handle;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_timedwait(handle);
 
return sem_timedwait(handle, u_ts);
 }
@@ -711,6 +723,7 @@ int cobalt_sem_trywait(struct cobalt_sem_shadow __user 
*u_sem)
xnhandle_t handle;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_trywait(handle);
 
return sem_trywait(handle);
 }
@@ -718,13 +731,14 @@ int cobalt_sem_trywait(struct cobalt_sem_shadow __user 
*u_sem)
 int cobalt_sem_getvalue(struct cobalt_sem_shadow __user *u_sem, int __user 
*u_sval)
 {
xnhandle_t handle;
-   int err, sval;
+   int ret, sval;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
 
-   err = sem_getvalue(handle, sval);
-   if (err  0)
-   return err;
+   ret = sem_getvalue(handle, sval);
+   trace_cobalt_psem_getvalue(handle, ret ? -1 : sval);
+   if (ret)
+   return ret;
 
return __xn_safe_copy_to_user(u_sval, sval, sizeof(sval));
 }
@@ -737,6 +751,8 @@ int cobalt_sem_destroy(struct cobalt_sem_shadow __user 
*u_sem)
if (__xn_safe_copy_from_user(sm, u_sem, sizeof(sm)))
return -EFAULT;
 
+   trace_cobalt_psem_destroy(sm.handle);
+
err = sem_destroy(sm);
if (err  0)
return err;
@@ -772,6 +788,7 @@ int cobalt_sem_broadcast_np(struct cobalt_sem_shadow __user 
*u_sem)
int err;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_broadcast(u_sem-handle);
 
xnlock_get_irqsave(nklock, s);
sm = xnregistry_lookup(handle, NULL);
@@ -796,6 +813,7 @@ int cobalt_sem_inquire(struct cobalt_sem_shadow __user 
*u_sem,
spl_t s;
 
handle = cobalt_get_handle_from_user(u_sem-handle);
+   trace_cobalt_psem_inquire(handle);
 
nrpids = waitsz / sizeof(pid_t);
 
diff --git a/kernel/cobalt/posix/thread.c b/kernel/cobalt/posix/thread.c
index 83f58d0..e11e777 100644
--- a/kernel/cobalt/posix/thread.c
+++ b/kernel/cobalt/posix/thread.c
@@ -40,6 +40,9 @@
 #include signal.h
 #include timer.h
 #include clock.h
+#include sem.h
+#define CREATE_TRACE_POINTS
+#include trace/events/cobalt-posix.h
 
 xnticks_t cobalt_time_slice;
 
@@ -812,18 +815,19 @@ int cobalt_thread_setschedparam_ex(unsigned