From: Peter Zijlstra <peterz@infradead.org>
To: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: mingo@elte.hu, Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] sched: fair group: fix divide by zero
Date: Wed, 11 Jun 2008 09:15:47 +0200 [thread overview]
Message-ID: <1213168547.31518.66.camel@twins> (raw)
In-Reply-To: <484F7AC5.8040206@cn.fujitsu.com>
On Wed, 2008-06-11 at 15:12 +0800, Lai Jiangshan wrote:
> I found a bug which can be reproduced by this way:(linux-2.6.26-rc5, x86-64)
> (use 2^32, 2^33, ...., 2^63 as shares value)
I think the same thing to do is limit the shares value to something
smaller instead of using an even more expensive divide.
> # mkdir /dev/cpuctl
> # mount -t cgroup -o cpu cpuctl /dev/cpuctl
> # cd /dev/cpuctl
> # mkdir sub
> # echo 0x8000000000000000 > sub/cpu.shares
> # echo $$ > sub/tasks
> oops here! divide by zero.
>
> This is because do_div() expects the 2th parameter to be 32 bits,
> but unsigned long is 64 bits in x86_64.
>
> Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
> ---
> diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
> index 08ae848..d3005b4 100644
> --- a/kernel/sched_fair.c
> +++ b/kernel/sched_fair.c
> @@ -368,7 +368,7 @@ static u64 sched_slice(struct cfs_rq *cfs_rq, struct sched_entity *se)
> cfs_rq = cfs_rq_of(se);
>
> slice *= se->load.weight;
> - do_div(slice, cfs_rq->load.weight);
> + slice = div64_u64(slice, cfs_rq->load.weight);
> }
>
>
> @@ -399,7 +399,7 @@ static u64 sched_vslice_add(struct cfs_rq *cfs_rq, struct sched_entity *se)
> weight += se->load.weight;
>
> vslice *= NICE_0_LOAD;
> - do_div(vslice, weight);
> + vslice = div64_u64(vslice, weight);
> }
>
> return vslice;
>
>
next prev parent reply other threads:[~2008-06-11 7:16 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-11 7:12 [PATCH] sched: fair group: fix divide by zero Lai Jiangshan
2008-06-11 7:15 ` Peter Zijlstra [this message]
2008-06-12 8:42 ` [PATCH 1/2] sched: fair group: fix overflow(was: fix divide by zero) Lai Jiangshan
2008-06-12 8:49 ` Peter Zijlstra
2008-06-12 12:22 ` Ingo Molnar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1213168547.31518.66.camel@twins \
--to=peterz@infradead.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.