aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/iommu.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/iommu.c')
-rw-r--r--arch/powerpc/kernel/iommu.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index 961bb03413f3..0cfcf98aafca 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -501,6 +501,14 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid)
501 tbl->it_map = page_address(page); 501 tbl->it_map = page_address(page);
502 memset(tbl->it_map, 0, sz); 502 memset(tbl->it_map, 0, sz);
503 503
504 /*
505 * Reserve page 0 so it will not be used for any mappings.
506 * This avoids buggy drivers that consider page 0 to be invalid
507 * to crash the machine or even lose data.
508 */
509 if (tbl->it_offset == 0)
510 set_bit(0, tbl->it_map);
511
504 tbl->it_hint = 0; 512 tbl->it_hint = 0;
505 tbl->it_largehint = tbl->it_halfpoint; 513 tbl->it_largehint = tbl->it_halfpoint;
506 spin_lock_init(&tbl->it_lock); 514 spin_lock_init(&tbl->it_lock);