Merge "sched/walt: when halt kicks an unhalted cpu, set overload flag"

This commit is contained in:
qctecmdr 2022-12-04 19:13:24 -08:00 committed by Gerrit - the friendly Code Review server
commit d6bdf0c924

View File

@ -806,9 +806,9 @@ static bool should_help_min_cap(int this_cpu)
/* similar to sysctl_sched_migration_cost */
#define NEWIDLE_BALANCE_THRESHOLD 500000
static void walt_newidle_balance(void *unused, struct rq *this_rq,
static void walt_newidle_balance(struct rq *this_rq,
struct rq_flags *rf, int *pulled_task,
int *done)
int *done, int force_overload)
{
int this_cpu = this_rq->cpu;
struct walt_rq *wrq = &per_cpu(walt_rq, this_cpu);
@ -859,7 +859,7 @@ static void walt_newidle_balance(void *unused, struct rq *this_rq,
if (walt_balance_rt(this_rq) || this_rq->nr_running)
goto rt_pulled;
if (!READ_ONCE(this_rq->rd->overload))
if (!force_overload && !READ_ONCE(this_rq->rd->overload))
goto repin;
if (atomic_read(&this_rq->nr_iowait) && !enough_idle)
@ -958,7 +958,7 @@ void walt_smp_newidle_balance(void *ignored)
rq_lock(rq, &rf);
update_rq_clock(rq);
walt_newidle_balance(NULL, rq, &rf, &pulled_task, &done);
walt_newidle_balance(rq, &rf, &pulled_task, &done, true);
resched_curr(rq);
rq_unlock(rq, &rf);
}
@ -1060,6 +1060,13 @@ static void walt_can_migrate_task(void *unused, struct task_struct *p,
*can_migrate = 0;
}
static void walt_sched_newidle_balance(void *unused, struct rq *this_rq,
struct rq_flags *rf, int *pulled_task,
int *done)
{
walt_newidle_balance(this_rq, rf, pulled_task, done, false);
}
void walt_lb_init(void)
{
int cpu;
@ -1069,7 +1076,7 @@ void walt_lb_init(void)
register_trace_android_rvh_sched_nohz_balancer_kick(walt_nohz_balancer_kick, NULL);
register_trace_android_rvh_can_migrate_task(walt_can_migrate_task, NULL);
register_trace_android_rvh_find_busiest_queue(walt_find_busiest_queue, NULL);
register_trace_android_rvh_sched_newidle_balance(walt_newidle_balance, NULL);
register_trace_android_rvh_sched_newidle_balance(walt_sched_newidle_balance, NULL);
for_each_cpu(cpu, cpu_possible_mask) {
call_single_data_t *csd;