[PATCH] sched: fix divide_error panic in task_times

divide_error happens when sum_exec_runtime < 1ms and stime +
utime > 0. Then rtime will be zero, and in scale_stime 
rtime < total. total / rtime will execute, and then panic!!

Fix this by checking prev->stime + prev->utime >= rtime first. 

Base patch is:
 from Frederic Weisbecker <fweisbec@gmail.com>
 subject: [PATCH] cputime: Consolidate cputime adjustment code
 upstream commit: d37f761dbd276790f70dcf73a287fde2c3464482

task_cputime_adjusted() and thread_group_cputime_adjusted()
essentially share the same code. They just don't use the same
source:

* The first function uses the cputime in the task struct and the
previous adjusted snapshot that ensures monotonicity.

* The second adds the cputime of all tasks in the group and the
previous adjusted snapshot of the whole group from the signal
structure.

Just consolidate the common code that does the adjustment. These
functions just need to fetch the values from the appropriate
source.

Backport Notes:
	Patch below has alread been overridded. So skip it. 

	commit: bea6832cc8c4a0a9a65dd17da6aaa657fe27bc3e
	subject: sched: fix divide by zero at {thread_group,task}_times

Signed-off-by: Charles Wang <muming.wq@taobao.com>
[PATCH] sched: Avoid cputime scaling overflow

upstream commit 55eaa7c1f511af5fb6ef808b5328804f4d4e5243

Here is patch, which adds Linus's cputime scaling algorithm to the
kernel.

This is a follow up (well, fix) to commit
d9a3c9823a2e6a543eb7807fb3d15d8233817ec5 ("sched: Lower chances
of cputime scaling overflow") which commit tried to avoid
multiplication overflow, but did not guarantee that the overflow
would not happen.

Linus crated a different algorithm, which completely avoids the
multiplication overflow by dropping precision when numbers are
big.

It was tested by me and it gives good relative error of
scaled numbers. Testing method is described here:
http://marc.info/?l=linux-kernel&m=136733059505406&w=2

Backport Note:
	Here another patch is merged:

	sched: Use swap() macro in scale_stime()
	84f9f3a15611536537d59060818a2354d5039ff3

Originally-From: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: rostedt@goodmis.org
Cc: Dave Hansen <dave@sr71.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20130430151441.GC10465@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Charles Wang <muming.wq@taobao.com>
Merge pull request #29 from CharlesWang/dev-sched

Dev sched