|
@@ -473,16 +473,22 @@ static void vmi_enter_lazy_cpu(void)
|
|
vmi_ops.set_lazy_mode(2);
|
|
vmi_ops.set_lazy_mode(2);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void vmi_leave_lazy_cpu(void)
|
|
|
|
+{
|
|
|
|
+ vmi_ops.set_lazy_mode(0);
|
|
|
|
+ paravirt_leave_lazy_cpu();
|
|
|
|
+}
|
|
|
|
+
|
|
static void vmi_enter_lazy_mmu(void)
|
|
static void vmi_enter_lazy_mmu(void)
|
|
{
|
|
{
|
|
paravirt_enter_lazy_mmu();
|
|
paravirt_enter_lazy_mmu();
|
|
vmi_ops.set_lazy_mode(1);
|
|
vmi_ops.set_lazy_mode(1);
|
|
}
|
|
}
|
|
|
|
|
|
-static void vmi_leave_lazy(void)
|
|
|
|
|
|
+static void vmi_leave_lazy_mmu(void)
|
|
{
|
|
{
|
|
- paravirt_leave_lazy(paravirt_get_lazy_mode());
|
|
|
|
vmi_ops.set_lazy_mode(0);
|
|
vmi_ops.set_lazy_mode(0);
|
|
|
|
+ paravirt_leave_lazy_mmu();
|
|
}
|
|
}
|
|
|
|
|
|
static inline int __init check_vmi_rom(struct vrom_header *rom)
|
|
static inline int __init check_vmi_rom(struct vrom_header *rom)
|
|
@@ -718,12 +724,12 @@ static inline int __init activate_vmi(void)
|
|
|
|
|
|
para_wrap(pv_cpu_ops.lazy_mode.enter, vmi_enter_lazy_cpu,
|
|
para_wrap(pv_cpu_ops.lazy_mode.enter, vmi_enter_lazy_cpu,
|
|
set_lazy_mode, SetLazyMode);
|
|
set_lazy_mode, SetLazyMode);
|
|
- para_wrap(pv_cpu_ops.lazy_mode.leave, vmi_leave_lazy,
|
|
|
|
|
|
+ para_wrap(pv_cpu_ops.lazy_mode.leave, vmi_leave_lazy_cpu,
|
|
set_lazy_mode, SetLazyMode);
|
|
set_lazy_mode, SetLazyMode);
|
|
|
|
|
|
para_wrap(pv_mmu_ops.lazy_mode.enter, vmi_enter_lazy_mmu,
|
|
para_wrap(pv_mmu_ops.lazy_mode.enter, vmi_enter_lazy_mmu,
|
|
set_lazy_mode, SetLazyMode);
|
|
set_lazy_mode, SetLazyMode);
|
|
- para_wrap(pv_mmu_ops.lazy_mode.leave, vmi_leave_lazy,
|
|
|
|
|
|
+ para_wrap(pv_mmu_ops.lazy_mode.leave, vmi_leave_lazy_mmu,
|
|
set_lazy_mode, SetLazyMode);
|
|
set_lazy_mode, SetLazyMode);
|
|
|
|
|
|
/* user and kernel flush are just handled with different flags to FlushTLB */
|
|
/* user and kernel flush are just handled with different flags to FlushTLB */
|