diff options
| -rw-r--r-- | arch/powerpc/sysdev/dart_iommu.c | 7 | 
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 {  |