obtain_clone_cpuid(): avoid locking while partitioned execution

Change-Id: Iabb4784835be7dc9b2f555acc3a711fcc23ee7da
This commit is contained in:
Balazs Gerofi
2019-08-13 15:03:00 +09:00
committed by Masamichi Takagi
parent 51fe77cdae
commit 7aa2d64294

View File

@ -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;
} }