do_migrate(): disable IRQ while holding migq_lock to avoid deadlocking with reschedule interrupts
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user