[parisc-linux] irq.c patch to fix lockups on recent kernels

Grant Grundler grundler@dsl2.external.hp.com
Thu, 16 May 2002 15:30:48 -0600


Grant Grundler wrote:
> Only the I-bit is disabled when do_cpu_irq_mask() is entered.
> Bits in the EIRR are already cleared by assembler code to indicate
> we are handling those interrupts.
> If any bits in EIRR are set when re-enabling I-bit (in PSW),
> we should get another external interrupt.

I'm thinking we should:
o move the EIRR bit handling into do_cpu_irq_mask()
  (do_cpu_irq_mask() could loop until EIRR is zero).
o move I-bit handling into the entry.S assembly.

That way, EIRR and EIM handling is all in C and I-bit is all in asm.
That seems to make the most sense to me since EIRR/EIM are closely
related and I-bit is orthogonal to that.

grant