Lines Matching refs:sds
6029 static inline void init_sd_lb_stats(struct sd_lb_stats *sds) in init_sd_lb_stats() argument
6037 *sds = (struct sd_lb_stats){ in init_sd_lb_stats()
6361 struct sd_lb_stats *sds, in update_sd_pick_busiest() argument
6365 struct sg_lb_stats *busiest = &sds->busiest_stat; in update_sd_pick_busiest()
6386 if (!sds->busiest) in update_sd_pick_busiest()
6389 if (group_first_cpu(sds->busiest) > group_first_cpu(sg)) in update_sd_pick_busiest()
6431 static inline void update_sd_lb_stats(struct lb_env *env, struct sd_lb_stats *sds) in update_sd_lb_stats() argument
6450 sds->local = sg; in update_sd_lb_stats()
6451 sgs = &sds->local_stat; in update_sd_lb_stats()
6474 if (prefer_sibling && sds->local && in update_sd_lb_stats()
6475 group_has_capacity(env, &sds->local_stat) && in update_sd_lb_stats()
6481 if (update_sd_pick_busiest(env, sds, sg, sgs)) { in update_sd_lb_stats()
6482 sds->busiest = sg; in update_sd_lb_stats()
6483 sds->busiest_stat = *sgs; in update_sd_lb_stats()
6488 sds->total_load += sgs->group_load; in update_sd_lb_stats()
6489 sds->total_capacity += sgs->group_capacity; in update_sd_lb_stats()
6495 env->fbq_type = fbq_classify_group(&sds->busiest_stat); in update_sd_lb_stats()
6528 static int check_asym_packing(struct lb_env *env, struct sd_lb_stats *sds) in check_asym_packing() argument
6535 if (!sds->busiest) in check_asym_packing()
6538 busiest_cpu = group_first_cpu(sds->busiest); in check_asym_packing()
6543 sds->busiest_stat.avg_load * sds->busiest_stat.group_capacity, in check_asym_packing()
6557 void fix_small_imbalance(struct lb_env *env, struct sd_lb_stats *sds) in fix_small_imbalance() argument
6564 local = &sds->local_stat; in fix_small_imbalance()
6565 busiest = &sds->busiest_stat; in fix_small_imbalance()
6625 static inline void calculate_imbalance(struct lb_env *env, struct sd_lb_stats *sds) in calculate_imbalance() argument
6630 local = &sds->local_stat; in calculate_imbalance()
6631 busiest = &sds->busiest_stat; in calculate_imbalance()
6639 min(busiest->load_per_task, sds->avg_load); in calculate_imbalance()
6647 if (busiest->avg_load <= sds->avg_load || in calculate_imbalance()
6648 local->avg_load >= sds->avg_load) { in calculate_imbalance()
6650 return fix_small_imbalance(env, sds); in calculate_imbalance()
6674 max_pull = min(busiest->avg_load - sds->avg_load, load_above_capacity); in calculate_imbalance()
6679 (sds->avg_load - local->avg_load) * local->group_capacity in calculate_imbalance()
6689 return fix_small_imbalance(env, sds); in calculate_imbalance()
6714 struct sd_lb_stats sds; in find_busiest_group() local
6716 init_sd_lb_stats(&sds); in find_busiest_group()
6722 update_sd_lb_stats(env, &sds); in find_busiest_group()
6723 local = &sds.local_stat; in find_busiest_group()
6724 busiest = &sds.busiest_stat; in find_busiest_group()
6728 check_asym_packing(env, &sds)) in find_busiest_group()
6729 return sds.busiest; in find_busiest_group()
6732 if (!sds.busiest || busiest->sum_nr_running == 0) in find_busiest_group()
6735 sds.avg_load = (SCHED_CAPACITY_SCALE * sds.total_load) in find_busiest_group()
6736 / sds.total_capacity; in find_busiest_group()
6762 if (local->avg_load >= sds.avg_load) in find_busiest_group()
6788 calculate_imbalance(env, &sds); in find_busiest_group()
6789 return sds.busiest; in find_busiest_group()