[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [microblaze-uclinux] [PATCH] return from interrupt.
Hi Kennth,
Kenneth Johansson wrote:
Well then you need to investigate more. The patch is correct and
needed.
but If you have the same problem with the interrupt disable I have seen
all sort of interesting things can happen.
you could try to run with the attaches files
arch/microblaze/kernel/entry.S
include/asm-microblaze/system.h
This is interesting (and scary!) - your changes fix a problem I've been
looking at (related to Falk's and Jonas's). The patch is basically two
things:
1. bracket every MSR write with nops
2. iterate enable/disable IRQ code to make sure it "sticks".
The problem I've been looking at relates to behaviour under very high
IRQ loads (>10KHz timer interrupts), and these changes seem to fix that.
However, I have trouble thinking of a consistent theory for why this
should be necessary.
The MB ref guide is a bit vague about the msr operations, it says there
is a 1 cycle latency in settings or clearing bits, apart from the carry
bit. Nop-padding msr ops makes sense because and mts/msrset/msrclr
immediately followed by mfs could result in the wrong value being
returned.
However, it doesn't explain the irq enable/disable looping!
Is it a MicroBlaze bug/feature whereby an IRQ received in that 1 cycle
latency window causes the interrupt to be taken? Even if that were the
case, the eventual RTID at the end of that handler should mean
interrupts are disabled when execution resumes immediately following the
msrclr instruction.
I'll leave this particular system under test for a while, see if we get
an eventual failure, but it's looking pretty solid right now.
Cheers,
John
___________________________
microblaze-uclinux mailing list
microblaze-uclinux@xxxxxxxxxxxxxx
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/