On Fri, Dec 19, 2014 at 08:29:56AM +0800, Yuyang Du wrote: > Subject: [PATCH] sched: Fix long and unsigned long multiplication error in > effective_load > > In effective_load, we have (long w * unsigned long tg->shares) / long W, > when w is negative, it is cast to unsigned long and hence the product is > insanely large. Fix this by casting tg->shares to long. > > Reported-by: Sasha Levin <sasha.le...@oracle.com> > Signed-off-by: Yuyang Du <yuyang...@intel.com> > --- > kernel/sched/fair.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index df2cdf7..6b99659 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -4424,7 +4424,7 @@ static long effective_load(struct task_group *tg, int > cpu, long wl, long wg) > * wl = S * s'_i; see (2) > */ > if (W > 0 && w < W) > - wl = (w * tg->shares) / W; > + wl = (w * (long)tg->shares) / W; > else > wl = tg->shares;
Oh, nice! thanks! -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/