linux/arch/powerpc/platforms/cell
Arnd Bergmann cc4b7c1814 [POWERPC] spufs: invalidate SLB translation before adding a new entry
When we replace an SLB entry in the MFC after using up all the available
entries, there is a short window in which an incorrect entry is marked
as valid.

The problem is that the 'valid' bit is stored in the ESID, which is
always written after the VSID. Overwriting the VSID first will make the
original ESID entry point to the new VSID, which means that any
concurrent DMA accessing the old ESID ends up being redirected to the
new virtual address.  A few cycles later, we write the new ESID and
everything is fine again.

That race can be closed by writing a zero entry to the ESID first, which
makes sure that the VSID is not accessed until we write the new ESID.

Note that we don't actually need to invalidate the SLB entry using the
invalidation register, which would also flush any ERAT entries for that
segment, because the segment translation does not become invalid but is
only removed from the SLB cache.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
2008-02-29 15:17:49 +11:00
..
spufs [POWERPC] spufs: synchronize IRQ when disabling 2008-02-29 15:16:48 +11:00
axon_msi.c [POWERPC] Avoid possible extra of_node_put in axon_msi.c 2008-02-06 16:30:00 +11:00
cbe_cpufreq_pervasive.c [POWERPC] cell: Move cbe_regs.h to include/asm-powerpc/cell-regs.h 2007-10-09 21:01:56 +10:00
cbe_cpufreq_pmi.c [POWERPC] cell: Convert #include of asm/of_{platform, device}.h into linux/of_{platform, device}.h. 2007-12-19 01:00:02 +01:00
cbe_cpufreq.c [POWERPC] cell: Convert #include of asm/of_{platform, device}.h into linux/of_{platform, device}.h. 2007-12-19 01:00:02 +01:00
cbe_cpufreq.h [CELL] cbe_cpufreq: reorganize code 2007-07-20 21:41:38 +02:00
cbe_regs.c [POWERPC] cell/cbe_regs.c: Add missing of_node_put 2007-12-20 17:13:51 +11:00
cbe_thermal.c [POWERPC] cell: Move cbe_regs.h to include/asm-powerpc/cell-regs.h 2007-10-09 21:01:56 +10:00
interrupt.c [POWERPC] Fix CONFIG_SMP=n build break 2007-11-08 14:15:30 +11:00
interrupt.h [POWERPC] cell: Add routines for managing PMU interrupts 2006-12-04 20:40:12 +11:00
io-workarounds.c [POWERPC] cell: Use machine_*_initcall() hooks in platform code 2008-01-17 14:57:15 +11:00
iommu.c [POWERPC] Make cell IOMMU fixed mapping printk more useful 2008-02-08 19:52:40 +11:00
Kconfig [POWERPC] spufs: Add marker-based tracing facility 2008-02-06 16:26:59 +11:00
Makefile Merge branch 'linux-2.6' 2008-01-24 10:07:21 +11:00
pervasive.c [POWERPC] cell: Move cbe_regs.h to include/asm-powerpc/cell-regs.h 2007-10-09 21:01:56 +10:00
pervasive.h [POWERPC] cell: add RAS support 2006-06-21 15:01:29 +10:00
pmu.c [POWERPC] cell: Use machine_*_initcall() hooks in platform code 2008-01-17 14:57:15 +11:00
ras.c [POWERPC] Cell RAS: Remove DEBUG, and add license and copyright 2008-02-14 22:11:02 +11:00
ras.h [POWERPC] cell: add RAS support 2006-06-21 15:01:29 +10:00
setup.c [POWERPC] Search for and publish cell OF platform devices earlier 2008-02-06 16:29:59 +11:00
smp.c [POWERPC] Cleanup SMT thread handling 2007-12-03 13:56:25 +11:00
spider-pic.c [POWERPC] Provide a default irq_host match, which matches on an exact of_node 2007-09-14 01:33:20 +10:00
spu_base.c [POWERPC] spufs: invalidate SLB translation before adding a new entry 2008-02-29 15:17:49 +11:00
spu_callbacks.c [POWERPC] cell: Remove DEBUG for SPU callbacks 2007-09-19 15:12:17 +10:00
spu_fault.c [POWERPC] spufs: move fault, lscsa_alloc and switch code to spufs module 2007-12-21 19:46:19 +11:00
spu_manage.c [POWERPC] cell: wrap master run control bit 2007-12-21 19:45:05 +11:00
spu_notify.c [POWERPC] Oprofile: Remove dependency on spufs module 2007-12-28 15:07:52 +11:00
spu_priv1_mmio.c [POWERPC] Celleb: consolidate spu management ops 2007-02-07 14:03:21 +11:00
spu_priv1_mmio.h [POWERPC] cell: abstract spu management routines 2006-12-04 20:40:39 +11:00
spu_syscalls.c [POWERPC] Oprofile: Remove dependency on spufs module 2007-12-28 15:07:52 +11:00