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

Commit 328a356f authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "sched: Improve the scheduler"

parents 1c8ec7df 6b9b3223
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -3817,8 +3817,12 @@ void scheduler_tick(void)
	if (curr->sched_class == &fair_sched_class)
		check_for_migration(rq, curr);

	if (idle_cpu(cpu) && is_reserved(cpu))
#ifdef CONFIG_SMP
	rq_lock(rq, &rf);
	if (idle_cpu(cpu) && is_reserved(cpu) && !rq->active_balance)
		clear_reserved(cpu);
	rq_unlock(rq, &rf);
#endif

}

+16 −1
Original line number Diff line number Diff line
@@ -12838,12 +12838,23 @@ static void walt_rotate_work_func(struct work_struct *work)
{
	struct walt_rotate_work *wr = container_of(work,
					struct walt_rotate_work, w);
	struct rq *src_rq = cpu_rq(wr->src_cpu), *dst_rq = cpu_rq(wr->dst_cpu);
	unsigned long flags;

	migrate_swap(wr->src_task, wr->dst_task, wr->dst_cpu, wr->src_cpu);

	put_task_struct(wr->src_task);
	put_task_struct(wr->dst_task);

	local_irq_save(flags);
	double_rq_lock(src_rq, dst_rq);

	dst_rq->active_balance = 0;
	src_rq->active_balance = 0;

	double_rq_unlock(src_rq, dst_rq);
	local_irq_restore(flags);

	clear_reserved(wr->src_cpu);
	clear_reserved(wr->dst_cpu);
}
@@ -12930,7 +12941,8 @@ static void walt_check_for_rotation(struct rq *src_rq)
	dst_rq = cpu_rq(dst_cpu);

	double_rq_lock(src_rq, dst_rq);
	if (dst_rq->curr->sched_class == &fair_sched_class) {
	if (dst_rq->curr->sched_class == &fair_sched_class &&
		!src_rq->active_balance && !dst_rq->active_balance) {
		get_task_struct(src_rq->curr);
		get_task_struct(dst_rq->curr);

@@ -12943,7 +12955,10 @@ static void walt_check_for_rotation(struct rq *src_rq)

		wr->src_cpu = src_cpu;
		wr->dst_cpu = dst_cpu;
		dst_rq->active_balance = 1;
		src_rq->active_balance = 1;
	}

	double_rq_unlock(src_rq, dst_rq);

	if (wr)