handle_interrupt_gicv3: don't take runq_lock

To avoid dead-lock with the function taking the lock with
ihk_mc_spinlock_lock_noirq().

Change-Id: If689e8cc5fff81f627bcf98bfa7df7d4c13f4209
This commit is contained in:
Masamichi Takagi
2020-06-15 13:01:12 +09:00
parent d4056acfc3
commit ac0081eddd

View File

@ -311,7 +311,7 @@ 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(); struct cpu_local_var *v = get_this_cpu_local_var();
unsigned long irqflags; //unsigned long irqflags;
int do_check = 0; int do_check = 0;
irqnr = gic_read_iar(); irqnr = gic_read_iar();
@ -326,14 +326,14 @@ 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);
irqflags = ihk_mc_spinlock_lock(&v->runq_lock); //irqflags = ihk_mc_spinlock_lock(&v->runq_lock);
/* For migration by IPI or by timesharing */ /* For migration by IPI or by timesharing */
if (v->flags & if (v->flags &
(CPU_FLAG_NEED_MIGRATE | CPU_FLAG_NEED_RESCHED)) { (CPU_FLAG_NEED_MIGRATE | CPU_FLAG_NEED_RESCHED)) {
v->flags &= ~CPU_FLAG_NEED_RESCHED; v->flags &= ~CPU_FLAG_NEED_RESCHED;
do_check = 1; do_check = 1;
} }
ihk_mc_spinlock_unlock(&v->runq_lock, irqflags); //ihk_mc_spinlock_unlock(&v->runq_lock, irqflags);
if (do_check) { if (do_check) {
check_signal(0, regs, 0); check_signal(0, regs, 0);