From cb0d49047aaef5739b1aa2e78f4a9b1e12a0705f Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Thu, 27 Feb 2014 11:16:15 -0600 Subject: [PATCH] Fix how CPU load counts are adjusted so that the total always adds up to 100% --- ChangeLog | 5 ++++- sched/sched_cpuload.c | 11 ++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 96f760b1f2..3dc9533396 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6673,4 +6673,7 @@ * arch/arm/src/sam34: The port to the SAM4E is code complete (2014-2-16). * include/cxx: Fix some bad idempotence defintions in header files (2014-2-27). - + * sched/sched_cpuload.c: Change calulation of the total count when the + time constant related delay elapsed. The total count is now always + guaranteed to add up to 100% (excepting only truncation errors) + (2014-2-27). diff --git a/sched/sched_cpuload.c b/sched/sched_cpuload.c index 802977f872..0f54957507 100644 --- a/sched/sched_cpuload.c +++ b/sched/sched_cpuload.c @@ -121,16 +121,21 @@ void weak_function sched_process_cpuload(void) if (++g_cpuload_total > (CONFIG_SCHED_CPULOAD_TIMECONSTANT * CLOCKS_PER_SEC)) { - /* Divide the tick count for every task by two */ + uint32_t total = 0; + + /* Divide the tick count for every task by two and recalculate the + * total. + */ for (i = 0; i < CONFIG_MAX_TASKS; i++) { g_pidhash[i].ticks >>= 1; + total += g_pidhash[i].ticks; } - /* Divide the total tick count by two */ + /* Save the new total. */ - g_cpuload_total >>= 1; + g_cpuload_total = total; } }