From 6d5b95517deca0efc02e300fc9ea467550f0ca5e Mon Sep 17 00:00:00 2001
From: Vincent Dupont <vincent@otakeys.com>
Date: Wed, 26 Apr 2017 14:49:24 +0200
Subject: [PATCH] ps: fix schedstatistics

Fix xtimer_now() usage and fix columns alignment in ps command when
module schedstatistics is used.
---
 core/include/sched.h | 8 ++++----
 core/sched.c         | 8 ++++----
 sys/ps/ps.c          | 5 +++--
 3 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/core/include/sched.h b/core/include/sched.h
index 346f4d6682..7a833984bc 100644
--- a/core/include/sched.h
+++ b/core/include/sched.h
@@ -179,10 +179,10 @@ NORETURN void sched_task_exit(void);
  *  Scheduler statistics
  */
 typedef struct {
-    unsigned int laststart;         /**< Time stamp of the last time this thread was
-                                         scheduled to run */
-    unsigned int schedules;         /**< How often the thread was scheduled to run */
-    unsigned long runtime_ticks;    /**< The total runtime of this thread in ticks */
+    uint64_t laststart;      /**< Time stamp of the last time this thread was
+                                  scheduled to run */
+    unsigned int schedules;  /**< How often the thread was scheduled to run */
+    uint64_t runtime_ticks;  /**< The total runtime of this thread in ticks */
 } schedstat;
 
 /**
diff --git a/core/sched.c b/core/sched.c
index bc85bdc6b6..59ed1f5f9f 100644
--- a/core/sched.c
+++ b/core/sched.c
@@ -101,7 +101,7 @@ int __attribute__((used)) sched_run(void)
     }
 
 #ifdef MODULE_SCHEDSTATISTICS
-    unsigned long time = _xtimer_now();
+    uint64_t now = _xtimer_now64();
 #endif
 
     if (active_thread) {
@@ -118,17 +118,17 @@ int __attribute__((used)) sched_run(void)
 #ifdef MODULE_SCHEDSTATISTICS
         schedstat *active_stat = &sched_pidlist[active_thread->pid];
         if (active_stat->laststart) {
-            active_stat->runtime_ticks += time - active_stat->laststart;
+            active_stat->runtime_ticks += now - active_stat->laststart;
         }
 #endif
     }
 
 #ifdef MODULE_SCHEDSTATISTICS
     schedstat *next_stat = &sched_pidlist[next_thread->pid];
-    next_stat->laststart = time;
+    next_stat->laststart = now;
     next_stat->schedules++;
     if (sched_cb) {
-        sched_cb(time, next_thread->pid);
+        sched_cb(now, next_thread->pid);
     }
 #endif
 
diff --git a/sys/ps/ps.c b/sys/ps/ps.c
index 34778c2b1b..e3f86224ef 100644
--- a/sys/ps/ps.c
+++ b/sys/ps/ps.c
@@ -61,7 +61,7 @@ void ps(void)
 #endif
             "%-9sQ | pri "
 #ifdef DEVELHELP
-           "| stack ( used) | base       | current    "
+           "| stack ( used) | base       | current     "
 #endif
 #ifdef MODULE_SCHEDSTATISTICS
            "| runtime | switches"
@@ -98,7 +98,8 @@ void ps(void)
             overall_used += stacksz;
 #endif
 #ifdef MODULE_SCHEDSTATISTICS
-            double runtime_ticks =  sched_pidlist[i].runtime_ticks / (double) xtimer_now() * 100;
+            double runtime_ticks = sched_pidlist[i].runtime_ticks /
+                                   (double) _xtimer_now64() * 100;
             int switches = sched_pidlist[i].schedules;
 #endif
             printf("\t%3" PRIkernel_pid
-- 
GitLab