sched/{fair,tune}: use reciprocal_value to compute boost margin
Change-Id: I493b07360c46eee0b72c2a046dab9ec6cb3427ef Signed-off-by: Patrick Bellasi <patrick.bellasi@arm.com> Signed-off-by: Srinath Sridharan <srinathsr@google.com>
This commit is contained in:
parent
41d9288e3e
commit
7b8577d94c
2 changed files with 9 additions and 17 deletions
|
@ -5805,6 +5805,8 @@ static bool cpu_overutilized(int cpu)
|
|||
|
||||
#ifdef CONFIG_SCHED_TUNE
|
||||
|
||||
struct reciprocal_value schedtune_spc_rdiv;
|
||||
|
||||
static long
|
||||
schedtune_margin(unsigned long signal, long boost)
|
||||
{
|
||||
|
@ -5815,29 +5817,16 @@ schedtune_margin(unsigned long signal, long boost)
|
|||
*
|
||||
* The Boost (B) value is used to compute a Margin (M) which is
|
||||
* proportional to the complement of the original Signal (S):
|
||||
* M = B * (SCHED_LOAD_SCALE - S), if B is positive
|
||||
* M = B * S, if B is negative
|
||||
* M = B * (SCHED_CAPACITY_SCALE - S)
|
||||
* The obtained M could be used by the caller to "boost" S.
|
||||
*/
|
||||
if (boost >= 0) {
|
||||
margin = SCHED_LOAD_SCALE - signal;
|
||||
margin = SCHED_CAPACITY_SCALE - signal;
|
||||
margin *= boost;
|
||||
} else
|
||||
margin = -signal * boost;
|
||||
/*
|
||||
* Fast integer division by constant:
|
||||
* Constant : (C) = 100
|
||||
* Precision : 0.1% (P) = 0.1
|
||||
* Reference : C * 100 / P (R) = 100000
|
||||
*
|
||||
* Thus:
|
||||
* Shift bits : ceil(log(R,2)) (S) = 17
|
||||
* Mult const : round(2^S/C) (M) = 1311
|
||||
*
|
||||
*
|
||||
*/
|
||||
margin *= 1311;
|
||||
margin >>= 17;
|
||||
|
||||
margin = reciprocal_divide(margin, schedtune_spc_rdiv);
|
||||
|
||||
if (boost < 0)
|
||||
margin *= -1;
|
||||
|
|
|
@ -17,6 +17,7 @@ static bool schedtune_initialized = false;
|
|||
|
||||
unsigned int sysctl_sched_cfs_boost __read_mostly;
|
||||
|
||||
extern struct reciprocal_value schedtune_spc_rdiv;
|
||||
extern struct target_nrg schedtune_target_nrg;
|
||||
|
||||
/* Performance Boost region (B) threshold params */
|
||||
|
@ -937,6 +938,8 @@ schedtune_init(void)
|
|||
pr_info("schedtune: configured to support global boosting only\n");
|
||||
#endif
|
||||
|
||||
schedtune_spc_rdiv = reciprocal_value(100);
|
||||
|
||||
return 0;
|
||||
|
||||
nodata:
|
||||
|
|
Loading…
Add table
Reference in a new issue