schedule_timeout(): give a chance to other process in spin sleep if CPU core is oversubscribed

This commit is contained in:
Balazs Gerofi
2015-07-28 20:06:56 +09:00
parent 9b1e691588
commit 4e58d08f5c
2 changed files with 68 additions and 22 deletions

View File

@@ -2338,14 +2338,14 @@ int sched_wakeup_process(struct process *proc, int valid_states)
proc->ftn->pid, valid_states, proc->ftn->status, proc->cpu_id, ihk_mc_get_processor_id());
irqstate = ihk_mc_spinlock_lock(&(proc->spin_sleep_lock));
if (proc->spin_sleep) {
if (proc->spin_sleep > 0) {
dkprintf("sched_wakeup_process() spin wakeup: cpu_id: %d\n",
proc->cpu_id);
spin_slept = 1;
proc->spin_sleep = 0;
status = 0;
}
--proc->spin_sleep;
ihk_mc_spinlock_unlock(&(proc->spin_sleep_lock), irqstate);
if (spin_slept) {