cpu-hotplug: Keep atleast 1 online and un-isolated CPU
The PM_QOS_CPU_DMA_LATENCY vote attached to an IRQ is discarded, if it is affined to an isolated CPU. So we need atleast 1 CPU in online and un-isolate state. The scheduler rejects isolating a CPU if it is the only online and un-isolated CPU in the system. Add the same check for CPU hotplug. Change-Id: I5bdfe6e3bb0352ed3ae5a2de90097b73d248f3fc Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
This commit is contained in:
parent
84c69cb5aa
commit
76aa496f89
2 changed files with 11 additions and 0 deletions
|
@ -98,6 +98,13 @@ extern const struct cpumask *const cpu_isolated_mask;
|
||||||
#define num_present_cpus() cpumask_weight(cpu_present_mask)
|
#define num_present_cpus() cpumask_weight(cpu_present_mask)
|
||||||
#define num_active_cpus() cpumask_weight(cpu_active_mask)
|
#define num_active_cpus() cpumask_weight(cpu_active_mask)
|
||||||
#define num_isolated_cpus() cpumask_weight(cpu_isolated_mask)
|
#define num_isolated_cpus() cpumask_weight(cpu_isolated_mask)
|
||||||
|
#define num_online_uniso_cpus() \
|
||||||
|
({ \
|
||||||
|
cpumask_t mask; \
|
||||||
|
\
|
||||||
|
cpumask_andnot(&mask, cpu_online_mask, cpu_isolated_mask); \
|
||||||
|
cpumask_weight(&mask); \
|
||||||
|
})
|
||||||
#define cpu_online(cpu) cpumask_test_cpu((cpu), cpu_online_mask)
|
#define cpu_online(cpu) cpumask_test_cpu((cpu), cpu_online_mask)
|
||||||
#define cpu_possible(cpu) cpumask_test_cpu((cpu), cpu_possible_mask)
|
#define cpu_possible(cpu) cpumask_test_cpu((cpu), cpu_possible_mask)
|
||||||
#define cpu_present(cpu) cpumask_test_cpu((cpu), cpu_present_mask)
|
#define cpu_present(cpu) cpumask_test_cpu((cpu), cpu_present_mask)
|
||||||
|
@ -109,6 +116,7 @@ extern const struct cpumask *const cpu_isolated_mask;
|
||||||
#define num_present_cpus() 1U
|
#define num_present_cpus() 1U
|
||||||
#define num_active_cpus() 1U
|
#define num_active_cpus() 1U
|
||||||
#define num_isolated_cpus() 0U
|
#define num_isolated_cpus() 0U
|
||||||
|
#define num_online_uniso_cpus() 1U
|
||||||
#define cpu_online(cpu) ((cpu) == 0)
|
#define cpu_online(cpu) ((cpu) == 0)
|
||||||
#define cpu_possible(cpu) ((cpu) == 0)
|
#define cpu_possible(cpu) ((cpu) == 0)
|
||||||
#define cpu_present(cpu) ((cpu) == 0)
|
#define cpu_present(cpu) ((cpu) == 0)
|
||||||
|
|
|
@ -361,6 +361,9 @@ static int _cpu_down(unsigned int cpu, int tasks_frozen)
|
||||||
if (!cpu_online(cpu))
|
if (!cpu_online(cpu))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (!tasks_frozen && !cpu_isolated(cpu) && num_online_uniso_cpus() == 1)
|
||||||
|
return -EBUSY;
|
||||||
|
|
||||||
cpu_hotplug_begin();
|
cpu_hotplug_begin();
|
||||||
|
|
||||||
err = __cpu_notify(CPU_DOWN_PREPARE | mod, hcpu, -1, &nr_calls);
|
err = __cpu_notify(CPU_DOWN_PREPARE | mod, hcpu, -1, &nr_calls);
|
||||||
|
|
Loading…
Add table
Reference in a new issue