summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Woodhouse <David.Woodhouse@intel.com>2011-05-31 00:22:52 +0100
committerDavid Woodhouse <David.Woodhouse@intel.com>2011-06-01 12:48:21 +0100
commit70e535d1e5d1e4317e894d6228b762cf9c3fbc6a (patch)
tree2c7ed5f263440c6a7302c19a31827488eade9ea5
parent8519dc4401ddf8a5399f979870bbeeadbc111186 (diff)
downloadlinux-3.10-70e535d1e5d1e4317e894d6228b762cf9c3fbc6a.tar.gz
linux-3.10-70e535d1e5d1e4317e894d6228b762cf9c3fbc6a.tar.bz2
linux-3.10-70e535d1e5d1e4317e894d6228b762cf9c3fbc6a.zip
intel-iommu: Fix off-by-one in RMRR setup
We were mapping an extra byte (and hence usually an extra page): iommu_prepare_identity_map() expects to be given an 'end' argument which is the last byte to be mapped; not the first byte *not* to be mapped. Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
-rw-r--r--drivers/pci/intel-iommu.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
index b0c96d39080..a8867bd745e 100644
--- a/drivers/pci/intel-iommu.c
+++ b/drivers/pci/intel-iommu.c
@@ -2147,7 +2147,7 @@ static inline int iommu_prepare_rmrr_dev(struct dmar_rmrr_unit *rmrr,
if (pdev->dev.archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO)
return 0;
return iommu_prepare_identity_map(pdev, rmrr->base_address,
- rmrr->end_address + 1);
+ rmrr->end_address);
}
#ifdef CONFIG_DMAR_FLOPPY_WA
@@ -2161,7 +2161,7 @@ static inline void iommu_prepare_isa(void)
return;
printk(KERN_INFO "IOMMU: Prepare 0-16MiB unity mapping for LPC\n");
- ret = iommu_prepare_identity_map(pdev, 0, 16*1024*1024);
+ ret = iommu_prepare_identity_map(pdev, 0, 16*1024*1024 - 1);
if (ret)
printk(KERN_ERR "IOMMU: Failed to create 0-16MiB identity map; "