mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	sched: Fix odd values in effective_load() calculations
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.levin@oracle.com> Signed-off-by: Yuyang Du <yuyang.du@intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Dave Jones <davej@redhat.com> Cc: Andrey Ryabinin <a.ryabinin@samsung.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Link: http://lkml.kernel.org/r/20141219002956.GA25405@intel.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
		
							parent
							
								
									536ebe9ca9
								
							
						
					
					
						commit
						32a8df4e0b
					
				
					 1 changed files with 1 additions and 1 deletions
				
			
		| 
						 | 
					@ -4424,7 +4424,7 @@ static long effective_load(struct task_group *tg, int cpu, long wl, long wg)
 | 
				
			||||||
		 * wl = S * s'_i; see (2)
 | 
							 * wl = S * s'_i; see (2)
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		if (W > 0 && w < W)
 | 
							if (W > 0 && w < W)
 | 
				
			||||||
			wl = (w * tg->shares) / W;
 | 
								wl = (w * (long)tg->shares) / W;
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			wl = tg->shares;
 | 
								wl = tg->shares;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue