|
@@ -1288,6 +1288,25 @@ unsigned long xen_read_cr2_direct(void)
|
|
|
return this_cpu_read(xen_vcpu_info.arch.cr2);
|
|
|
}
|
|
|
|
|
|
+void xen_flush_tlb_all(void)
|
|
|
+{
|
|
|
+ struct mmuext_op *op;
|
|
|
+ struct multicall_space mcs;
|
|
|
+
|
|
|
+ trace_xen_mmu_flush_tlb_all(0);
|
|
|
+
|
|
|
+ preempt_disable();
|
|
|
+
|
|
|
+ mcs = xen_mc_entry(sizeof(*op));
|
|
|
+
|
|
|
+ op = mcs.args;
|
|
|
+ op->cmd = MMUEXT_TLB_FLUSH_ALL;
|
|
|
+ MULTI_mmuext_op(mcs.mc, op, 1, NULL, DOMID_SELF);
|
|
|
+
|
|
|
+ xen_mc_issue(PARAVIRT_LAZY_MMU);
|
|
|
+
|
|
|
+ preempt_enable();
|
|
|
+}
|
|
|
static void xen_flush_tlb(void)
|
|
|
{
|
|
|
struct mmuext_op *op;
|
|
@@ -2518,7 +2537,7 @@ int xen_remap_domain_mfn_range(struct vm_area_struct *vma,
|
|
|
err = 0;
|
|
|
out:
|
|
|
|
|
|
- flush_tlb_all();
|
|
|
+ xen_flush_tlb_all();
|
|
|
|
|
|
return err;
|
|
|
}
|