Lines Matching refs:cip
1961 static void init_core_info(struct core_info *cip, struct kvmppc_vcore *vc) in init_core_info() argument
1965 memset(cip, 0, sizeof(*cip)); in init_core_info()
1966 cip->n_subcores = 1; in init_core_info()
1967 cip->max_subcore_threads = vc->num_threads; in init_core_info()
1968 cip->total_threads = vc->num_threads; in init_core_info()
1969 cip->subcore_threads[0] = vc->num_threads; in init_core_info()
1970 cip->subcore_vm[0] = vc->kvm; in init_core_info()
1972 INIT_LIST_HEAD(&cip->vcs[sub]); in init_core_info()
1973 list_add_tail(&vc->preempt_list, &cip->vcs[0]); in init_core_info()
2007 static bool can_split_piggybacked_subcores(struct core_info *cip) in can_split_piggybacked_subcores() argument
2012 int n_subcores = cip->n_subcores; in can_split_piggybacked_subcores()
2016 for (sub = 0; sub < cip->n_subcores; ++sub) { in can_split_piggybacked_subcores()
2017 if (cip->subcore_threads[sub] <= 2) in can_split_piggybacked_subcores()
2022 vc = list_first_entry(&cip->vcs[sub], struct kvmppc_vcore, in can_split_piggybacked_subcores()
2026 n_subcores += (cip->subcore_threads[sub] - 1) >> 1; in can_split_piggybacked_subcores()
2036 new_sub = cip->n_subcores; in can_split_piggybacked_subcores()
2039 list_for_each_entry_safe(vc, vcnext, &cip->vcs[sub], preempt_list) { in can_split_piggybacked_subcores()
2042 list_add_tail(&vc->preempt_list, &cip->vcs[new_sub]); in can_split_piggybacked_subcores()
2044 if (++cip->subcore_threads[new_sub] == 1) { in can_split_piggybacked_subcores()
2045 cip->subcore_vm[new_sub] = vc->kvm; in can_split_piggybacked_subcores()
2048 ++cip->n_subcores; in can_split_piggybacked_subcores()
2056 cip->subcore_threads[large_sub] = 2; in can_split_piggybacked_subcores()
2057 cip->max_subcore_threads = 2; in can_split_piggybacked_subcores()
2062 static bool can_dynamic_split(struct kvmppc_vcore *vc, struct core_info *cip) in can_dynamic_split() argument
2070 if (n_threads < cip->max_subcore_threads) in can_dynamic_split()
2071 n_threads = cip->max_subcore_threads; in can_dynamic_split()
2072 if (subcore_config_ok(cip->n_subcores + 1, n_threads)) { in can_dynamic_split()
2073 cip->max_subcore_threads = n_threads; in can_dynamic_split()
2074 } else if (cip->n_subcores <= 2 && cip->total_threads <= 6 && in can_dynamic_split()
2084 if (!can_split_piggybacked_subcores(cip)) in can_dynamic_split()
2090 sub = cip->n_subcores; in can_dynamic_split()
2091 ++cip->n_subcores; in can_dynamic_split()
2092 cip->total_threads += vc->num_threads; in can_dynamic_split()
2093 cip->subcore_threads[sub] = vc->num_threads; in can_dynamic_split()
2094 cip->subcore_vm[sub] = vc->kvm; in can_dynamic_split()
2097 list_add_tail(&vc->preempt_list, &cip->vcs[sub]); in can_dynamic_split()
2103 struct core_info *cip, int sub) in can_piggyback_subcore() argument
2108 vc = list_first_entry(&cip->vcs[sub], struct kvmppc_vcore, in can_piggyback_subcore()
2123 n_thr = cip->subcore_threads[sub] + pvc->num_threads; in can_piggyback_subcore()
2124 if (n_thr > cip->max_subcore_threads) { in can_piggyback_subcore()
2125 if (!subcore_config_ok(cip->n_subcores, n_thr)) in can_piggyback_subcore()
2127 cip->max_subcore_threads = n_thr; in can_piggyback_subcore()
2130 cip->total_threads += pvc->num_threads; in can_piggyback_subcore()
2131 cip->subcore_threads[sub] = n_thr; in can_piggyback_subcore()
2134 list_add_tail(&pvc->preempt_list, &cip->vcs[sub]); in can_piggyback_subcore()
2143 static bool can_piggyback(struct kvmppc_vcore *pvc, struct core_info *cip, in can_piggyback() argument
2148 if (cip->total_threads + pvc->num_threads > target_threads) in can_piggyback()
2150 for (sub = 0; sub < cip->n_subcores; ++sub) in can_piggyback()
2151 if (cip->subcore_threads[sub] && in can_piggyback()
2152 can_piggyback_subcore(pvc, cip, sub)) in can_piggyback()
2155 if (can_dynamic_split(pvc, cip)) in can_piggyback()
2180 static void collect_piggybacks(struct core_info *cip, int target_threads) in collect_piggybacks() argument
2199 if (!can_piggyback(pvc, cip, target_threads)) { in collect_piggybacks()
2205 if (cip->total_threads >= target_threads) in collect_piggybacks()