|
@@ -34,6 +34,7 @@
|
|
|
#include <linux/mempool.h>
|
|
|
#include <linux/memory.h>
|
|
|
#include <linux/timer.h>
|
|
|
+#include <linux/io.h>
|
|
|
#include <linux/iova.h>
|
|
|
#include <linux/iommu.h>
|
|
|
#include <linux/intel-iommu.h>
|
|
@@ -2809,18 +2810,18 @@ static void intel_iommu_init_qi(struct intel_iommu *iommu)
|
|
|
}
|
|
|
|
|
|
static int copy_context_table(struct intel_iommu *iommu,
|
|
|
- struct root_entry __iomem *old_re,
|
|
|
+ struct root_entry *old_re,
|
|
|
struct context_entry **tbl,
|
|
|
int bus, bool ext)
|
|
|
{
|
|
|
int tbl_idx, pos = 0, idx, devfn, ret = 0, did;
|
|
|
- struct context_entry __iomem *old_ce = NULL;
|
|
|
struct context_entry *new_ce = NULL, ce;
|
|
|
+ struct context_entry *old_ce = NULL;
|
|
|
struct root_entry re;
|
|
|
phys_addr_t old_ce_phys;
|
|
|
|
|
|
tbl_idx = ext ? bus * 2 : bus;
|
|
|
- memcpy_fromio(&re, old_re, sizeof(re));
|
|
|
+ memcpy(&re, old_re, sizeof(re));
|
|
|
|
|
|
for (devfn = 0; devfn < 256; devfn++) {
|
|
|
/* First calculate the correct index */
|
|
@@ -2855,7 +2856,8 @@ static int copy_context_table(struct intel_iommu *iommu,
|
|
|
}
|
|
|
|
|
|
ret = -ENOMEM;
|
|
|
- old_ce = ioremap_cache(old_ce_phys, PAGE_SIZE);
|
|
|
+ old_ce = memremap(old_ce_phys, PAGE_SIZE,
|
|
|
+ MEMREMAP_WB);
|
|
|
if (!old_ce)
|
|
|
goto out;
|
|
|
|
|
@@ -2867,7 +2869,7 @@ static int copy_context_table(struct intel_iommu *iommu,
|
|
|
}
|
|
|
|
|
|
/* Now copy the context entry */
|
|
|
- memcpy_fromio(&ce, old_ce + idx, sizeof(ce));
|
|
|
+ memcpy(&ce, old_ce + idx, sizeof(ce));
|
|
|
|
|
|
if (!__context_present(&ce))
|
|
|
continue;
|
|
@@ -2903,7 +2905,7 @@ static int copy_context_table(struct intel_iommu *iommu,
|
|
|
__iommu_flush_cache(iommu, new_ce, VTD_PAGE_SIZE);
|
|
|
|
|
|
out_unmap:
|
|
|
- iounmap(old_ce);
|
|
|
+ memunmap(old_ce);
|
|
|
|
|
|
out:
|
|
|
return ret;
|
|
@@ -2911,8 +2913,8 @@ out:
|
|
|
|
|
|
static int copy_translation_tables(struct intel_iommu *iommu)
|
|
|
{
|
|
|
- struct root_entry __iomem *old_rt;
|
|
|
struct context_entry **ctxt_tbls;
|
|
|
+ struct root_entry *old_rt;
|
|
|
phys_addr_t old_rt_phys;
|
|
|
int ctxt_table_entries;
|
|
|
unsigned long flags;
|
|
@@ -2937,7 +2939,7 @@ static int copy_translation_tables(struct intel_iommu *iommu)
|
|
|
if (!old_rt_phys)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- old_rt = ioremap_cache(old_rt_phys, PAGE_SIZE);
|
|
|
+ old_rt = memremap(old_rt_phys, PAGE_SIZE, MEMREMAP_WB);
|
|
|
if (!old_rt)
|
|
|
return -ENOMEM;
|
|
|
|
|
@@ -2986,7 +2988,7 @@ static int copy_translation_tables(struct intel_iommu *iommu)
|
|
|
ret = 0;
|
|
|
|
|
|
out_unmap:
|
|
|
- iounmap(old_rt);
|
|
|
+ memunmap(old_rt);
|
|
|
|
|
|
return ret;
|
|
|
}
|