Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4b0ef33 authored by Ankit Sharma's avatar Ankit Sharma
Browse files

sched: fixes sched_boost_disable



Everytime a boost level is disabled, if its refcount is zero, its exit
routine and the entry routine of the next boost level are called. This
causes an issue when the previous boost level and the next boost level
are same as it increments the boost count of the next boost level.This
is fixed by not calling the entry and exit routines, when the previous
and the next boost levels are same.

Change-Id: I482d0ee70c082bc647768958ffa5fcd6f5ee8e5b
Signed-off-by: default avatarAnkit Sharma <quic_anshar@quicinc.com>
parent 3429628c
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ static int sched_effective_boost(void)
static void sched_boost_disable(int type)
{
	struct sched_boost_data *sb = &sched_boosts[type];
	int next_boost;
	int next_boost, prev_boost = sched_boost_type;

	if (sb->refcount <= 0)
		return;
@@ -156,14 +156,15 @@ static void sched_boost_disable(int type)
	if (sb->refcount)
		return;

	next_boost = sched_effective_boost();
	if (next_boost == prev_boost)
		return;
	/*
	 * This boost's refcount becomes zero, so it must
	 * be disabled. Disable it first and then apply
	 * the next boost.
	 */
	sb->exit();

	next_boost = sched_effective_boost();
	sched_boosts[prev_boost].exit();
	sched_boosts[next_boost].enter();
}

+2 −3
Original line number Diff line number Diff line
@@ -883,12 +883,11 @@ int core_ctl_set_boost(bool boost)
			if (!cluster->boost) {
				ret = -EINVAL;
				break;
			} else {
			}
			--cluster->boost;
			boost_state_changed = !cluster->boost;
		}
	}
	}
	spin_unlock_irqrestore(&state_lock, flags);

	if (boost_state_changed) {