handle_interrupt_gicv3(): check for CPU_FLAG_NEED_RESCHED as well
Change-Id: Id6ade08e4e572a6d837476de2872126442d3591c
This commit is contained in:
committed by
Masamichi Takagi
parent
5395891966
commit
2db3717e57
@@ -310,6 +310,9 @@ void handle_interrupt_gicv3(struct pt_regs *regs)
|
|||||||
{
|
{
|
||||||
uint64_t irqnr;
|
uint64_t irqnr;
|
||||||
const int from_user = interrupt_from_user(regs);
|
const int from_user = interrupt_from_user(regs);
|
||||||
|
struct cpu_local_var *v = get_this_cpu_local_var();
|
||||||
|
unsigned long irqflags;
|
||||||
|
int do_check = 0;
|
||||||
|
|
||||||
irqnr = gic_read_iar();
|
irqnr = gic_read_iar();
|
||||||
cpu_enable_nmi();
|
cpu_enable_nmi();
|
||||||
@@ -323,10 +326,18 @@ void handle_interrupt_gicv3(struct pt_regs *regs)
|
|||||||
}
|
}
|
||||||
set_cputime(from_user ? CPUTIME_MODE_K2U : CPUTIME_MODE_K2K_OUT);
|
set_cputime(from_user ? CPUTIME_MODE_K2U : CPUTIME_MODE_K2K_OUT);
|
||||||
|
|
||||||
/* for migration by IPI */
|
irqflags = ihk_mc_spinlock_lock(&v->runq_lock);
|
||||||
if (get_this_cpu_local_var()->flags & CPU_FLAG_NEED_MIGRATE) {
|
/* For migration by IPI or by timesharing */
|
||||||
schedule();
|
if (v->flags &
|
||||||
|
(CPU_FLAG_NEED_MIGRATE | CPU_FLAG_NEED_RESCHED)) {
|
||||||
|
v->flags &= ~CPU_FLAG_NEED_RESCHED;
|
||||||
|
do_check = 1;
|
||||||
|
}
|
||||||
|
ihk_mc_spinlock_unlock(&v->runq_lock, irqflags);
|
||||||
|
|
||||||
|
if (do_check) {
|
||||||
check_signal(0, regs, 0);
|
check_signal(0, regs, 0);
|
||||||
|
schedule();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user