Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f95d5bd authored by Robin Getz's avatar Robin Getz Committed by Bryan Wu
Browse files

Blackfin arch: don't accidently re-enable interrupts



Make sure we don't accidently re-enable interrupts if we are being
called in atomic context

Signed-off-by: default avatarRobin Getz <rgetz@blackfin.uclinux.org>
Signed-off-by: default avatarBryan Wu <cooloney@kernel.org>
parent 76e8fe4d
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -1052,8 +1052,9 @@ void show_regs(struct pt_regs *fp)
	char buf [150];
	struct irqaction *action;
	unsigned int i;
	unsigned long flags;
	unsigned long flags = 0;
	unsigned int cpu = smp_processor_id();
	unsigned char in_atomic = (bfin_read_IPEND() & 0x10) || in_atomic();

	verbose_printk(KERN_NOTICE "\n" KERN_NOTICE "SEQUENCER STATUS:\t\t%s\n", print_tainted());
	verbose_printk(KERN_NOTICE " SEQSTAT: %08lx  IPEND: %04lx  SYSCFG: %04lx\n",
@@ -1073,17 +1074,22 @@ void show_regs(struct pt_regs *fp)
	}
	verbose_printk(KERN_NOTICE "  EXCAUSE   : 0x%lx\n",
		fp->seqstat & SEQSTAT_EXCAUSE);
	for (i = 6; i <= 15 ; i++) {
	for (i = 2; i <= 15 ; i++) {
		if (fp->ipend & (1 << i)) {
			if (i != 4) {
				decode_address(buf, bfin_read32(EVT0 + 4*i));
				verbose_printk(KERN_NOTICE "  physical IVG%i asserted : %s\n", i, buf);
			} else
				verbose_printk(KERN_NOTICE "  interrupts disabled\n");
		}
	}

	/* if no interrupts are going off, don't print this out */
	if (fp->ipend & ~0x3F) {
		for (i = 0; i < (NR_IRQS - 1); i++) {
			if (!in_atomic)
				spin_lock_irqsave(&irq_desc[i].lock, flags);

			action = irq_desc[i].action;
			if (!action)
				goto unlock;
@@ -1096,6 +1102,7 @@ void show_regs(struct pt_regs *fp)
			}
			verbose_printk("\n");
unlock:
			if (!in_atomic)
				spin_unlock_irqrestore(&irq_desc[i].lock, flags);
		}
	}