aboutsummaryrefslogtreecommitdiff
path: root/arch/powerpc/sysdev/dart_iommu.c
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2006-09-17 01:05:43 -0400
committerJeff Garzik <jeff@garzik.org>2006-09-17 01:05:43 -0400
commit803db244b9f71102e366fd689000c1417b9a7508 (patch)
tree2fe1abfd16cded8074905b6b91d9d1943e15325e /arch/powerpc/sysdev/dart_iommu.c
parent8b98a37c4b00f3fbcf162281bd4595777e61241b (diff)
parentf04b92e97d21b1921c91ec1d6d5e8bbf8606b77a (diff)
Merge branch 'master' into upstream-fixes
Diffstat (limited to 'arch/powerpc/sysdev/dart_iommu.c')
-rw-r--r--arch/powerpc/sysdev/dart_iommu.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c
index e32fadde1f7..03b4477dd7f 100644
--- a/arch/powerpc/sysdev/dart_iommu.c
+++ b/arch/powerpc/sysdev/dart_iommu.c
@@ -139,6 +139,7 @@ wait_more:
static void dart_flush(struct iommu_table *tbl)
{
+ mb();
if (dart_dirty) {
dart_tlb_invalidate_all();
dart_dirty = 0;
@@ -172,9 +173,13 @@ static void dart_build(struct iommu_table *tbl, long index,
uaddr += DART_PAGE_SIZE;
}
+ /* make sure all updates have reached memory */
+ mb();
+ in_be32((unsigned __iomem *)dp);
+ mb();
+
if (dart_is_u4) {
rpn = index;
- mb(); /* make sure all updates have reached memory */
while (npages--)
dart_tlb_invalidate_one(rpn++);
} else {