obtain_clone_cpuid(): avoid locking while partitioned execution
Change-Id: Iabb4784835be7dc9b2f555acc3a711fcc23ee7da
This commit is contained in:
committed by
Masamichi Takagi
parent
51fe77cdae
commit
7aa2d64294
@ -59,9 +59,11 @@ int obtain_clone_cpuid(cpu_set_t *cpu_set, int use_last)
|
|||||||
{
|
{
|
||||||
int min_queue_len = -1;
|
int min_queue_len = -1;
|
||||||
int cpu, min_cpu = -1, uti_cpu = -1;
|
int cpu, min_cpu = -1, uti_cpu = -1;
|
||||||
unsigned long irqstate;
|
unsigned long irqstate = 0;
|
||||||
|
|
||||||
irqstate = ihk_mc_spinlock_lock(&runq_reservation_lock);
|
if (!cpu_local_var(current)->proc->nr_processes) {
|
||||||
|
irqstate = ihk_mc_spinlock_lock(&runq_reservation_lock);
|
||||||
|
}
|
||||||
|
|
||||||
/* Find the first allowed core with the shortest run queue */
|
/* Find the first allowed core with the shortest run queue */
|
||||||
for (cpu = 0; cpu < num_processors; ++cpu) {
|
for (cpu = 0; cpu < num_processors; ++cpu) {
|
||||||
@ -104,7 +106,10 @@ int obtain_clone_cpuid(cpu_set_t *cpu_set, int use_last)
|
|||||||
__sync_fetch_and_add(&get_cpu_local_var(min_cpu)->runq_reserved,
|
__sync_fetch_and_add(&get_cpu_local_var(min_cpu)->runq_reserved,
|
||||||
1);
|
1);
|
||||||
}
|
}
|
||||||
ihk_mc_spinlock_unlock(&runq_reservation_lock, irqstate);
|
|
||||||
|
if (!cpu_local_var(current)->proc->nr_processes) {
|
||||||
|
ihk_mc_spinlock_unlock(&runq_reservation_lock, irqstate);
|
||||||
|
}
|
||||||
|
|
||||||
return min_cpu;
|
return min_cpu;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user