• Miao Xie's avatar
    sched: fair-group: fix a Div0 error of the fair group scheduler · cb4ad1ff
    Miao Xie authored
    When I echoed 0 into the "cpu.shares" file, a Div0 error occured.
    
    We found it is caused by the following calling.
    
       sched_group_set_shares(tg, shares)
           set_se_shares(tg->se[i], shares/nr_cpu_ids)
               __set_se_shares(se, shares)
                   div64_64((1ULL<<32), shares)
    
    When the echoed value was less than the number of processores, the result of the
    sentence "shares/nr_cpu_ids" was 0, and then the system called div64() to divide
    the result, the Div0 error occured.
    
    It is unnecessary that the shares value is divided by nr_cpu_ids, I think.
    Because in the function  __update_group_shares_cpu() and init_tg_cfs_entry(),
    the shares value isn't divided by nr_cpu_ids when setting shares of the sched
    entity.
    
    This patch fixes this bug. And echoing ULONG_MAX value into cpu.shares also
    causes Div0 error, so we set a macro MAX_SHARES to limit the max value of
    shares.
    Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
    Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    cb4ad1ff
sched.c 224 KB