diff --git a/kernel/power/qos.c b/kernel/power/qos.c index ec25fb682f1d..eed4e7957dcc 100644 --- a/kernel/power/qos.c +++ b/kernel/power/qos.c @@ -318,7 +318,8 @@ static inline int pm_qos_set_value_for_cpus(struct pm_qos_request *new_req, for_each_cpu(cpu, to_cpumask(&affected_cpus)) { if (c->target_per_cpu[cpu] != req->node.prio) { c->target_per_cpu[cpu] = req->node.prio; - *cpus |= BIT(cpu); + if (cpus) + *cpus |= BIT(cpu); } } @@ -329,7 +330,8 @@ static inline int pm_qos_set_value_for_cpus(struct pm_qos_request *new_req, for_each_cpu(cpu, to_cpumask(&new_req_cpus)) { if (c->target_per_cpu[cpu] != PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE) { c->target_per_cpu[cpu] = PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE; - *cpus |= BIT(cpu); + if (cpus) + *cpus |= BIT(cpu); } } diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c index 8682e90df0fd..44d040db4e0a 100644 --- a/kernel/sched/idle.c +++ b/kernel/sched/idle.c @@ -252,6 +252,8 @@ static void do_idle(void) tick_nohz_idle_stop_tick(); cpuhp_report_idle_dead(); arch_cpu_idle_dead(); + } else { + cpuidle_set_idle_cpu(cpu); } arch_cpu_idle_enter(); @@ -269,6 +271,7 @@ static void do_idle(void) } else { cpuidle_idle_call(); } + cpuidle_clear_idle_cpu(cpu); arch_cpu_idle_exit(); }