diff options
| -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); |
