mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
interconnect: qcom: icc-rpm: Don't skip small votes
Small votes (such as 1 or 100) can end up being rounded down to 0
midway through the calculations. Use qcom_bw_div() when dividing to
prevent that.
Assisted-by: LLM
Fixes: 30c8fa3ec6 ("interconnect: qcom: Add MSM8916 interconnect provider driver")
Signed-off-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
Link: https://patch.msgid.link/20260909-topic-icc_rpm_smd_qol-v1-2-6dc5b5e97626@oss.qualcomm.com
Signed-off-by: Georgi Djakov <djakov@kernel.org>
This commit is contained in:
parent
51797517fa
commit
40ea86fa38
|
|
@ -298,25 +298,25 @@ static u64 qcom_icc_calc_rate(struct qcom_icc_provider *qp, struct qcom_icc_node
|
|||
u64 agg_avg_rate, agg_peak_rate, agg_rate;
|
||||
|
||||
if (qn->channels)
|
||||
agg_avg_rate = div_u64(qn->sum_avg[ctx], qn->channels);
|
||||
agg_avg_rate = qcom_bw_div(qn->sum_avg[ctx], qn->channels);
|
||||
else
|
||||
agg_avg_rate = qn->sum_avg[ctx];
|
||||
|
||||
if (qn->ab_coeff) {
|
||||
agg_avg_rate = agg_avg_rate * qn->ab_coeff;
|
||||
agg_avg_rate = div_u64(agg_avg_rate, 100);
|
||||
agg_avg_rate = qcom_bw_div(agg_avg_rate, 100);
|
||||
}
|
||||
|
||||
if (qn->ib_coeff) {
|
||||
agg_peak_rate = qn->max_peak[ctx] * 100;
|
||||
agg_peak_rate = div_u64(agg_peak_rate, qn->ib_coeff);
|
||||
agg_peak_rate = qcom_bw_div(agg_peak_rate, qn->ib_coeff);
|
||||
} else {
|
||||
agg_peak_rate = qn->max_peak[ctx];
|
||||
}
|
||||
|
||||
agg_rate = max_t(u64, agg_avg_rate, agg_peak_rate);
|
||||
|
||||
return div_u64(agg_rate, qn->buswidth);
|
||||
return qcom_bw_div(agg_rate, qn->buswidth);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user