do_migrate(): disable IRQ while holding migq_lock to avoid deadlocking with reschedule interrupts

This commit is contained in:
Balazs Gerofi
2015-07-09 15:23:04 +09:00
parent 43a774fbfc
commit 7647c99cc2

View File

@@ -2151,7 +2151,7 @@ static void do_migrate(void)
struct migrate_request *req, *tmp; struct migrate_request *req, *tmp;
unsigned long irqstate = 0; unsigned long irqstate = 0;
ihk_mc_spinlock_lock_noirq(&cur_v->migq_lock); irqstate = ihk_mc_spinlock_lock(&cur_v->migq_lock);
list_for_each_entry_safe(req, tmp, &cur_v->migq, list) { list_for_each_entry_safe(req, tmp, &cur_v->migq, list) {
int cpu_id; int cpu_id;
int old_cpu_id; int old_cpu_id;
@@ -2195,7 +2195,7 @@ static void do_migrate(void)
ack: ack:
waitq_wakeup(&req->wq); waitq_wakeup(&req->wq);
} }
ihk_mc_spinlock_unlock_noirq(&cur_v->migq_lock); ihk_mc_spinlock_unlock(&cur_v->migq_lock, irqstate);
} }
void schedule(void) void schedule(void)