| From foo@baz Thu Nov 9 09:48:01 CET 2017 |
| From: Frederic Weisbecker <fweisbec@gmail.com> |
| Date: Thu, 5 Jan 2017 18:11:41 +0100 |
| Subject: sched/cputime, powerpc32: Fix stale scaled stime on context switch |
| |
| From: Frederic Weisbecker <fweisbec@gmail.com> |
| |
| |
| [ Upstream commit 90d08ba2b9b4be4aeca6a5b5a4b09fbcde30194d ] |
| |
| On context switch with powerpc32, the cputime is accumulated in the |
| thread_info struct. So the switching-in task must move forward its |
| start time snapshot to the current time in order to later compute the |
| delta spent in system mode. |
| |
| This is what we do for the normal cputime by initializing the starttime |
| field to the value of the previous task's starttime which got freshly |
| updated. |
| |
| But we are missing the update of the scaled cputime start time. As a |
| result we may be accounting too much scaled cputime later. |
| |
| Fix this by initializing the scaled cputime the same way we do for |
| normal cputime. |
| |
| Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> |
| Acked-by: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> |
| Cc: Christian Borntraeger <borntraeger@de.ibm.com> |
| Cc: Fenghua Yu <fenghua.yu@intel.com> |
| Cc: Heiko Carstens <heiko.carstens@de.ibm.com> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Cc: Michael Ellerman <mpe@ellerman.id.au> |
| Cc: Paul Mackerras <paulus@samba.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Rik van Riel <riel@redhat.com> |
| Cc: Stanislaw Gruszka <sgruszka@redhat.com> |
| Cc: Tony Luck <tony.luck@intel.com> |
| Cc: Wanpeng Li <wanpeng.li@hotmail.com> |
| Link: http://lkml.kernel.org/r/1483636310-6557-2-git-send-email-fweisbec@gmail.com |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Sasha Levin <alexander.levin@verizon.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/powerpc/kernel/time.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/arch/powerpc/kernel/time.c |
| +++ b/arch/powerpc/kernel/time.c |
| @@ -407,6 +407,7 @@ void arch_vtime_task_switch(struct task_ |
| struct cpu_accounting_data *acct = get_accounting(current); |
| |
| acct->starttime = get_accounting(prev)->starttime; |
| + acct->startspurr = get_accounting(prev)->startspurr; |
| acct->system_time = 0; |
| acct->user_time = 0; |
| } |