Merge "sched/walt: when halt kicks an unhalted cpu, set overload flag"
This commit is contained in:
commit
d6bdf0c924
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user