projects
/
linux-2.6-block.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
KVM: MIPS: Disable HTW while in guest
[linux-2.6-block.git]
/
arch
/
mips
/
kvm
/
mips.c
diff --git
a/arch/mips/kvm/mips.c
b/arch/mips/kvm/mips.c
index e3b21e51ff7e926ba00f4c4183c4ff146a26a775..9a28ea4f54f36839707d174d539a65a6b7a5d535 100644
(file)
--- a/
arch/mips/kvm/mips.c
+++ b/
arch/mips/kvm/mips.c
@@
-18,6
+18,7
@@
#include <asm/page.h>
#include <asm/cacheflush.h>
#include <asm/mmu_context.h>
#include <asm/page.h>
#include <asm/cacheflush.h>
#include <asm/mmu_context.h>
+#include <asm/pgtable.h>
#include <linux/kvm_host.h>
#include <linux/kvm_host.h>
@@
-385,8
+386,14
@@
int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
kvm_guest_enter();
kvm_guest_enter();
+ /* Disable hardware page table walking while in guest */
+ htw_stop();
+
r = __kvm_mips_vcpu_run(run, vcpu);
r = __kvm_mips_vcpu_run(run, vcpu);
+ /* Re-enable HTW before enabling interrupts */
+ htw_start();
+
kvm_guest_exit();
local_irq_enable();
kvm_guest_exit();
local_irq_enable();
@@
-832,9
+839,8
@@
int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
return -ENOIOCTLCMD;
}
return -ENOIOCTLCMD;
}
-
int
kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
+
void
kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
{
{
- return 0;
}
int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
}
int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
@@
-1002,6
+1008,9
@@
int kvm_mips_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu)
enum emulation_result er = EMULATE_DONE;
int ret = RESUME_GUEST;
enum emulation_result er = EMULATE_DONE;
int ret = RESUME_GUEST;
+ /* re-enable HTW before enabling interrupts */
+ htw_start();
+
/* Set a default exit reason */
run->exit_reason = KVM_EXIT_UNKNOWN;
run->ready_for_interrupt_injection = 1;
/* Set a default exit reason */
run->exit_reason = KVM_EXIT_UNKNOWN;
run->ready_for_interrupt_injection = 1;
@@
-1136,6
+1145,9
@@
skip_emul:
}
}
}
}
+ /* Disable HTW before returning to guest or host */
+ htw_stop();
+
return ret;
}
return ret;
}