diff options
Diffstat (limited to 'arch/powerpc/kernel/iommu.c')
-rw-r--r-- | arch/powerpc/kernel/iommu.c | 8 |
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); |