linux/arch
Arnd Bergmann d015fe9951 powerpc/cell/axon-msi: Retry on missing interrupt
The MSI capture logic for the axon bridge can sometimes
lose interrupts in case of high DMA and interrupt load,
when it signals an MSI interrupt to the MPIC interrupt
controller while we are already handling another MSI.

Each MSI vector gets written into a FIFO buffer in main
memory using DMA, and that DMA access is normally flushed
by the actual interrupt packet on the IOIF.  An MMIO
register in the MSIC holds the position of the last
entry in the FIFO buffer that was written.  However,
reading that position does not flush the DMA, so that
we can observe stale data in the buffer.

In a stress test, we have observed the DMA to arrive
up to 14 microseconds after reading the register.

This patch works around this problem by retrying the
access to the FIFO buffer.

We can reliably detect the conditioning by writing
an invalid MSI vector into the FIFO buffer after
reading from it, assuming that all MSIs we get
are valid.  After detecting an invalid MSI vector,
we udelay(1) in the interrupt cascade for up to
100 times before giving up.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2008-12-01 09:40:18 +11:00
..
alpha Merge branch 'v28-range-hrtimers-for-linus-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2008-10-23 10:53:02 -07:00
arm iop-adma: use iop_paranoia() for debug BUG_ONs 2008-11-11 13:12:33 -07:00
avr32 Merge branches 'boards' and 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6 2008-10-23 15:24:10 +02:00
blackfin Blackfin arch: fix a broken define in dma-mapping 2008-11-18 17:48:22 +08:00
cris [CRIS] Remove links from CRIS build 2008-10-31 23:37:57 +01:00
frv container freezer: implement freezer cgroup subsystem 2008-10-20 08:52:34 -07:00
h8300 Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/dvrabel/uwb 2008-10-23 08:20:34 -07:00
ia64 KVM: ia64: fix vmm_spin_{un}lock for !CONFIG_SMP 2008-11-11 21:01:30 +02:00
m32r Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rric/oprofile 2008-10-23 10:05:40 -07:00
m68k m68k: Fix off-by-one in m68k_setup_user_interrupt() 2008-11-15 11:36:06 -08:00
m68knommu container freezer: implement freezer cgroup subsystem 2008-10-20 08:52:34 -07:00
mips CHAR: Delete old and now unused M48T35 RTC driver for SGI IP27. 2008-10-30 14:44:35 +00:00
mn10300 MN10300: Don't do misalignment handling for userspace 2008-11-12 10:41:18 -08:00
parisc fix cpumask build breakage on parisc 2008-11-13 11:30:03 -08:00
powerpc powerpc/cell/axon-msi: Retry on missing interrupt 2008-12-01 09:40:18 +11:00
s390 [S390] s390: Fix build for !CONFIG_S390_GUEST + CONFIG_VIRTIO_CONSOLE 2008-10-28 11:12:06 +01:00
sh sh: fix sh2a cache entry_mask 2008-10-31 16:29:20 +09:00
sparc Revert "sparc: correct section of current_pc()" 2008-11-10 12:33:30 -08:00
sparc64 sparc64: Update defconfig. 2008-11-10 12:35:29 -08:00
um Merge git://git.kernel.org/pub/scm/linux/kernel/git/viro/bdev 2008-10-23 10:23:07 -07:00
x86 Merge branch 'kvm-updates/2.6.28' of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm 2008-11-12 10:38:42 -08:00
xtensa Merge git://git.kernel.org/pub/scm/linux/kernel/git/czankel/xtensa-2.6 2008-10-23 09:16:56 -07:00
.gitignore
Kconfig Change UTF8 chars in Kconfig help text about Oprofile AMD barcelona 2008-10-27 19:15:39 +01:00